php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #78285 file_exists is 30 times slover than is_dir
Submitted: 2019-07-13 20:13 UTC Modified: 2019-07-15 17:06 UTC
From: video dot ice dot power at seznam dot cz Assigned:
Status: Verified Package: *Directory/Filesystem functions
PHP Version: 7.3.7 OS: Windows 10
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: video dot ice dot power at seznam dot cz
New email:
PHP Version: OS:

 

 [2019-07-13 20:13 UTC] video dot ice dot power at seznam dot cz
Description:
------------
file_exists() is 30 times slover than is_dir()

Test script:
---------------
for ($i = 0; $i < 1000; $i++) { is_dir('some path to directory'); } // 0.5ms

for ($i = 0; $i < 1000; $i++) { file_exists('some path to directory'); } // 15 ms

Expected result:
----------------
The file_exists method should run in about the same time as the is_dir method does.


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-07-15 09:49 UTC] cmb@php.net
-Status: Open +Status: Verified -Assigned To: +Assigned To: cmb
 [2019-07-15 09:49 UTC] cmb@php.net
<?php
    $t0 = hrtime(true);
    for ($i = 0; $i < 1000; $i++) {
        is_dir(__DIR__);
    }
    $t1 = hrtime(true);
    for ($i = 0; $i < 1000; $i++) {
        file_exists(__DIR__);
    }
    $t2 = hrtime(true);
    printf("is_dir      took %f ms\n", ($t1 - $t0)/10e6);
    printf("file_exists took %f ms\n", ($t2 - $t1)/10e6);

outputs for me something like:

    is_dir      took 0.051130 ms
    file_exists took 3.395850 ms
 [2019-07-15 17:06 UTC] cmb@php.net
-Type: Bug +Type: Documentation Problem -Assigned To: cmb +Assigned To:
 [2019-07-15 17:06 UTC] cmb@php.net
Actually, it is to be expected that file_exists() is much slower
than is_dir() (when the realpath cache is enabled), because the
former checks whether the file may be accessed, and since this
information is not cached, it is done for each and every call.

Changing to doc problem, since this behavior is not described in
the manual.
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Tue Aug 20 22:01:30 2019 UTC