【问题标题】:Unable to execute a PHP script through a Bash script无法通过 Bash 脚本执行 PHP 脚本
【发布时间】: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 我知道这看起来很荒谬,但在实际场景中是有意义的。

标签: php linux bash


【解决方案1】:

感谢 Marc B 找到了解决方案。问题在于 PHP 箱的路径。即使 /usr/bin/php 路径存在并且在环境中设置了 php 变量,我也需要将两者都更改为 /usr/local/bin/php。这是我使用 PHP_BINDIR 常量找到的正确路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多