Использование PHP и Xvfb

Я пытаюсь запустить firefox на безголовом сервере, чтобы сделать снимки экрана веб-сайта. Я могу сделать это с терминала, используя

"DISPLAY=:12 firefox - сохранить изображение http://www.google.com/".

Проблема в том, что когда я пытаюсь выполнить system("DISPLAY=:12 firefox -saveimage http://www.google.com< /а>"); не работает. У меня такое ощущение, что он не выполняется в обычной среде оболочки. Я пошел против своего здравого смысла и дал пользователю apache настоящую оболочку. Если я использую su для apache и выполняю команду, все в порядке и работает, как и ожидалось, но опять же, это не работает из системного вызова. Любое понимание очень приветствуется.


person William    schedule 16.03.2009    source источник


Ответы (2)


Я нашел решение.

Мне просто нужно было создать сценарий оболочки, который будет вызывать это для меня. Поиграв с ним некоторое время, я заработал, добавив export HOME="/var/www/" в начало скрипта.

Я надеюсь, что это поможет кому-то другому.

person William    schedule 16.03.2009

Скорее всего, есть некоторая зависимость от переменных среды, которые вы установили как пользователь оболочки, и которые не выполняются средой httpd. Однако, прежде чем совершать какие-либо героические действия со средой, я бы рекомендовал захватить stderr из вашей работы (например, добавив 2>/tmp/imgcaperrlog в конец) и посмотреть, не предъявляет ли он какие-либо жалобы.

person chaos    schedule 16.03.2009
comment
Я устал от этого, и это даже не выполняется. Вот что заставило меня подумать, что среда, в которой php выполняет системные вызовы, несколько отличается. - person William; 16.03.2009
comment
Да, это определенно другое. То, что вы делаете, является операцией X, поэтому это будет зависеть от всего происходящего там контекста. Одна вещь, которую вы можете сделать, это сравнить вашу среду оболочки (набор сам по себе для просмотра) со средой внутри вашего скрипта (print_r($_ENV) или что-то подобное). - person chaos; 16.03.2009