#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);
}
я создал эту функцию для получения результата
- добавьте
2>amp;1
в последний из CMD - используйте
print
с каждой строкой - используйте
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();
}