2013-08-21 4 views
0

PHP를 업로드하는 PHP 업 로더를 작성하고 싶습니다. PHP 파일 업로드 파일을 저장하지 않습니다

나는이 스크립트를 발견 : 내가 1백60킬로바이트 이미지로 테스트하고 싶었 기 때문에

<?php 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/pjpeg") 
|| ($_FILES["file"]["type"] == "image/x-png") 
|| ($_FILES["file"]["type"] == "image/png")) 
&& ($_FILES["file"]["size"] < 20000) 
&& in_array($extension, $allowedExts)) 
    { 
    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을 추가했다.

모두 정상적으로 작동합니다. 심지어 말합니다 :

Upload: bier15291.jpg 
Type: image/jpeg 
Size: 158.26171875 kB 
Temp file: /mnt/shared/tmp/php_0aOep 
Stored in: upload/bier15291.jpg 

내 FTP에서 파일을 찾을 수 없습니다.

내가 뭘 잘못하고 있니?

+1

그리고'upload /'디렉토리에 대한 쓰기 권한이 있다는 것을 확실히 알고 있습니까? – davidkonrad

+0

그럼이 문제가 해결 되었습니까? 그렇다면 대답을 선택하거나 직접 추가하고 선택하십시오. – Technoh

답변

0

그래서 해결책은 권한을 0775로 설정하십시오 ...

1

move_uploaded_file의 반환 값을 확인하십시오. 파일 이름이 유효한 업로드 파일이 아니거나 파일 내용을 이동하는 데 문제가있는 경우 move_uploaded_file은 false를 반환합니다.

+0

코드는 정상적으로 작동합니다. 테스트 할 때 예상대로 파일을 업로드합니다. 쓰기 권한을 보장하고'$ _FILES [ "file"] [ "size"] <20000)'를보다 일반적인/큰 값으로 변경했습니다 :-) – davidkonrad

0

이것 좀 봐 : http://www.php.net/manual/en/features.file-upload.errors.php 당신은 당신이 실제로 파일을 이동하기 전에 같은 현재 만 IF $_FILES["file"]["error"] > 0을 확인, 파일을 이동하여 시도의 시점에서 처리 일부 오류가 필요합니다.

그래서 코드는 이동하기 전에 임시 파일에 오류가 없음을 확인합니다. 파일 이름은 아무 일도 발생하지 않습니다 유효한 업로드 파일이 아니며, 인 move_uploaded_file()는 FALSE를 반환합니다 경우

http://www.php.net/manual/en/function.move-uploaded-file.php

에서 이러한 진술을 고려하십시오.

filename이 유효한 업로드 파일이지만 어떤 경우 이유 때문에 이동할 수없는 경우 아무런 작업도 수행되지 않으며 move_uploaded_file()은 FALSE를 반환합니다. 또한 경고가 발행됩니다.

그래서 당신은 바로 임시 파일을 체크 할 것은 모두 확인하고 오류없이 함께 작업하기 전에,하지만 당신은 또한 이동이 TRUE 또는 FALSE했다 확인하기 위해 move_upload_file() 함수에서 오류를 포착해야합니다.

다음 오류 배열 출력이 무엇을 잘못려고한다

if (file_exists("upload/" . $_FILES["file"]["name"])) 
    { 
     echo $_FILES["file"]["name"] . " already exists. "; 
    } 
    else 
    { 
     if (move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"])) 
     { 
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
     else 
     { 
      //output the errors here (ie using $_FILES["file"]["error"]) 
     } 
     } 

(난 그냥 move_uploaded_file() 주위에 IF를 추가하는 코드를 수정 한)과 같은 작업을 수행합니다. 즉 (가능성이 높음) UPLOAD_ERR_CANT_WRITE. 그러면 문제를 지적 할 것이고 어쨌든 코드에 포함시키는 것이 좋다. 아무 일도 일어나지 않고 스크립트가 정상적으로 실패합니다 (아무 일도 일어나지 않는 시나리오가 없어야합니다!)

관련 문제