PHP CLI(Command Line Interface)是指PHP的命令行接口程序,可以直接在終端(Terminal)中運行,而無需使用Web瀏覽器。它可以通過命令行參數(shù)解析、shell腳本和cron作業(yè)等方式來執(zhí)行PHP腳本。PHP CLI在網(wǎng)站開發(fā)、系統(tǒng)管理、后臺任務等方面都有廣泛的應用。
在網(wǎng)站開發(fā)中,PHP CLI經(jīng)常被用來編寫腳本來處理一些常規(guī)任務。比如,我們可以創(chuàng)建一個PHP腳本來定時備份數(shù)據(jù),如下所示:
#!/usr/bin/php
<?php
//開啟腳本執(zhí)行計時器
$startTime = microtime(true);
//調(diào)用數(shù)據(jù)庫備份腳本
system("mysqldump -u root -p123456 database > backup.sql");
//記錄執(zhí)行時間到日志
$endTime = microtime(true);
$executeTime = $endTime - $startTime;
error_log(date("Y-m-d H:i:s") . " - 備份完成,執(zhí)行時間:{$executeTime}秒", 3, "/var/log/phpcli/backup.log");
?>
這段代碼可以通過以下命令行參數(shù)來執(zhí)行:
$ php backup.php
當然,上面這個腳本還可以通過添加參數(shù)來指定備份的數(shù)據(jù)庫,備份后的文件名稱,備份的時間間隔等。
在系統(tǒng)管理方面,PHP CLI可以用來監(jiān)測系統(tǒng)狀態(tài)、創(chuàng)建用戶、部署代碼等。舉個例子,我們可以寫一個腳本來監(jiān)測服務器硬件運行情況:
#!/usr/bin/php
<?php
$memoryTotal = shell_exec("cat /proc/meminfo | grep 'MemTotal' | awk '{print $2}'");
$memoryFree = shell_exec("cat /proc/meminfo | grep 'MemFree' | awk '{print $2}'");
$swapTotal = shell_exec("cat /proc/meminfo | grep 'SwapTotal' | awk '{print $2}'");
$swapFree = shell_exec("cat /proc/meminfo | grep 'SwapFree' | awk '{print $2}'");
$memoryUsage = round(100 - ($memoryFree / $memoryTotal) * 100);
$swapUsage = round(100 - ($swapFree / $swapTotal) * 100);
echo "Memory usage: {$memoryUsage}%\n";
echo "Swap usage: {$swapUsage}%\n";
?>
這個腳本可以給我們實時反饋服務器內(nèi)存和交換空間的使用情況,我們可以定期執(zhí)行該腳本并將結(jié)果發(fā)送至我們的郵箱中,這樣我們就可以監(jiān)測服務器的運行狀況了。
最后,在后臺任務方面,PHP CLI可以用來執(zhí)行定期任務、隊列處理等。比如,我們可以寫一個腳本來通過郵件告知每天的天氣預報:
#!/usr/bin/php
<?php
$city = "北京";
$weatherUrl = "http://wthrcdn.etouch.cn/weather_mini?city=" . urlencode($city);
$weatherInfo = json_decode(file_get_contents($weatherUrl), true);
if ($weatherInfo && $weatherInfo["status"] === 1000) {
$date = $weatherInfo["data"]["forecast"][0]["date"];
$type = $weatherInfo["data"]["forecast"][0]["type"];
$high = $weatherInfo["data"]["forecast"][0]["high"];
$low = $weatherInfo["data"]["forecast"][0]["low"];
$msg = "{$date},{$city}的天氣為{$type},最高溫度{$high},最低溫度{$low}";
mail("your_email@example.com", "今日天氣預報", $msg);
} else {
echo "獲取天氣信息失敗";
}
?>
該腳本可以在每天指定的時間間隔內(nèi)執(zhí)行,通過郵件告知我們當天的天氣狀況,這樣我們就可以提前做好相應的氣象調(diào)整。