Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php调用shell命令的行为与在shell中不同_Php_Shell - Fatal编程技术网

从php调用shell命令的行为与在shell中不同

从php调用shell命令的行为与在shell中不同,php,shell,Php,Shell,我编写了以下简单的shell脚本: #!/bin/sh STORAGE_PATH=/tmp/; export STORAGE_PATH; cd STORAGE_PATH; perl /{SOME_PATH}/perl-script.pl; 当我从shell调用它时,它的工作方式与预期的一样完美。但在PHP中,它无限挂起,在调试时,我发现它在Perl执行期间挂起,这实际上没有任何意义,因为如果在shell中调用它,它将继续 我有并没有弄错这件事/垃圾箱/垃圾箱?我试过了/bin/bash也是 我

我编写了以下简单的shell脚本:

#!/bin/sh
STORAGE_PATH=/tmp/;
export STORAGE_PATH;
cd STORAGE_PATH;
perl /{SOME_PATH}/perl-script.pl;
当我从shell调用它时,它的工作方式与预期的一样完美。但在PHP中,它无限挂起,在调试时,我发现它在Perl执行期间挂起,这实际上没有任何意义,因为如果在shell中调用它,它将继续

我有并没有弄错这件事/垃圾箱/垃圾箱?我试过了/bin/bash也是

我尝试了php中的所有变体:exec、system、shell_exec、callthru,但都不起作用


我错过了什么吗?

嗯,我看不出它在shell中是如何工作的

您正在调用/{SOME_PATH}/perl-script.pl,但未定义变量SOME_PATH。你是说存储路径吗?还有,你在{之前忘记了$


在进行此操作时,请检查运行Web服务器的用户是否具有执行这两个脚本的权限。

apache是否具有执行perl脚本的权限?除了检查权限外,请尝试使用perl二进制文件的绝对路径,以及在perl脚本内调用的任何其他路径。$path环境变量经常不同在登录帐户和服务帐户之间。通过将-x添加到您的!行!/bin/sh-xsorry,您可以看到脚本在执行时所做的事情。我可能不得不明确地说,{SOME_PATH}是一个静态路径,我在文章中没有写它,只是为了保持它的简单和清晰。我也检查了权限,www数据Web服务器的用户有权执行这两个脚本,甚至用sudo su www数据进行了尝试,perl脚本的执行效果很好。调用php时出现了一些问题。:-/打开debug output在PHP中-记录文件或回显输出,让我们知道它说了什么。Thx伙计们,但它的perl脚本在某个点停止,只有当它从PHP调用时,我不知道我能真正显示给你什么,没有错误,没有奇怪的输出..我不知道你能如何帮助我,我会随时通知你这个奇怪的phonemene疯狂,唯一的区别是两个调用之间的tty字段..从shell它是:pts/2,从apche它是:?所以是一个deamon..应该没问题吧?perl脚本到底有什么用?为什么挂起???不符合逻辑或?