2013-01-09 67 views
2

我有一個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> 

這些方法不會影響用戶請求時;)

感謝球員

+2

你爲什麼不提出要求?使用jQuery:$ .ajax('/ backup.php');就是這樣,它不會等待迴應。添加「ignore_user_abort(true);」在腳本中的功能,以確保它不會停止。 – Parziphal

+0

結合php連接處理和這個簡單的js調用: $ .get('./ backup.php'); 它做「假cronjob」!謝謝 – Joseph

回答

0

您可以讓您調用的PHP腳本模擬連接的結束。這意味着它可以向用戶發送一些任意的輸出,然後強制用戶的連接關閉,但仍然繼續運行服務器端。

請參見下面的文章:http://php.net/manual/en/features.connection-handling.php

有在評論一些例子。