Существует файл PHP


Я использую эту функцию, чтобы проверить, существует ли файл:

<?php
    header('Content-Type: text/html; charset=utf-8');
    //header('Accept-Ranges: bytes');

    $nome_real = $_FILES["Arquivo"]["name"];
    $pastadestino = "/pasta/$nome_real";

    //verifica antes de passar - para apagar o existente
    if (file_exists($pastadestino))
    {
        echo "OK";
    }
    else
    {
        echo "NOK";
    }
?>

Но он возвращает ОК, даже если я оставлю путь пустой. Или даже если имя файла отличается, кто-нибудь может мне объяснить?

Author: Maniero, 2015-11-24

1 answers

Поймать мошенника 1:

Функции file_exists(), несмотря на название, он проверяет, если путь существует, независимо от него быть файл или каталог.

, Когда вы оставляете параметр пустой тест-это то же самое, как это:

if (file_exists( '/pasta/' ))

, которая должна возвращать true, если папка действительно существует.

Решение:

Решение было бы заменить функцию is_file(), это указывает на файлы:

if (is_file($pastadestino))
    {
        echo "OK";
    }
    else
    {
        echo "NOK";
    }

, Если вы хотите проверить папки/каталоги только, есть функция аналогового is_dir(), что проверить, если путь существует и является каталогом.

if (is_dir($pastadestino))
    {
        echo "OK";
    }
    else
    {
        echo "NOK";
    }


Поймать мошенника 2:

Осторожны, если вам необходимо сделать проверку файлов сразу же после изменения чего-то в filesystem, так как все функции выше cache в PHP.

Решение:

, Чтобы убедиться, иметь дело с пути курсе, существует clearstatcache():

clearstatcache(); // Limpamos o cache de arquivos do PHP
if (is_file($pastadestino)) // is_dir() para pastas, is_file para arquivos.
    {
        echo "OK";
    }
    else
    {
        echo "NOK";
    }

Нажмите на название функции выше, чтобы узнать больше деталей, они находятся связаны документации PHP.

 5
Author: Bacco, 2015-11-24 03:02:31