Hello Gregory,

Tuesday, December 9, 2008, 8:50:21 PM, you wrote:

> Hi,

> This bug:

> http://bugs.php.net/bug.php?id=46680

> uncovers 2 larger issues.

> 1) Where should a function like file_put_contents() create its file if
> it doesn't already exist and FILE_USE_INCLUDE_PATH is specified?  The
> test for this is ext/standard/file/file_put_contents_variation4.phpt and
> a few others.

> file_put_contents($filename, "File in include path", FILE_USE_INCLUDE_PATH);

> arbitrarily creates $filename in the first portion of include_path on
> PHP 5.2, and arbitrarily creates $filename in cwd in PHP 5.3.  Of
> course, if the file already exists in any of the include_path, both PHP
> 5.2 and 5.3 will overwrite it.

> The same is true of fopen() in write mode.

For existing files the include path makes very much sense to me. For non
existing files it does however not make much sense and we probably want
to issue an error in that case.

> 2) Should file_get_contents()/fopen() in read mode fall back to current
> directory if not found in include_path?  The test for this is
> ext/standard/file/fopen_variation5.phpt and others

> In PHP 5.2, the functions simply fail if the file does not exist in
> include_path.  Thus if include_path does not contain ".", the file is
> not found.  In PHP 5.3, there is a fallback to check cwd for the file.

> For #1 I think both PHP 5.2 and 5.3 are broken.  If you specify that a
> file should be written to inside include_path, it should fail if no file
> is found - allowing arbitrary file creation is just plain stupid and
> also dangerous - include_path has no business being used to create a
> file, it should only be used to find existing files.  In any case, I
> think allowing include_path to be used at all for file modification is
> horrendous, and think it should be deprecated and removed from PHP 6. 
> We should simply add file_resolve_path() function which can be used to
> locate a file.

> <?php
> if ($path = file_resolve_path('somefile.txt')) {
>     file_put_contents($path, 'blah');
> } else {
>     file_put_contents($someOtherPath, 'blah');
> }
?>>

> For #2 I think PHP 5.3 is broken, and the fallback to cwd should be
> removed from php_resolve_path.

> Comments?

Agreed on #2

> Greg

> P.S. the tests themselves should not create directories outside of their
> tests/ subdirectory, and should use things like PATH_SEPARATOR, but
> that's a minor issue




Best regards,
 Marcus


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to