Команда 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');