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 / файлів як публічних файлів. Чи є ще щось встановити?

Редагувати №2: Я встановив 777 для всього дерева / сайтів / за замовчуванням / файлів.


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

Перевірте, чи каталог ваших файлів можна записати чи ні. Якщо ні, то дайте йому дозвіл на написання.

Папка файлів має 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" існує, і це каталог. Доступно для друку, тому що я можу створювати галереї вручну, які зберігають зображення в цьому каталозі. Оскільки я перебуваю на спільному хостингу, і у мене були проблеми з правами в минулому, я не впевнений, що те, що я бачу у filezilla, є правильним щодо прав.
— sebastian.roibu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.