У меня есть следующий код:
$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.
file_copy
и вызываемая ею функцияfile_unmanaged_copy
в случае ошибок записывают сообщения в системный журнал. Вы смотрели отчет "Последние сообщения журнала"? Скорее всего, вы найдете ответ там .../sites/default/files/galerii_imagini
?Ответы:
Вы уверены, что путь
sites/default/files/galerii_imagini
существует и является каталогом? Вы можете увидеть эту ошибку, если она не существует или существует, но представляет собой файл, а не каталог. Если вы ожидаете, что Drupal создастgalerii_imagini
каталог, вам нужно добавить эту строку перед вызовомfile_copy
:Основываясь на поиске исходного кода 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.
поскольку вы не сообщали о том, что видели это сообщение, я могу только предположить, что один из первых двух случаев является правильным.источник