Drupal file_copy funktioniert nicht


11

Ich habe folgenden Code:

$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);
}

Stimmt etwas mit meinem Code nicht? Ich erhalte die Nachricht immer vom Befehl innerhalb der letzten if-Anweisung.

Jede Hilfe wird geschätzt.

Edit: Dank Stanislav Agapov habe ich die Protokolle von Drupal gefunden. Die Nachricht lautet:

Datei .... / main_ROSE2106.JPG konnte nicht kopiert werden, da das Zielverzeichnis public: // galerii_imagini nicht richtig konfiguriert ist.

Was soll ich tun, um es richtig zu konfigurieren? Ich habe in / admin / config / media / file-system den Pfad sites / default / files als öffentliche Dateien festgelegt. Gibt es noch etwas zu setzen?

Edit # 2: Ich habe 777 für den gesamten / sites / default / files-Baum festgelegt.


2
Funktion file_copyund von ihr aufgerufene Funktion file_unmanaged_copyschreiben bei Fehlern Meldungen in das Systemprotokoll. Haben Sie sich den Bericht "Letzte Protokollnachrichten" angesehen? Höchstwahrscheinlich finden Sie dort eine Antwort ...
Stanislav Agapov

Überprüfen Sie, ob Ihr Dateiverzeichnis beschreibbar ist oder nicht. Wenn nicht, geben Sie ihm die Erlaubnis zum Schreiben.

Der Dateiordner hat 777 Rechte.
sebastian.roibu

Wie wäre es mit der Verzeichnisberechtigung auf /sites/default/files/galerii_imagini?
Jimmy Ko

2
@Applecrusher Dies ist ein sehr schlechter Rat.

Antworten:


1

Sind Sie sicher, dass der Pfad sites/default/files/galerii_imagini existiert und ein Verzeichnis ist? Sie können diesen Fehler entweder sehen, wenn er nicht vorhanden ist oder wenn er vorhanden ist, aber eine Datei anstelle eines Verzeichnisses ist. Wenn Sie erwarten, dass Drupal das galerii_imaginiVerzeichnis erstellt, müssen Sie diese Zeile hinzufügen, bevor Sie Folgendes aufrufen file_copy:

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

Basierend auf einer Suche im Drupal 7.x-Quellcode wird die Nachricht File %file could not be copied, because the destination directory %destination is not configured correctly.immer nur in erzeugt file_unmanaged_copy, von der aufgerufen wird file_copy. Es ruft file_prepare_directoryzuerst das Ziel auf file_copy, an das es übergeben wurde, und dann das übergeordnete Verzeichnis. Die angezeigte Fehlermeldung wird nur angezeigt, wenn beide Aufrufe fehlschlagen. Da es file_prepare_directorymit Standardflags aufruft , kann es mit dieser Nachricht fehlschlagen, wenn:

  • Weder der Zielpfad noch das übergeordnete Verzeichnis sind vorhanden
  • Der Zielpfad existiert nicht und sein übergeordnetes Verzeichnis existiert, ist aber kein Verzeichnis
  • Entweder ist der Zielpfad oder das übergeordnete Verzeichnis vorhanden, es handelt sich um ein Verzeichnis, das nicht beschreibbar ist, und das Ändern der Berechtigungen, um es beschreibbar zu machen, ist fehlgeschlagen

Im letzten Fall wird jedoch unmittelbar vor der Nachricht, die Sie in Ihrer Frage The file permissions could not be set on %uri.gemeldet haben, eine weitere Nachricht im Protokoll angezeigt: Da Sie diese Nachricht nicht gemeldet haben, kann ich nur davon ausgehen, dass einer der ersten beiden Fälle korrekt ist.


"galerii_imagini" existiert und es ist ein Verzeichnis. Kann von drupal geschrieben werden, da ich manuelle Galerien erstellen kann, in denen die Bilder in diesem Verzeichnis gespeichert sind. Da ich auf einem Shared Hosting bin und in der Vergangenheit Probleme mit den Rechten hatte, bin ich mir nicht sicher, ob das, was ich in der Dateizilla sehe, in Bezug auf die Rechte korrekt ist.
sebastian.roibu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.