我遇到了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中正常工作。 whoami
和ls
之类的简单命令可以正常工作。我觉得我错过了什么
编辑: 尝试了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");
我得到相同的输出;
答案 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)
虽然这是一篇旧帖子,但这是我对其他用户的回答。
实施例
$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);