Como verificar se existe um arquivo (não gerenciado)?


18

Não consigo encontrar uma função da API Drupal no D7 que informa se existe um arquivo (não gerenciado). D6 tinha um arquivo_check_location, mas não para 7.

Como verificar se existe um arquivo (não gerenciado)?

Respostas:


35

Você poderia usar a antiga função PHP padrão do pântano, file_exists()se eu entendi direito:

$uri = 'public://images/an-image.jpg';
if (file_exists($uri)) {
  // Do something
}

Isso também funciona para caminhos normais (absolutos), por exemplo:

$path = '/var/www/drupal/sites/default/files/images/an-image.jpg';
if (file_exists($path)) {
  // Do something
}

Clive para o resgate novamente, obrigado! Posso te contratar? ;-)
uwe

6
@MotoTribe Depende de quanto você está oferecendo;)
Clive

Por que isso funciona? Acabei de testar isso com PHP simples e um identificador de fluxo jogado file_exists()e ele não funciona. Alguma explicação?
Kaiser #

Porque os fluxos foram registrados corretamente pelo Drupal @kaiser. Veja php.net/manual/en/wrappers.php
Clive

@Clive Eu esperava que você pudesse me indicar a fonte do Drupal. O resto eu sei e não consigo trabalhar em um teste PHP simples, por isso perguntei. Edit: nvm, found them
kaiser

3

Não sei qual é o seu caso de uso específico, mas talvez você não precise verificar se o arquivo existe.

As funções file_unmanaged_copy, file_unmanaged_move, file_unmanaged_delete, file_unmanaged_delete_recursive e file_unmanaged_save_data verificam se o arquivo existe e retornam false se não existir.

Você pode encontrar o código fonte em drupal / includes / file.inc e dar uma olhada.


3

Você deve usar a função drupal:

file_destination ($ uri, FILE_EXISTS_ERROR)

e verifique

if (!file_destination($uri, FILE_EXISTS_ERROR)) {
  // The file exist
  // Do something
} 

11
Ele vai funcionar como file_destination()usos file_exists()função
milkovsky
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.