在来自 php 的命名管道上运行 shell 命令

问题描述

我有一个在 docker 上运行的 PHP 应用程序。我想通过命名管道从 PHP 发送命令。如果我从控制台转到容器并运行此命令,那么它可以工作,但是从 PHP 代码中什么也没有发生。

命令示例:

system('echo "mkdir -p /some_new_dir" > hostpipe/mypipe');
// or another test
system('cat /application/file_with_command > /application/hostpipe/mypipe');

我尝试使用 exec/shell_exec/system 或 Symfony 进程,但没有帮助。 遇到了利用 fopen 的信息,但我不确定如何使用它。 我正在尝试这样,但没有成功:

$out = fopen(base_path("hostpipe/mypipe"),"w");
fwrite($out,"mkdir -p /some_new_dir");
fclose($out);

权限看起来不错,因为我制作了 chmod 并且例如有效:

system('mkdir -p ' . base_path("/some_new_dir"))

解决方法

可能是权限问题,PHP 进程所有者没有创建命名管道的权限。我会使用 systemexec 而不是 shell_exec 以便您可以检查命令的输出。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...