2012-01-03 2 views
0

이미지 업 로더를 만들고 있지만 오류가 2 번 발생했습니다. 좋으 : 나는 인 move_uploaded_file() 메서드를 호출 할 때PHP : 문제 업로드

Warning: move_uploaded_file(upload/Corgi 007.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/stationr/public_html/admin/doupload.php on line 12 

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/chroot/tmp/phpMvRSbS' to 'upload/Corgi 007.jpg' in /home/stationr/public_html/admin/doupload.php on line 12 

오류가 발생하는 있습니다. 여기에 내 코드가있다. (아무런 오류가 없다. 업로드가 모두 성공했을 경우

<?php 
error_reporting(E_ALL); 
error_reporting(-1); 
ini_set('error_reporting', E_ALL); 

$filename = $_FILES["file"]["name"]; 
$filesize = $_FILES["file"]["size"]; 

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/$filename"); 

?> 

답변

1

당신은 확인에 실패했습니다

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { 
    move file ... 
} else { 
    die("Upload failed with error code " . $_FILES['file']['error']); 
} 

오류 코드는 여기에 설명되어 있습니다 : http://www.php.net/manual/en/features.file-upload.errors.php

을뿐만 아니라,에 "업로드"서브 디렉토리에있다 스크립트의 현재 작업 디렉토리가 무엇이든간에? 웹 서버 프로세스에 해당 디렉토리에 대한 쓰기 권한이 있습니까?

중요한 보안 구멍으로, 업로드의 ['name'] 매개 변수를 대상 파일 이름으로 사용하는 블라인드 리는 악의있는 ​​사용자가 서버의 파일을 쓸어 넘길 수있게합니다. 절대 맹목적으로 그 파일 이름을 사용하지 마십시오. 업로드 파일 이름이 (예 : ../../../../../../etc/passwd) 제공되면 다른 사용자가 시스템 비밀번호 파일을 바꿀 수 있습니다.

+0

아, 그건 당황 스럽네. 서둘러서 "../"를 대상 폴더에 추가하는 것을 완전히 잊어 버렸습니다. 그리고 실제로 나는 업로드의 보안 측면에 대해 모두 알고 있습니다 (업 로더는 보안이 설정된 관리자 로그인으로 만 액세스 할 수 있습니다). 도와 주셔서 감사합니다. –

+0

모호함으로 보안을 유지하지 마십시오. 누군가가 로그인을 해킹/우회하는 경우에도 여전히 서버를 휴지통에 버릴 도구를 제공하지 않아야합니다. 그들이 얻을 수있는 모든면에서 싸우게하십시오. –