Tengo el siguiente código:
$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);
}
¿Hay algo mal con mi código? Siempre recibo el mensaje del comando die dentro de la última declaración if.
Cualquier ayuda será apreciada.
Editar: Gracias a Stanislav Agapov, encontré los registros de drupal. El mensaje es:
El archivo .... / main_ROSE2106.JPG no se pudo copiar, porque el directorio de destino public: // galerii_imagini no está configurado correctamente.
¿Qué debo hacer para configurarlo correctamente? He configurado en / admin / config / media / file-system la ruta sites / default / files como archivos públicos. ¿Hay algo más que configurar?
Edición n. ° 2: configuré 777 para todo el árbol / sites / default / files.
file_copy
y llamada por la funciónfile_unmanaged_copy
en caso de errores escribir mensajes en el registro del sistema. ¿Has mirado el informe "Mensajes de registro recientes"? Lo más probable es que encuentres la respuesta allí .../sites/default/files/galerii_imagini
?Respuestas:
¿Está seguro de que la ruta
sites/default/files/galerii_imagini
existe y es un directorio? Puede ver este error si no existe o si existe pero es un archivo en lugar de un directorio. Si espera que Drupal cree elgalerii_imagini
directorio, debe agregar esta línea antes de su llamada afile_copy
:Basado en una búsqueda del código fuente de Drupal 7.x, el mensaje
File %file could not be copied, because the destination directory %destination is not configured correctly.
solo se produce alguna vezfile_unmanaged_copy
, que es llamado porfile_copy
. Llamafile_prepare_directory
primero al destino que se le pasófile_copy
, luego a su directorio padre. Produce el mensaje de error que está viendo solo si ambas llamadas fallan. Como llamafile_prepare_directory
con banderas predeterminadas, puede fallar con ese mensaje si:Sin embargo, en el último caso, vería otro mensaje en el registro inmediatamente anterior al que informó en su pregunta:
The file permissions could not be set on %uri.
dado que no ha informado de haber visto ese mensaje, solo puedo suponer que uno de los dos primeros casos es correcto.fuente