Я пытаюсь запустить сценарий .sh при загрузке моей главной страницы:
index.php:
<?php
shell_exec('./alert.sh');
?>
<script type='text/javascript'>
window.location = "phpshell.php";
</script>
Мой скрипт alert.sh:
#! /bin/sh
echo Login: >> log.txt
date >> log.txt
mpg123 alert.mp3
Он работает, когда вручную запускается с nautilus, но ничего не происходит при подключении через веб-сервер. Я использую Ubuntu 11.10 и Apache2.
Папка по умолчанию для веб-сервера - / var / www
Важное значение имеет расположение командной строки, и путь, который вы используете, важен. Даже если alert.sh находится в /var/www, текущий рабочий каталог может быть другим. Используйте echo getcwd();, чтобы получить текущий рабочий каталог. С абсолютным путем вы должны использовать:
shell_exec('/var/www/alert.sh');
Вторая возможность (скорее всего) заключается в том, что режим файла (разрешения файла) недостаточен. Веб-сервер Apache работает как пользователь www-data. Если alert.sh принадлежит вам, имеет вашу группу и имеет разрешения на выполнение только для владельца, сервер Apache не может ее выполнить. Возможные разрешения (соблюдение правила наименьших привилегий):
755 - владелец: вы - группа: вы 750 - владелец: вы - группа: www-data 644 или 640 - владелец: вы - группа: вы или www-dataПоследняя опция работает, только если вы выполняете скрипт наподобие shell_exec('/bin/sh alert.sh'). Программа оболочки /bin/sh должна только читать сценарий, после которого данные выполняются.