2010-04-30 3 views
1

파일을 업로드하는 데 문제가 있습니다. 내 메인 페이지에 이제파일 업로드에 문제가 발생했습니다.

class upload 

{ 
private $name; 
private $document; 
public function __construct($nme,$doc) 
{ 
    $this->setName($nme); 
    $this->setDocument($doc); 
} 
public function setName($nme) 
{ 
    $this->name = $nme; 
} 
public function setDocument($doc) 
{ 
    $this->document = $doc; 
} 
public function fileNotPdf() 
{ 
    /* Was the file a PDF? */ 
    if ($this->document['type'] != "application/pdf") 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
} 
public function fileNotUploaded() 
{ 
    /* Make sure that the file was POSTed. */ 
    if (!(is_uploaded_file($this->document['tmp_name']))) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
public function fileNotMoved($repositry) 
{ 
     /* move uploaded file to final destination. */ 
     $result = move_uploaded_file($this->document['tmp_name'], 
     "$repositry/$this->name.pdf"); 

     if($result) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
} 
} 

:

$docName = $_POST['name']; 

$page = $_FILES['doc']; 

if($_POST['submit']) 

{ 
/* Set a few constants */ 
$filerepository = "np"; 
$uploadObj = new upload($docName, $page); 
if($uploadObj->fileNotUploaded()) 
{ 
    promptUser("There was a problem uploading the file.",""); 
} 
elseif($uploadObj->fileNotPdf()) 
{ 
    promptUser("File must be in pdf format.",""); 
} 
elseif($uploadObj->fileNotMoved($filerepository)) 
{ 
    promptUser("File could not be uploaded to final destination.",""); 
} 
else 
{  
    promptUser("File has been successfully uploaded.",""); 
} 
} 

내가 얻는 오류 :

경고 : 우선 나는 수업이 인 move_uploaded_file을 (about.pdf를) [function.move-uploaded-file] : 스트림을 열지 못했습니다. 해당 파일이나 디렉토리가 없습니다 ...

경고 : 인 move_uploaded_file() 업로드 function.move-파일] : 수 없습니다에서 ...

파일 'about.pdf'에 '\ XAMPP \ TMP \ php13.tmp C'를 이동할 수 없습니다 최종 도착지에 업로드되었습니다.

+1

코드 서식을 수정하십시오. 한 번 더 들여 쓰기해야합니다. –

+0

대상이 쓰기 가능합니까? – SeanJA

답변

3

The manual는 말한다 : 파일 이름가 유효한 업로드 파일이지만, 아무런 조치가 발생하지 않습니다 어떤 이유로 이동 될 수 없으며, move_uploaded_file()는 FALSE를 반환합니다

합니다. 또한 경고가 발행됩니다.

설명서에 따라 경고가 표시되는 유일한 경우이므로 파일 이동을 시도 할 때 발생하는 것으로 가정합니다.

move_uploaded_file()은 모두 safe modeopen_basedir입니다. 그러나 파일 이름이 이러한 제한 사항과 충돌 할 수있는 업로드 된 파일을 이동할 수 있도록 대상 경로에만 제한 사항이 적용됩니다. move_uploaded_file()은 PHP를 통해 업로드 된 파일 만 이동하도록하여이 작업의 안전을 보장합니다.

내 결론 : 코드에 오류가 없으므로 PHP 구성에서 파일을 대상 디렉토리로 이동할 수 없습니다. safe modeopen_basedir에 의해 부과 된 제한을 조사하여 정확히 이동 작업이 실패하는 이유를 확인해야합니다.

2

파일을 "my_file"로 업로드하면 "$repositry/$this->name.pdf"np/my_file.pdf으로 평가됩니다. 그러면 대상 디렉토리가 tmp 디렉토리에 저장됩니다. tmp 디렉토리가 이미 존재하고 쓰기 가능해야하므로 tmp 디렉토리 안에 np 디렉토리가 있는지 확인하십시오. move_uploaded_file() 기능이 없으면 자동으로 생성되지 않습니다. np 디렉토리가 누락되어 동일한 오류가 발생했습니다.

업로드 한 파일을 tmp 디렉토리의 하위 디렉토리에 저장하면 안됩니다. XAMPP를 사용하고 코드를 실행할 때 업로드 된 파일은 tmp/np으로 이동 한 다음 즉시 삭제됩니다.

관련 문제