2012-04-24 11 views
1

그래서 w3schools 웹 사이트 http://www.w3schools.com/php/php_file_upload.asp에서 move_uploaded_file() PHP 스크립트를 테스트하고 있습니다. 내 코드는 다음과 같습니다.php move_uploaded_file()

if ($_FILES["file"]["size"] < 2000000) 
{ 
    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("/var/www/upload/" . $_FILES["file"]["name"])) 
     { 
      echo $_FILES["file"]["name"] . " already exists. "; 
     } 
     elseif(move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/upload/".$fileName)) 
      echo "Stored in: " . "/var/www/upload/".$fileName; 
    } 
} 
else 
    echo "Invalid file"; 

문제는 모든 시간 if(move_uploaded_file($_FILES["file"]["tmp_name"],"/var/www/upload/".$fileName)) false를 반환이지만 파일 (예 : /tmp/php8rrKoW) 서버의 tmp 폴더에 저장됩니다 보인다. tmp 폴더를 검사 할 때 파일이 없습니다. (스크립트 실행이 끝난 후 삭제 될 예정입니다.) /php8rrkoW 폴더도 표시되지 않습니다. 그곳에 있어야하는지 확실하지 않습니다. tmp 폴더와 /var/www/upload/에 대한 사용 권한을 chmod을 사용하여 777으로 설정했지만 소유자를 apache으로 설정해야할지 확실하지 않습니다. 그래서 파일이 /var/www/upload으로 복사되지 않은 이유와이를 테스트 할 방법이 있는지 알고 싶습니다.

+4

http://w3fools.com/ – Marty

+0

error_reporting (E_ALL)을 사용 설정 했습니까? 어떤 오류가 발생하고 있습니까? –

+0

' Casey

답변

0

이미 액세스 가능한 웹 사이트의 기본 디렉토리에 있으므로/var/www/upload/대신 ./upload/을 사용해야합니다.

또한 http://www.tizag.com/phpT/fileupload.php 또는 API를 참조 할 수 있습니다 : http://php.net/manual/en/function.move-uploaded-file.php

가 여기

+0

tizag에서 코드를 시도하고 ./upload로 변경했지만 "파일을 업로드하는 중에 오류가 발생했습니다. 다시 시도하십시오!". 파일이 임시 폴더로 전송되는지 확실하지 않습니다. – user1352777

1

작동 내가 사용이 간편 또 다른 질문은 다른 날 위해 만든 기본 이미지 업로드 클래스입니다 알려줘, 아마도 당신은 그것을 재미있는 찾을 수 있습니다.

<?php 
error_reporting(E_ALL); //Will help you debug a [server/path/permission] issue 
Class uploadHandler{ 
    public $upload_path; 
    public $full_path; 
    public $name; 
    public $size; 
    public $ext; 
    public $output; 
    public $input; 
    public $prefix; 
    private $allowed; 

    function upload(){ 
     if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
      if(isset($_FILES[$this->input]['error'])){ 
       if($_FILES[$this->input]['error'] == 0){ 
        $this->name  = basename($_FILES[$this->input]['name']); 
        $file_p   = explode('.', $this->name); 
        $this->ext  = end($file_p); 
        $this->full_path = rtrim($this->upload_path,'/').'/'.preg_replace('/[^a-zA-Z0-9.-]/s', '_', $this->prefix.'_'.$file_p[0]).'.'.$this->ext; 
        $info   = getimagesize($_FILES[$this->input]['tmp_name']); 
        $this->size  = filesize($_FILES[$this->input]['tmp_name']); 

        if($info[0]>$this->allowed['dimensions']['width'] || $info[1] > $this->allowed['dimensions']['height']){ 
         $this->output = 'File dimensions too large!'; 
        }else{ 
         if($info[0] > 0 && $info[1] > 0 && in_array($info['mime'],$this->allowed['types'])){ 
          move_uploaded_file($_FILES[$this->input]['tmp_name'],$this->full_path); 
          $this->output = 'Upload success!'; 
         }else{ 
          $this->output = 'File not supported!'; 
         } 
        } 
       }else{ 
        if($_FILES[$this->input]['error']==1){$this->output = 'The uploaded file exceeds the upload_max_filesize directive!';} 
        if($_FILES[$this->input]['error']==2){$this->output = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in our HTML form!';} 
        if($_FILES[$this->input]['error']==3){$this->output = 'The uploaded file was only partially uploaded!';} 
        if($_FILES[$this->input]['error']==4){$this->output = 'No file was uploaded!';} 
        if($_FILES[$this->input]['error']==6){$this->output = 'Missing a temporary folder!';} 
        if($_FILES[$this->input]['error']==7){$this->output = 'Failed to write uploaded file to disk!';} 
        if($_FILES[$this->input]['error']==8){$this->output = 'A PHP extension stopped the file upload!';} 
       } 
      } 
     } 
    } 

    function setPath($var){ 
     $this->upload_path = $var; 
    } 
    function setAllowed($var=array()){ 
     $this->allowed = $var; 
    } 
    function setFilePrefix($var){ 
     $this->prefix = preg_replace('/[^a-zA-Z0-9.-]/s', '_', $var); 
    } 
    function setInput($var){ 
     $this->input = $var; 
    } 

} 



//Start class 
$upload = new uploadHandler(); 
//Set path 
$upload->setPath('./'); 
//Prefix the file name 
$upload->setFilePrefix('user_uploads'); 
//Allowed types 
$upload->setAllowed(array('dimensions'=>array('width'=>200,'height'=>200), 
          'types'=>array('image/png','image/jpg','image/gif'))); 
//form property name     
$upload->setInput('myfile'); 
//Do upload 
$upload->upload(); 


//notice 
if(isset($upload->output)){ 
    echo $upload->output; 
} 
?> 

<form action="" method="POST" enctype="multipart/form-data"> 
    <!--1 MB = 1048576 bytes--> 
    <input type="hidden" name="MAX_FILE_SIZE" value="1048000" /> 

    <p>Upload your image:<input type="file" name="myfile"><input type="submit" value="Upload"></p> 

</form> 
+0

'업로드 성공'메시지가 표시되지만 업로드 된 파일을 찾을 수 없습니다. 이 파일을 저장할 위치는 무엇입니까? /var/www/html/test/index.php에 코드를 배포했습니다. –

0

파일을 이동하려는 대상 디렉토리는 웹 서버 사용자가 쓰기 가능해야합니다. 또한 일부 웹 서버가 changeroot 내부에서 작동하므로 대상 경로의 일부가 필요하지 않을 수도 있음을 잊지 마십시오. PHP 도움말 문서에서는 또한 HTLM 양식을 확인하여 enctype = 'multipart/form-data'인지 확인해야한다고 말합니다.

그리고 마지막으로 $ filename은 어디에 정의되어 있습니까?

0

경로는 '/ 홈/USR 이름'

를 추가해보십시오 '/ 홈/네 - 이름' '은/var/www /에서 업로드'의 시작 부분으로 구성해야합니다.

아이디어를 얻으려면 root 디렉토리에 info.php를 추가하고 브라우저에서 열고 'Loaded Configuration File'을 살펴보십시오.

관련 문제