Bug #81042 [Dup]: is_dir does not work as it should because of open_basedir
| From: | requinix@php.net | Date: | Tue, 18 May 2021 19:56:55 +0000 |
| Subject: | Bug #81042 [Dup]: is_dir does not work as it should because of open_basedir | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-233888@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=81042&edit=1
ID: 81042
Updated by: requinix@php.net
Reported by: bugs-php dot a2 at x25 dot pl
-Summary: open_basedir does not work as it should because of
open_basedir
+Summary: is_dir does not work as it should because of
open_basedir
Status: Duplicate
Type: Bug
Package: *Directory/Filesystem functions
PHP Version: 7.4.19
Block user comment: N
Private report: N
New Comment:
> And how does it make not open_basedir problem? You are saying that I can't check
> if file/dir exists because it might not exist.
I'll try again.
open_basedir is not the problem. It works correctly. What does *not* work correctly is what PHP does
when a file or directory does not exist.
if (path_exists_and_is_inside_open_basedir($path)) {
// (A) good: exists
} else {
if (open_basedir_is_enabled()) {
// (B) bad: "open_basedir restriction in effect"
// what if $path does not exist and is *inside* open_basedir!
} else {
// (C) good: does not exist
}
}
Previous Comments:
------------------------------------------------------------------------
[2021-05-18 18:08:29] bugs-php dot a2 at x25 dot pl
And how does it make not open_basedir problem? You are saying that I can't check if file/dir
exists because it might not exist.
Then how about mkdir()? or file_exists() or is_file()? mkdir() cant create directory because it also
does not exist?
cat a.php
<?
ini_set("open_basedir","/home/naox/public_html/test");
mkdir("/home/naox/public_html/test");
php a.php
Warning: mkdir(): open_basedir restriction in effect. File(/home/naox/public_html/test) is not
within the allowed path(s): (/home/naox/public_html/test) in
/home/naox/public_html/naox.vipserv.org/a.php on line 3
------------------------------------------------------------------------
[2021-05-15 18:57:57] requinix@php.net
Duplicate of bug #52065
The issue is not open_basedir but that the functionality supporting is_dir() reports that the path
does not exist, and the reason for that is assumed to be an open_basedir restriction. If
public_html/test existed then you would not get this warning.
------------------------------------------------------------------------
[2021-05-15 09:03:23] bugs-php dot a2 at x25 dot pl
No, it does not exist but it should not matter.
------------------------------------------------------------------------
[2021-05-15 01:52:20] requinix@php.net
Does public_html/test exist?
------------------------------------------------------------------------
[2021-05-14 23:35:43] bugs-php dot a2 at x25 dot pl
Description:
------------
open_basedir does not work as it should:
Test script:
---------------
<?
ini_set("open_basedir","/home/naox/public_html/test");
is_dir("/home/naox/public_html/test");
Actual result:
--------------
Warning: is_dir(): open_basedir restriction in effect. File(/home/naox/public_html/test) is not
within the allowed path(s): (/home/naox/public_html/test/) in /home/naox/public_html/a.php on line 3
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=81042&edit=1