2010-03-30 2 views
6

업로드 할 파일이있는 업로드 양식이 있습니다. 이 문제는 내가 가진 경우 (는 isset ($ _ FILES)) 또는 경우에는 파일이 업로드되지되는 경우에도 여전히 성공적인 전달 (빈은 ($이 _ 파일)!) :isset 및! empty가 업로드 된 파일에 대한 검사를 통과하지 않음

$_FILES = $HTTP_POST_FILES; 
if($_POST['type'] == 'photo' && isset($_FILES)){ 
// returns true even if no file is uploaded. What am I missing! 
} 
+0

'$ HTTP_에 의해,이 작업을 수행하는 일 POST_FILES'는 더 이상 사용되지 않습니다 : http://php.net/manual/en/reserved.variables.files.php (그것 외에'$ _FILES'와 같은 값을 포함합니다) –

답변

11

는 자동 전역이기 때문에, $_FILES 생각된다 업로드 된 파일의 존재 여부와 상관없이 항상 설정됩니다.

예상되는 파일 업로드를 확인하고 크기 필드를 확인하십시오. 양식이 업로드 요소가있는 경우 (분명히 설명서의 사용자 공헌 노트에 따르면,이 선택한 어떤 파일이 없었다하더라도, 심지어 isset($_FILES["my_file_name"])는 true를 돌려줍니다 가능성이

이 안정적으로 작동해야합니다.

if($_POST['type'] == 'photo' && 
    ((isset($_FILES["my_file_name"]["size"]) && 
    ($_FILES["my_file_name"]["size"] > 0))){ 

합니다 (는 isset()는 "정의되지 않은 인덱스"통지를 방지하는 것입니다.)

당신이 방법? 사용

$_FILES = $HTTP_POST_FILES; 
+0

전에 이것을 가지고 있었지만 조금 길었습니다 : $ _FILES [ 'image'] [ 'tmp_name'] ... 두 번째 줄에 대해서는 잘 모릅니다. $ _FILES = $ HTTP_POST_FILES; 그건 다른 누군가가 쓴 약 세 부분 중 하나였습니다. – kalpaitch

+0

@kalpaitch 나는 그 부분을 안전하게 제거 할 수 있다고 생각한다. 아마도 PHP 4의 하위 호환성 때문일 것이다. –

+0

@kalpaitch가 tmp_name을 확인하는 것도 괜찮다. –

관련 문제