Progress28.ru

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php проверить есть ли файл

Что такое file_exists — Проверка существования файла в php примеры

Есть ли файл на сервере, существует ли физически по тому пути, который у нас есть! Как проверить с помощью функции php file_exists. Файл не существует, все способы определения существования или отсутствия файла! Примеры кода, который проверит существование файла! Как переводится file_exists — и что означает!?

Все способы проверки существования файла

  1. Что такое file_exists — как переводится
  2. Что возвращает file_exists
  3. Существует ли файл в папке проверка локально -> пример
  4. Проверка существования файла по абсолютному пути file_exists -> пример
  5. Проверка существования файла по пути на сервере file_exists -> пример
  6. Вывод о существовании файла и функции file_exists
  7. Скачать можно здесь

    Что такое file_exists — как переводится

    Как переводится file exists

    Что такое file_exists

    File_exists — это функция в php, которая определяет есть ли — существует ли файл по тому пути, который вы указали:

    File already exists перевод

    Что возвращает file_exists

    Как получить возвращаемые значения относительно файла в file_exists

    Друзья, мы на нашем сайте даем иногда такую информацию, которую вы нигде не найдете и в учебнике это не написано!

    Нам потребуется для иллюстрации file_exists true и file_exists false два файла, один из которых не будет существовать!

    Для получения того, что возвращает функция file_exists — нам потребуется другая функция -> var_dump

    Применим её к file_exists таким образом:

    $home = $_SERVER[«DOCUMENT_ROOT»];//путь до корневой папки

    $file = «/index.html»; //главная страница сайта

    Результат возврата функции file_exists к существующему файлу

    Как видим, file_exists возвращает true:

    Тоже самое проделаем с файлом, который не существует! Внутри неважно что мы напишем, должно быть единственное условие, что файла не существует:

    Результат возврата функции file_exists к не существующему файлу

    Существует ли файл в папке проверка локально file_exists

    Предположим, что файл со скриптом и проверяемый файл лежат в одной папке, тогда можно проверить существует ли файл локально таким образом:

    Нужен пример!? легко!

    Если мы сейчас посмотрим в адресную строку. то мы увидим вот это:

    Вы должны предположить, что данный файл — index.html должен быть по адресу. возьмем выше приведенный url и заменим название файла на

    Не буду делать активную ссылку вы — можете проверить — есть ли такой файл

    Поскольку файл физически не существует, то var_dump должен вернуть false — давайте прямо здесь выведем:

    — Парадокс!? Нет! Объясняется просто!

    Все файлы и в том числе обрабатывающие, стекаются в одну точку -> на главную в нашем случае -> index.html(при соответствующих настройках htaccess, файл можно менять), при единой точке входа. И для скрипта проверять существование файла index.html — это проверка самого себя, как бы странно это не звучало.

    Чтобы вы понимали, именно проверять таким образом локально, в приведенном примере, корневая папка, будет той локальной папкой для этой проверки существования файла!

    Все файлы, например sitemap.xml, которые будут физически находиться в корневой папке сайта, file_exists будет возвращать true!

    Но если мы проверим приведенный выше файл , как по вашему, что file_exists вернет!?

    Проверка существования файла по абсолютному пути file_exists

    Как вы думаете, что вернет функция file_exists , если применить к файлу по абсолютному пути, который существует, таким образом:

    Как видим, казалось бы, файл существует, но функция file_exists возвращает false. И вывод единственный, что получить реальное положение дел относительно существования файла по абсолютному пути — не представляется возможным!

    Проверка существования файла по пути на сервере file_exists

    Теперь возьмем тоже самый существующий файл и применим уже не абсолютный путь, а путь на сервере до файла и вставим его в в функцию file_exists

    И получим результат работы функции file_exists :

    Вывод о существовании файла и функции file_exists

    Какой вывод можно сделать по тем проверкам существования или отсутствия файла на сервере!?

    Самый лучший способ это -> Проверка существования файла по пути на сервере file_exists работает всегда и показывает, существует ли файл у вас на сервере или нет!
    Первый работает частично!
    Второй из способов проверки существования файла -> изначально не работает!

    Вас может еще заинтересовать список тем : #PHP | #PHP_FILE | #PHP_BOOK |

    НАШИ ПРОЕКТЫ : Проекты находятся в разной степени готовности (просто их столько, что времени не хватает…)

    file_exists

    (PHP 4, PHP 5, PHP 7)

    file_exists — Проверяет существование указанного файла или каталога

    Описание

    Проверяет наличие указанного файла или каталога.

    Список параметров

    Путь к файлу или каталогу.

    На платформах Windows, для проверки наличия файлов на сетевых ресурсах, используйте имена, подобные //computername/share/filename или \computernamesharefilename .

    Возвращаемые значения

    Возвращает TRUE , если файл или каталог, указанный параметром filename , существует, иначе возвращает FALSE .

    Данная функция возвращает FALSE для символических ссылок, указывающих на несуществующие файлы.

    Если файлы недоступны из-за ограничений, налагаемых безопасным режимом, то данная функция вернет FALSE . Однако, эти файлы все еще могут быть подключены, если они располагаются в каталоге safe_mode_include_dir.

    Проверка происходит с помощью реальных UID/GID, а не эффективных идентификаторов.

    Замечание: Так как тип integer в PHP является целым числом со знаком и многие платформы используют 32-х битные целые числа, то некоторые функции файловых систем могут возвращать неожиданные результаты для файлов размером больше 2 Гб.

    Примеры

    Пример #1 Проверка существования файла

    if ( file_exists ( $filename )) <
    echo «Файл $filename существует» ;
    > else <
    echo «Файл $filename не существует» ;
    >
    ?>

    Ошибки

    В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

    Примечания

    Замечание: Результаты этой функции кешируются. Более подробную информацию смотрите в разделе clearstatcache() .

    Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обертками url. Список оберток, поддерживаемых семейством функций stat() , смотрите в разделе Поддерживаемые протоколы и обертки.

    Смотрите также

    • is_readable() — Определяет существование файла и доступен ли он для чтения
    • is_writable() — Определяет, доступен ли файл для записи
    • is_file() — Определяет, является ли файл обычным файлом
    • file() — Читает содержимое файла и помещает его в массив

    User Contributed Notes 29 notes

    Note: The results of this function are cached. See clearstatcache() for more details.

    That’s a pretty big note. Don’t forget this one, since it can make your file_exists() behave unexpectedly — probably at production time 😉

    file_exists() does NOT search the php include_path for your file, so don’t use it before trying to include or require.

    @$result = include $filename;

    Yes, include does return false when the file can’t be found, but it does also generate a warning. That’s why you need the @. Don’t try to get around the warning issue by using file_exists(). That will leave you scratching your head until you figure out or stumble across the fact that file_exists() DOESN’T SEARCH THE PHP INCLUDE_PATH.

    In response to seejohnrun’s version to check if a URL exists. Even if the file doesn’t exist you’re still going to get 404 headers. You can still use get_headers if you don’t have the option of using CURL..

    $file = ‘http://www.domain.com/somefile.jpg’;
    $file_headers = @get_headers($file);
    if($file_headers[0] == ‘HTTP/1.1 404 Not Found’) <
    $exists = false;
    >
    else <
    $exists = true;
    >

    I wrote this little handy function to check if an image exists in a directory, and if so, return a filename which doesnt exists e.g. if you try ‘flower.jpg’ and it exists, then it tries ‘flower[1].jpg’ and if that one exists it tries ‘flower[2].jpg’ and so on. It works fine at my place. Ofcourse you can use it also for other filetypes than images.

    function imageExists ( $image , $dir ) <

    $i = 1 ; $probeer = $image ;

    If you are trying to access a Windows Network Share you have to configure your WebServer with enough permissions for example:

    You will get an error telling you that the pathname doesnt exist this will be because Apache or IIS run as LocalSystem so you will have to enter to Services and configure Apache on «Open a session as» Create a new user that has enough permissions and also be sure that target share has the proper permissions.

    Hope this save some hours of research to anyone.

    With PHP 7.0 on Ubuntu 17.04 and with the option allow_url_fopen=On, file_exists() returns always false when trying to check a remote file via HTTP.

    returns always «missing», even for an existing URL.

    I found that in the same situation the file() function can read the remote file, so I changed my routine in

    This is clearly a bit slower, especially if the remote file is big, but it solves this little problem.

    When using file_exists, seems you cannot do:

    foreach ( $possibles as $poss )
    <
    if ( file_exists ( SITE_RANGE_IMAGE_PATH . $this -> range_id . ‘/ ‘ . $poss . ‘.jpg’ ) )
    <
    // exists
    >
    else
    <
    // not found
    >
    >
    ?>

    so you must do:

    foreach ( $possibles as $poss )
    <
    $img = SITE_RANGE_IMAGE_PATH . $this -> range_id . ‘/ ‘ . $poss . ‘.jpg’
    if ( file_exists ( $img ) )
    <
    // exists
    >
    else
    <
    // not found
    >
    >
    ?>

    Then things will work fine.

    This is at least the case on this Windows system running php 5.2.5 and apache 2.2.3

    Not sure if it is down to the concatenation or the fact theres a constant in there, i’m about to run away and test just that.

    Note on openspecies entry (excellent btw, thanks!).

    If your server cannot resolve its own DNS, use the following:
    $f = preg_replace(‘/www.yourserver.(net|com)/’, getenv(‘SERVER_ADDR’), $f);

    Just before the $h = @get_headers($f); line.

    Replace the extensions (net|com|. ) in the regexp expression as appropriate.

    The preg_replace will effectively ‘resolve’ the address for you by assigning $f as follows:
    http://10.0.0.125/myfile.gif

    For some reason, none of the url_exists() functions posted here worked for me, so here is my own tweaked version of it.

    function url_exists ( $url ) <
    $url = str_replace ( «http://» , «» , $url );
    if ( strstr ( $url , «/» )) <
    $url = explode ( «/» , $url , 2 );
    $url [ 1 ] = «/» . $url [ 1 ];
    > else <
    $url = array( $url , «/» );
    >

    $fh = fsockopen ( $url [ 0 ], 80 );
    if ( $fh ) <
    fputs ( $fh , «GET » . $url [ 1 ]. » HTTP/1.1nHost:» . $url [ 0 ]. «nn» );
    if ( fread ( $fh , 22 ) == «HTTP/1.1 404 Not Found» ) < return FALSE ; >
    else

    this code here is in case you want to check if a file exists in another server:

    function fileExists ( $path ) <
    return (@ fopen ( $path , «r» )== true );
    >
    ?>

    unfortunately the file_exists can’t reach remote servers, so I used the fopen function.

    If the file being tested by file_exists() is a file on a symbolically-linked directory structure, the results depend on the permissions of the directory tree node underneath the linked tree. PHP under a web server (i.e. apache) will respect permissions of the file system underneath the symbolic link, contrasting with PHP as a shell script which respects permissions of the directories that are linked (i.e. on top, and visible).

    This results in files that appear to NOT exist on a symbolic link, even though they are very much in existance and indeed are readable by the web server.

    Here is a simpler version of url_exists:

    function url_exists ( $url ) <
    $hdrs = @ get_headers ( $url );
    return is_array ( $hdrs ) ? preg_match ( ‘/^HTTP\/\d+\.\d+\s+2\d\d\s+.*$/’ , $hdrs [ 0 ]) : false ;
    >
    ?>

    I made a bit of code that sees whether a file served via RTSP is there or not:

    function rtsp_exists ( $url ) <

    $server = parse_url ( $url , PHP_URL_HOST );
    $port = «554» ;
    $hdrs = «DESCRIBE » . $url . » RTSP/1.0″ . «rnrn» ;

    //Open connection (15s timeout)
    $sh = fsockopen ( $server , $port , $err , $err_otp , 15 );
    //Check connections
    if(! $sh ) return false ;
    //Send headers
    fputs ( $sh , $hdrs );
    //Receive data (1KB)
    $rtds = fgets ( $sh , 1024 );
    //Close socket
    fclose ( $sh );

    return strpos ( $rtds , «200 OK» ) > 0 ;
    >
    ?>

    Older php (v4.x) do not work with get_headers() function. So I made this one and working.

    function url_exists ( $url ) <
    // Version 4.x supported
    $handle = curl_init ( $url );
    if ( false === $handle )
    <
    return false ;
    >
    curl_setopt ( $handle , CURLOPT_HEADER , false );
    curl_setopt ( $handle , CURLOPT_FAILONERROR , true ); // this works
    curl_setopt ( $handle , CURLOPT_NOBODY , true );
    curl_setopt ( $handle , CURLOPT_RETURNTRANSFER , false );
    $connectable = curl_exec ( $handle );
    curl_close ( $handle );
    return $connectable ;
    >
    ?>

    file_exists() is vulnerable to race conditions and clearstatcache() is not adequate to avoid it.

    The following function is a good solution:

    function file_exists_safe ( $file ) <
    if (! $fd = fopen ( $file , ‘xb’ )) <
    return true ; // the file already exists
    >
    fclose ( $fd ); // the file is now created, we don’t need the file handler
    return false ;
    >
    ?>

    The function will create a file if non-existent, following calls will fail because the file exists (in effect being a lock).

    IMPORTANT: The file will remain on the disk if it was successfully created and you must clean up after you, f.ex. remove it or overwrite it. This step is purposely omitted from the function as to let scripts do calculations all the while being sure the file won’t be «seized» by another process.

    NOTE: This method fails if the above function is not used for checking in all other scripts/processes as it doesn’t actually lock the file.
    FIX: You could flock() the file to prevent that (although all other scripts similarly must check it with flock() then, see https://www.php.net/manual/en/function.flock.php). Be sure to unlock and fclose() the file AFTER you’re done with it, and not within the above function:

    function create_and_lock ( $file ) <
    if (! $fd = fopen ( $file , ‘xb’ )) <
    return false ;
    >
    if (! flock ( $fd , LOCK_EX | LOCK_NB )) < // may fail for other reasons, LOCK_NB will prevent blocking
    fclose ( $fd );
    unlink ( $file ); // clean up
    return false ;
    >
    return $fd ;
    >

    if ( $lock = create_and_lock ( «foo.txt» )) <
    // do stuff
    flock ( $fd , LOCK_UN ); // unlock
    fclose ( $fd ); // close
    >
    ?>

    SEE ALSO: https://linux.die.net/man/2/open about O_CREAT|O_EXCL (which is used with the ‘x’ modifier for fopen()) and problems with NFS

    I was having problems with the file_exists when using urls, so I made this function:

    function file_exists_2 ( $filePath )
    <
    return ( $ch = curl_init ( $filePath )) ? @ curl_close ( $ch ) || true : false ;
    >
    ?>

    Cheers!

    I spent the last two hours wondering what was wrong with my if statement: file_exists($file) was returning false, however I could call include($file) with no problem.

    It turns out that I didn’t realize that the php include_path value I had set in the .htaccess file didn’t carry over to file_exists, is_file, etc.

    // .htaccess php_value include_path ‘/home/user/public_html/’;

    // includes lies in /home/user/public_html/includes/

    //doesn’t work, file_exists returns false
    if ( file_exists ( ‘includes/config.php’ ) )
    <
    include( ‘includes/config.php’ );
    >

    //does work, file_exists returns true
    if ( file_exists ( ‘/home/user/public_html/includes/config.php’ ) )
    <
    include( ‘includes/config.php’ );
    >
    ?>

    Just goes to show that «shortcuts for simplicity» like setting the include_path in .htaccess can just cause more grief in the long run.

    file_exists() will return FALSE for broken links

    $ ln -s does_not_exist my_link
    $ ls -l
    lrwxr-xr-x 1 user group 14 May 13 17:28 my_link -> does_not_exist
    $ php -r «var_dump(file_exists(‘my_link’));»
    bool(false)

    PHP: Как проверить, существует ли файл изображения?

    Мне нужно увидеть, существует ли определенное изображение на моем cdn.

    Я пробовал следующее, и он не работает:

    Даже если изображение существует или не существует, оно всегда говорит «Файл существует». Я не уверен, почему он не работает …

    Вам нужно имя файла в кавычках как минимум (как строка):

    Кроме того, убедитесь, что $filename правильно проверен. И тогда он будет работать только тогда, когда allow_url_fopen активируется в вашей конфигурации PHP

    Это не сработало для меня. То, как я это делал, это использовать getimagesize.

    Обратите внимание, что «@» будет означать, что если изображение не существует (в этом случае функция обычно getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed ошибку: getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed ), он вернет false.

    Ну, file_exists делает что-то странное, он не говорит, существует ли файл, он говорит, что путь существует .

    Итак, чтобы проверить, является ли это файлом, вы должны использовать is_file вместе с file_exists чтобы узнать, действительно ли файл находится за ним, иначе file_exists вернет true для любого существующего пути.

    Вот функция, которую я использую:

    Попробуйте вот так:

    Сначала вам нужно понять: у вас нет файлов .
    Файл является объектом файловой системы , но вы делаете свой запрос с использованием протокола HTTP, который не поддерживает файлы, кроме URL-адресов.

    Таким образом, вы должны запросить неиспользуемый файл, используя ваш браузер, и посмотреть код ответа. если это не 404, вы не можете использовать какие-либо обертки, чтобы увидеть, существует ли файл, и вы должны запросить свой cdn, используя какой-либо другой протокол, например FTP

    Если файл находится в вашем локальном домене, вам не нужно указывать полный URL. Только путь к файлу. Если файл находится в другом каталоге, тогда вам нужно ввести путь к «.».

    Часто время «.» , что приведет к тому, что файл будет отображаться как не существующий, если это действительно так.

    Вот простейший способ проверить, существует ли файл:

    Вы должны использовать абсолютный путь, чтобы увидеть, существует ли файл.

    Если вы пишете для CMS или PHP framework, то насколько я знаю, все они определили константу для корневого пути документа.

    например, WordPress использует ABSPATH, который можно использовать глобально для работы с файлами на сервере, используя ваш код, а также URL-адрес сайта.

    Я проделаю здесь лишнюю милю :). Поскольку этот код не нуждался бы в большом обслуживании и довольно солидный, я бы написал его с сокращением if statement:

    Сокращенный отчет IF объяснил:

    Существует большая разница между is_file и file_exists .

    is_file возвращает true для (обычных) файлов:

    Возвращает TRUE, если имя файла существует и является обычным файлом, в противном случае FALSE .

    file_exists возвращает true для обоих файлов и каталогов:

    Возвращает TRUE, если существует файл или каталог, указанный по имени файла; FALSE в противном случае.

    Примечание. Для получения дополнительной информации по этому вопросу также проверьте этот вопрос с использованием stackoverflow .

    Вы можете использовать функцию file_get_contents для доступа к удаленным файлам. Подробнее см. http://php.net/manual/en/function.file-get-contents.php .

    Прочтите сначала 5 байтов из HTTP с помощью fopen() и fread() затем используйте это:

    для обнаружения изображения.

    вы можете использовать cURL. Вы можете получить cURL только для того, чтобы дать вам заголовки, а не тело, которое могло бы сделать его быстрее. Плохой домен всегда может занять некоторое время, потому что вы будете ждать запроса на тайм-аут; вы, вероятно, можете изменить длину таймаута, используя cURL.

    file_exists читает не только файлы, но и пути. поэтому, когда $filename пуст, команда будет работать так, как если бы она была написана следующим образом:

    если каталог / images / существует, функция все равно вернет true .

    Обычно я пишу это так:

    file_exists($filepath) вернет истинный результат для каталога и полного пути к файлу, поэтому не всегда является решением, когда имя файла не передается.

    is_file($filepath) возвращает true только для полных путей к файлу

    Если вы используете завиток, вы можете попробовать следующий скрипт:

    Проверить наличие файла на другом сайте

    На созданом сайте создал поле для ввода адреса сайта,
    Вводим в это поле адрес — и скрипт должен выполняет следующие проверки:

    1. Наличие на сайте(который мы ввели в поле) файла robots.txt
    2. Код ответа сервера файла robots.txt
    3. Вес robots.txt
    4. Наличие директивы Host в файле robots.txt

    Вопрос как написать код для такого скрипта?

    25.08.2016, 12:47

    Как проверить наличие одного элемента в другом?
    Необходимо перебрать все элементы массива liMenu и, в случае, если элемент массива содержит.

    Наличие файла на сайте
    Допустим есть некоторый сайт, нужно с помощью IdHTTP проверить его на наличие некоторого файла, как.

    Как проверить наличие файла?
    Нужно проверить есть ли файл по заданному пути ,например: «C:UsersмвидиоDesktopVBAtxt123.txt».

    Проверить наличие свежего файла
    Привет. Есть каталог в котором создаются backup’ы. Создаются они батником. Нужно немного допилить).

    25.08.2016, 12:50227.09.2016, 16:49 [ТС]3

    Jewbacabra, так такой скрипт можно назвать—скрипт для парсинга.

    то есть я имею ввиду такое задание можно назвать парсингом сайта?

    27.09.2016, 20:534

    TVPNERO, Здравствуйте, заинтересовал ваш вопрос. Решил начать копать в эту сторону, в PHP я конечно новичок, но все же.

    Поиск определенных файлов по серверу через HTTP вроде как нельзя организовать. От сюда следует, будет искать robots.txt именно в корневой папке на сервере. Так же делает и Яндекс. Получить размер файла, можно только у себя на сервере в директории, значит будем находить robots.txt => скачивать его к себе в директорию и уже там работать с ним.

    Вот что у меня получилось, Проверяем, существует ли файл => Скачиваем => Обрабатываем его, находя размер => через регулярное выражение находим слово /Host/ => если такое имеется, говорим что существует директива.

    Многоуважаемые Форумчани, строго не судите, все очень сыровато

    27.09.2016, 21:05 [ТС]5

    evikza, я же тоже новичок. Это мне прислали такое тестовое задание несколько месяцев назад.И какбэ намекали что как раз robots.txt
    c любого стороннего сайта 1. Наличие на сайте(который мы ввели в поле) файла robots.txt

    по заданию нужно было создать сайт с полем для ввода адреса сайта,который нужно проверить на наличие файла роботс.тхт итд.

    27.09.2016, 21:156

    TVPNERO, Как правило, robots.txt лежит в корне сайта.

    Отсылаете ссылку в $_POST[‘URL’]; , в обработчике подставляете /robots.txt, если находит, говорит 200 OK , если нет файла, говорим «Ошибка» . Я так вижу эту ситуацию. Возможно умные дяденьки с форума подскажут более правильное решение данного вопроса.

    Добавлено через 3 минуты
    TVPNERO, или вам помочь сделать форму отправки ссылки в обработчик?

    Читать еще:  Php copy array
Ссылка на основную публикацию
Adblock
detector
×
×