2012-01-16 3 views
2

При попытке загрузить файл .JPG появляется следующая ошибка.getimagesize() не возвращает данные?

Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in H:\Programs\webserver\root\media\images\upload.php on line 43 

Ниже часть файла upload.php:

if(isset($_FILES['files'])) 
{ 
    $cat = $_POST['cat']; 
    $title = $_POST['title']; 
    $album = $_POST['album']; 

    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name) 
    { 

     // get dimensions of uploaded images 
     echo $temp = $_FILES['files']['tmp_name'][$key]; //location of file 
     echo $type = $_FILES['files']['type'][$key]; //image type 
     echo $size = $_FILES['files']['size'][$key]; // image size 
     >> line 43 >>**echo $size2 = getimagesize($temp); //function to get info of file and put into array** 
     echo $width = $size2[0]; // first part of the array is the image width 
     echo $height = $size2[1]; // second part fo the array is the image width 

     if($type == 'image/jpeg') 
     { 
     $filetype = '.jpeg'; 
     }else{ 
     $filetype = str_replace('image/','',$type); 
     } 
     $random_name = rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999); 
     $path = 'img/'.$random_name . $_FILES['files']['name'][$key]; 
     $thumb_path = 'img/thumb_/'.$random_name .$_FILES['files']['name'][$key]; 

У меня есть еще один файл изображения .jpg, что я при загрузке, чтобы проверить, который будет загружать в порядке, также .png и .gif файлов также загружать штраф.

Просто добавьте, что я попробовал еще пару файлов с похожим размером и получил ту же самую ошибку. Первый файл изображения был 4,2 МБ, второй был 5 МБ. Почему размер файла останавливает его загрузку?

Также при использовании $ _FILES ['files'] ['error'] [$ key]; - она ​​возвращает 1.

Это то, что я получаю при использовании print_r:

Array ([files] => Array ([name] => Array ([0] => DSCN0354.JPG) [type] => Array ([0] =>) [tmp_name] => Array ([0] =>) [error] => Array ([0] => 1) [size] => Array ([0] => 0))) 
+1

Насколько велика изображение, которое вы загружаете, это не удается? –

+1

Вы рассматривали использование 'print_r ($ _ FILES)', чтобы узнать, что на самом деле находится в массиве? Если нет, сделайте это и добавьте вывод в свой вопрос. – ThiefMaster

+0

Я думаю, вы не ввели свой полный код здесь. –

ответ

2

Давайте посмотрим на knowns:

  • Вы можете загрузить JPG, GIF, не .png никакой проблемы,
  • Вы испытываете проблемы с загрузкой конкретного .jpg изображение

Эти knowns заставьте меня поверить, что изображение проблемы слишком велико для текущего разрешено upload_max_filesize в настройках php.ini:

$ -> php -i | fgrep -i size 

upload_max_filesize => 2M => 2M 

Попробуйте увеличить размер до 6M или 8M, и ваше более крупное изображение должно работать.

1

Вы должны проверить $_FILES['error'][$key] перед обращением tmp_name - файл не был загружен, либо потому, что он слишком большой или какой-либо другой причина (вы узнаете по значению поля «ошибки»)

2

Если добавить обработку ошибок, вы можете легко увидеть, что проблема использования error code:

foreach($_FILES['files']['tmp_name'] as $key => $tmp_name) 
{ 
    if ($_FILES['files']['error'][$key] == UPLOAD_ERR_OK) 
    { 
    // good 
    } 
    else 
    { 
    // not good, see messages on http://www.php.net/manual/en/features.file-upload.errors.php 
    } 
} 
+0

Вы можете использовать '===' в своем сравнении. Если по какой-то причине значение не было установлено вообще, вы бы подумали, что все в порядке. ('UPLOAD_ERR_OK = 0 == NULL') –

+0

@Michael Mior Вы правы, я просто скопировал это вслепую из руководства по php, но я, вероятно, использовал бы сам' ==='. Интересно, почему они не в справочнике php, см. Http://php.net/manual/en/function.move-uploaded-file.php ... – jeroen

+0

Хм, странно. Я думал, что раньше видел «===» в другом месте руководства. –

0

В сообщении об ошибке указано, что предоставленное имя файла пуст.

Вы используете:

$size2 = getimagesize($temp); 

Где вы получаете $ темп от? Это foreach(), и если это так, вы должны вместо этого использовать $ tmp_name.

+0

Это: '$ temp = $ _FILES ['files'] ['tmp_name'] [$ key]; // местоположение файла. Кроме того, код работает, но для этого конкретного изображения –

Смежные вопросы