PHP 5.3.10 и PHP 5.2.17 на одном Apache2 одновременно

На Windows 2003 Server для одного из субдоменов понадобилось использовать более старую версию PHP, а именно PHP 5.2.17. Continue reading “PHP 5.3.10 и PHP 5.2.17 на одном Apache2 одновременно”

Перезапуск Apache при помощи PHP

По большому счёту сам перезапуск Apache не был нужен. Моей задачей было перезагрузить конфигурационный файл Apache с виртуальными хостами.

В теории всё было совсем просто (в PHP полно команд запускающих внешние программы), однако, перезапустить Apache без администраторских прав, увы.

Я ошибочно полагал, что перезагрузить конфигурацию Apache из PHP могу таким кодом:

<?php

exec(“apache2ctl graceful”);

?>

или таким:

<?php

exec(“/etc/init.d/apache2 reload”);

?>

Вы получите сообщение вроде:

httpd not running, trying to start

failed!

Рабочее решение

Операционная система Debian/Etch, но на других дистрибутивах оно так же должно работать за исключением некоторых названий (может быть не apache2, а httpd).

Скрипт перезагрузки конфигурации выглядит так:

<?php
exec(‘echo “/usr/bin/sudo /etc/init.d/apache2 reload” | /usr/bin/at now’);
?>

Но не спешите пробовать, для этого в sudo необходимо прописать все эти разрешения.

В файл /etc/sudoers добавьте следующую строчку:

www-data ALL= NOPASSWD: /etc/init.d/apache2 reload

и закомментируйте эту строку:

Defaults requiretty

Сверьтесь, что именно такое имя пользователя (www-data), от которого у вас работает Apache.

Затем в файле /etc/at.deny удалите строчку с этим же пользователем (www-data). И если такого файла нет, то создайте /etc/at.allow и пропишите туда строчку www-data.