我有一個PHP腳本,運行數據庫備份和壓縮它沒有任何特定的HTML輸出。該腳本包含一個時間檢查,以避免在存儲在db中的指定延遲之前執行。 現在的問題是,我無法使用服務器cronjob任務,因爲網絡服務器不支持它。PHP Cronjobs使用JavaScript/AJAX
所以我會創建一個JavaScript函數,應該在每次訪問時調用php腳本(是的,它足以滿足我的目的),但不會延遲訪問該頁面的用戶,因爲它需要大約1分鐘才能結束該過程。 是否可以在不等待響應的情況下運行腳本?當用戶會話終止時,php腳本可以繼續運行?
我想類似的東西: http://drupal.org/project/poormanscron
在此先感謝
編輯: SOLUTION 1(PHP只):
public static function cronjob() {
ignore_user_abort(true); // optional
session_write_close();//close session file on server side to avoid blocking other requests
header("Content-Encoding: none");//send header to avoid the browser side to take content as gzip format
header("Content-Length: ".ob_get_length());//send length header
header("Connection: close");//or redirect to some url: header('Location: http://www.google.com');
ob_end_flush();flush();//really send content, can't change the order:1.ob buffer to normal buffer, 2.normal buffer to output
//fastcgi_finish_request(); // important when using php-fpm!
// Do processing here
sleep(5);
require_once("./cron_job.php");
exit();
}
ob_start(); // will be closed in backup function
register_shutdown_function('cronjob');
SOLUTION: 我輸出前把這個2(with javascript):
1)建立內部
2用cronjobs的文件)把這個JavaScript代碼在你的HTML:
<script type="text/javascript">
// cron job
$.get('./cron_job.php');
</script>
這些方法不會影響用戶請求時;)
感謝球員
你爲什麼不提出要求?使用jQuery:$ .ajax('/ backup.php');就是這樣,它不會等待迴應。添加「ignore_user_abort(true);」在腳本中的功能,以確保它不會停止。 – Parziphal
結合php連接處理和這個簡單的js調用: $ .get('./ backup.php'); 它做「假cronjob」!謝謝 – Joseph