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

Windows 服務器下 PHP 定時任務實現方案與排程備份實戰

     編輯:PHP 相關知識

前言

在 Windows 環境部署 PHP 應用時,定時任務是常見需求:定時發送郵件、清理臨時文件、資料庫自動備份等。本文詳細介紹兩種主流方案:Windows 任務計劃器 + PHP CLI 以及 PHP 內建排程邏輯,並附贈 MySQL 自動備份腳本實戰與常見坑位避雷指南。

方案一:任務計劃器 + 批處理文件(推薦)

步驟 1:編寫 PHP 執行腳本

建立 test.php,採用 CLI 模式執行,避免 Web 超時限制:

<?php
$fp = @fopen("test.txt", "a+");
fwrite($fp, date("Y-m-d H:i:s") . " 定時任務執行成功!\n");
fclose($fp);
?>

步驟 2:建立批處理文件

新建 run_task.bat,指定 PHP 執行檔與腳本路徑:

D:\php\php.exe -q D:\php\test.php

關鍵參數說明:

  • -q:靜默模式,抑制 HTTP 標頭輸出
  • 路徑請根據實際 PHP 安裝目錄修改

步驟 3:配置 Windows 任務計劃器

  1. 開啟「任務計劃器」→「建立基本任務」
  2. 觸發器選擇「每天」或「重複任務:每 1 分鐘」
  3. 動作選擇「啟動程式」,程式填寫 D:\php\run_task.bat
  4. 關鍵設置:「無論用戶是否登入都要執行」,帳戶建議使用 SYSTEM(最高權限,無需密碼)

驗證結果

查看 test.txt 應輸出類似:

2024-01-15 10:00:01 定時任務執行成功!
2024-01-15 10:01:02 定時任務執行成功!

方案二:MySQL 自動備份腳本實戰

備份腳本 backup.php

<?php
if ($argc != 2 || in_array($argv[1], array('--help', '-?'))) {
    // 顯示幫助信息
    exit;
}

$dbname = $argv[1];
$dump_tool = "C:\mysql\bin\mysqldump.exe";
$rar_tool = "D:\php\rar.exe";

// 執行備份並壓縮
@exec("$dump_tool --opt -u user -ppassword $dbname > ./$dbname.sql");
@exec("$rar_tool a -ag_yyyy_mm_dd_hh_mm $dbname.rar $dbname.sql");
@unlink("$dbname.sql");
echo "Backup complete!";
?>

任務計劃器參數

D:\php\php.exe -q D:\php\backup.php my_database

設置為每天凌晨 2 點執行,備份文件將以 my_database_2024_01_15_02_00.rar 格式命名。

常見錯誤與解決方案

錯誤 0x80070005:拒絕訪問

原因:任務計劃器帳戶權限不足。
解決:使用 SYSTEM 帳戶執行,該帳戶擁有最高權限,無需密碼。
警告:SYSTEM 權限極高,執行命令時務必謹慎,避免誤刪系統文件。

PHP 腳本執行超時

在備份腳本開頭添加:

ini_set('max_execution_time', 0); // 0 表示無限制
set_time_limit(0);

路徑包含空格問題

批處理文件中路徑請用雙引號包裹:

"D:\Program Files\PHP\php.exe" -q "D:\My Scripts\backup.php"

進階替代方案

  • cron for Windows:如 cronw、nssm 將 PHP 腳本註冊為服務
  • Composer 包:spatie/laravel-schedule(需 Laravel 框架)
  • 第三方服務:EasyCron、cron-job.org 遠程觸發 HTTP 端點

總結

Windows 下 PHP 定時任務的核心公式是:PHP CLI + 批處理文件 + 任務計劃器(SYSTEM帳戶)。掌握這套組合拳,配合 mysqldump 與壓縮工具,即可構建穩健的自動化運維體系。生產環境建議增加日誌記錄、失敗告警(郵件/企業微信)與備份文件定期上傳至雲存儲。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved