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.

sebastian.roibu
źródło
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.


źródło
„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,