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.