Intereting Posts
Ошибка QuickBooks API при обновлении Почему я получаю «POST http: //54.xx.xx.xx/wp-admin/admin-ajax.php 500 (Internal Server Error)» при использовании WordPress + Ajax? Symfony 2 – объект Clone для разных таблиц Пребывание на той же странице без обновления после добавления в базу данных Вызов функции jQuery в php (или изменение javascript, так что php запускает оставшийся код) У вас есть страница WordPress с тем же названием, что и пользовательский тип «front» slug Как вы получаете Cronjob, выполняющий PHP-скрипт для работы более 30 секунд? как считать встроенный mongodb php? PHP: Не заполняйте поля формы электронной почты, которые остались пустыми. Создание многомерного массива из текстовых строк MD5 строки в ActionScript возвращает неверные результаты, когда какой-то hex является частью строки (т. Е. «Abc \ xBF \ x4E») Переменные PHP с тем же именем Удаление содержимого каталога и содержимого подкаталога Включение «strict_types» во всем мире в PHP 7 .htaccess работает на локальном сервере не на главном сервере

shell_exec не работает в php web appl

Я сделал сценарий оболочки, который обнаруживает сетевые интерфаги, а затем для каждого интерфейса он обнаруживает IP-адрес, маску, широковещательный адрес, а затем делает пинг для всех IP-адресов для этого сетевого интерфейса.

Сценарий имеет разрешения на выполнение. Обычно сценарий сохраняет список сетевых интерфейсов (eth0 eth1 wlan0) в файле с именем «resultat», но когда я запускаю этот сценарий с веб-страницы с shell_exec команды shell_exec php ( echo 'password for www-data user' | / usr/lib/cgi-bin/sudo -S global.sh bin/bash/" ) не генерируется вывод.

Если я запускаю тот же скрипт, что и пользовательские www-data в терминале, файл результатов правильно заполняется.

Сценарий:

  #!/bin/bash ##### paramères relatives au connexion à la base de données HOST_BDD="localhost" LOGIN="root" PASSWD="password" NOM_BDD="dbnessus" ##### ces requettes pour vider les tables avant de faire la detection vider2="TRUNCATE machine_connecte" echo $vider2 | /usr/bin/mysql -h $HOST_BDD -u $LOGIN -p$PASSWD -s $NOM_BDD vider1="TRUNCATE interfaces" echo $vider1 | /usr/bin/mysql -h $HOST_BDD -u $LOGIN -p$PASSWD -s $NOM_BDD initialise="ALTER TABLE machine_connecte AUTO_INCREMENT=0" echo $initialise | /usr/bin/mysql -h $HOST_BDD -u $LOGIN -p$PASSWD -s $NOM_BDD ####################################################### /usr/lib/cgi-bin/get_interface.sh > /usr/lib/cgi-bin/liste_interfaces while read line; do ip=$(/usr/lib/cgi-bin/get_ip.sh $line) mask=$(/usr/lib/cgi-bin/get_netmask.sh $line) bcast=$(/usr/lib/cgi-bin/get_bcast.sh $line) ###fonction is_alive_ping is_alive_ping() { ping -i 100 -c 1 $1 > /dev/null 2> /dev/null [ $? -eq 0 ] && echo $i >>/usr/lib/cgi-bin/resultat } cat /dev/null >/usr/lib/cgi-bin/resultat; ######### ###division des octet d'adresse de broadcst if [ "$ip" != "" ] then i1="$(echo $bcast |cut -d"." -f1)" i2="$(echo $bcast |cut -d"." -f2)" i3="$(echo $bcast |cut -d"." -f3)" i4="$(echo $bcast |cut -d"." -f4)" fi ### { HostID / NetworkID } / classe du réseau ##################### A.255.255.255 Classe A if [ "$i2" == "255" ] then for i in "$i1".{1..254}.{1..254}.{1..254} do is_alive_ping $i & disown done fi ##################### AB255.255 Classe B if [ "$i2" != "255" ] && [ "$i3" == "255" ] then for i in "$i1.$i2".{1..254}.{1..254} do is_alive_ping $i & disown done fi ##################### ABC255 Classe C if [ "$i2" != "255" ] && [ "$i3" != "255" ]&& [ "$i4" == "255" ] then for i in "$i1.$i2.$i3".{1..254} do is_alive_ping $i & disown done fi ################ while read ip_up; do hostname=$(/usr/bin/resolveip -s $ip_up 2>/dev/null) if [ "$hostname" == "" ] then hostname="*" fi mac=$(/usr/sbin/arp -a $ip_up |cut -d" " -f4) if [ "$ip_up" == "$ip" ] then mac=$(/sbin/ifconfig $line |grep 'HWaddr'|grep -v '127.0.0.1'|awk '{ print $5}') fi OS=$( /usr/bin/nmap -A $ip_up |grep "Service Info:" |awk '{print $4,$5}' ) if [ "$OS" == "Unix, Linux" ] || [ "$OS" == "Linux" ] then OS="Linux" elif [ "$OS" == "Windows " ] then OS="Windows" else OS="*" fi #sql1="INSERT INTO dbnessus.interfaces (nom_interface)VALUES ('$line');" sql1="INSERT IGNORE INTO dbnessus.interfaces (nom_interface)VALUES ('$line');" sql2="INSERT INTO dbnessus.machine_connecte (idmachine ,ip_mach ,mask_mach, nom_mach,mac_mach ,os_mach ,interfaces_nom_interface)VALUES ( NULL, '$ip_up', '$mask', '$hostname', '$mac', '$OS', '$line');" echo $sql1 | /usr/bin/mysql -h $HOST_BDD -u $LOGIN -p$PASSWD -s $NOM_BDD echo $sql2 | /usr/bin/mysql -h $HOST_BDD -u $LOGIN -p$PASSWD -s $NOM_BDD done < /usr/lib/cgi-bin/resultat ip="" done < /usr/lib/cgi-bin/liste_interfaces echo "cbon" 

Solutions Collecting From Web of "shell_exec не работает в php web appl"

Несколько идей:

  1. Убедитесь, что shell_exec находится в disabled_functions php.ini (php.ini: disabled_functions)
  2. убедитесь, что PHP не работает в безопасном режиме (php.ini: safe_mode )
  3. убедитесь, что процесс php-fpm (если используется php-fpm) или https (если используется apxs) работает с достаточной привилегией (для запуска сценария оболочки и выполнения этих команд в скрипте) (в этом случае вы можете su для этого пользователя и посмотреть, вы можете запустить его из bash)

Извините, я не могу больше думать об этом …