PHP exec 函數使用指南與示例

exec() 函數用來執行一個命令行或者外部腳本程序,在 PHP 中調用還是非常方便的,我們使用該函數基本是在 Linux。
新手在使用過程中,很容易出現執行不了,或者執行報錯找不到錯誤原因的問題,本篇文章都有介紹

一、開啓 exec() 函數

exec()函數是默認被禁用的,要使用這個函數必須先開啓。

  1. 找到 php.ini配置文件
  2. 首先是要關掉安全模式
safe_mode = off
  1. 然後在看看 禁用函數列表
disable_functions = proc_open, popen, exec, system, shell_exec, passthru

這裏要把exec去掉,重啓 apache 就OK了。

二、exec() 函數基本用法

exec(string $command, array &$output, int &$return_var)
  • $command:表示要執行的命令。
  • $output:如果提供了 output參數, 那麼會用命令執行的輸出填充此數組, 每行輸出填充數組中的一個元素。數組中的數據不包含行尾的空白字符,例如 \n字符。 請注意,如果數組中已經包含了部分元素,exec()函數會在數組末尾追加內容。如果你不想在數組末尾進行追加, 請在傳入 exec()函數之前 對數組使用 unset()函數進行重置。
  • $return_var:如果同時提供 output 和 return_var 參數, 命令執行後的返回狀態會被寫入到此變量。

一般來說,我們只要寫第一個參數,也就是 $command

三、exec() 函數使用示例

因爲 exec()函數主要用在執行外部程序,我們這裏就以 Linux 系統爲例子,做幾個demo教程:

1. 執行命令並查看結果

<?php
	$command = "ls /etc";   //ls是linux下的查目錄,文件的命令
	exec($command, $array); //執行命令
	print_r($array);        //打印結果
?>

返回的結果如下:

[root@krlcgcms01 shell]# php ./exec.php
Array
(
[0] => 1001.log
[1] => 10.log
[2] => 10.tar.gz
[3] => aaa.tar.gz
[4] => mytest
[5] => test1101
[6] => test1102
[7] => weblog_2010_09
)

2. 查看已禁用函數

本命令用來查看 exec 函數禁用狀態,運行不了的大部分原因都是函數被禁用導致的,如果採用命令行運行的話,要注意網頁的運行環境和系統默認的 php 環境變量是否一致。

<?php
	echo "Disable Functions: " . ini_get('disable_functions') . "\n";
?>

3. 執行命令並記錄日誌

try{
	exec($command . ' >> ' . $logDir . date("Y-m-d") . '.log 2>&1 &');
} catch (Exception $e) {
	Log::record($e->getMessage());
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章