move_uploaded_file возвращает false, но ошибка $ _FILES равна 0 - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь развернуть проект PHP, созданный на платформе CodeIgniter, на компьютере с Linux.

Перемещение загруженного файла из временного каталога в указанный каталог по какой-то причине не работает.

Информация

  • PHP 7.2.19
  • CentOS 7
  • CodeIgniter 3.0.6

Примечания

  • Я проверил, что целевой каталог, в котором находится каталог, не существует (отсутствуют дублирующиеся файлы с тем же именем, что и перемещаемый файл).
  • Я проверил права доступа к каталогу, и все должно быть в порядке (я установил группу на apache с разрешениями = владелец пользователя)
  • Проверен ACL и он соответствует обычным разрешениям.
  • $_FILES['file']['error'] = 0 (до и после вызова move_uploaded_file)
  • file_exists возвращает true для $_FILES['file']['tmp_name']
  • is_uploaded_file возвращает true для $_FILES['file']['tmp_name']
  • open_basedir не установлено
  • Загруженный файл меньше, чем ограничения на количество записей и файлов.

Последнее, что стоит упомянуть, приготовьтесь к тому, что существует еще одна копия сайта (развернутая на том же сервере с другим именем каталога), и загрузка работает просто отлично. Различают обе директории, чтобы поймать разные, но ничего не нашли (кроме некоторых представлений с некоторыми обновлениями, ничего не связанного с конфигурациями, .htacess вообще).

Любая подсказка, на что мне смотреть?

Обновление 1

Код:

    $createdFileName = NULL;
    $files = $_FILES;
    if (count($files) > 0) {
        $createdFileName = $this->GUID();
        $target_file = './upload/' . $createdFileName;
        $path_info = pathinfo($files["file"]["name"]);
        if (isset($path_info['extension'])) {
                $ext = $path_info['extension'];
        } else /*if (!$ext)*/ {
            $ext = substr($files['file']['type'], strrpos($files['file']['type'], '/') + 1);
        }
        $success = move_uploaded_file($files["file"]["tmp_name"], $target_file);
        if (!$success) {
            $result = json_encode(array('result' => FALSE, 'message' => 'Couldn\'t upload image file'));
        }
    }

Это код, который работает с другим проектом и не работает с проектом, над которым я работаю.

Я узнал о значениях error и других при удаленной отладке проекта.

Обновление 2

Ниже приведены разрешения для каталога загрузки.

drwxrwxr-x. 2 demoroot apache 4.0K Jun  9 14:06 upload/

Ниже выводится getfacl:

# file: upload/
# owner: demoroot
# group: apache
user::rwx
group::rwx
other::r-x

1 Ответ

0 голосов
/ 09 июня 2019

Решение запускает следующую команду

chcon -R --type httpd_sys_rw_content_t /path/to/upload/directory

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

...