下面的脚本在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 Admin用户,并且所有WAMP设置仅在我的本地PC中,使用PHP 5.6.x. front.php和back.php都在同一个工作文件夹中,并且前面能够写入文件但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");
?>
答案 0 :(得分:0)
这有很多问题。
我注意到back.php
没有向stdout
或stderr
发送任何内容(除非文件操作有错误)。
此外,您的两个脚本正在将时间戳写入一个文件,并且它们不处于追加模式,因此将覆盖另一个。尝试登录到不同的文件名,或使用FILE_APPEND
作为file_put_contents()
中的第三个参数。
最后,我不清楚echo
应该在php back.php > output.txt 2>&1 echo $!
中做些什么。这看起来像是一个语法错误。
为了研究控制台与浏览器重定向的性质,我写了这两个文件:
<强> inner.php 强>
<?php
// Writes something to stdout and stderr
echo "Stdout\n";
fwrite(STDERR, "Stderr\n");
<强> outer.php 强>
<?php
// Execs the inner file with and without redirection
exec('php inner.php', $output);
print_r($output);
exec('php inner.php 2>&1', $output2);
print_r($output2);
在控制台上我得到了这个:
Stderr
Array
(
[0] => Stdout
)
Array
(
[0] => Stdout
[1] => Stderr
)
您可以在第一种情况下看到,stderr输出作为exec()
输出本身的一部分呈现给控制台,即除非我们进行2>&1
重定向,否则它的可捕获性较差。
然后我跨越了一个Web服务器:
php -S localhost:10000
并访问了地址:http://localhost:10000/outer.php
。
我在浏览器中收到了此消息:
数组([0] =&gt; Stdout)数组([0] =&gt; Stdout [1] =&gt; Stderr)
并且控制台输出中出现杂散错误:
PHP 7.0.22-0ubuntu0.16.04.1 Development Server started at Sat Oct 7 11:01:43 2017
Listening on http://localhost:10000
Document root is /home/jon/Development/Personal/Missive
Press Ctrl-C to quit.
Stderr
[Sat Oct 7 11:01:56 2017] 127.0.0.1:54392 [200]: /outer.php
[Sat Oct 7 11:01:56 2017] 127.0.0.1:54394 [404]: /favicon.ico - No such file or directory
因此,我认为这里的一切都很好。
您可能希望创建一个简单的可重现的测试用例 - 包含大量编辑和评论更新,您的问题变得过于复杂而无法回答。如果它是X-Y problem,那么解释您尝试实现的目标也可能很有价值。