【发布时间】:2017-10-06 21:45:29
【问题描述】:
以下脚本在 CMD 窗口中运行良好,但在浏览器中运行良好。下面的脚本在'front.php'中,win10的命令窗口命令'php front.php'做得很好,但http://localhost/blahblah/front.php没有触发'back.php'让我很吃惊。花了将近半夜的时间尝试所有可能的方法,包括shell_exec、proc_open,但都以上述问题告终。基本权限,php.ini相关问题都处理好了。
pclose(popen('powershell.exe "Start-Process php -ArgumentList \'back.php\' -WindowStyle Hidden"','r'));
echo exec('D:\Wamp\php\php.exe D:\Wamp\apache2\htdocs\MySite\admin\back.php > output.txt 2>&1 echo $!', $pid);
更新
只是为了缩小范围,我使用的是 Win 10 管理员用户,所有 WAMP 设置都仅在我的本地电脑中,使用 PHP 5.6.x。 front.php 和 back.php 都在同一个工作文件夹中,front 可以写入文件,但 back.php 不能从浏览器执行。在 CMD 中同样有效!
front.php:
<?php
ini_set("display_errors",1);
error_reporting(E_ALL);
file_put_contents('timelog.txt', date('Y-m-d/H:i:s.u'));
echo exec('php back.php > output.txt 2>&1 echo $!');
// pclose(popen('powershell.exe "Start-Process php -ArgumentList \'back.php\' -WindowStyle Hidden"','r'));
?>
back.php:
<?php
sleep(5); // some delay
file_put_contents('timelog.txt', date('Y-m-d/H:i:s.u'). "\n");
?>
【问题讨论】:
-
显然,权限和 php.ini 设置的“常见问题”没有得到处理。
-
第二行中的路径(
D:\Wamp\php\php.exe和D:\Wamp\apache2\htdocs\MySite\admin\back.php)是错误的,因为您没有将反斜杠加倍。在您的第一行中,您将它们用作转义字符,您也需要在第二行中这样做。您需要的序列是每个反斜杠。这可能不是您的问题,但值得解决。 -
接下来,单独尝试
echo exec('D:\\Wamp\\php\\php.exe -v'),看看是否有任何输出。如果这样做,请尝试下一位,等等。此外,您不需要执行>重定向 - PHP 可以在exec命令本身中执行此操作。 -
在元注释上,请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
-
symscbean,我首先处理了通常的权限相关的东西,safe_mode,disabled_functions 等。正如我所说,我可以在 CMD 中运行它,我所有的东西都在本地的单个管理员用户中。另外,front.php 可以写入但 back.php 什么也不做,请注意我所有的东西都在同一个文件夹中,所以我看不到任何可以进一步处理权限的事情。
标签: php process exec shell-exec proc-open