Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Exec
Форумы портала PHP.SU » Серверное администрирование » Администрирование *nix » Exec

Страниц (1): [1]
 

1. Mil-ast - 19 Сентября, 2010 - 09:16:22 - перейти к сообщению
Пытаюсь сделать скриншот сайта, через SSH всё работает прекрасно, однако через php возникают проблемы.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. exec('Xvfb -ac :1 -screen 0 1024x768x16');
  3. exec('sleep 5');
  4. exec('export DISPLAY=:1');
  5. exec('opera -nomail -nosession -disableinputmethods -fullscreen http://www.yandex.ru');
  6. exec('sleep 5');
  7. exec('xwd -display :1 -root -silent | xwdtopnm | pnmtojpeg -quality=90 -optimize >/home/http/yandex.jpg');
  8.  


ничего не происходит. Собсна ничего и не выводится при exec('Xvfb -help', $out); print_r($out);

Апач с именем 'apache', в /etc/sudoers добавил apache localhost = (root) NOPASSWD: Xvfb
safe_mode отключена

всё-равно не выполняется (((
2. EuGen - 20 Сентября, 2010 - 11:27:30 - перейти к сообщению
Это связано с особенностью этой команды. Скорее всего, прав хватает.
Проблема в том, что Xvfb ничего не пишет в STDOUT, но отлично пишет в STDERR. Перенаправление вывода должно помочь:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $out='';
  4. exec('Xvfb -help 2>&1',$out);
  5. echo("\n");
  6. var_dump($out);
  7. echo("\n");
  8. ?>
  9.  
3. Mil-ast - 20 Сентября, 2010 - 13:31:47 - перейти к сообщению
Да, действительно, не хватает прав. в случае с php команды exec выполняются от имени апача, в моем случае это юзер apache, у которого естественно не рутовские права. это мне удалось устранить, добавив в /etc/sudoers соответствующую запись для пользователя "apache"
но возникла другая проблема: exec('export DISPLAY=:1'); не работает, приходится для браузера указывать дисплей персонально. но и он не запускается ((( вообще ничего не пойму. ничего в stdout, stderr нет, return пишет 255
xclock, gedit запускаются и фоткаются нормально. видать какой-то глюк в самом браузере...
4. EuGen - 20 Сентября, 2010 - 13:37:14 - перейти к сообщению
Попробуйте так же всю последовательность команд сохранить в shell-файл (какой-нибудь commands.ps).
Затем вызывайте exec('sudo commands.ps') - если нет прав или без sudo если есть. (В первом случае нужно sudoers править, что, вроде бы, Вы сделали уже)
5. JustUserR - 20 Сентября, 2010 - 17:39:23 - перейти к сообщению
Mil-ast пишет:
Да, действительно, не хватает прав. в случае с php команды exec выполняются от имени апача, в моем случае это юзер apache, у которого естественно не рутовские права. это мне удалось устранить, добавив в /etc/sudoers соответствующую запись для пользователя "apache"
Для огранизации CGI-выплнения приложений на web-сервере с указанием эффетивных имен пользователей соответствующих их владельцам - можно использовать модули типа suexec или suphp - в таком случае можно огранизовать виртуальный хост таким образом чтобы используемое CGI-приложение имело достаточные права - но остальные пользователи не имели лишних привелегий понжающих безопасность

 

Powered by ExBB FM 1.0 RC1