【发布时间】:2014-03-21 13:44:23
【问题描述】:
我有一个简单的测试用例设置,如下所示:
exec('/path/to/bash/script', $output, $return);
那段代码成功启动了一个 bash 脚本,其中包含以下内容:
#!/usr/bin/env bash
exec php -q /path/to/php/script.php
这就是失败的地方。 PHP 脚本永远不会执行,浏览器只是一直等待响应,直到几分钟后导致 500 错误。
它试图运行的 PHP 脚本只有一行:
#!/usr/bin/php -q
<?php
file_put_contents('/path/to/folder/output.txt', 'some text');
?>
有几点值得注意:
- 如果我通过 CLI 运行 Bash 脚本,它会运行 PHP 代码。
- 在本地服务器上一切正常,通过 OS X 上的 XAMPP 安装
- 问题出在远程服务器上。安装了 WHM/cPanel 的 CentOS。
- 上面提到的文件有777个权限。
- 我无法从 exec() 函数的返回值中获得任何线索,因为脚本在“挂起”几分钟后以 500 错误结束。
有什么想法吗?
【问题讨论】:
-
php 在被调用的 bash 的路径中吗?你试过
exec /absolute/path/to/php -q ...吗? -
你到底为什么要使用 PHP 来调用运行 PHP 脚本的 bash 脚本??
-
你为什么不直接
include另一个php脚本中的php脚本呢?给自己留一个fork和两个execs。 -
我忘了补充一点,如果通过 CLI 启动,Bash 脚本确实会运行 PHP。这意味着 PHP 变量设置正确。 @DigitalChris 我知道这看起来很荒谬,但在实际场景中是有意义的。