Drupal file_copy no funciona

11

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.

sebastian.roibu
fuente
2
Función file_copyy llamada por la función file_unmanaged_copyen 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í ...
Stanislav Agapov
Verifique que su directorio de archivos sea editable o no. Si no es así, dale permiso para escribir.
La carpeta de archivos tiene 777 derechos.
sebastian.roibu
¿Qué tal el permiso de directorio /sites/default/files/galerii_imagini?
Jimmy Ko
2
@applecrusher Este es un muy mal consejo.

Respuestas:

1

¿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 el galerii_imaginidirectorio, debe agregar esta línea antes de su llamada a file_copy:

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

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 vez file_unmanaged_copy, que es llamado por file_copy. Llama file_prepare_directoryprimero 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 llama file_prepare_directorycon banderas predeterminadas, puede fallar con ese mensaje si:

  • ni la ruta de destino ni su directorio padre existe
  • la ruta de destino no existe y su directorio padre existe pero no es un directorio
  • existe la ruta de destino o su directorio principal, es un directorio, no se puede escribir y no se pueden modificar sus permisos para hacerlo escribible

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
"galerii_imagini" existe y es un directorio. Es editable por drupal porque puedo crear galerías manuales que almacenan las imágenes en este directorio. Debido a que estoy en un alojamiento compartido y tuve un problema de derechos en el pasado, no estoy seguro de que lo que veo en el filezilla sea correcto con respecto a los derechos.
sebastian.roibu