Exec запуск php скрипта

exec

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

Если аргумент result_code присутствует вместе с output , тогда статус возврата выполненной команды будет записан в этой переменной.

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

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

Возвращает false в случае возникновения ошибки.

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

Ошибки

Выдаёт ошибку уровня E_WARNING , если функция exec() не может выполнить команду command .

Выбрасывает исключение ValueError , если параметр command не указан или содержит нулевые байты.

Список изменений

Версия Описание
8.0.0 Если параметр command не указан или содержит нулевые байты, функция exec() теперь выбрасывает исключение ValueError ; ранее она выдавала ошибку уровня E_WARNING и возвращала false .

Примеры

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

// выводит имя пользователя, от имени которого запущен процесс php/httpd
// (применимо к системам с командой «whoami» в системном пути)
$output = null ;
$retval = null ;
exec ( ‘whoami’ , $output , $retval );
echo «Вернёт статус $retval и значение:\n» ;
print_r ( $output );
?>

Результатом выполнения данного примера будет что-то подобное:

Вернёт статус 0 и значение: Array ( [0] => cmb )

Примечания

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

Замечание:

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

Замечание:

В Windows функция exec() стартует cmd.exe для запуска команды. Если вы хотите запустить внешнюю программу без запуска cmd.exe, то используйте функцию proc_open() с установленной опцией bypass_shell .

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

  • system() — Выполнить внешнюю программу и отобразить вывод
  • passthru() — Выполнить внешнюю программу и отобразить необработанный вывод
  • escapeshellcmd() — Экранировать метасимволы командной строки
  • pcntl_exec() — Запустить указанную программу в области текущего процесса
  • Оператор исполнения
Читайте также:  Погода бегущая строка html

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 ;
>

Читайте также:  Short time fourier transform python

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 () .

Если аргумент result_code присутствует вместе с output аргументом, то статус возврата выполненной команды будет записан в эту переменную.

Return Values

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

В случае ошибки возвращает false .

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

Examples

Пример # 1 Exec () Пример

 // 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); ?>

Из приведенного выше примера будет выведено нечто подобное:

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

Notes

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

Note:

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

Note:

В Windows exec () сначала запустит cmd.exe для запуска команды. Если вы хотите запустить внешнюю программу без запуска cmd.exe, используйте proc_open () с bypass_shell опцией bypass_shell .

See Also

  • system () — Выполнить внешнюю программу и отобразить результат
  • passthru () — Запускает внешнюю программу и отображает необработанный вывод
  • escapeshellcmd () — Исключает метасимволы оболочки
  • pcntl_exec () — Выполняет указанную программу в текущем пространстве процесса
  • backtick operator
PHP 8.2

(PHP 4,5,7,8)метасимволы escapeshellcmd escapeshellcmd()любые символы в строке,которые могут быть использованы для обмана команды для выполнения произвольных команд.

(PHP 4 4.3.0,5,7,8)exif_imagetype Определение exif_imagetype()считывает первые байты файла и проверяет его подпись.

(PHP 4 4.2.0,5,7,8)exif_read_data Считывает заголовки из файла изображения Заголовки EXIF обычно присутствуют в изображениях JPEG/TIFF,созданных цифровыми камерами,

Источник

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

Источник

Оцените статью