views:

849

answers:

3

Hey there!

within PHP (XAMPP) installed on a Windows XP Computer Im trying to read a dir which exists on a local network server. Im using is_dir() to check whether it is a dir that I can read.

In Windows Explorer I type \\\server\dir and that dir is being shown. When I map a network drive a can access it with z:\dir as well.

In PHP I have that script:

<?php if( is_dir($dir){ echo 'success' } ) ?>

For $dir I tried:

  • /server/dir
  • //server/dir
  • \server\dir
  • \\server\dir
  • \\\\server\\dir

and

  • z:\dir
  • z:\\dir
  • z:/dir
  • z://dir

But I never get success? Any idea? thx

+1  A: 

Try the file: URI scheme:

file://server/dir
file:///Z:/dir

The begin is always file://. The next path segment is the server. If it’s on your local machine, leave it blank (see second example). See also File URIs in Windows.

Gumbo
thanks for ur answer, gumbo!Unfortunately both solutions didn't work.is_dir() alsways returns false.PS: on a local dir (in example c:/dir) it returns true!
Max
Did you try that path in your Windows Explorer? It should work there too.
Gumbo
A: 

You probably let xampp install apache as service and run the php scripts trough this apache. And the apache service (running as localsystem) is not allowed to access the network the way your user account is.

A service that runs in the context of the LocalSystem account inherits the security context of the SCM. The user SID is created from the SECURITY_LOCAL_SYSTEM_RID value. The account is not associated with any logged-on user account.
This has several implications:
...
   * The service presents the computer's credentials to remote servers.
...

You can test this by starting the apache as console application (apache_start.bat in the xampp directory should do that) and run the script again. You can use both forward and backward slashes in the unc path. I'd suggest using //server/share since php doesn't care about / in string literals.

<?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>\n";
var_dump($dh, error_get_last());
echo  "\n</pre>";
VolkerK
A: 

I solved it by changing some stuff in the registry of the server as explained in the last answer of this discussion:

http://bugs.php.net/bug.php?id=25805

Thanks to VolkerK and Gumbo anyway! I love stackoverflow and their great people who help you so incredibly fast!!

Max