it-swarm.com.de

Drupal file_copy funktioniert nicht

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:

Die 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.

11
sebastian.roibu

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 Verzeichnis galerii_imagini Erstellt, müssen Sie diese Zeile hinzufügen, bevor Sie file_copy Aufrufen:

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

Basierend auf einer Suche im Quellcode Drupal 7.x) wird die Nachricht File %file could not be copied, because the destination directory %destination is not configured correctly. Immer nur in file_unmanaged_copy erzeugt wird von file_copy aufgerufen. Es ruft file_prepare_directory zuerst am Ziel auf, das an file_copy übergeben wurde, dann auf dem übergeordneten Ziel Verzeichnis. Es wird die Fehlermeldung ausgegeben, die nur angezeigt wird, wenn beide Aufrufe fehlschlagen. Da file_prepare_directory mit Standardflags aufgerufen wird, kann es mit dieser Meldung 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 gemeldet haben, eine weitere Nachricht im Protokoll angezeigt: The file permissions could not be set on %uri. Da Sie diese Nachricht nicht gemeldet haben, kann ich nur davon ausgehen, dass es sich um eine der ersten handelt Zwei Fälle sind richtig.

1
Sam Hanes