Как проверить, существует ли (неуправляемый) файл?


18

Я не могу найти функцию Drupal API в D7, которая сообщает мне, существует ли (неуправляемый) файл. У D6 была file_check_location, но не для 7.

Как проверить, существует ли (неуправляемый) файл?

Ответы:


35

Вы можете просто использовать старую стандартную PHP-функцию, file_exists()если я вас правильно понял:

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

Это также работает для нормальных (абсолютных) путей, например:

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

Клайв на помощь снова, спасибо! Могу я вас нанять? ;-)
Уве

6
@MotoTribe Зависит от того, сколько вы предлагаете;)
Клайв

Почему это работает? Я только что проверил это с простым PHP и обработчиком потока, file_exists()и это не работает. Любое объяснение?
Кайзер

Потому что потоки были правильно зарегистрированы Drupal @kaiser. См. Php.net/manual/en/wrappers.php
Клайв

@Clive Я надеялся, что вы можете указать мне источник в Drupal. Остальное я знаю и не могу получить работу в простом тесте PHP, поэтому я и спросил. Редактировать: nvm, нашел их
kaiser

3

Я не знаю, каков ваш конкретный вариант использования, но вам, возможно, не нужно проверять, существует ли файл.

Функции file_unmanaged_copy, file_unmanaged_move, file_unmanaged_delete, file_unmanaged_delete_recursive и file_unmanaged_save_data проверяют, существует ли файл, и возвращают false, если это не так.

Вы можете найти исходный код в drupal / includes / file.inc и посмотреть.


3

Вы должны использовать функцию drupal:

file_destination ($ uri, FILE_EXISTS_ERROR)

и проверить

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

1
Он будет работать так, как file_destination()использует file_exists()функция
milkovsky
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.