2009-03-30 5 views
1

PHP에서 이미지 업로드 및 크기 조정에 사용하는 파일 (이미지) 업로드 스크립트가 있습니다 ... 간단한 MIME 유형 및 크기 유효성 검사를 사용하므로 jpg 이미지 만 허용되고 최대 파일 크기는 1MB입니다.PHP에서 허용되는 MIME 파일 형식으로 코드 업로드 문제가 발생했습니다.

최근에 문제가 있음을 발견했습니다. 스크립트를 사용하여 .avi 파일을 업로드하려고 시도하면 스크립트가 올바른 MIME 유형 및 크기와 같은 파일을 처리 한 다음 아무 것도하지 않고 오류 메시지없이 업로드 양식으로 되돌립니다. ("파일이 너무 큼"메시지를 표시하는 대신).

내가 .gif 또는 .txt 또는 다른 것을 업로드하려고하면 예상대로 오류가 발생한다는 것을 의미합니다. 1MB보다 큰 파일을 업로드하려고하면 예상대로 오류가 발생합니다. 난 그냥 수정하고있어

// define a constant for the maximum upload size 
define ('MAX_FILE_SIZE', 1024000); 

if (array_key_exists('upload', $_POST)) { 
// define constant for upload folder 
define('UPLOAD_DIR', 'C:/Wamp/www/Version-1.4/posters_uploaded/'); 

// replace any spaces in original filename with underscores. At the same time, assign to a simpler variable 
$file = str_replace(' ', '_', $_FILES['image']['name']); 

// convert the maximum size to KB 
$max = number_format(MAX_FILE_SIZE/1024, 1).'kb'; 
// create an array of permitted MIME types 
$permitted = array('image/jpeg','image/pjpeg'); 
// begin by assuming the file is unacceptable 
$sizeOK = false; 
$typeOK = false; 

// check that file is within the permitted size 
if ($_FILES['image']['size'] > 0 && $_FILES['image']['size'] <= MAX_FILE_SIZE) { 
    $sizeOK = true; 
} 
// check that file is of a permitted MIME type 
foreach ($permitted as $type) { 
    if ($type == $_FILES['image']['type']) { 
     $typeOK = true; 
    break; 
    } 
} 

if ($sizeOK && $typeOK) { 
    switch($_FILES['image']['error']) { 
     case 0: // ................... 

: 나는 1메가바이트를 초과하는 .avi 파일을 업로드하려고 할 때 만 나는 코드, 여기에 첫 번째 파 음 오류의 종류 ..... 을 얻을 해달라고 빌드 PHP 코드 그래서 아무 전문가가 ... 어떤 제안 ?? 감사합니다. . 그것은 당신의 upload_max_filesize INI-설정과 같은

+0

당신이 경우 도움이 될만한 avi 파일의 크기를 게시하십시오 –

+0

관련 없음 .. 나는 다른 파일들로 tryied ... 400MB와 800MB 사이의 크기. – Jonathan

답변

0

john Rasch가 위에서 언급 한 것처럼 php.ini max_upload_filesize 위의 파일은 전혀 처리되지 않습니다. 따라서 오류를 테스트 할 기회가 없습니다. 업로드되지 않았다고 가정해야합니다.

// at the top of your script 
$upload_success = FALSE; 


// when successfully detected upload 
$upload_success = TRUE; 



// if successful upload code is never run 
$display_error = "File not uploaded, may be too large a file, " 
. "please upload less than 1MB" 
; 
print $display_error; 

골자 존재 : 지금은 시나리오를 이해


더 나는 이것이 당신이 할 수있는 일이라고 생각

당신은 항상 감지 할 수없는 파일을 업로드하는 스크립트가 실행되는 것보다 더 깊은 레벨에서 잘릴 수 있기 때문에 너무 크다.

+0

php.ini를 확인했습니다 ... 2MB 제한이 있습니다 ... ; 업로드 된 파일의 최대 허용 크기입니다. upload_max_filesize = 2M 그럼, 그게 문제가 아니에요 .... – Jonathan

+0

? 나는 그게 문제라는 것을 당신이 증명했다고 생각합니다. 당신의 avi가 1에서 2mb 사이가 아니라면, 대부분의 avi 파일은 2MB를 훨씬 상회합니다. 우리는 플래시 비디오 업 로더를 가지고 있으며 최대 18 개를 설정했습니다. –

+0

예, avi 파일은 600MB이고 업로드를 허용하고 싶지 않습니다. .. 1MB 제한이 필요합니다. 왜 단지 1 MB 제한을 원한다면 더 큰 최대 값을 설정해야합니까 ?? – Jonathan

2

http://us3.php.net/manual/en/features.file-upload.common-pitfalls.php

이 너무 낮습니다. 이렇게하면 AVI 비디오와 같은 매우 큰 파일을 업로드 할 때 오류가 표시되지 않습니다.

텍스트 파일 및 .JPG 이미지 오류를보고있는 이유는 해당 파일의 크기가 큰 1 MB보다이기 때문에 가능성이 있지만, php.ini의upload_max_filesize 설정 아래.

ini_get("max_upload_filesize")의 값을 보내고 echo 시도하고 당신이 직접 의 php.ini 파일에 액세스 할 수없는 경우는 값이 무엇을 참조하십시오. 이 라인 위

+0

php.ini를 확인했습니다 ... 2MB 제한이 있습니다 ... ; 업로드 된 파일의 최대 허용 크기입니다. upload_max_filesize = 2M 그럼 문제가 아닙니다 .... – Jonathan

+0

최대 크기는 2GB입니다. 그게 무슨 뜻입니까? –

+0

1MB보다 큰 파일을 허용하지 않으려합니다. 왜 2MB 제한을 변경해야합니까? – Jonathan

0

:

if ($_FILES['image']['size'] > 0 && $_FILES['image']['size'] <= MAX_FILE_SIZE) { 
     $sizeOK = true; 
} 

넣고이 : 파일 배열 안에 무엇을 보여줍니다 및 디버깅이 아주 간단해야한다

echo '<pre>' . printr($_FILES) . </pre>; 

. 스크립트에 위의 행이 추가 된 AVI를 업로드 해보십시오.

+0

printr ($ FILES)이 아닌 print_r ($ _ FILES)이어야합니다. – Peter

+0

내 잘못, 지금 고칠 것입니다 – karim79

0

나는 또한 당신이 MIME 형식을 믿지 않는다고 제안하고 싶다. 경우에 따라 .png 또는 .gif 파일이 .jpg로 이름이 변경되거나 의도하지 않게 잘못된 파일을 업로드 할 수 있습니다. 이것이 유효한 jpeg 이미지인지 확인하려면 getimagesize를 사용하십시오.

+0

그냥 파일 확장자를 확인하지 못했습니다 ... 내 생각에 ... – Jonathan

+0

테스트 한 브라우저는 MIME 형식을 설정하는 것으로 보이며 파일 확장명을 기반으로합니다. 그들은 이미지 포맷에 대한 실제 테스트를하지 않습니다. 너무 정교합니다. 날 믿어, 나는 PHP에서 이미지를 업로드 시스템을 처음부터 만들었습니다. – JAL

0

파일을 업로드 할 때 실제로 php.ini에서주의해야 할 두 가지 지시문이 있다는 것을 잊지 마십시오. 하나는 upload_max_filesize이지만 다른 하나는 post_max_size입니다. 일반적으로, post_max_size는 적어도 upload_max_filesize와 동일해야하며, 아마 upload_max_filesize보다 커야합니다. upload_max_filesize 설정에 관계없이 post_max_size보다 큰 파일을 업로드 할 수 없습니다.

AVI 파일은 허용 된 배열에 나열한 MIME 유형과 일치하지 않습니다. $ sizeOK 및 $ typeOK 검사를 수행 한 후에는 보유하고있는 값과 스크립트가 그 값을 처리하는 방법을 확인하십시오. 그것은 스크립트의 동작을 결정 짓는 열쇠입니다.

0

$ _FILES [ 'image'] [ 'type']을 (를) 사용하여 MIME을 확인하는 것은 신뢰할 수 없으며 클라이언트의 헤더를 기반으로 스푸핑 될 수 있습니다. 실제 내용에 대한 MIME 기반을 확인하기 위해 fileinfo 확장을 살펴보십시오.

0

8 년 후, 사람을위한 짧은 대답, 나처럼, PHP와 이미지 MIME 타입을 확인에 대한 답 주위에 비틀 업로드하기 전에 :

if (exif_imagetype($file['tmp_name']) != IMAGETYPE_JPEG) { 
    $file['error'] = 'Your picture must be jpg.'; 
} 

을 수동에서 : http://php.net/manual/en/function.exif-imagetype.php

관련 문제