2009-12-04 91 views
0

我可能寫錯了標題。對不起。如何檢查連接到php頁面

我只是想知道是否有辦法檢查用戶連接到PHP頁面。

例如,我有一個名爲「的download.php」一個PHP頁面,這個頁面可以讓用戶下載某事並插入這個動作到MySQL,這樣

$query = "INSERT INTO bla bla "; 
$result = mysql_query($query); 

header('Content-type: application/zip'); 
header('Content-Length: ' . filesize($file)); 
header("Content-Disposition: attachment; filename="file.zip"); 

readfile($file); 

但有時,下載管理軟件,如「軌道「等......連接這個頁面數百次,並炸燬數據庫。

有沒有辦法來防止這種情況?

感謝

回答

0

您可以在SQL配置或Apache指定允許的連接數。的東西設置最大連接你知道你的數據庫可以處理

編輯文件/etc/my.cnf 的max_connections = 1000

+0

是在php.ini嗎? – 2009-12-04 01:02:07

0

做下載開始前下降MySQL連接,因爲它仍然是最好的事情在整個下載期間打開。必要時重新連接 - 問題應該消失。

也就是說,最後使用MySQL之後,但在頭前,把

mysql_close(); 
+0

好的,但當下載管理器重新連接該頁面時,不會連接MYSQL一遍又一遍嗎? – 2009-12-04 01:17:56

+0

是的,但每次連接只會打開一毫秒,而不是整個下載過程。我遇到了和你一樣的問題,一旦我在下載開始之前關閉了連接,它就消失了。 – Meep3D 2009-12-04 01:35:36

0

如果我理解正確的話,你要過濾掉從下載管理器或機器人的請求,僅記錄在實際用戶你的數據庫。有幾種方法可以實現:

篩選用戶代理:每個請求都應發送一個用戶代理標頭,該標頭標識發出請求的瀏覽器或軟件。您可以使用此方法來過濾漫遊器和下載管理器(如果實際上它們正在使用單獨的用戶代理)。 Here is an example script that does this

使用Cookie:像這樣在頁面的頂部,假設與瀏覽器的下載管理器股Cookie狀態:

if (!isset($_COOKIE['download_check'])) { 
    setcookie('download_check', '1', 0, '/'); 
} else { 
    exit(); 
} 

腳本不會做後的第一次什麼。爲了讓用戶回來並重新下載,只需在其他任何頁面上銷燬該Cookie即可。

使用JavaScript或元標記重定向:假設下載程序或bot不會執行JavaScript,請檢查查詢字符串中是否存在某個參數。如果它不存在,然後再輸出一個JavaScript或元標籤的短頁面重定向到與參數和出口的同一頁,就像這樣:

if (!isset($_GET['download_check'])) { 
    echo "<html><script>window.location = 'this_page.php?download_check=1'</script></html>"; 
    exit(); 
} 

我希望有一個或多個這些方法可以幫助你過濾不正確的請求到您的應用程序。

+0

這就是偉大的人,我會嘗試cookie和JavaScript重定向。 javascript似乎更有用。 thx – 2009-12-04 01:38:42

+0

如果它適合你,請點擊複選標記將其標記爲答案。謝謝。 – 2009-12-07 21:57:41