Команда php shell_exec() не работает
Я пытаюсь запустить файл .sh с php.
Я попытался сделать это с помощью shell_exec(). но не работает
Я ссылался на многие вопросы, связанные с этим в переполнении стека, но не мог решить
мой PHP-код (web.php)
<?php
echo shell_exec('/var/www/project/xxe.sh');
echo "done";
?>
только напечатан. но он работает с терминалом (php/var/www/project/web.php)
В xxe.sh Я вызываю файл python
python vin.py
Я также изменил разрешение файла на 777 для файлов .sh n.py
пожалуйста, помогите
Ответы
Ответ 1
Если он работает хорошо в оболочке, я думаю, что apache chrooted. Поэтому php не может найти /var/...
Или пользователь пользователя httpd не имеет права на вход /var/...
Если вы хорошо разбираетесь в PHP. Open dir/var/... И readdir() и проверка dir существует и файл проверки существует.
Этот вопрос может помочь вам. scan/home/with opendir()
Ответ 2
Если вы говорите, что он работает на терминале, а не на apache, то файл apache php.ini
может отключить использование shell_exec()
.
См. Http://www.php.net/manual/en/ini.core.php#ini.disable-functions.
Ваш файл apache php.ini
может выглядеть примерно так
disable_functions=exec,passthru,shell_exec,system,proc_open,popen
Удалите shell_exec
из этого списка и перезапустите веб-сервер, хотя это shell_exec
безопасности, и я не рекомендую ее.
Ответ 3
При попытке запустить script, инициированный github post-receive webhook.
Здесь находится каталог моего проекта (клонированный git repo):
/var/www/html/my-repo
Я создаю script внутри вышеуказанного каталога, называемого webhook.php:
<?php
#webhook.php
$cmd = shell_exec("git pull 2>&1");
#for debugging
echo $cmd;
?>
Выполните следующую команду внутри /var/www/html
sudo chown www-data:www-data -R my-repo/
Проверьте это, перейдя в http://www.myserver.com/my-repo/webhook.php
Добавьте путь к вашему script в веб-узлы github.
Ответ 4
Обычно проблема заключается в том, что когда вы выполняете код из php, он запускается как пользователь www-data webservers во многих дистрибутивах linux. Нормальный у этого пользователя нет настроения, и из-за этого нет PATH. Используя полные пути в ваших файлах, вы обычно можете преодолеть это.
xxe.sh
/usr/bin/python /path/to/script/vin.py
Ответ 5
Я застрял в этой проблеме в течение нескольких часов.
Я подумал о решении.
1. переместите ваш script в файл python script.py "и поместите этот файл в корневой каталог сервера.
2. shell_exec ( "python script.py" );
В любом случае, это работает для меня.
Ответ 6
На моем хосте мне пришлось указать другой путь для моего php файла, который будет выполнен из shell_exec().
Это не сработало shell_exec('/usr/bin/php backgroundtask.php');
.
Пока это было shell_exec('/opt/php/php-5.5.0/bin/php backgroundtask.php');
.
Вы можете посетить эта ссылка.
Ответ 7
У меня была та же проблема, потому что PHP обратная косая черта.
PHP избегает обратной косой черты, поэтому команда, которая достигает оболочки
'COPY E:path1\path2\file.prn /B \127.0.0.1\"PRINTER NAME"'
поэтому я дал команду, как это
'COPY E:\\path1\\path2\\file.prn /B \\\\127.0.0.1\"PRINTER NAME"'.
Вы должны дважды избежать обратной косой черты: один раз для PHP и один раз для оболочки.
Ответ 8
Я здесь все перепробовал и ничего не получалось. Наконец, я решил использовать следующее перед shell_exec:
putenv('PATH=/usr/local/bin');