2010-12-10 42 views
5

Tôi biết cách chạy tập lệnh với cron, nhưng những gì tôi cần là chỉ có thể chạy tập lệnh của mình bằng cron.chạy tập lệnh php chỉ bằng cron

Cảm ơn bạn!

+0

bạn có thể cụ thể hơn không? bạn muốn ẩn tập lệnh php của mình khỏi web và chỉ sử dụng nó qua cron? –

+2

bản sao có thể có của [PHP & cron: security issues] (http://stackoverflow.com/questions/4387569/php-cron-security-issues) – ajreal

+0

Xem câu trả lời cho câu hỏi sẽ được chọn làm bản sao. –

Trả lời

3

Như đã giải thích trong chủ đề trùng lặp này:

PHP & cron: security issues

Bạn nên giữ file này bên ngoài public_html.

Đôi khi, tuy nhiên, điều này là không thể. Tâm trí của tôi đã đi đến Moodle, nơi có một tính năng tương tự tồn tại. Đây là những gì họ làm.

Từ cron.php:

... 

/// The current directory in PHP version 4.3.0 and above isn't necessarily the 
/// directory of the script when run from the command line. The require_once() 
/// would fail, so we'll have to chdir() 

    if (!isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['argv'][0])) { 
     chdir(dirname($_SERVER['argv'][0])); 
    } 

... 

/// check if execution allowed 
    if (isset($_SERVER['REMOTE_ADDR'])) { // if the script is accessed via the web. 
     if (!empty($CFG->cronclionly)) { 
      // This script can only be run via the cli. 
      print_error('cronerrorclionly', 'admin'); 
      exit; 
     } 
     // This script is being called via the web, so check the password if there is one. 
     if (!empty($CFG->cronremotepassword)) { 
      $pass = optional_param('password', '', PARAM_RAW); 
      if($pass != $CFG->cronremotepassword) { 
       // wrong password. 
       print_error('cronerrorpassword', 'admin'); 
       exit; 
      } 
     } 
    } 

... 
+0

tôi sẽ cố gắng này, thx :) – nirvanist

+2

+1, nếu bạn không muốn một cái gì đó để được truy cập qua internet, * không đặt nó trên internet chết tiệt *. Giữ nó bên ngoài gốc tài liệu. –

+3

Như đã đề cập, điều này không phải lúc nào cũng có thể. Thật tốt khi thuyết trình một người nào đó về nó, nhưng lần sau xem xét những điều bất khả thi. – Sweepster

-2

Cố gắng cấp quyền thực thi chỉ cho người dùng cron daemon, có thể với điều đó bạn nhận được những gì bạn muốn.

Trân trọng!

0

Bạn nên giữ kịch bản này bên ngoài của thư mục công cộng. Ngoài ra, hãy đặt quyền thích hợp cho tệp để người dùng công khai không thể thực thi tập lệnh. Đặt đoạn mã bên dưới vào đầu tập lệnh của bạn.

if(php_sapi_name() !== 'cli'){ 
    die('Can only be executed via CLI'); 
} 

Lưu ý rằng bạn cần sử dụng đường dẫn đầy đủ đến tệp thực thi PHP khi bạn thiết lập công việc định kỳ. Ex:/usr/local/bin/php (đường dẫn của bạn có thể khác nhau từ này)

0

Vui lòng thêm kịch bản này ở phía trên cùng của file PHP của bạn:

$isCLI = (php_sapi_name() == 'cli'); 
if(!$isCLI) 
    die("Sorry! Cannot run in a browser! This script is set to run via cron job"); 

và sau đó nếu bạn cố gắng chạy tệp PHP thông qua trình duyệt, bạn không thể chạy nó. Thông báo lỗi này sẽ được hiển thị. Nhưng đồng thời, nó có thể được chạy thông qua một công việc cron.

Các vấn đề liên quan