У меня есть простой сценарий загрузки 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!"; } }
Аналогично, вы можете проверить и другие форматы изображений.