Mam następujący kod:
$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);
}
Czy coś jest nie tak z moim kodem? Zawsze otrzymuję wiadomość z polecenia die wewnątrz ostatniej instrukcji if.
Każda pomoc będzie mile widziana.
Edycja: Dzięki Stanislavowi Agapovowi znalazłem kłody z drupala. Wiadomość jest:
Nie można skopiować pliku .... / main_ROSE2106.JPG, ponieważ katalog docelowy public: // galeria_imagini nie jest poprawnie skonfigurowany.
Co powinienem zrobić, aby poprawnie skonfigurować? Ustawiłem / admin / config / media / file-system ścieżkę strony / default / files jako pliki publiczne. Czy jest coś jeszcze do ustawienia?
Edycja # 2: Ustawiłem 777 dla całego drzewa / sites / default / files.
file_copy
i wywoływana przez nią funkcjafile_unmanaged_copy
w przypadku błędów zapisuje komunikaty w dzienniku systemowym. Czy przejrzałeś raport „Ostatnie wiadomości z dziennika”? Najprawdopodobniej znajdziesz tam odpowiedź .../sites/default/files/galerii_imagini
?Odpowiedzi:
Czy jesteś pewien, że ścieżka
sites/default/files/galerii_imagini
istnieje i jest katalogiem? Możesz zobaczyć ten błąd, jeśli nie istnieje lub istnieje, ale jest plikiem zamiast katalogu. Jeśli spodziewasz się, że Drupal utworzygalerii_imagini
katalog, musisz dodać tę linię przed wywołaniemfile_copy
:Na podstawie wyszukiwania kodu źródłowego Drupal 7.x wiadomość
File %file could not be copied, because the destination directory %destination is not configured correctly.
jest generowana tylko wfile_unmanaged_copy
, który jest wywoływany przezfile_copy
. Wywołujefile_prepare_directory
najpierw adresat przekazanyfile_copy
, a następnie katalog macierzysty. Powoduje wyświetlenie komunikatu o błędzie, który pojawia się tylko w przypadku niepowodzenia obu połączeń. Ponieważ wywołujefile_prepare_directory
z domyślnymi flagami, może się nie powieść z tym komunikatem, jeśli:Jednak w ostatnim przypadku zobaczysz w dzienniku inną wiadomość bezpośrednio przed tą, którą zgłosiłeś w swoim pytaniu:
The file permissions could not be set on %uri.
Ponieważ nie zgłosiłeś tej wiadomości, mogę tylko założyć, że jeden z dwóch pierwszych przypadków jest poprawny.źródło