До вчерашнего дня я использовал на нашем производственном сервере (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);
Кто-нибудь испытывал подобную проблему?
Мне потребовалось два дня тяжелой работы, но я, наконец, выяснил источник проблемы.
phpDocumentor.phar
требует вызова команды PHP перед выполнением.
Если команда 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"
Других решений пока нет …