在 PHP 開發中,有時需要讓腳本在後台持續運行,例如定時任務、數據同步或長連接服務。本文將詳細分析兩種常見的 PHP 文件自動運行方法,並探討它們各自的優缺點與適用場景。
這種方法直接在 PHP 腳本內部實現守護進程邏輯,核心代碼如下:
<?php
ini_set("error_log", "c:\php\php_error.log");
error_log("a.php is execute----------",0);
ignore_user_abort(); // 忽略用戶斷開,後台無阻斷運行
set_time_limit(0); // 取消執行時間限制
$interval = 30; // 每 30 秒執行一次
do {
// 在這裡編寫具體的業務邏輯
error_log("a is do !!!!----------",0);
sleep($interval);
} while (true);
?>
https://example.com/a.php)啟動腳本。通過 CLI 模式啟動腳本,脫離 Web 服務器進程,配合系統排程實現真正的持久化。
php-win.exe -c "c:\php\php.ini" -f C:\Apache2.2\htdocs\a.php
僅需執行一次即可。即使 Web 服務器重啟,該進程仍存活。
為解決機器重啟或進程被殺掉後無法自動恢復的問題,可將上述命令寫入 .bat 文件,並放入系統「啟動」文件夾或註冊為服務,實現開機自啟動。
編寫簡單的 PHP 腳本 b.php 執行具體任務,再建立 Shell 腳本調用它:
c:\php\php -c c:\php\php.ini -f c:\Apache2.2\htdocs\b.php
使用 crontab -e 設置定時任務,例如每分鐘執行一次:
* * * * * /usr/bin/php /var/www/html/b.php > /dev/null 2>&1
| 維度 | 方法一 | 方法二 |
|---|---|---|
| 實現難度 | 低 | 中 |
| 持久性 | Web 服務重啟即失效 | 系統級持久,可開機自啟 |
| 資源佔用 | 常駐內存 | 按需啟動,釋放資源 |
| 適用場景 | 簡單測試、臨時任務 | 生產環境定時任務、長運行服務 |
生產環境強烈建議採用方法二,結合系統級進程管理工具,可構建穩健可靠的後台任務體系。