2011-03-01 81 views
1

嘗試從我的Flash文件捕獲文件上傳,這將它與$ _POST發送到我的文件upload.php。

也許任何人都可以找到我的Bug,文件was'nt上傳。

$data = $GLOBALS["HTTP_RAW_POST_DATA"]; 
$fp = fopen("upload/".$session."/".$wkid."/".$data, "wb"); 
fwrite($fp, $data); 
fclose($fp); 

POST的標題是這樣的:

http://192.168.1.161:81/upload.php 

POST /upload.php HTTP/1.1 
Host: 192.168.1.161:81 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 115 
Connection: keep-alive 
Cookie: PHPSESSID=9873ceb6399eafefb91dac3b942d0b78; __utma=48168551.1670897330.1298964838.1298964838.1298968544.2; __utmc=48168551; __utmz=48168551.1298964838.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); phpMyAdmin=f54c4ad7eb21706a57b4b6e5058dd2cfbea1cc32; pma_lang=de-utf-8; pma_charset=utf-8; pma_mcrypt_iv=UX8VuU94d%2BA%3D; pmaUser-1=SNAWkCqwJCg%3D; pmaPass-1=eV3KOmsoVPlmV1Z%2BYkskZQ%3D%3D; pma_fontsize=82%25; pma_theme=original; __utmb=48168551.2.10.1298968544; session=9873ceb6399eafefb91dac3b942d0b78; wkid=314; uid=25c75688b1e929d494fea85a0d6a8439 
Referer: http://192.168.1.161:81/upload.swf 
Content-type: application/octet-stream 
Content-length: 73371 

PNG 


HTTP/1.1 200 OK 
Date: Tue, 01 Mar 2011 08:35:03 GMT 
Server: Apache/2.2.9 
X-Powered-By: PHP/5.2.6-1+lenny9 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 35 
Keep-Alive: timeout=3, max=100 
Connection: Keep-Alive 
Content-Type: text/html 

問候,

回答

0

我認爲這個問題可能是這部分:

$fp = fopen("upload/".$session."/".$wkid."/".$data, "wb"); 

$data已設置爲原始POST有效負載。通過這個fopen調用,你正在試圖創建一個名字與原始字節流(可能超過10K)的文件名。雖然這取決於實際的文件系統,但它很可能在大多數BSD/Linux服務器上失敗。

+0

嗨馬里奧,我試圖用$ _FILES ['name'] ['tmp_name'] befor但該文件不能移出/ tmp和處理後總是刪除。 – raz 2011-03-01 08:56:14

+0

@raz:這裏不是問題。使用類似'$ destfilename = md5($ data)'和fopen()而不是$ data。 – mario 2011-03-01 08:59:59

+0

你也許想用'$ _FILES [「data」] [「name」]'而不是'tmp_name' – mario 2011-03-01 09:00:52

1

你應該嘗試閱讀原始post數據:

$data = file_get_contents("php://input"); 
+0

嗨斯莫特,這個作品很好!但創建的文件名稱不正確(例如:?PNG ????)如何獲得正確的名稱?在此先感謝 – raz 2011-03-01 08:54:03