|
|
|
Re: test for file existance [message #182854 is a reply to message #182853] |
Sat, 21 September 2013 16:45 |
Lew Pitcher
Messages: 60 Registered: April 2013
Karma: 0
|
Member |
|
|
On Saturday 21 September 2013 11:55, in comp.lang.php, noreply(at)example(dot)com
wrote:
> On Sat, 21 Sep 2013 10:16:02 -0400, richard wrote:
>
>> What would be a good way to test to see if the file actually esists?
>>
>> In my database I may have a file name listed, but don't have the actual
>> file.
>> So if you don't have the file, then why reference it?
>> For simplicity. When I enter one part of the pair, the other part simply
>> gets a "b" added to the name.
>> e.g 100 and 100b.
>>
>> Because there is no file to work with, I want to be able to post a notice
>> saying "not available" or what ever.
>
> Using their own example:
> <?php
> $filename = '/path/to/foo.txt';
>
> if (file_exists($filename)) {
> echo "The file $filename exists";
> } else {
> echo "The file $filename does not exist";
> }
> ?>
>
> Having tested this, it appears the response is wrong.
> I am told the file does not exist even if it does.
Does your usage fall into one of the caveats (see
http://ca1.php.net/manual/en/function.file-exists.php) ?
For instance:
- are you testing a symlink that links to a non-existant file?
(if the filename is a symlink to non-existant file, the function will
return FALSE)
- is the path readable by the "real uid and gid" of the webserver process?
(if the real uid/gid doesn't have "execute" access to each and every
directory in the path to the file, the function will return FALSE)
- have you previously tested and found that the file does not exist?
(the function caches results; the results of previous tests of a given
filename will be returned, instead of the current state - use the
clearstatcache() function before calling file_exists() )
> is there something else I could use?
The stat() function would do, in a pinch.
However, there is another problem with stat()-like functions (including the
file_exists() function): they can introduce race conditions into your code.
Imagine that, between the time you issue the file_exists() call and the time
you use the results, an outside operation deletes the file. Now, you report
that the file exists, even though it doesn't.
Similarly, if some operation creates the file during that time, then you
report that the file doesn't exist, even though it does.
One way to mitigate the race condition is to actually fopen() the file,
instead of checking the file stat with file_exists() or stat(). If fopen()
succeeds, then the file exists, and will exist until you fclose() it. No
intervening external delete will affect the access to the file during your
use of it. OTOH, if fopen() fails, then the file does not exist (but may be
created before you report the non-existance).
HTH
--
Lew Pitcher
"In Skills, We Trust"
PGP public key available upon request
|
|
|
Re: test for file existance [message #182855 is a reply to message #182853] |
Sat, 21 September 2013 16:46 |
Norman Peelman
Messages: 126 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 09/21/2013 11:55 AM, richard wrote:
> On Sat, 21 Sep 2013 10:16:02 -0400, richard wrote:
>
>> What would be a good way to test to see if the file actually esists?
>>
>> In my database I may have a file name listed, but don't have the actual
>> file.
>> So if you don't have the file, then why reference it?
>> For simplicity. When I enter one part of the pair, the other part simply
>> gets a "b" added to the name.
>> e.g 100 and 100b.
>>
>> Because there is no file to work with, I want to be able to post a notice
>> saying "not available" or what ever.
>
> Using their own example:
> <?php
> $filename = '/path/to/foo.txt';
>
> if (file_exists($filename)) {
> echo "The file $filename exists";
> } else {
> echo "The file $filename does not exist";
> }
> ?>
>
> Having tested this, it appears the response is wrong.
> I am told the file does not exist even if it does.
> is there something else I could use?
>
Works here... check your path. And provide your code snippet with output.
--
Norman
Registered Linux user #461062
-Have you been to www.php.net yet?-
|
|
|
Re: test for file existance [message #182856 is a reply to message #182853] |
Sat, 21 September 2013 17:15 |
The Natural Philosoph
Messages: 993 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 21/09/13 16:55, richard wrote:
> On Sat, 21 Sep 2013 10:16:02 -0400, richard wrote:
>
>> What would be a good way to test to see if the file actually esists?
>>
>> In my database I may have a file name listed, but don't have the actual
>> file.
>> So if you don't have the file, then why reference it?
>> For simplicity. When I enter one part of the pair, the other part simply
>> gets a "b" added to the name.
>> e.g 100 and 100b.
>>
>> Because there is no file to work with, I want to be able to post a notice
>> saying "not available" or what ever.
>
> Using their own example:
> <?php
> $filename = '/path/to/foo.txt';
>
> if (file_exists($filename)) {
> echo "The file $filename exists";
> } else {
> echo "The file $filename does not exist";
> }
> ?>
>
> Having tested this, it appears the response is wrong.
> I am told the file does not exist even if it does.
> is there something else I could use?
>
angle grinders are sutaible for use where files dont exist.
--
Ineptocracy
(in-ep-toc’-ra-cy) – a system of government where the least capable to
lead are elected by the least capable of producing, and where the
members of society least likely to sustain themselves or succeed, are
rewarded with goods and services paid for by the confiscated wealth of a
diminishing number of producers.
|
|
|
Re: test for file existance [message #182857 is a reply to message #182856] |
Sat, 21 September 2013 18:43 |
Lew Pitcher
Messages: 60 Registered: April 2013
Karma: 0
|
Member |
|
|
On Saturday 21 September 2013 13:15, in comp.lang.php, tnp(at)invalid(dot)invalid
wrote:
> On 21/09/13 16:55, richard wrote:
>> On Sat, 21 Sep 2013 10:16:02 -0400, richard wrote:
>>
>>> What would be a good way to test to see if the file actually esists?
>>>
>>> In my database I may have a file name listed, but don't have the actual
>>> file.
>>> So if you don't have the file, then why reference it?
>>> For simplicity. When I enter one part of the pair, the other part simply
>>> gets a "b" added to the name.
>>> e.g 100 and 100b.
>>>
>>> Because there is no file to work with, I want to be able to post a
>>> notice saying "not available" or what ever.
>>
>> Using their own example:
>> <?php
>> $filename = '/path/to/foo.txt';
>>
>> if (file_exists($filename)) {
>> echo "The file $filename exists";
>> } else {
>> echo "The file $filename does not exist";
>> }
>> ?>
>>
>> Having tested this, it appears the response is wrong.
>> I am told the file does not exist even if it does.
>> is there something else I could use?
>>
> angle grinders are sutaible for use where files dont exist.
Can you use an angle grinder to create a file?
--
Lew Pitcher
"In Skills, We Trust"
PGP public key available upon request
|
|
|
Re: test for file existance [message #182858 is a reply to message #182857] |
Sat, 21 September 2013 19:00 |
The Natural Philosoph
Messages: 993 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 21/09/13 19:43, Lew Pitcher wrote:
> On Saturday 21 September 2013 13:15, in comp.lang.php, tnp(at)invalid(dot)invalid
> wrote:
>
>> On 21/09/13 16:55, richard wrote:
>>> On Sat, 21 Sep 2013 10:16:02 -0400, richard wrote:
>>>
>>>> What would be a good way to test to see if the file actually esists?
>>>>
>>>> In my database I may have a file name listed, but don't have the actual
>>>> file.
>>>> So if you don't have the file, then why reference it?
>>>> For simplicity. When I enter one part of the pair, the other part simply
>>>> gets a "b" added to the name.
>>>> e.g 100 and 100b.
>>>>
>>>> Because there is no file to work with, I want to be able to post a
>>>> notice saying "not available" or what ever.
>>>
>>> Using their own example:
>>> <?php
>>> $filename = '/path/to/foo.txt';
>>>
>>> if (file_exists($filename)) {
>>> echo "The file $filename exists";
>>> } else {
>>> echo "The file $filename does not exist";
>>> }
>>> ?>
>>>
>>> Having tested this, it appears the response is wrong.
>>> I am told the file does not exist even if it does.
>>> is there something else I could use?
>>>
>> angle grinders are sutaible for use where files dont exist.
>
> Can you use an angle grinder to create a file?
>
>
I would say it's entirely possible, yes.
--
Ineptocracy
(in-ep-toc’-ra-cy) – a system of government where the least capable to
lead are elected by the least capable of producing, and where the
members of society least likely to sustain themselves or succeed, are
rewarded with goods and services paid for by the confiscated wealth of a
diminishing number of producers.
|
|
|
Re: test for file existance [message #182863 is a reply to message #182857] |
Sat, 21 September 2013 21:28 |
Richard Yates
Messages: 86 Registered: September 2013
Karma: 0
|
Member |
|
|
On Sat, 21 Sep 2013 14:43:30 -0400, Lew Pitcher
<lew(dot)pitcher(at)digitalfreehold(dot)ca> wrote:
> On Saturday 21 September 2013 13:15, in comp.lang.php, tnp(at)invalid(dot)invalid
> wrote:
>
>> On 21/09/13 16:55, richard wrote:
>>> On Sat, 21 Sep 2013 10:16:02 -0400, richard wrote:
>>>
>>>> What would be a good way to test to see if the file actually esists?
>>>>
>>>> In my database I may have a file name listed, but don't have the actual
>>>> file.
>>>> So if you don't have the file, then why reference it?
>>>> For simplicity. When I enter one part of the pair, the other part simply
>>>> gets a "b" added to the name.
>>>> e.g 100 and 100b.
>>>>
>>>> Because there is no file to work with, I want to be able to post a
>>>> notice saying "not available" or what ever.
>>>
>>> Using their own example:
>>> <?php
>>> $filename = '/path/to/foo.txt';
>>>
>>> if (file_exists($filename)) {
>>> echo "The file $filename exists";
>>> } else {
>>> echo "The file $filename does not exist";
>>> }
>>> ?>
>>>
>>> Having tested this, it appears the response is wrong.
>>> I am told the file does not exist even if it does.
>>> is there something else I could use?
>>>
>> angle grinders are sutaible for use where files dont exist.
>
> Can you use an angle grinder to create a file?
That would be Object Oriented style, I believe.
|
|
|