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.


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.


"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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.