Загрузка файла не работает - PullRequest
3 голосов
/ 10 августа 2011

Я установил WordPress на сервер медиа-храма и заметил, что не может загружать файлы.После попытки решения несколько проблем решили повторить проблему с помощью простого скрипта (http://pastie.org/2349720).

<?php
if($_FILES)
        print_r($_FILES);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 200000))
  {
  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 />";

    if (file_exists("uploads/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else if (!file_exists($_FILES["file"]["tmp_name"]))
      {
      echo 'temp file doesn\'t exists';
      }
    else
      {
      $uploaded=move_uploaded_file($_FILES["file"]["tmp_name"],
      $_FILES["file"]["name"]);
      if($uploaded)
        echo "Stored in: " . "uploads/" . $_FILES["file"]["name"];
      else
        echo "fallo la carga del archivo";
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

<html>
<body>

<form action="" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

Похоже, что move_upload_file () возвращает false без предупреждения или ошибки, заглянул в документацию php и нашел это

Если имя файла не является допустимым файлом загрузки, никаких действий не произойдет, и move_uploaded_file () вернет FALSE.

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

спасибо.

Ответы [ 7 ]

1 голос
/ 10 августа 2011

Вы проверяете, существует ли пункт назначения в определенном каталоге, а затем копируете источник в другой каталог:

if (file_exists("uploads/" . $_FILES["file"]["name"]))
...
$uploaded=move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
1 голос
/ 10 августа 2011

move_uploaded_file также потерпит неудачу, если место назначения недоступно для записи.Доступна ли для записи корневая папка (я спрашиваю об этом, потому что вы не привязываете папку для загрузки к имени файла при ее перемещении).Я знаю, что вы упомянули, что вы установили разрешение на 777, но это для каталога загрузки или всей папки, в которой находится приложение.

1 голос
/ 10 августа 2011

Что это дает вам:

$_FILES[...]['error']

Если это не даст вам ноль, вы можете проверить, что идет не так, как надо: http://php.net/manual/en/features.file-upload.errors.php.

Если это так, убедитесь, чтопапка, в которой находится ваша папка, доступна через PHP.Вы можете попробовать выполнить эту команду:

sudo -s -u [php_user]
cd [destination_directory]

Проверьте, можете ли вы добраться до каталога =)!

0 голосов
/ 24 июля 2013

Я не знаю, помогает ли это, но я обнаружил эту проблему несколько часов назад, и проблема заключалась в разрешениях на запись для моей папки (у меня нет сервера, на котором я работал) и ответах людей, которых яработа была

Папка «твоя» должна быть доступна для записи пользователем, который запускает apache, так как (www-data) это можно сделать, сделав для папки мир доступным для записи или установив «где вы хотите поместить».ваши файлы », которые будут принадлежать группе www-data и сделать ее доступной для записи группой.

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

проверьте, можете ли вы достичь d dir. Нет необходимости удалять его во временной папке, поскольку он будет перемещен автоматически, целевой пункт назначения по-прежнему находится в d-файле.так почему бы вам не попробовать переместить его в другое место назначения

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

Оказывается, я отключил fastCGI, я только что включил, и все работает как положено. Спасибо за вашу помощь.

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

Попробуйте абсолютные пути для пункта назначения move_uploaded_file()

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