這是一個簡單的HTML文件上傳表單。在POST請求完成之前,PHP(帶有Apache或Nginx)是否可以檢查HTTP標頭?
<form enctype="multipart/form-data" action="upload.php" method="POST">
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
而且php文件也很簡單。
<?php
die();
正如您所見,PHP腳本在服務器端不做任何事情。但是當我們上傳一個大文件時,這個過程仍然需要很長時間。
我知道,我的PHP代碼將在POST過程結束後執行。 PHP MUST在第一行代碼解析之前準備名爲$ _POST和$ _FILES的數組。
所以我的問題是:在POST請求完成之前,PHP(帶有Apache或Nginx)是否可以檢查HTTP頭?
例如,一些PHP擴展或Apache模塊。
有人告訴我,Python或node.js可以解決這個問題,只是想知道PHP是否可以。
謝謝。
================更新1 ================
我的目標是試圖阻止一些意想不到的文件上傳請求。例如,我們生成了一個唯一的標記作爲POST目標url(如http://some.com/upload.php?token=268dfd235ca2d64abd4cee42d61bde48&t=1366552126)。在服務器端,我的代碼是這樣的:
<?php
define(MY_SALT, 'mysalt');
if (!isset($_GET['t']) || !isset($_GET['token']) || abs(time()-$_GET['t'])>3600 || md5(MY_SALT.$_GET['t'])!=$_GET['token']) {//token check
die('token incorrect or timeout');
}
//process the file uploaded
/* ... */
代碼看起來很有意義:-P但不能像預期的那樣節省帶寬。原因是PHP代碼運行得太晚,我們無法在文件上傳完成前檢查令牌。如果有人在URL中上傳沒有正確標記的文件,我的服務器的網絡和CPU仍然浪費。
任何建議是值得歡迎的。非常感謝。
我要問的問題是,你爲什麼想要得到的頭?原因是可能有更好的方法來實現你想要達到的目標。 – 2013-04-20 12:41:02
@OkekeEmmanuelOluchukwu感謝您的幫助,請參閱我的更新內容。 – Alix 2013-04-21 14:00:29
當你說'大'檔案時,你的意思是'大'?說1Gb,100Mb只是給一個範圍,它也一直是大文件? – 2013-04-22 09:41:16