Выполнение на сервере команд php

exec

If the output argument is present, then the specified array will be filled with every line of output from the command. Trailing whitespace, such as \n , is not included in this array. Note that if the array already contains some elements, exec() will append to the end of the array. If you do not want the function to append elements, call unset() on the array before passing it to exec() .

If the result_code argument is present along with the output argument, then the return status of the executed command will be written to this variable.

Return Values

The last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.

Returns false on failure.

To get the output of the executed command, be sure to set and use the output parameter.

Errors/Exceptions

Emits an E_WARNING if exec() is unable to execute the command .

Throws a ValueError if command is empty or contains null bytes.

Changelog

Version Description
8.0.0 If command is empty or contains null bytes, exec() now throws a ValueError . Previously it emitted an E_WARNING and returned false .

Examples

Example #1 An exec() example

// outputs the username that owns the running php/httpd process
// (on a system with the «whoami» executable in the path)
$output = null ;
$retval = null ;
exec ( ‘whoami’ , $output , $retval );
echo «Returned with status $retval and output:\n» ;
print_r ( $output );
?>

The above example will output something similar to:

Returned with status 0 and output: Array ( [0] => cmb )

Notes

When allowing user-supplied data to be passed to this function, use escapeshellarg() or escapeshellcmd() to ensure that users cannot trick the system into executing arbitrary commands.

Note:

If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.

Note:

On Windows exec() will first start cmd.exe to launch the command. If you want to start an external program without starting cmd.exe use proc_open() with the bypass_shell option set.

See Also

  • system() — Execute an external program and display the output
  • passthru() — Execute an external program and display raw output
  • escapeshellcmd() — Escape shell metacharacters
  • pcntl_exec() — Executes specified program in current process space
  • backtick operator

User Contributed Notes 20 notes

This will execute $cmd in the background (no cmd window) without PHP waiting for it to finish, on both Windows and Unix.

function execInBackground ( $cmd ) <
if ( substr ( php_uname (), 0 , 7 ) == «Windows» ) <
pclose ( popen ( «start /B » . $cmd , «r» ));
>
else <
exec ( $cmd . » > /dev/null &» );
>
>
?>

(This is for linux users only).

We know now how we can fork a process in linux with the & operator.
And by using command: nohup MY_COMMAND > /dev/null 2>&1 & echo $! we can return the pid of the process.

This small class is made so you can keep in track of your created processes ( meaning start/stop/status ).

You may use it to start a process or join an exisiting PID process.

// You may use status(), start(), and stop(). notice that start() method gets called automatically one time.
$process = new Process ( ‘ls -al’ );

// or if you got the pid, however here only the status() metod will work.
$process = new Process ();
$process . setPid ( my_pid );
?>

// Then you can start/stop/ check status of the job.
$process . stop ();
$process . start ();
if ( $process . status ()) echo «The process is currently running» ;
>else echo «The process is not running.» ;
>
?>

/* An easy way to keep in track of external processes.
* Ever wanted to execute a process in php, but you still wanted to have somewhat controll of the process ? Well.. This is a way of doing it.
* @compability: Linux only. (Windows does not work).
* @author: Peec
*/
class Process private $pid ;
private $command ;

public function __construct ( $cl = false ) if ( $cl != false ) $this -> command = $cl ;
$this -> runCom ();
>
>
private function runCom () $command = ‘nohup ‘ . $this -> command . ‘ > /dev/null 2>&1 & echo $!’ ;
exec ( $command , $op );
$this -> pid = (int) $op [ 0 ];
>

public function setPid ( $pid ) $this -> pid = $pid ;
>

public function getPid () return $this -> pid ;
>

public function status () $command = ‘ps -p ‘ . $this -> pid ;
exec ( $command , $op );
if (!isset( $op [ 1 ]))return false ;
else return true ;
>

public function start () if ( $this -> command != » ) $this -> runCom ();
else return true ;
>

public function stop () $command = ‘kill ‘ . $this -> pid ;
exec ( $command );
if ( $this -> status () == false )return true ;
else return false ;
>
>
?>

Источник

exec

Команда (имя программы с аргументами — прим.пер.), которая будет исполнена.

Если параметр output указан, то массив будет заполнен строками вывода программы. Завершающие пробелы, такие как \n (перевод строки — прим.пер.), включены в массив не будут. Обратите внимание, что если массив уже содержит какие-либо элементы перед вызовом функции exec() , то вывод команды будет дописан в конец массива. Если же вы не хотите дополнять предыдущее содержимое массива, следует вызвать функцию unset() с именем массива в качестве аргумента перед его передачей в качестве аргумента функции exec() .

Если заданы оба параметра return_var и output , то при выходе эта переменная будет содержать статус завершения внешней программы.

Возвращаемые значения

Последняя строка вывода при исполнении заданной команды. Если требуется исполнить команду и получить все данные программы обратно без какой-либо обработки, следует использовать функцию passthru() .

Для получения вывода исполняемой программы, убедитесь, что параметр output инициализирован и используется.

Примеры

Пример #1 Пример функции exec()

// выводит имя пользователя, от имени которого запущен процесс php/httpd
// (применимо к системам с командой «whoami» в системном пути)
echo exec ( ‘whoami’ );
?>

Примечания

Если вы собираетесь передавать функции пользовательские данные, используйте функции escapeshellarg() или escapeshellcmd() для того, чтобы пользователи не смогли обмануть систему, запустив произвольную команду.

Замечание:

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

Замечание: В случае работы в безопасном режиме, вы можете запускать что-либо только в пределах safe_mode_exec_dir. В настоящее время по практическим причинам запрещено использование .. в качестве компонента пути к исполняемому файлу.

В случае работы в безопасном режиме, строка с командой экранируется с помощью escapeshellcmd() . Таким образом echo y | echo x становится echo y \| echo x.

Смотрите также

  • system() — Выполняет внешнюю программу и отображает её вывод
  • passthru() — Выполняет внешнюю программу и отображает необработанный вывод
  • escapeshellcmd() — Экранирует метасимволы командной строки
  • pcntl_exec() — Executes specified program in current process space
  • backtick operator

Источник

Как выполнить команду на сервере через php скрипт на другом сервере?

Добрый день.
Задался вопросом. Есть php скрипт на хостинг, есть сервер на ubuntu, как подключиться в этом скрипте к данному серверу и выполнить команду через exec? Допустим, чтобы получить список процессов на сервере. Возможно ли это вообще?

Простой 1 комментарий

kolossradosskiy

Есть еще хостинги в наших селениях с незадизейбленным
shell_exec(«SSH user@host.com mkdir /testing»);

morihaos

morihaos

Bur Ov, да как и везде — пишете функцию с параметрами и потом скрипт, который вызывает эту функцию. ну что-то типа такого:

Это функция для коннектинга и авторизации по ssh, к примеру:

function ssh_exec($ip, $command) < $connection = ssh2_connect($ip, 22); if (ssh2_auth_pubkey_file($connection, 'user', '/home/user/.ssh/id_rsa.pub', '/home/user/.ssh/id_rsa')) < $stream = ssh2_exec($connection, $command); stream_set_blocking($stream, true); $stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); echo "
Results :\n"; echo stream_get_contents($stream_out)."

"; fclose($stream); > else < die('Public Key Authentication Failed'); >>

А это скрипт, который ее юзает, к примеру:

lightalex

Вы должны делать запрос к серверу, при этом передавая команду (методом POST например), а в ответ сервер должен выдавать результат исполнения команды (допустим просто через какой-нибудь echo)
Если опустить вопросы безопасности, то через через get это будет выглядеть вот так:
Вы делаете запрос к старнице site.com/simple.php?code=whoami
Ну а simple.php выглядит как-то так:

Пишу значит такой я код, запускую через консоль на сервере этот скрипт — выдает ответ нормально, если запускую скрипт через браузер — страничка просто не грузится. В чем проблема? skrinshoter.ru/s/261217/jWfnQU

lightalex

Bur Ov, во-первых проверьте правильно ли доходит до скрипта сама команда
Во-вторых, уточните, вы по какому протоколу пытаетесь сделать запрос от скрипта к серверу?

Источник

Читайте также:  Php как вывести get
Оцените статью