2012-04-10 25 views
15

Tôi có lịch biểu E-mail chạy hàng ngày trên trang php bằng cách sử dụng các công việc cron. Mã php hoạt động tốt khi tôi chạy trang bằng liên kết.cách chạy tệp php bằng cách sử dụng công việc cron

Bây giờ khi tôi chạy tập lệnh php bằng cách sử dụng công việc cron, nó cũng hoạt động tốt nhưng khi tôi đặt một số truy vấn các công việc cron sẽ không hiểu liên kết.

ví dụ: http://www.wetube.org/cron.php?id=01001 vì vậy bây giờ nếu tôi cố gắng chạy hàng ngày này bằng cách sử dụng công việc cron nó không hoạt động.

Nhưng nếu chúng tôi chỉ xóa truy vấn thì nó hoạt động tốt. Các bạn có biết mã nào làm cho liên kết này hoạt động trong công việc định kỳ không?

+0

"Đặt một số truy vấn" nghĩa là gì? Ngoài ra, những gì bạn đã đặt làm lệnh cho cron-job? –

Trả lời

36

Cron chạy các lệnh khi chúng chạy qua trình bao, do đó chạy PHP sẽ sử dụng đường dẫn cục bộ.

Bạn cần phải sử dụng một lệnh như:

php /home/USER/public_html/cron.php

Hoặc nếu tính cả các chuỗi truy vấn là cần thiết, sử dụng cURL để thay thế (nếu nó được cài đặt):

curl http://www.wetube.org/cron.php?id=01001

Bạn có thể đặt muốn xem xét không hiển thị các script cron của bạn lên internet - di chuyển chúng ra bên ngoài thư mục web của bạn bởi vì nếu ai đó tìm thấy nó, họ có thể liên tục tải lại nó để spam các script cron của bạn (tức là gửi l OTS email)

+0

cảm ơn người đàn ông nhưng tôi có thể thêm người nào khác để tránh gửi báo cáo –

+4

Nếu bạn phải chạy tập lệnh qua HTTP (thường là ý tưởng tồi ở nơi đầu tiên) và máy chủ của bạn có địa chỉ IP tĩnh (và chuyên dụng) mà bạn có thể giới hạn truy cập chỉ đến từ máy chủ của bạn bằng cách đính kèm script cron của bạn trong một kiểm tra có điều kiện rằng '$ _SERVER ['REMOTE_HOST']' khớp với địa chỉ IP của máy chủ của bạn. Điều này không phải là dễ dàng mặc dù và đặt cược an toàn nhất của bạn chỉ đơn giản là có kịch bản cron bên ngoài thư mục web của bạn. – wyqydsyq

7

tôi sẽ thêm băm như

curl http://www.wetube.org/cron.php?id=01001&hash=cm349ucKuc023b2ynGyv23ycr23 

và trong php tập tin

if(isset($_GET['hash']) && $_GET['hash']=='cm349ucKuc023b2ynGyv23ycr23'){ 
.... 
stuff to do 
.... 
} 

* Bạn thậm chí có thể thêm thời gian kiểm tra/ngày cụ thể khi nó phải được chạy.
* bạn có thể kiểm tra IP
* tạo sha512 (tôi muốn giới thiệu) băm trong cả tệp cron và php với cùng một muối và thậm chí có thể là thời gian và sau đó kiểm tra xem chúng có giống nhau hay không. - ngoại trừ nếu bằng cách nào đó, bạn đã thiết lập băm ban đầu của mình

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