Bug->Doc #81042 [Dup->ReO]: open_basedir directories must exist

From: Date: Thu, 20 May 2021 10:50:07 +0000
Subject: Bug->Doc #81042 [Dup->ReO]: open_basedir directories must exist
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-18768@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:         cmb@php.net
 Reported by:        bugs-php dot a2 at x25 dot pl
-Summary:            is_dir does not work as it should because of
                     open_basedir
+Summary:            open_basedir directories must exist
-Status:             Duplicate
+Status:             Re-Opened
-Type:               Bug
+Type:               Documentation Problem
 Package:            *Directory/Filesystem functions
 PHP Version:        7.4.19
 Block user comment: N
 Private report:     N

 New Comment:

It seems to me this issue is slightly different from bug #52065.
In this case, I'd say this is a documentation issue, namely that
it is not explicitly documented that the directories set in
open_basedir must exist.


Previous Comments:
------------------------------------------------------------------------
[2021-05-18 19:56:55] requinix@php.net

> 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
  }
}

------------------------------------------------------------------------
[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?

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=81042


--
Edit this bug report at https://bugs.php.net/bug.php?id=81042&edit=1


Thread (5 messages)

« previous php.doc.bugs (#18768) next »