Drupal file_copy nie działa


11

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.


2
Funkcja file_copyi wywoływana przez nią funkcja file_unmanaged_copyw przypadku błędów zapisuje komunikaty w dzienniku systemowym. Czy przejrzałeś raport „Ostatnie wiadomości z dziennika”? Najprawdopodobniej znajdziesz tam odpowiedź ...
— Stanislav Agapov

Sprawdź, czy katalog plików ma możliwość zapisu, czy nie. Jeśli nie, to daj mu pozwolenie na napisanie.

Folder plików ma 777 praw.
— sebastian.roibu,

Co powiesz na uprawnienia do katalogu /sites/default/files/galerii_imagini?
— Jimmy Ko

2
@applecrusher To bardzo zła rada.

Odpowiedzi:


1

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 utworzy galerii_imaginikatalog, musisz dodać tę linię przed wywołaniem file_copy:

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

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 w file_unmanaged_copy, który jest wywoływany przez file_copy. Wywołuje file_prepare_directorynajpierw adresat przekazany file_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łuje file_prepare_directoryz domyślnymi flagami, może się nie powieść z tym komunikatem, jeśli:

  • nie istnieje ścieżka docelowa ani jej katalog nadrzędny
  • ścieżka docelowa nie istnieje, a jej katalog nadrzędny istnieje, ale nie jest katalogiem
  • istnieje ścieżka docelowa lub jej katalog nadrzędny, jest katalogiem, nie można go zapisywać, a zmiana uprawnień, aby umożliwić zapisywanie, zakończyła się niepowodzeniem

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.


„galeria_imagini” istnieje i jest to katalog. Jest zapisywalny przez drupal, ponieważ mogę tworzyć ręczne galerie, które przechowują obrazy w tym katalogu. Ponieważ korzystam z hostingu współdzielonego i w przeszłości miałem problem z prawami, nie jestem pewien, czy to, co widzę w pliku filezilla, jest prawidłowe, jeśli chodzi o prawa.
— sebastian.roibu,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.