我在Ubuntu的apache服务器上托管了一个php文件。除了shell_exec('myscript.sh')之外,一切都很好。
如果我执行任何类似shell_exec('dir')、shell_exec('ls')等的操作,它都可以正常工作。但是,只有当我通过shell_exec执行一个简单的shell脚本时,它才不能工作。
为了简单起见,我只在shell脚本中放置了一个echo命令。当我通过终端执行时,相同的脚本可以工作。比如:
# sh myscript.sh // works perfectly fine但不是来自PHP,下面是我的php代码
<?php
$result = shell_exec('myscript.sh');
echo $result;
?>备注:
shell_exec不在disable_functions列表中谢谢
发布于 2013-12-11 16:35:42
尝试授予PHP对文件的所有权。
chown phpusername:phpusername myscript.sh或相同的apache用户。
如果这不起作用,请尝试chmod 777 myscript.sh,但这通常是一个非常糟糕的想法。
发布于 2013-12-11 16:39:50
我觉得应该是
$result = shell_exec('./myscript.sh'); 发布于 2013-12-11 16:43:25
这是因为您需要将命令转义为bash参数。为此,需要在命令中使用双引号,最后,将2>&1与所需的脚本函数命令一起用作结束部分。
即
$xarg = escapeshellarg("./myscript.sh 2>&1");
$result = shell_exec("$xarg");记住,php和bash之间的交互是独一无二的。PHP总是挂掉等待bash的命令。即使触发了该脚本,您的php也应该希望在调用函数之后,无需等待bash就可以继续到脚本中的下一行。
https://stackoverflow.com/questions/20524297
复制相似问题