Почему функция move_uploaded_file не выполняет свою задачу, несмотря на все попытки?

Как можно исправить проблему с неработающим методом move_uploaded_file при загрузке файлов с помощью скрипта Upload.php? Версия FastCGI подключена, разрешения настроены правильно, обработчик JQUERY работает, но все равно файлы не загружаются. Вот код скрипта и вывод var_dump($_FILES):
```php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (isset($_FILES['files'])) {
      $errors = [];
      $extensions = ['jpg', 'jpeg', 'png', 'gif'];
      $target = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
      $target = $target . basename($doc);
      $all_files = count($_FILES['files']['tmp_name']);

      for ($i = 0; $i < $all_files; $i++) {
          $file_name = $_FILES['files']['name'];
          $file_tmp = $_FILES['files']['tmp_name'];
          $file_type = $_FILES['files']['type'];
          $file_size = $_FILES['files']['size'];
          $file_ext = strtolower(end(explode('.', $_FILES['files']['name'])));

          $file = $target . $file_name;

          if (!in_array($file_ext, $extensions)) {
              $errors[] = 'Extension not allowed: ' . $file_name . ' ' . $file_type;
          }

          if ($file_size > 2097152) {
              $errors[] = 'File size exceeds limit: ' . $file_name . ' ' . $file_type;
          }

          if (empty($errors)) {
              move_uploaded_file($file_tmp, $file);
              var_dump($_FILES);
              // echo $target;
          }
      }

      if ($errors) print_r($errors);
  }
}
```
Спасибо!
  • 26 сентября 2023 г. 13:08
Ответы на вопрос 2
Проблема может быть связана с несоответствием разрешений на папку, куда загружаются файлы, и/или неправильным путем к этой папке.

Вот несколько проверок и возможных исправлений для проблемы:

1. Убедитесь, что папка, указанная в переменной `$target`, существует и имеет правильные разрешения на запись. Вы можете проверить разрешения с помощью команды `ls -l` (Unix/Linux) или свойств папки (Windows). Если разрешения неправильны, измените их с помощью команды `chmod` (Unix/Linux) или свойств папки (Windows).

2. Проверьте, что путь к папке `$target` задан правильно. Убедитесь, что он начинается с корневого каталога вашего веб-сервера и что он указывает на правильную папку, куда должны быть загружены файлы. В случае необходимости, измените путь к папке, чтобы он указывал на правильную папку на вашем сервере.

3. Проверьте, что переменные `$_FILES['files']['tmp_name']`, `$_FILES['files']['name']` и другие переменные связанные с загружаемыми файлами содержат корректные значения. Вы можете использовать функцию `var_dump($_FILES)` для вывода информации о загруженных файлах и убедиться, что значения переменных соответствуют ожидаемым.

4. Убедитесь, что вы не загружаете слишком большие файлы, которые превышают максимальный размер загрузки, настроенный для вашего сервера. Вы можете проверить максимальный размер загрузки, используя переменную `upload_max_filesize` в файле php.ini.

5. Если проблема не решена после выполнения вышеперечисленных проверок и исправлений, попробуйте разделить код на более простые этапы и отладить их по отдельности. Например, вы можете проверить, что файлы успешно загружены во временную папку `$_FILES['files']['tmp_name']` до вызова функции `move_uploaded_file()`. Возможно, ваш скрипт Upload.php имеет другие проблемы, которые мешают работе функции `move_uploaded_file()`.
Включите отображение ошибок и внимательно прочитайте сообщения об ошибках. Добавьте следующий код в начало скрипта:

```php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
```

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