Re: Windows directory listings

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



with regard to trolling - I'd don't *just* do that :-)

sometime I even get the answer to the question correct :-)
let's see if I can help ...

Beauford wrote:
> Maybe I should clarify. When I use a windows path (c:\whatever) I get an
> error that it can't find the path. In Linux the same code works fine
> (/usr/local/whatever).
> 
> Here is all the relevent info.
> 
> Warning: opendir(f:\downloads\): failed to open dir: Invalid argument in
> c:\web\index.php on line 30
> 
> ***** This is line 30 - if ( $handle = opendir ( $page ) ) 
> 
> This is the code:
> 
> $page = "f:\\downloads";

you got this part right (escaping the backslash)

> // $mode : "FULL"|"DIRS"|"FILES"
> // $d : must not be defined
> 
> $display = searchdir($page);
> 
> $num = count($display);
> $i = 0;
> 
> for($i = 0; $i <= $num; $i++) { echo $i." ".$display[$i]."<br>"; }
> 
> 
> 
> function searchdir ( $page , $maxdepth = -1 , $mode = "FILES" , $d = 0 ) {
>    if ( substr ( $page , strlen ( $page ) - 1 ) != '\\' ) { $page .= '\\' ;}

this if statement will run given the value of $page, it's not needed AFAIKT.
then again I can't see it causing problems.

btw: php defines a constant DIRECTORY_SEPARATOR automatically which may help you
make your code more portable, and save you having to think/worry about the blacksdlashing
'problem'.

>    $dirlist = array () ;
>    if ( $mode != "FILES" ) { $dirlist[] = $page ; }

right here I suggest adding a check using is_dir() and is_readable() on the $page var.
for now stick in a bit of debug code ...

echo '<pre>';
var_dump($path, is_dir($path), is_readable($path));
echo '</pre>';

I'm guessing that is_readable() is going to return false, which would point
the fact that either the drive or the directory is not readable by the webserver
process (you don't mention whether you are running via a the webserver but I assume you
are given the output your generating include a '<br>') - the situation maybe compounded
by the fact that F: is actually a mapped drive of some sorts (I have no idea
what kind of trouble this could cause).



>    if ( $handle = opendir ( $page ) ) 
>    {
>        while ( false !== ( $file = readdir ( $handle ) ) )
>        {
>            if ( $file != '.' && $file != '..' )
>            {
>                $file = $file ;
>                if ( ! is_dir ( $file ) ) { if ( $mode != "DIRS" ) {
> $dirlist[] = $file ; } }
>                elseif ( $d >=0 && ($d < $maxdepth || $maxdepth < 0) )
>                {
>                    $result = searchdir ( $file . '\\' , $maxdepth , $mode ,
> $d + 1 ) ;
>                    $dirlist = array_merge ( $dirlist , $result ) ;
>                }
>        }
>        }
>        closedir ( $handle ) ;
>    }
>    if ( $d == 0 ) { natcasesort ( $dirlist ) ; }
>    return ( $dirlist ) ;
> }
> 
> ?>
> 
>> -----Original Message-----
>> From: Jochem Maas [mailto:jochem@xxxxxxxxxxxxx] 
>> Sent: January 7, 2007 10:25 AM
>> To: Beauford
>> Cc: PHP
>> Subject: Re:  Windows directory listings
>>
>> Beauford wrote:
>>> Hi,
>>>
>>> I am trying to write a script that reads a directory on 
>> Windows. All 
>>> the PHP functions I have looked at all seem to work with the Linux 
>>> dietary
>> it sounds more like you have found an examples that show 
>> windows being used (i.e. windows file paths).
>>
>>> structure. Is there another way to do this.
>> you must be reading a manual that only exists in your 
>> particular parallel universe, all relevant php function work 
>> in windows as well as linux:
>>
>> 	http://php.net/manual/en/ref.filesystem.php
>> 	http://php.net/dir
>>
>>> Thanks
>>>
>>
>>
> 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux