PHP Загрузка файлов – проверка только изображений

У меня есть простой сценарий загрузки PHP, который я начал. Я не лучший PHP. Просто ищите предложения.

Я хочу ограничить свой сценарий только .JPG, .JPEG, .GIF и .PNG

Это возможно?

<?php /* Temp Uploader */ # vars $mx=rand(); $advid=$_REQUEST["advid"]; $hash=md5(rand); # create our temp dir mkdir("./uploads/tempads/".$advid."/".$mx."/".$hash."/", 0777, true); # upload dir $uploaddir = './uploads/tempads/'.$advid.'/'.$mx.'/'.$hash.'/'; $file = $uploaddir . basename($_FILES['file']['name']); // I was thinking of a large IF STATEMENT HERE .. # upload the file if (move_uploaded_file($_FILES['file']['tmp_name'], $file)) { $result = 1; } else { $result = 0; } sleep(10); echo $result; ?> 

    Да, довольно легко. Но сначала вам нужны дополнительные бит:

     // never assume the upload succeeded if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) { die("Upload failed with error code " . $_FILES['file']['error']); } $info = getimagesize($_FILES['file']['tmp_name']); if ($info === FALSE) { die("Unable to determine image type of uploaded file"); } if (($info[2] !== IMAGETYPE_GIF) && ($info[2] !== IMAGETYPE_JPEG) && ($info[2] !== IMAGETYPE_PNG)) { die("Not a gif/jpeg/png"); } 

    соответствующие документы здесь и здесь и здесь

    Путь к файлу не обязательно является лучшим способом проверить, действительно ли изображение является образом. Я могу взять вредоносный файл javascript, переименовать его, чтобы иметь расширение .jpg, и загрузить его. Теперь, когда вы пытаетесь отобразить его на своем веб-сайте, я, возможно, просто скомпрометировал ваш сайт.

    Вот функция, чтобы проверить, действительно ли это изображение:

     <?php function isImage($img){ return (bool)getimagesize($img); } ?> 

    Или взгляните на: http://php.net/manual/en/function.pathinfo.php

     if (substr($_FILES["fieldName"]["name"], strlen($_FILES["fieldName"]["name"])-4) == ".jpg") { if(move_uploaded_file($_FILES["fieldName"]["tmp_name"],$path."/".$_FILES['fieldName']['name'])) { echo "image sucessfully uploaded!"; } } 

    Аналогично, вы можете проверить и другие форматы изображений.