Бесконечный цикл с PHPDocumentor при вызове из CLI (но хорошо через 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);

Кто-нибудь испытывал подобную проблему?

0

Решение

Мне потребовалось два дня тяжелой работы, но я, наконец, выяснил источник проблемы.

  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"
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]