|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-10-09 12:16 UTC] mattj at exitcare dot com
Description: ------------ I've looked at the documentation for opendir() and it says: opendir -- open directory handle resource opendir ( string path) It doesn't specifiy exactly what a valid path is, so maybe this isn't a bug and is working as intended, but I don't know. I used the following code to just test opendir() accross a network to a windows share. The computer's name I am trying to access is 'matt', the IP is '192.168.0.6', and the name of the share is 'F Drive'. I tried it with both the UNC and the IP with the proper escaping and they didn't work. I also tried them with forward slashes, didn't work either. The 'F Drive' share on the XP machine PHP is trying to access has Permissions set up to allow read access to 'Everyone', but with the nature of the error, I don't think permissions is even relevant, but I figured I should just mention that in case. Are windows network shares / UNC's not supported by PHP? I couldn't find any documentation on PHP's manual about network shares. They all returned Invalid Argument. Reproduce code: --------------- <?php $dir1 = "\\\\matt\\F Drive"; $dir2 = "\\\\192.168.0.6\\F Drive"; $dir3 = "//matt/F Drive"; $dir4 = "//192.168.0.6/F Drive"; opendir($dir1); opendir($dir2); opendir($dir3); opendir($dir4); ?> Expected result: ---------------- Shouldn't error. No output. Actual result: -------------- Warning: opendir(\\matt\F Drive): failed to open dir: Invalid argument in C:\Inetpub\wwwroot\ExitCareWeb\test.php on line 6 Warning: opendir(\\192.168.0.6\F Drive): failed to open dir: Invalid argument in C:\Inetpub\wwwroot\ExitCareWeb\test.php on line 7 Warning: opendir(//matt/F Drive): failed to open dir: Invalid argument in C:\Inetpub\wwwroot\ExitCareWeb\test.php on line 8 Warning: opendir(//192.168.0.6/F Drive): failed to open dir: Invalid argument in C:\Inetpub\wwwroot\ExitCareWeb\test.php on line 9 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 01 01:00:01 2025 UTC |
Hi there ! Had the same problem... but solved it :) in fact it IS permission related... (like sniper@php.net said) my conf: WEBsrvr nt5 + Apache/1.3.24 (Win32) PHP/4.3.4RC3-dev SMBsrvr nt5 the deal: WEBsrvr access a share on SMBsrvr with opendir() the problem: $d = opendir('\\SMBsrvr\whatever'); Warning: opendir(\\SMBsrvr\whatever): failed to open dir: Invalid argument in C:\Inetpub\www\script.php on line x --`this is not a usefull warning !` $fp = fopen('\\SMBsrvr\whatever\file.ext','rb'); Warning: fopen(\\SMBsrvr\whatever\file.ext): failed to open stream: Permission denied in C:\Inetpub\www\script.php on line y --`hmm, hmm, more interresting...` At this point had to investigate a bit more: Apparently apache + php know that \\SMBsrvr\whatever exists and that it is a valid directory ressource... Did some packet log on SMBsrvr: WEBsrvr sends a SMB `Tree Connect AndX Request` using nullSession SMBsrvr replies by an ACCESS_DENIED gotcha ! SMBsrvr doesn't allow nullSession... but why WEBsrvr tries to connect using nullSession ? because Apache is running as LocalSystem From MSDN: `Windows NT - LocalSystem: The service has limited access to network resources, such as shares and pipes, because it has no credentials and must connect using a null session. The following registry key contains the NullSessionPipes and NullSessionShares values, which are used to specify the pipes and shares to which null sessions may connect: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters Alternatively, you could add the REG_DWORD value RestrictNullSessAccess to the key and set it to 0 to allow all null sessions to access all pipes and shares created on that machine.` Enough blabla: Either you allow the host of share to accept nullSessions or you create an account with enough privileges on the apache host and when in mmc/Services/Apache/Connexion "Open a session as" - use the newly created account... All of this is true for Apache, but it should be 'approximatively' the same concept for IIS... a few references for this 'bug' (that is not) http://bugs.php.net/bug.php?id=24795 http://bugs.php.net/bug.php?id=22153 http://bugs.php.net/bug.php?id=20813 http://bugs.php.net/bug.php?id=13058 http://bugs.php.net/bug.php?id=12524 attn to: iliaa@php.net; sniper@php.net there are a lot of bug reports for this local config. problem maybe an addendum in the documentation could be usefull... sorry for my bad english... /hth /bye dr_no