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

Я знаю, что эта тема широко обсуждается.Я провел свое исследование и решил хранить файлы изображений на сервере, а не в БД в виде большого двоичного файла.Проблема, с которой я сталкиваюсь, состоит в том, чтобы попытаться найти лучший способ загрузить файл, сохранить его в указанной папке и затем сохранить место назначения в db..say ../ img /thing.jpg - я пытался просмотретьмного ресурсов, но большинство из них упускают некоторые важные шаги в процессе.

Проблемы:

  1. Поиск безопасного способа загрузки файла img
  2. Ограничение размера файла
  3. Загрузкаизображение в файл назначения
  4. Сохранение файла назначения в виде текста в БД

Я использую PHP и MySQL.

Ответы [ 3 ]

1 голос
/ 16 декабря 2011

Не знаю, о чем все ваши пункты, но что вам действительно нужно беспокоиться, так это

  • проверить расширение файла.
    извлечь его из имени файла и сравнить с допустимыми.
    также было бы неплохо проверить имя файла, чтобы оно имело только одну точку, или, по крайней мере, оно не имеет имени, подобного name.html.jpg, из-за странного поведения Apache.

  • проверить содержимое файла. лучший способ - создать совершенно новый образ из загруженного.

  • принимать обычные меры предосторожности при работе с БД.

0 голосов
/ 16 декабря 2011

Вот, пожалуйста, это охватывает основные идеи того, что вы хотите сделать:

<?php
    $allowedTypes = array("image/jpg", "image/jpeg", "image/png");
    $maxSize = 3 * 1024 * 1024; // 3Mb

    $fileType = $_FILES["file"]["type"];
    $fileSize = $_FILES["file"]["size"];

    // check if there was an error
    if ($_FILES["file"]["error"] > 0)
    {
        die($_FILES["file"]["error"]);
    }

    // check if the filetype is valid
    if (!in_array($fileType, $allowedTypes))
    {
        die("Invalid file type: $fileType");
    }

    // check if the size doesn't exceed the limitations
    if ($fileSize > $maxSize)
    {
        die("The file was too big: $fileSize");
    }

    $name = $_FILES["file"]["name"];
    $tmpfile = $_FILES["file"]["tmp_name"];

    // check if the filename is valid
    if (preg_match("/[\w-]+\.(jpg|jpeg|png)$/", $name) != 1)
    {
        die("Invalid file name: $name");
    }

    // create unique name if needed

    $path = "/var/www/images/" . $name;

    move_uploaded_file($tmpfile, $path);

    // add the filepath to mysql
    mysql_connect("localhost", "username", "password");
    mysql_select_db("imagedb");
    mysql_query("INSERT INTO images (Location, Size) VALUES ('$path', '$size');");
?>

Это должно показать, как это можно сделать.

0 голосов
/ 16 декабря 2011

читать это

лично я бы использовал imgur , который используется здесь на сайтах stackexchange

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...