shell_exec не дает никакого результата и ничего не делает

#php #shell-exec

#php #shell-exec

Вопрос:

Итак, у меня есть вопрос, который в моей голове должен казаться очень простым для решения. Я хочу подключиться по ssh к серверу, что я делал кучу раз, а затем выполнить оболочку, что я тоже делал кучу раз, но это не работает.

Код, который я использую

 <?php
            $ip = '1.2.3.4';
            $cmd = "ssh user@".$ip;
            $result = shell_exec($cmd." 'sudo /bin/systemctl stop wildfly.service'");
            echo "<pre>output: $result</pre>";
            echo "<div class='alert alert-success'><strong>SUCCESS</strong><br>Wildfly node has now restarted</div>"; 
?>
  

Запуск команды непосредственно из терминала

 ssh user@1.2.3.4 sudo /bin/systemctl stop wildfly.service
  

Это работает, но запуск его в php ничего не дает мне, и он ничего не делает.

Может кто-нибудь подсказать мне, что я делаю неправильно с моим shell_exec?

Заранее спасибо!

Ответ №1:

 function execPrint($command) {
    try {
        $result = array();
        exec($command.' 2>amp;1', $result);
        foreach ($result as $line) {
            print($line .  "n");
        }
        echo '------------------------' . "n" . "n";
    } catch (Exception $e) {
        print($e);
    }
    http_response_code(200);
}
  

я создал эту функцию для получения результата

  1. добавьте 2>amp;1 в последний из CMD
  2. используйте print с каждой строкой
  3. используйте try и catch для перехвата любой ошибки

Комментарии:

1. Привет, дело в том, что это будет работать нормально, но мой приведенный здесь код не будет работать, если он связан с кнопкой, на которую нажимают на странице. Я могу поместить что угодно в кнопку, и это будет работать, но если я добавлю этот созданный мной код, он не будет работать. Если я помещу его в отдельный файл и запущу из командной строки, он будет работать нормально: S

Ответ №2:

Пользователь, пытающийся выполнить эти команды оболочки из php, скорее всего _www, а не вы. Попробуйте этот код в вашем php, чтобы получить представление:

 $shellscript = 'whoami';
$sr = shell_exec($shellscript);
echo '['.$sr.']';
  

Ответ №3:

Убедитесь, что функция shell_exec не отключена. Обычно это отключено по умолчанию в файлах PHP.ini учетных записей cPanel и PHP-FPM .ini.

Вы можете проверить это с помощью этой проверки

 if (is_callable('shell_exec') amp;amp; (false === stripos(ini_get('disable_functions'), 'shell_exec'))) {
    echo "shell_exec enabled";
} else {
    echo "shell_exec disabled";
}
  

Это самая распространенная причина, по которой, как я обнаружил, shell_exec всегда возвращает пустое значение

Вы также можете выполнить быструю команду для тестирования purpouses

 ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

echo "Command: shell_exec('ls -lart')";
try {
    $output = shell_exec('ls -lart');
    echo "<pre>$output</pre>";
} catch (Exception $e) {
    echo $e->getMessage();
}