Drupal file_copy не работает


11

У меня есть следующий код:

$main_image = glob('main*.{jpeg,gif,png,jpg,JPEG,JPG,PNG}', GLOB_BRACE);
if (count($main_image) != 1) 
    die("Could not find main picture !");  

$file_path = drupal_realpath($main_image[0]);
$file = (object) array(
            'uid' => $userID,
            'uri' => $file_path,
            'filemime' => file_get_mimetype($file_path),
            'display' => 1,
            'filename' => $main_image[0]
);
// copy the file in the correct folder
$destination = "public://galerii_imagini/" . $file->filename;
 if ($file = file_copy($file, $destination, FILE_EXISTS_REPLACE)) {} else {
    die("Could not copy " . $file_path . " in " . $destination);
}

Что-то не так с моим кодом? Я всегда получаю сообщение от команды die внутри последнего оператора if.

Любая помощь будет оценена.

Редактировать: Благодаря Станиславу Агапову, я нашел журналы от drupal. Сообщение:

Не удалось скопировать файл .... / main_ROSE2106.JPG, поскольку целевой каталог public: // galerii_imagini настроен неправильно.

Что я должен сделать, чтобы правильно его настроить? Я установил в / admin / config / media / file-system путь сайтов / default / files как публичные файлы. Есть что-то еще, чтобы установить?

Редактирование # 2: я установил 777 для всего дерева / sites / default / files.


2
Функция file_copyи вызываемая ею функция file_unmanaged_copyв случае ошибок записывают сообщения в системный журнал. Вы смотрели отчет "Последние сообщения журнала"? Скорее всего, вы найдете ответ там ...
— Станислав Агапов

Проверьте, что ваш каталог файлов доступен для записи или нет. Если нет, то дайте ему разрешение на запись.

Папка Files имеет 777 прав.
— sebastian.roibu

Как насчет разрешения на каталог /sites/default/files/galerii_imagini?
— Джимми Ко

2
@applecrusher Это очень плохой совет.

Ответы:


1

Вы уверены, что путь sites/default/files/galerii_imagini существует и является каталогом? Вы можете увидеть эту ошибку, если она не существует или существует, но представляет собой файл, а не каталог. Если вы ожидаете, что Drupal создаст galerii_imaginiкаталог, вам нужно добавить эту строку перед вызовом file_copy:

file_prepare_directory("public://galerii_imagini", FILE_CREATE_DIRECTORY);

Основываясь на поиске исходного кода Drupal 7.x, сообщение File %file could not be copied, because the destination directory %destination is not configured correctly.создается только в том случае file_unmanaged_copy, если оно вызывается file_copy. file_prepare_directoryСначала он вызывает пункт назначения в том виде, в котором он был передан file_copy, а затем родительский каталог. Он выдает сообщение об ошибке, которое вы видите только в случае сбоя обоих вызовов. Поскольку он вызывает file_prepare_directoryс флагами по умолчанию, он может потерпеть неудачу с этим сообщением, если:

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

В последнем случае, однако, вы увидите другое сообщение в журнале непосредственно перед тем, которое вы сообщили в своем вопросе: The file permissions could not be set on %uri.поскольку вы не сообщали о том, что видели это сообщение, я могу только предположить, что один из первых двух случаев является правильным.


"galerii_imagini" существует, и это каталог. Доступен для записи Drupal, потому что я могу создавать ручные галереи, которые хранят изображения в этом каталоге. Поскольку я нахожусь на виртуальном хостинге и у меня были проблемы с правами в прошлом, я не уверен, что то, что я вижу в filezilla, является правильным относительно прав.
— sebastian.roibu
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.