Định kỳ chạy script PHP

Có thế tạo crontab để định kỳ chạy script PHP, thí dụ mỗi ngày lúc nửa đêm

0 0 * * * /usr/bin/php /path/to/script.php

Tuy nhiên thường phải truyền tham đối cho script, thí dụ để bảo mật script chỉ chạy với một tham đối đặc biệt như thamdoidacbiet. Trong trường hợp này không thể truyền qua mảng $_GET hay $_POST mà truyền tham đối giống như với Bash script.

PHP có biến toàn cục $argc để đếm số tham đối dòng lệnh và $argv là mảng chứa các tham đối. Tương đương với $_SERVER[‘argc’] và $_SERVER[‘argv’].

Nhờ đó trong script chúng ta có thể kiểm tra tham đối đặc biệt như sau

if ($argc > 1) && $argv[1]=='thamdoidacbiet') {
  // $argc nhỏ nhất là 1
  // $argv[0] là script PHP
  // ... code ...
}

Tuy nhiên $argc và $argv chỉ tồn tại khi PHP chạy ở dòng lệnh. Nếu script chạy ở cả FastCGI thì đoạn mã trên gặp lỗi. Để an toàn chúng ta phải sửa câu điều kiện trên

if (empty($_SERVER['REMOTE_ADDR']) && !isset($_SERVER['HTTP_USER_AGENT']) && count($argv)>0 && $argv[1]=='thamdoidacbiet') {
  // code
} else { //FastCGI
  // code
}

Ngoài ra, có thể xét trực tiếp tồn tại $argc hay không

if (isset($argc) && $argc > 0 && $argv[1]=='thamdoidacbiet') {
  // code
} else { //FastCGI
  // code
}

Comments Off on Định kỳ chạy script PHP

Filed under Software

Comments are closed.