2011-04-22 2 views
3

사람들이 내 서버에 zip 파일을 업로드 할 수있게하고 싶습니다. 업로드 할 양식이 있고 업로드 페이지로 리디렉션됩니다. 사진 (png 및 jpg)을 성공적으로 업로드 할 수 있지만 우편 번호를 시도 할 때마다 4-8 줄에 여러 개의 "정의되지 않은 색인 오류가 발생합니다." 여기 내 코드가있다. 웹 사이트를 체크 아웃하려면 gregsminecraft.dyndns.org:25566/file.php에서 사용할 수 있어야합니다. 편집 : 크기가 큰 zip 파일을 허용하지 않습니다. 크기가 작은 파일로 시도했기 때문에 효과가있었습니다. 더 큰 zip 파일을 받아들이는 방법이 있습니까?PHP를 사용하여 zip 파일을 업로드하려면 어떻게해야합니까?

if ((($_FILES["file"]["type"] == "application/zip") 
|| ($_FILES["file"]["type"] == "application/x-zip-compressed") 
|| ($_FILES["file"]["type"] == "multipart/x-zip") 
|| ($_FILES["file"]["type"] == "application/x-compressed") 
|| ($_FILES["file"]["type"] == "application/octet-stream")) 
&& ($_FILES["file"]["size"] < 20971520)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 

    if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 
+0

응용 프로그램/X-ZIP 압축 크기 : 158.626953125 이하 임시 파일 :/개인의/var/tmp를/php0ZyEoi 에 저장 : 업로드/아이폰 intro.zip을 –

답변

3

업로드 후 업로드 양식이 리디렉션됩니다. 파일을 보존하기위한 조치를 취하지 않으면 PHP는 스크립트가 종료 될 때 업로드 된 파일을 삭제합니다. 양식이 "upload.php"로 POST (말)하고 "handle_upload.php"로 리디렉션되면 실제로 "upload.php"스크립트에서 업로드를 처리해야합니다. 그렇지 않으면 파일이 사라집니다.

또한, $ _FILES 배열에 ['type']['name'] 매개 변수를 신뢰하지 마십시오. 이는 사용자가 제공 한 데이터이며 쉽게 파괴 될 수 있습니다. 또한 사용자 제공 파일 이름을 사용하여 서버에 파일을 저장합니다. 아무것도 사용자가 업로드 양식을 해킹해서 "../../../../etc/passwd"라는 파일을 mime-type "application.zip"으로 호출 할 수 없다고하지는 않습니다. 스크립트가 행복하게 받아 들여서 서버의 암호 파일을 덮어 씁니다.

오류 검사와 함께, 업로드를 처리하는 적절한 방법은 다음과 같습니다 유형 intro.zip 아이폰 : 업로드 : 난 그냥 당신이 제공 한 URL을 시험하고 다음과 같은 결과를 얻었다

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (isset($_FILES['file'])) { 
      if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { 
       ... file was succesfully uploaded, process it 
      } else { 
       ... file upload failed, output error message, etc... 
    } else { 
     ... no upload at all, not even an attempt 
    } 
} else { 
    .... not in a POSt environment, so can't possibly have a file upload ... 
} 
관련 문제