exec和shell_exec在php中不起作用

时间:2013-04-02 19:52:30

标签: php shell permissions exec shell-exec

我遇到了exec和shell_exec的问题我已经查看了这里的每个帖子,似乎无法找到问题。我正在使用的代码:

chdir('/');
$handle = shell_exec("/usr/bin/php /home/donor/public_html/batch/testlaunch.php 2>&1");
echo $handle .":". gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;

屏幕看起来像这样:

...
X-Powered-By: PHP/5.3.21 Content-type: text/html (repeated about 100 times)
X-Powered-By: PHP/5.3.21 Content-type: text/html 
PHP Warning: shell_exec() [function.shell-exec]: Unable to execute '/usr/bin/php /home/donor/public_html/batch/testlaunch.php 2>&1' in /home/donor/public_html/batch/test.php on line 4 X-Powered-By: PHP/5.3.21 Content-type: text/html 
Warning: shell_exec() [function.shell-exec]: Unable to execute '/usr/bin/php /home/donor/public_html/batch/testlaunch.php 2>&1' in /home/donor/public_html/batch/test.php on line 4
:boolean PHP Warning: fread() expects parameter 1 to be resource, boolean given in /home/donor/public_html/batch/test.php on line 6 
Warning: fread() expects parameter 1 to be resource, boolean given in /home/donor/public_html/batch/test.php on line 6
:string PHP Warning: fread() expects parameter 1 to be resource, string given in /home/donor/public_html/batch/test.php on line 6 (repeated another 100ish times)

PHP安全模式已关闭。文件所在的文件夹的权限... / batch /和/ usr / bin / php都设置为755.除了php(php文件用户是root)之外,所有文件的用户都是相同的。 php.ini文件中没有禁用任何内容。在CLI中正常工作。 whoamils之类的简单命令可以正常工作。我觉得我错过了什么

编辑: 尝试了cpattersonv1所说的并得到了:

X-Powered-By: PHP/5.3.21 Content-type: text/html sh: fork: retry: Resource temporarily unavailable sh: fork: retry: Resource temporarily unavailable sh: fork: retry: Resource temporarily unavailable sh: fork: retry: Resource temporarily unavailable X-Powered-By: PHP/5.3.21 Content-type: text/html sh: fork: retry: Resource temporarily unavailable sh: fork: retry: Resource temporarily unavailable sh: fork: retry: Resource temporarily unavailable sh: fork: retry: Resource temporarily unavailable sh: fork: Resource temporarily unavailable X-Powered-By: PHP/5.3.21 Content-type: text/html 2540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

编辑2:有没有人知道为什么看起来它再次尝试命令?

编辑3:我将命令放在.sh文件中并试图运行它。在CLI中工作,但从php

再次起作用
chdir('/');
$handle = exec(". /home/donor/public_html/batch/test.sh");

我得到相同的输出;

4 个答案:

答案 0 :(得分:1)

尝试passthru intead,如果需要一段时间,那么执行没有任何限制:

<?php

 passthru("/usr/bin/php /home/donor/public_html/batch/testlaunch.php 2>&1",$pass_result);
 echo $pass_result; 

?>

或者这个:

<?php

 passthru("/usr/bin/php /home/donor/public_html/batch/testlaunch.php",$pass_result,$error);
 echo $pass_result; 
 echo $error; 

?>

答案 1 :(得分:0)

尝试将您的网络服务器用户添加到具有批处理目录的rw权限的组中。无论是root用户还是使用sudo:

usermod -G groupname username

然后在批处理目录中:

chmod -R g+w batch

答案 2 :(得分:0)

显然我使用了错误的php文件/路径&gt;&lt;就像一个虚拟的感谢帮助人

答案 3 :(得分:0)

虽然这是一篇旧帖子,但这是我对其他用户的回答。

  1. 将目录更改为可执行路径
  2. 调用不带可执行文件路径的shell_exec()
  3. 将目录还原为原始目录(这样就不会妨碍其他部分代码)。
  4. 实施例

    $current_dir = getcwd();
    $executable_dir = "\executables\";
    chdir($executable_dir);
    
    $output1 = shell_exec("executable.exe file_to_run.ext $parameter_to_pass");
    var_dump($output1);
    
    chdir($current_dir);