2011-03-01 2 views
1

) Flashfile에서 fileupload를 가져 오려고하면 $ _POST가 포함 된 파일 upload.php로 전송됩니다.

어쩌면 누구나 내 버그를 발견, 파일 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 [ '이름'] [ 'tmp_name']와 함께 befor 시도했지만 파일을 이동할 수 없습니다/tmp 및 항상 처리 후 삭제 된. – raz

+0

@raz : 여기서 문제가되지 않습니다. '$ destfilename = md5 ($ data)'와 같은 것을 사용하고 $ data보다는 fopen()에서 사용하십시오. – mario

+0

또한 아마도 $ _FILES [ "data"] [ "name"]'을 사용하고 싶었고'tmp_name'이 아니 었습니다. – mario

1
당신과 함께 원시 포스트 데이터를 읽는 시도해야

:

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

안녕하세요, Smott이 기능이 작동합니다. 하지만 생성 된 파일의 이름이 잘못되었습니다 (예 :? PNG ????) 올바른 이름을 얻는 방법? 미리 감사드립니다 – raz

관련 문제