问题描述
我有一个在 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 进程所有者没有创建命名管道的权限。我会使用 system
或 exec
而不是 shell_exec
以便您可以检查命令的输出。