Неверный файл при загрузке файла PHP - PullRequest
1 голос
/ 27 августа 2011

Я создал веб-сайт с HTML-формой / загрузкой PHP для файлов изображений, он хорошо работает, когда он работает на XAMPP на моем локальном компьютере, но когда я загружаю его на 000webhost, в большинстве случаев он говорит, что файл недействителен только иногда изображения будут успешно загружены. Я попытался увеличить максимальное время выполнения в конфигурации php, но, похоже, это не исправило его. Файлы, которые я пытался загрузить, меньше максимального размера файла в конфигурации php и отлично работают на моей тестовой машине.

Мне кажется странным, что иногда это работает, а иногда нет, и я не знаю, что попробовать.

EDIT:

Вот форма Имя файла:

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/png")))
   {
       if ($_FILES["file"]["error"] > 0)
          {
          echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
          }
       else
          {
          echo "Upload: " . $_FILES["file"]["name"] . "<br />";
          echo "Type: " . $_FILES["file"]["type"] . "<br />";
          echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
          echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";


          move_uploaded_file($_FILES["file"]["tmp_name"],
          "churchimages/pauls.jpeg");
          echo "Stored in: " . "churchimages/pauls.jpeg";

          }
  }

 else

 {
 echo "Invalid file";//This is the section I am seeing
 }

Ответы [ 5 ]

3 голосов
/ 27 августа 2011

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

Гораздо лучший способ определить, является ли загруженный файл изображением, - getimagesize().

$info = getimagesize($_FILES["file"]["tmp_name"]);

$allowed_types = array(IMG_GIF, IMG_JPEG, IMG_PNG);

if (in_array($info[2], $allowed_types))
 { .... do stuff ... }
2 голосов
/ 27 августа 2011

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

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
    ... handle upload...
    if (!move_uploaded_file(...)) { // <--important. ALWAYS check if the move worked.
       die("File move failed. Data is lost");
    }
} else {
   die("Upload failed with code " . $_FILES['file']['error']);
}

В случае, если загрузка не произошла, тогда поле ['type'] не будет установлено, и просто сказать «неверный файл» будет бесполезно - файла вообще нет.

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

0 голосов
/ 22 мая 2014

Проверьте права доступа к файлу PHP.в ooowebhost вы можете найти его в chmod.изменить на «777».в противном случае файл не имеет прав на выполнение / запись

0 голосов
/ 17 мая 2013

У меня была эта проблема сегодня .. очень грустно. на ремонт ушло около часа.

Идея: проверка на наличие $ _FILES ["file"] ["type"] == "image / gif" в верхней части скрипта - это то, что мне не удалось . Похоже, что браузер заполнял «BLANK DATA» вместо «image / gif», поэтому моя первоначальная проверка каждый раз заканчивалась неудачей с «неверным типом файла»

Вопрос: Похоже, браузеры неправильно отправляют данные по типу файла из каталога tmp?

Мое ИСПРАВЛЕНИЕ: удалить проверку типа файла .... как указано выше, это очень ненадежно ...

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

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

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