2015-12-04 4 views
0
<?php 

    header('Content-Type: text/plain; charset=utf-8'); 

    try { 

    // Undefined | Multiple Files | $_FILES Corruption Attack 
    // If this request falls under any of them, treat it invalid. 
    if (
     !isset($_FILES['upfile']['error']) || 
     is_array($_FILES['upfile']['error']) 
    ) { 
     throw new RuntimeException('Invalid parameters.'); 
    } 

    // Check $_FILES['upfile']['error'] value. 
    switch ($_FILES['upfile']['error']) { 
     case UPLOAD_ERR_OK: 
      break; 
     case UPLOAD_ERR_NO_FILE: 
      throw new RuntimeException('No file sent.'); 
     case UPLOAD_ERR_INI_SIZE: 
     case UPLOAD_ERR_FORM_SIZE: 
      throw new RuntimeException('Exceeded filesize limit.'); 
     default: 
      throw new RuntimeException('Unknown errors.'); 
    } 

    // You should also check filesize here. 
    if ($_FILES['upfile']['size'] > 1000000) { 
     throw new RuntimeException('Exceeded filesize limit.'); 
    } 

    // DO NOT TRUST $_FILES['upfile']['mime'] VALUE !! 
    // Check MIME Type by yourself. 
    $finfo = new finfo(FILEINFO_MIME_TYPE); 
    if (false === $ext = array_search(
     $finfo->file($_FILES['upfile']['tmp_name']), 
     array(
      'jpg' => 'image/jpeg', 
      'png' => 'image/png', 
      'gif' => 'image/gif', 
     ), 
     true 
    )) { 
     throw new RuntimeException('Invalid file format.'); 
    } 

    // You should name it uniquely. 
    // DO NOT USE $_FILES['upfile']['name'] WITHOUT ANY VALIDATION !! 
    // On this example, obtain safe unique name from its binary data. 
    if (!move_uploaded_file(
     $_FILES['upfile']['tmp_name'], 
     sprintf('./uploads/%s.%s', 
      sha1_file($_FILES['upfile']['tmp_name']), 
      $ext 
     ) 
    )) { 
     throw new RuntimeException('Failed to move uploaded file.'); 
    } 

    echo 'File is uploaded successfully.'; 

    } catch (RuntimeException $e) { 

    echo $e->getMessage(); 

    } 

?> 

Я обновил все соответствующие разрешения на 755. Я получаю следующее сообщение об ошибке:Php Ошибка при загрузке изображения


Фатальная ошибка: Class «FINFO» не найден в загрузки. PHP на линии

+2

Какова ваша версия PHP? «finfo» не был доступен до 5.3.0. –

+0

Ах. 5.1.2! Так есть ли подобная альтернатива? – superblowncolon

+0

Вы попробовали обновить разрешение до 777? –

ответ

1

РНР версии вы используете не поддерживает finfo. Скорее всего, вы сможете использовать не более PHP v5.2, выпущенный в 2007 году и которому сейчас около 9 лет. Я предлагаю обновить PHP v5.3. Но если вы настаиваете на использовании PHP v5.2 (или старше), взгляните на this question, который предлагает Fileinfo package (который также очень старый).

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