Doc #78285 [Com]: file_exists is 30 times slover than is_dir
| From: | bkfake-php at yahoo dot com | Date: | Fri, 09 Oct 2020 15:58:17 +0000 |
| Subject: | Doc #78285 [Com]: file_exists is 30 times slover than is_dir | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-17983@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78285&edit=1
ID: 78285
Comment by: bkfake-php at yahoo dot com
Reported by: video dot ice dot power at seznam dot cz
Summary: file_exists is 30 times slover than is_dir
Status: Verified
Type: Documentation Problem
Package: *Directory/Filesystem functions
Operating System: Windows 10
PHP Version: 7.3.7
Block user comment: N
Private report: N
New Comment:
why does
is_file() contain is_readable() functionality?
Separation of concerns
If I want to determine "is file" without regard to file permissions:.
file_exists($file) && !is_dir($file); // file is a file!
is_file($file); // file is a file I have permission to access
Previous Comments:
------------------------------------------------------------------------
[2020-04-18 07:37:56] maggus dot staab at gmail dot com
Maybe we could somehow produce a overview which sorts the often used (and similar) io functions from
faster to more expensive ones.
I can think of
is_file
is_dir
file_exists
filemtime
filectime
fileatime
filesize
Etc.
------------------------------------------------------------------------
[2019-07-15 17:06:22] 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.
------------------------------------------------------------------------
[2019-07-15 09:49:40] 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-13 20:13:22] 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.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78285&edit=1