exec() 函數用來執行一個命令行或者外部腳本程序,在 PHP 中調用還是非常方便的,我們使用該函數基本是在 Linux。
新手在使用過程中,很容易出現執行不了,或者執行報錯找不到錯誤原因的問題,本篇文章都有介紹
一、開啓 exec() 函數
exec()
函數是默認被禁用的,要使用這個函數必須先開啓。
- 找到
php.ini
配置文件 - 首先是要關掉安全模式
safe_mode = off
- 然後在看看 禁用函數列表
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());
}