Drupal file_copy não está funcionando

11

Eu tenho o seguinte 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);
}

Há algo de errado com o meu código? Eu sempre recebo a mensagem do comando die dentro da última instrução if.

Qualquer ajuda será apreciada.

Edit: Graças a Stanislav Agapov, eu encontrei os logs do drupal. A mensagem é:

O arquivo .... / main_ROSE2106.JPG não pôde ser copiado, porque o diretório de destino public: // galerii_imagini não está configurado corretamente.

O que devo fazer para configurá-lo corretamente? Eu configurei em / admin / config / media / file-system o caminho sites / default / files como arquivos públicos. Há mais alguma coisa para definir?

Editar # 2: defino 777 para a árvore inteira / sites / default / files.

sebastian.roibu
fonte
2
Função file_copye chamada por ela file_unmanaged_copyem caso de erros gravam mensagens no log do sistema. Você olhou para o relatório "Mensagens de log recentes"? Muito provavelmente você vai encontrar resposta lá ...
Stanislav Agapov
Verifique se o diretório de arquivos está gravável ou não. Caso contrário, dê permissão para escrever.
A pasta de arquivos possui 777 direitos.
sebastian.roibu
E a permissão do diretório /sites/default/files/galerii_imagini?
21716 Jimmy Koh
2
@ applecrusher Este é um péssimo conselho.

Respostas:

1

Você tem certeza de que o caminho sites/default/files/galerii_imagini existe e é um diretório? Você pode ver esse erro se ele não existir ou se existir, mas for um arquivo em vez de um diretório. Se você espera que o Drupal crie o galerii_imaginidiretório, você precisa adicionar esta linha antes de ligar para file_copy:

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

Com base na pesquisa do código fonte do Drupal 7.x, a mensagem File %file could not be copied, because the destination directory %destination is not configured correctly.é sempre produzida file_unmanaged_copy, chamada por file_copy. Ele chama file_prepare_directoryprimeiro o destino como foi passado file_copye depois o diretório pai. Ele produz a mensagem de erro que você está vendo apenas se as duas chamadas falharem. Como chama file_prepare_directorycom sinalizadores padrão, pode falhar com essa mensagem se:

  • nem o caminho de destino nem seu diretório pai existem
  • o caminho de destino não existe e seu diretório pai existe, mas não é um diretório
  • o caminho de destino ou seu diretório pai existe, é um diretório, não é gravável e altera suas permissões para torná-lo gravável com falha

No último caso, no entanto, você veria outra mensagem no log imediatamente antes da que você relatou na sua pergunta: The file permissions could not be set on %uri.Como você não relatou ter visto essa mensagem, só posso assumir que um dos dois primeiros casos está correto.


fonte
"galerii_imagini" existe e é um diretório. É gravável pelo drupal, porque eu posso criar galerias manuais que armazenam as imagens neste diretório. Como estou em uma hospedagem compartilhada e tive problemas com direitos no passado, não tenho certeza de que o que estou vendo no filezilla esteja correto em relação aos direitos.
sebastian.roibu