【发布时间】:2016-08-04 21:35:24
【问题描述】:
我正在尝试回退一个 php 脚本,因为它需要一分钟多的时间才能完成,而且我不希望用户等待。
我的执行命令如下:
exec ('php -f path/to/file.php > path/to/output.log 2>&1 &');
首先,文件中的脚本没有按照我的程序编写,但是,输出文件仍然收到此输出:
X-Powered-By: PHP/5.6.24
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Content-Type: text/html; charset=UTF-8
Link: <https://example.com/wp-json/>;
rel="https://api.w.org/"
Link: <https://example.com/?p=687>; rel=shortlink
....
这个输出根本不是我的脚本应该做的,对我来说毫无意义。
输出的其余部分是一个 html 文档,其中包含指向我的网站的不同链接等。
谁能告诉我为什么会发生这种情况,而不是简单地运行脚本?
顺便说一句
我使用了不同的命令,例如 /usr/bin/php 具有相同的效果
更新
我注意到在将第一个 path/to/file.php 参数更改为乱码后,即
exec ('php -f asdfjaskldfj > path/to/output.log 2>&1 &');
输出保持不变,不知道这意味着什么,但我认为这是值得注意的
【问题讨论】:
-
一旦你在后台运行该 shell 脚本,
shell()返回并且你的父脚本继续执行。这意味着父脚本可以在后台作业继续运行时完全独立地退出/退出/无论如何。 -
哎呀,我的问题犯了一个错误,我的意思是输入 exec 而不是 shell,想到了 shell_exec 并让自己感到困惑
-
脚本有shebang吗?作为一般准则,通常最好包含一个 chmod 到可执行文件,并让 /bin/sh 调用它...
-
没关系。它们基本上是一样的, exec() 只是为您提供了捕获退出值的选项,而不仅仅是输出。
-