команда php shell exec() не работает

Я пытаюсь запустить a .sh файл из php. Я попытался сделать это с помощью shell_exec(). но это не работает Я сослался на многие вопросы, связанные с этим в переполнении стека, но не смог решить

мой php-код (web.в PHP)

    <?php
    echo shell_exec('/var/www/project/xxe.sh');
    echo "done";
    ?>

только печатается. но он работает с терминала (php/var/www/project / web.в PHP)

In xxe.sh я вызываю файл python

    python vin.py

Я также изменил разрешение файла на 777 для обоих .Ш. Н .py файлы пожалуйста помогите!--3-->

7 ответов


Если он хорошо работает в оболочке, я думаю, что apache chrooted. Поэтому php не может найти /var/...

или пользователь пользователя httpd не имеет разрешения на ввод /var/...

Если Вы хороши в PHP. Открыть dir/var/... И readdir () и check dir существует и файл проверки существует.

этот вопрос может помочь вам. сканирование / Главная/ с opendir ()


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


при попытке запустить скрипт, запускаемый GitHub post-receive webhook.

вот где находится мой каталог проекта(клонированный git repo):

/var/www/html/my-repo

Я создаю скрипт внутри вышеуказанного каталога под названием 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/

проблема обычно в том, что при выполнении кода из php он запускается как пользователь webservers www-data во многих дистрибутивах linux. Обычно у этого пользователя нет настроенной среды, и из-за этого нет пути. Используя полные пути в ваших файлах, вы обычно можете преодолеть это.

xxe.sh

/usr/bin/python /path/to/script/vin.py

Я застрял в этой проблеме в течение нескольких часов.

Я думал о решении. 1. переместите свой скрипт в файл python "script.py-и поместите этот файл в корень сервера. 2. shell_exec ("python script.py");

любом случае, это работает для меня.


на моем хосте я должен был дать другой путь для моего php-файла, который будет выполняться из shell_exec (). Это не сработало!--0-->.

в то время как это сделал shell_exec('/opt/php/php-5.5.0/bin/php backgroundtask.php');.

Вы можете здесь эта ссылка.


у меня была такая же проблема, потому что обратные косые черты PHP.

PHP избегает обратных косых черт, поэтому команда, которая достигает оболочки

'COPY E:path1\path2\file.prn /B 7.0.0.1\"PRINTER NAME"'

поэтому я дал команду

'COPY E:\path1\path2\file.prn /B \\127.0.0.1\"PRINTER NAME"'. 

вам нужно дважды избежать обратных косых черт: один раз для PHP и один раз для оболочки.