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.