2011-03-05 10 views
1

이 스크립트를 사용하여 파일을 업로드하고 있습니다. 내가 처음 시도한 이후로 파일 형식 검사를 수행하지 않습니다. 나는 우분투를 사용하고 php.ini 파일에서 파일 업로드가 'on'으로 설정되어 있습니다. 하지만 여전히 파일을 업로드 할 수 없습니다.PHP를 통해 파일을 업로드하는 중 오류가 발생했습니다.

<?php 
if(isset($_POST['send'])) 
{ 
$uploaddir = "/home/harbhag/Desktop/"; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 
echo $uploadfile; 

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
} else { 
    echo "Possible file upload attack!\n"; 
} 

} 
?> 

<html> 
<form enctype="multipart/form-data" action="upload.php" method="POST"> 
    <!-- MAX_FILE_SIZE must precede the file input field --> 
    <input type="hidden" name="MAX_FILE_SIZE" value="30000000" /> 
    <!-- Name of input element determines name in $_FILES array --> 
    Send this file: <input name="userfile" type="file" /> 
    <input type="hidden" name="send" value="send" /> 
    <input type="submit" value="Send File" /> 
</form> 
</html> 
+1

무엇을'$ uploaddir' 디렉토리에 (쓰기) 권한은? – helle

+1

출력물을 얻었습니까? – alexn

+0

@helle, 내 홈 디렉토리 이후로 $ uploaddir에 쓰기 권한이 있습니다. @alexn, 코드에 기록 된 "가능한 파일 업로드 공격"을받습니다. 그러나 오류의 가능한 원인을 지정하는 메시지가 표시되지 않습니다. – hsinxh

답변

4

당신은 파일에 대한 유효한 경로를 만들기 위해 $uploaddire$uploadfile 두 변수를 사용해야합니다.

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$uploadfile)) { 

또한이

  1. 대상 디렉토리가 쓰기 권한이 PHP의 upload_max_filesize 충족해야합니다 (기본값 2MB의 것입니다) 업로드 할 파일의
  2. 크기 제한이 있어야 사항을주의
+0

도움이되지 않았습니다. 예 upload_max_filesize가 이미 50MB로 설정되어 있습니다. – hsinxh

+0

좋아, 해결했습니다. 나는 someother에 디렉토리를 변경하고 그것을 전체 쓰기 권한을 부여하고 그것은 일했습니다. $ uploaddir – hsinxh

1

move_uploaded_file을 사용할 때 특히주의하십시오. 그것은 partitios 사이의 파일을 이동하지 않습니다, 그리고 hostng 회사는 다른 곳에서 자신의 PHP 파일을 업로드 임시 디렉토리가있을 수 있습니다.

그것은 안전한 선택 사용할 수있다 :

$tempname = $_FILES['userfile']['tmp_name']; 
if (is_uploaded_file($tempname)) { 
    copy($tempname, $uploadfile); 
} 
+0

제안에 감사드립니다. 나는 그것을 명심 할 것이다. – hsinxh

관련 문제