2011-07-28 37 views
12

Tôi có thể tìm ra cách để làm điều này nếu tôi có toàn quyền truy cập vào máy chủ, tuy nhiên vấn đề là nó chỉ là dịch vụ lưu trữ khiến tôi không có gì ngoài việc truy cập FTP FTP.Cách tốt nhất để định kỳ thực thi tập lệnh PHP là gì?

Tôi muốn chạy một kịch bản PHP theo định kỳ để kiểm tra các nội dung lỗi thời/tấm, tổng hợp nội dung mới, xóa các tập tin không sử dụng vv, tuy nhiên kịch bản có thể mất lên đến 60 giây để thực hiện (do sự kết hợp của nội dung) và tôi cảm thấy giống như một ass để chỉ thực hiện nó trong khi xử lý một yêu cầu của người dùng đầu tiên truy cập vào trang web một giờ sau khi nó được cập nhật: P

Rời khỏi máy tính gia đình của tôi 24/7 để lên lịch yêu cầu không một lựa chọn.

+3

Google cho 'webcron', rất nhiều dịch vụ cung cấp này. – Wrikken

+2

Nếu chạy tập lệnh qua HTTP, hãy chú ý đến thời gian chờ thực thi. Trong khi bạn có thể sử dụng 'set_time_limit()' để cho PHP chạy tập lệnh dài hơn bình thường, một số máy chủ web (Apache) có giới hạn thời gian xử lý riêng của chúng tại chỗ mà bạn không thể thay đổi. Hỏi máy chủ của bạn nếu họ cho phép bạn thiết lập tập lệnh cron – Phil

+1

Bạn có thể, về mặt lý thuyết, phá vỡ giới hạn thời gian khó của một số máy chủ web bằng cách dựa vào hai lượt truy cập. Về cơ bản, sử dụng cách tiếp cận của tôi, sau đó chuyển hướng người dùng một lần * giây *, chạy phần thứ hai của tập lệnh dài của bạn. Tách thời gian thực hiện một nửa và chuyển hướng người dùng hai lần. Có, người dùng kém. Haha. –

Trả lời

14

Bạn có thể sử dụng dịch vụ cron trực tuyến để cơ bản giả vờ như bạn có quyền truy cập cron.

Tạo file php với nội dung bạn muốn được thực hiện

Free Cron Online Website

Thiết lập cron trực tuyến miễn phí của bạn để thực hiện tập tin mà mỗi x phút.

+1

Ồ, đó là một trang web tuyệt vời. Điều này chắc chắn sẽ giúp tôi bắt đầu! – CookieMonster

+1

Đúng, trang web tuyệt vời, được đánh dấu trang. Cảm ơn bạn đã cho chúng tôi biết về điều đó :) –

0

Tại sao bạn không sử dụng

crontab 

Hãy xem ở đây:

http://en.wikipedia.org/wiki/Cron 
+2

OP đặc biệt nói rằng không có quyền truy cập nào khác trên máy chủ ngoại trừ FTP. –

+1

Ngoài ra, đó là 'crontab'. –

+0

Và nếu lưu trữ chỉ cung cấp quyền truy cập FTP. Liệu họ có cho phép một tập lệnh thực thi trong hơn 60 giây không? – glarkou

4

Không chắc nếu đây là cách tiếp cận đúng, nhưng tôi sử dụng để chỉ kích hoạt một kịch bản khi là người đầu tiên người dùng truy cập trang web và sau đó gửi <meta http-equiv="refresh"... cho người dùng để trình duyệt của mình làm mới trang. Tập lệnh PHP gốc sẽ vẫn chạy trên máy chủ, nhưng người dùng sẽ không nhìn thấy nó nữa.

Về cơ bản, một cái gì đó như:

if(check if the user is the first visitor today) { 
    set_time_limit(0); 
    echo "<meta http-equiv='refresh' content='1;url=..." />"; // put your site baseurl in here 

    ... run your scripts here 
} 

Chỉ cần một ý tưởng. Có thể không hoạt động. Hãy thử nó đi.

+0

Xin chào, điều đó nghe có vẻ giống như một ý tưởng hay. Tôi giả định chuyển hướng người dùng bằng Header ("Location: .."); cũng sẽ hoạt động (tiếp tục tập lệnh ngay cả khi nó được chuyển hướng người dùng)? Tôi sẽ thử phương pháp này càng sớm càng tốt. – CookieMonster

+1

Có, sử dụng tiêu đề cũng sẽ không sao. Trên thực tế, gửi tiêu đề đầu tiên và sau đó là thẻ meta (sau đó hoặc bạn sẽ gặp lỗi), vì vậy, hãy đảm bảo rằng người dùng được chuyển hướng. Một số trình duyệt có thể bỏ qua tiêu đề (Vị trí) vì một số lý do, vì vậy thẻ meta sẽ đảm bảo chuyển hướng. Chỉ là một thói quen của tôi. Hy vọng điều này phù hợp với bạn! :) –

+0

Ok, những thứ tuyệt vời! Sẽ thử cả hai phương pháp và xem những gì hoạt động tốt nhất cho tôi :) Cảm ơn – CookieMonster

0

Nếu nhà cung cấp dịch vụ lưu trữ của bạn không cung cấp cho bạn bất kỳ thứ gì ngoài truy cập FTP, bạn không muốn lên lịch yêu cầu định kỳ từ một máy khác, thì không có gì bạn có thể làm. Bạn sẽ phải có một tài khoản lưu trữ tốt hơn, tốt nhất là cho phép bạn sử dụng cron.

+1

Dựa vào khách hàng/khách truy cập để làm điều đó, sau đó chuyển khách hàng ra ngoài. Xem phương pháp của tôi ở trên. :) –

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