Необходимо вызвать .sh при загрузке веб-страницы php.

Я пытаюсь запустить сценарий .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

1
задан 23 January 2012 в 02:35

1 ответ

Важное значение имеет расположение командной строки, и путь, который вы используете, важен. Даже если 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 должна только читать сценарий, после которого данные выполняются.

1
ответ дан 25 May 2018 в 14:58
  • 1
    Это то, что я получаю при запуске alert.sh с php-консоли, которую я разместил на веб-сайте: – 01BTC10 23 January 2012 в 03:00
  • 2
    $ ./alert.sh ./alert.sh: 3: невозможно создать log.txt: Permission denied ./alert.sh: 4: не удается создать log.txt: Permission denied Home directory / var / www not ours. – 01BTC10 23 January 2012 в 03:03
  • 3
    log.txt должен быть доступен для записи по www-данным. Создайте его с помощью: sudo touch /var/www && sudo chgrp www-data log.txt && sudo chmod log.txt. См. Также askubuntu.com/q/46331/6969 для избежания sudo – Lekensteyn 23 January 2012 в 04:27
  • 4
    Спасибо! Теперь файл log.txt обновляется, но у меня нет доступа к звуку с игроком mpg123. Любой намек на то, как заставить звук работать? – 01BTC10 23 January 2012 в 04:48
  • 5
    Я понятия не имею, как запускать аудио как пользователь, не являющийся пользователем. Если вопрос еще не задан, начните новый вопрос. Кроме того, вы действительно хотите разрешить веб-серверу писать неограниченное количество файлов и воспроизводить аудио? – Lekensteyn 23 January 2012 в 05:01

Другие вопросы по тегам:

Похожие вопросы: