首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Windows 環境下 PHP 定時任務配置全攻略

     編輯:PHP 相關知識

在 Windows Server (IIS) 環境中讓 PHP 腳本定時自動執行,核心思路是:系統任務計劃程式 → 批次檔 → php.exe 執行腳本。本文提供圖文級步驟、批次檔範本、常見坑位與替代方案。

步驟 1:建立批次執行檔

新建 run_php_task.bat,內容如下:

@echo off
REM 切換至 PHP 安裝目錄(根據實際路徑修改)
D:
cd D:\php

REM 執行目標 PHP 腳本(使用絕對路徑)
php.exe D:\wwwroot\cron\scan_task.php >> D:\logs\cron_scan.log 2>&1

REM 可選:記錄執行時間
echo [%date% %time%] Task executed >> D:\logs\cron_scan.log

關鍵點:

  • 使用 php.exe 而非 php-cgi.exe(CLI 模式無超時限制、無 HTTP 標頭干擾)。
  • 腳本路徑、日誌路徑全部用絕對路徑,避免工作目錄不一致導致找不到檔案。
  • >> 追加日誌,2>&1 將 stderr 合併到 stdout,便於排錯。

步驟 2:建立 Windows 任務計劃

  1. 開啟「任務計劃程式」 → 「建立基本任務」。
  2. 名稱:PHP_Cron_Scan,描述:每小時掃描一次。
  3. 觸發器:「每天」 → 重複任務:**每 1 小時**,持續 **24 小時**。
  4. 動作:「啟動程式」 → 程式:D:\php\run_php_task.bat(或直接指向 php.exe 並帶參數)。
  5. 完成時勾選「打開此任務的屬性對話方塊」 → 「一般」頁籤:
  • 選擇「不管使用者是否登入都要執行」。
  • 勾選「使用最高權限執行」(若腳本需寫入系統目錄)。
  • 「設定」頁籤:取消「如果任務執行時間超過...則停止」(防止長跑腳本被殺)。

步驟 3:測試驗證

<?php
// D:\wwwroot\cron\scan_task.php 測試腳本
file_put_contents("D:/logs/test_cron.txt", "Cron run at " . date("Y-m-d H:i:s") . PHP_EOL, FILE_APPEND);
?>

手動雙擊 .bat 或在任務計劃中右鍵「執行」,檢查日誌檔案是否生成、內容正確。

進階方案對比

方案優點缺點適用場景
Windows 任務計劃 + 批次檔原生、無額外依賴、權限可控最小粒度 1 分鐘、跨機器管理麻煩單機、低頻、簡單任務
Linux Cron + SSH 遠程調用功能豐富、集中管理需額外 Linux 主機混合環境、高頻任務
PHP 內建 Swoole/Workerman 定時器毫秒級、常駐記憶體、程式碼控制需常駐進程、學習成本高高併發、實時性要求高
第三方排程平台視覺化、分散式、重試告警部署複雜微服務、企業級應用

常見坑位避雷

  • ❌ 直接在任務中填 php.exe script.php 但未指定工作目錄 → 相對路徑失效。
  • ❌ 使用 php-cgi.exe → 超時 30 秒被殺、輸出 HTTP 標頭污染日誌。
  • ❌ 腳本中使用 $_SERVER、$_GET 等 Web 變量 → CLI 模式下不存在。
  • ✅ 腳本開頭加 chdir(dirname(__FILE__)) 固定工作目錄。
  • ✅ 設定 ini_set('max_execution_time', 0) 移除執行時間限制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved