Это действительно просто, но я не могу заставить его работать вообще. Провел много часов, и я всегда сдавался. Я создал php-скрипт под названием copy.php, и он должен вызвать скрипт python под названием copy.py.
Я хочу выполнить такую командную строку, как это
<?php exec('/var/www/html/copy.py'); ?>
На самом деле просто.
Почему я не могу получить скрипт python, выполненный из php exec ()? Функция внутри скрипта python должна получить копию error_log из другого каталога (вне Apache) в каталог html.
Если я запустил это из терминала
> php copy.php
Он выполнил эту функцию и сделал копию. Почему веб-браузер этого не делает?
Позвольте мне упростить это:
почему невозможно выполнить exec («cp / var / log / httpd / error_log / var / www / html / path / to / php / script»)?
он отлично работает, если я набираю его в терминале, но не при запуске в браузере.
Единственная причина, по которой он не работает, заключается в том, что вы не установили права на запись!
Делать:
sudo nano /etc/sudoers
Затем добавьте следующее:
www-data ALL=(root) NOPASSWD:ALL
Возможно, для среды Apache применяются разные настройки по сравнению с командной строкой.
Использовать error_reporting(E_ALL);
и ini_set('display_errors', true)
чтобы увидеть, что может возникнуть errosr.
Возможно, в среде Apache запрещено использовать exec
или тот факт, что Apache работает под другим пользователем, который не имеет прав execute
на скрипте python.
звучит как ошибка разрешения. Проверьте, работает ли ваш сервер с достаточными правами.
echo exec('whoami');
Задайте отчет об ошибках, чтобы сообщить все:
ini_set('display_errors', true); error_reporting(E_ALL);
и проверьте наличие ошибок.
Если ваш whoami возвращает пользователя, который не является членом семейства SU (linux) или администрации (windows), тогда resite ваши разрешения ..
Linux: назначьте пользователя, возвращаемого whoami, правильными разрешениями для запуска сценариев python. Не разрешайте приведенное имя пользователя работать от имени root с полными полномочиями администратора. Это большой нет.
Как указывали другие, разница – это, вероятно, разрешения. Когда вы запускаете команду из командной строки, вы, как правило, не те же пользователи, что и ваш скрипт apache.
Иными словами, если из командной строки вы whoami
, вы, вероятно, получите любое имя вашей учетной записи пользователя.
echo exec('whoami');
из php-шоу, на котором работает скрипт, который является Apache.
Таким образом, любая команда, которую вы пытаетесь запустить с вашего веб-сервера, недоступна для запуска в качестве пользователя Apache. Вы упомянули, что у вас есть возможность работать с exec("python /usr/diskpurge/script.py")
, но не иметь exec('/var/www/html/copy.py')
. Это связано с тем, что в одном случае вы используете python, а в другом вы пытаетесь выполнить сценарий copy.py
Если у экземпляра copy.py нет разрешений на выполнение для пользователя Apache, вы не сможете запустить его из браузера.