Как установить максимальный размер загрузки файла и разрешить только определенные типы файлов при загрузке PHP? - PullRequest
1 голос
/ 05 августа 2011

Я сделал скрипт загрузки PHP-файла. Теперь я не хочу, чтобы люди загружали огромные файлы, и я не хочу, чтобы они также загружали файлы PHP. Вот мой текущий скрипт PHP:

<?php
// Where the file is going to be placed 
$target_path = "files/";

/* Add the original filename to our target path.  
Result is "uploads/filename.extension" */
    $length = 10;
    $characters = '123456789abcdefghijklmnopqrstuvwxyz';
    $string="";
    for($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];
    }
$pos = strrpos(basename( $_FILES['uploadedfile']['name']), ".");
$ext = str_split(basename( $_FILES['uploadedfile']['name']), $pos);
$target_path = $target_path.$string.$ext[1]; 
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "<h2>Your file has been uploaded!</h2><br /><p>Your file has been uploaded successfully. <a href='".$target_path."'>Click here</a> to see the file you uploaded.
    <br /><br /><br />
    <h2>A link to your file</h2><br />The full link to your file is:
    <br /><br />
    <code>http://www.americaspoeticsoul.com/extras/upload/".$target_path."</code></p>";
} else{
    echo "<span class='error'>There was an error uploading the file, please try again.</span>";
}
?>

Как установить максимальный размер загружаемого файла и разрешить только определенные типы файлов, такие как только файлы JPEG, GIF, PNG и HTML?

Заранее спасибо,
Nathan

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Вы можете проверить размер файла, используя $_FILES['uploadedfile']["size"]. Предоставленный клиентом тип файла доступен в ...["type"].

Но для вашего кода вы захотите проверить переменную $ext в белом списке (просто поиск запрещающих расширений может быть плохой идеей):

if (in_array($ext, array("jpeg","gif","png","txt","html"))) {
    if (move_uploaded_file(...

На этом этапе может быть целесообразно рассмотреть готовый вспомогательный класс / скрипт для всей проверки загрузки. Ваш код уже не читается.

0 голосов
/ 05 августа 2011

Пожалуйста, не начинайте предложения с конъюнктив.

Во-первых, содержание:

Краткий ответ: вы не можете ограничить тип загружаемых людьми файлов.

Более длинный ответ заключается в том, что вы можете проверить тип загруженного людьми файла и отказаться от него, если он не соответствует вашим требованиям.Обратите внимание, что проверка mimetype или расширения файла, предоставленного пользователем, не обеспечивает достаточной защиты.Здесь есть хорошее обсуждение проблемы и как ее решить здесь .

Следующий размер:

См. Пример № 1 в http://www.php.net/manual/en/features.file-upload.post-method.php Обратите внимание, что невсе браузеры уважают тег ввода MAX_FILE_SIZE.Размер файла также будет ограничен директивами php.ini, перечисленными на этой странице, а также ограничениями по запросу и размерами и таймаутами POST, настроенными на вашем веб-сервере.

Кстати, ваш метод генерации имен файлов довольно многословен.Использование uniqid (), вероятно, будет намного быстрее с гораздо меньшим количеством кода.Использование md5_file () будет иметь те же преимущества и предотвратит дублирование.

...