PHP исполняет скрипт оболочки через http

У меня проблема с моим PHP-скриптом.

<?php
error_reporting(-1);
ini_set('display_errors', 1);
$output = "";
$befehl = exec('./start.sh', $output);
var_dump($output);
?>

Это мой скрипт:

#!/bin/sh
echo "Hallo Europa"echo "Hallo Osterhase..."cd /home/support/projects/big/
bash start.sh
pwd
whoami

Это работает в оболочке с ‘php run.php’
Но не с Http: //ip/run.php
Apache работает как мой домашний пользователь «Макс». Сервер недоступен для общего доступа, поэтому он не представляет угрозы для безопасности.
Вывод в Firefox:

array(4) { [0]=> string(12) "Hallo Europa" [1]=> string(18) "Hallo    Osterhase..." [2]=> string(31) "/home/support/projects/big" [3]=> string(7) "support" }

Но это должно начать мою особенность огурца.

Спасибо за помощь.

0

Решение

Сначала убедитесь, что у вас есть разрешение на выполнение сценария .sh:

chmod +x /your/full/path/to/start.sh

После этого попробуйте:

exec("(/your/full/path/to/start.sh) 2>&1", $output, $result);

if($result != 0){
//if $result is different to 0 -> something wrong and display errors
print_r([$output,$result]);
}else{
//if $result == 0 -> Should be OK and continue with your code here
print_r([$output,$result]);
}

Маленькое объяснение о 2>&1 от: https://unix.stackexchange.com/a/99264

2 ссылается на второй файловый дескриптор процесса, то есть на stderr.

> означает перенаправление.

&1 означает, что цель перенаправления должна быть в том же месте, что и первый дескриптор файла, то есть stdout.

1

Другие решения

Двойное цитирование важно.

С помощью system лучше всего в этом случае, так как он содержит полный вывод stdout в $output,

& говорит оболочке выполнить команду в фоновом подпроцессе.

Это означает, что следующая строка скрипта будет выполнена напрямую.

$output переменная обновляется в фоновом режиме, поэтому выходные данные могут отличаться в зависимости от времени.

<?php
$output = system("./start.sh &");
var_dump($output);

Во многих случаях полезно использовать паузы:

<?php
$output = system("./start.sh &");
sleep(1);
var_dump($output);
0

Скорее всего, вам нужно обновить файл php.ini, чтобы exec()

Откройте файл php.ini и найдите строку с disable_functions и удалить exec из списка отключенных функций. Сохраните, перезапустите веб-сервер и попробуйте снова.

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector