天天看點

浏覽器(或用戶端)觸發,背景運作php腳本

今天在0fees.net上申請了個免費的php空間,然後把前兩天折騰的csdn部落格文章抓取程式和csdn部落格使用者爬取程式放上去了,雖然空間是國外的,不過速度還算可以。

既然有了現成的空間可用,于是就打算把正在進行的爬取程式放伺服器上運作,不過試的過程中遇到這樣的問題,就是:我從浏覽器這端觸發伺服器上的php腳本,要想讓伺服器端的php腳本一直執行,我得把該網頁一直開着,這樣就達不到我不開電腦不開網頁進行爬取的目的,是以查找了些資料,得知 ignore_user_abort() 函數可以幫忙搞定這個問題。下面是php内部處理連接配接的說明:

在 PHP 内部,系統維護着連接配接狀态,其狀态有三種可能的情況:

0 - NORMAL(正常)

1 - ABORTED(異常退出)

2 - TIMEOUT(逾時)

當 PHP 腳本正常地運作 NORMAL 狀态時,連接配接為有效。當遠端用戶端中斷連接配接時,ABORTED 狀态的标記将會被打開。遠端用戶端連接配接的中斷通常是由使用者點選 STOP 按鈕導緻的。當連接配接時間超過 PHP 的時限(請參閱 set_time_limit() 函數)時,TIMEOUT 狀态的标記将被打開。

可以決定腳本是否需要在用戶端中斷連接配接時退出。有時候讓腳本完整地運作會帶來很多友善,即使沒有遠端浏覽器接受腳本的輸出。預設的情況是當遠端用戶端連接配接中斷時腳本将會退出。該處理過程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 設定中對應的“php_value ignore_user_abort”以及 ignore_user_abort() 函數來控制。如果沒有告訴 PHP 忽略使用者的中斷,腳本将會被中斷,除非通過 register_shutdown_function() 設定了關閉觸發函數。通過該關閉觸發函數,當遠端使用者點選 STOP 按鈕後,腳本再次嘗試輸出資料時,PHP 将會檢測到連接配接已被中斷,并調用關閉觸發函數。

針對性的修改了爬取程式的代碼,達到了浏覽器觸發背景執行php程式的目的

<?php

/

ob_start();

set_time_limit(0);

ignore_user_abort(TRUE);

header("Content-Type:text/html; charset=utf-8");

header("Connection: close");

ob_end_flush();

flush();

crawl code

.....

?>