2014-11-03 2 views
-1

Я пытаюсь выполнить простую команду Ghostscript, чтобы получить количество страниц PDF. Вот PHP CMD:Ghostscript exec: PHP vs Python

$pages = 'sudo gs -q -dNODISPLAY -c "(' . $input . ') (r) file runpdfbegin pdfpagecount = quit"'; 

Пробовал Exec(), система(), shell_exec(), и PassThru() - никто не возвращает стандартный вывод.

Для s & г, я попробовал Python:

>>> import os 
>>> os.system('sudo gs -q -dNODISPLAY -c "(/Users/me/Downloads/multi-page.pdf) (r) file runpdfbegin pdfpagecount = quit"') 

Got выход 32.

Главной целью является получить эту работу в PHP - то, что мне не хватает?

+0

Уход за разъяснением нижнего предела? – egekhter

+0

Проверьте, может ли ваш пользователь PHP использовать 'sudo' и имеет оболочку входа. Если это веб-сервер в подобной Debian системе, пользователь скорее всего «www-data». Обычно не имеет оболочки и не разрешается использовать 'sudo'. – lxg

+0

Какова ценность '$ input'? Кроме того, вы уверены, что apache2 или что-то еще может использовать sudo? –

ответ

0

Это была функция исполняемого файла, которая не находится, без каких-либо указаний на PHP. Я пошел обходным путем:

Python скрипт:

>>> #!/usr/bin/python 
>>> import sys 
>>> import os 
>>> input_file = sys.argv[1].replace("2>&1", "") 
>>> num_pages = os.system('gs -q -dNODISPLAY -c "(' + input_file + ') (r) file runpdfbegin pdfpagecount = quit"') 

>>> print num_pages 

PHP скрипт envoking Python скрипт:

$cmd_path = base_path('backend/misc/get_pdf_pages.py'); 
$pages_cmd = "python -u {$cmd_path} " . escapeshellarg($input) . " 2>&1"; 
exec($pages_cmd, $ret); 
echo $ret[0]; 

Что привело: "Sh: гс: команда не найдена"

Благодаря этому вопросу я изменил gs на/usr/local/bin/gs, который работал в Python, пробовал то же самое в PHP, работал на PHP. Извлеченный урок - используйте абсолютные пути к двоичным файлам.

Смежные вопросы