从 CLI 调用时使用 PHPDocumentor 无限循环(但通过 SSH 没问题)

Infinite loop with PHPDocumentor when invoked from CLI (but fine via SSH)

直到昨天,我在我们的生产服务器 (CentOS 6.8) 上使用 PHPDocumentor 版本 2.8.5。一切正常。我不得不升级到 2.9.0 版。因为 PHPDoc 未能为 PHP7 生成文档。

当我通过 SSH 运行 以下脚本时,一切正常:

/[not_a_real_path]/phpdoc --directory=/[not_a_real_path]/gem-mechanic/ --target=/[not_a_real_path]/PC_administration_interface/documentation/gem-mechanic/ --title="GEM-MECHANIC"

/[not_a_real_path]/phpdoc --directory=/[not_a_real_path]/PC_administration_interface/ --target=/[not_a_real_path]/PC_administration_interface/documentation/pc_administration_interface/ --title="PC-ADMINISTRATION-INTERFACE"

/[not_a_real_path]/phpdoc --directory=/[not_a_real_path]/setup/modules/appointmentmanager/ --target=/[not_a_real_path]/PC_administration_interface/documentation/prestashop_appointmentmanager/ --title="PRESTASHOP: APPOINTMENT MANAGER"

/[not_a_real_path]/phpdoc --directory=/[not_a_real_path]/setup/modules/datalinkmanager/ --target=/[not_a_real_path]/PC_administration_interface/documentation/prestashop_datalinkmanager/ --title="PRESTASHOP: DATALINK MANAGER"

/[not_a_real_path]/phpdoc --directory=/[not_a_real_path]/setup/modules/sharedcode/ --target=/[not_a_real_path]/PC_administration_interface/documentation/prestashop_sharedcode/ --title="PRESTASHOP: SHARED CODE"

/[not_a_real_path]/phpdoc --directory=/[not_a_real_path]/setup/modules/vehiclefile/ --target=/[not_a_real_path]/PC_administration_interface/documentation/prestashop_vehiclefile/ --title="PRESTASHOP: VEHICLE FILE"

/[not_a_real_path]/phpdoc --directory=/[not_a_real_path]/shared_code/ --target=/[not_a_real_path]/PC_administration_interface/documentation/shared_code/ --title="SHARED CODE"

echo Options All -Indexes > /[not_a_real_path]/PC_administration_interface/documentation/.htaccess
echo AuthType Basic >> /[not_a_real_path]/PC_administration_interface/documentation/.htaccess
echo AuthName '"Please login"' >> /[not_a_real_path]/PC_administration_interface/documentation/.htaccess
echo AuthUserFile /[not_a_real_path]/PC_administration_interface/.htpasswd >> /[not_a_real_path]/PC_administration_interface/documentation/.htaccess
echo Require valid-user >> /[not_a_real_path]/PC_administration_interface/documentation/.htaccess

但是,当我尝试使用 PHP

运行 脚本时
public static function generateDocumentation() 
{
    $output = array();

    set_time_limit(180);

    self::createDocDirectory();

    exec(self::getScriptPath(false) . " 2>&1", $output);

    return implode($output, PHP_EOL);
}

编码陷入无限循环,没有生成任何文档。我希望页面在 3 分钟后失败,但它一直在循环...

即使尝试执行 PHPDocumentor,它也会陷入无限循环:

exec("[not_the_real_path]/phpdoc 2>&1", $output);

有没有人遇到过类似的问题?

费了我两天的功夫,终于找到了问题的根源

  1. phpDocumentor.phar 需要在执行前调用 PHP 命令。

  2. 如果 PHP 命令不在您包含的路径中,您需要提供完整路径。

不知何故,如果找不到要命令的命令之一,CLI 就会挂起。

这是一个有效命令的示例:

exec("/usr/local/bin/php /usr/local/bin/phpDocumentor-2.9.phar --directory=/home/gem/public_html/gem-mechanic/ --target=/home/gem/public_html/PC_administration_interface/documentation/gem-mechanic/ --title=\"GEM-MECHANIC\" 2>&1", $output);

注意:添加如下代码行:

PATH="/usr/local/bin"

在脚本的开头,您不需要调用 PHP 并包含到达 phpDocumentor 的路径。脚本中的一行可以简单地写成这样:

phpDocumentor-2.9.phar --directory=/home/gem/public_html/gem-mechanic/ --target=/home/gem/public_html/PC_administration_interface/documentation/gem-mechanic/ --title="GEM-MECHANIC"