Drupal file_copy non funziona


11

Ho il codice seguente:

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

C'è qualcosa che non va nel mio codice? Ricevo sempre il messaggio dal comando die all'interno dell'ultima istruzione if.

Qualsiasi aiuto sarà apprezzato.

Modifica: Grazie a Stanislav Agapov, ho trovato i registri di Drupal. Il messaggio è:

Impossibile copiare il file .... / main_ROSE2106.JPG, poiché la directory di destinazione pubblica: // galerii_imagini non è configurata correttamente.

Cosa devo fare per configurarlo correttamente? Ho impostato in / admin / config / media / file-system il percorso sites / default / files come file pubblici. C'è qualcos'altro da impostare?

Modifica n. 2: ho impostato 777 per l'intero albero / siti / predefinito / file.


2
Funzione file_copye chiamata da essa funzione file_unmanaged_copyin caso di errori scrivere messaggi nel registro di sistema. Hai esaminato il rapporto "Messaggi di registro recenti"? Molto probabilmente troverai la risposta lì ...
— Stanislav Agapov

Verifica che la directory dei tuoi file sia scrivibile o meno. In caso contrario, dagli il permesso di scrivere.

La cartella dei file ha 777 diritti.
— sebastian.roibu,

Che ne dici del permesso di directory su /sites/default/files/galerii_imagini?
— Jimmy Ko,

2
@applecrusher Questo è un pessimo consiglio.

Risposte:


1

Sei sicuro che il percorso sites/default/files/galerii_imagini esista ed è una directory? È possibile visualizzare questo errore se non esiste o se esiste ma è un file anziché una directory. Se si prevede che Drupal crei la galerii_imaginidirectory, è necessario aggiungere questa linea prima della chiamata a file_copy:

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

Basato su una ricerca del codice sorgente Drupal 7.x, il messaggio File %file could not be copied, because the destination directory %destination is not configured correctly.viene prodotto sempre e solo file_unmanaged_copy, che viene chiamato da file_copy. Chiama file_prepare_directoryprima sulla destinazione come passata file_copy, quindi sulla sua directory principale. Produce il messaggio di errore che vedi solo se entrambe le chiamate falliscono. Poiché chiama file_prepare_directorycon flag predefiniti, può fallire con quel messaggio se:

  • non esiste né il percorso di destinazione né la sua directory principale
  • il percorso di destinazione non esiste e la sua directory principale esiste ma non è una directory
  • il percorso di destinazione o la sua directory padre esiste, è una directory, non è scrivibile e la modifica delle sue autorizzazioni per renderla scrivibile non è riuscita

Nell'ultimo caso, tuttavia, visualizzerai un altro messaggio nel registro immediatamente prima di quello riportato nella tua domanda: The file permissions could not be set on %uri.poiché non hai segnalato di aver visto quel messaggio, posso solo supporre che uno dei primi due casi sia corretto.


"galerii_imagini" esiste ed è una directory. È scrivibile da Drupal perché posso creare gallerie manuali che memorizzano le immagini in questa directory. Poiché sono su un hosting condiviso e ho avuto problemi di diritti in passato, non sono sicuro che ciò che vedo nel filezilla sia corretto, per quanto riguarda i diritti.
— sebastian.roibu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.