¿Cómo verificar si existe un archivo (no administrado)?


18

No puedo encontrar una función de API de Drupal en D7 que me indique si existe un archivo (no administrado). D6 tenía un file_check_location pero no para 7.

¿Cómo verificar si existe un archivo (no administrado)?

Respuestas:


35

Podrías usar la antigua función PHP estándar de bog file_exists()si te entiendo bien:

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

Esto también funciona para rutas normales (absolutas), por ejemplo:

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

Clive al rescate nuevamente, ¡gracias! ¿Puedo contratarte? ;-)
Uwe

66
@MotoTribe Depende de cuánto estés ofreciendo;)
Clive

¿Por qué funciona esto? Acabo de probar esto con PHP simple y un controlador de flujo arrojado file_exists()y no funciona. Alguna explicación?
Kaiser

Porque las transmisiones han sido registradas correctamente por Drupal @kaiser. Ver php.net/manual/en/wrappers.php
Clive

@Clive Espero que puedas señalarme la fuente en Drupal. El resto lo sé y no puedo trabajar en una prueba PHP simple, por lo tanto, pregunté. Editar: nvm, los encontré
kaiser

3

No sé cuál es su caso de uso específico, pero es posible que no necesite verificar si el archivo existe.

Las funciones file_unmanaged_copy, file_unmanaged_move, file_unmanaged_delete, file_unmanaged_delete_recursive y file_unmanaged_save_data verifican si el archivo existe y devuelven false si no es así.

Puede encontrar el código fuente en drupal / includes / file.inc y echar un vistazo.


3

Debe usar la función drupal:

file_destination ($ uri, FILE_EXISTS_ERROR)

y verifica

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

1
Funcionará como la función de file_destination()usosfile_exists()
milkovsky
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.