Unable to connect to network share

六眼飞鱼酱① 提交于 2019-12-29 08:23:12

问题


I'm trying to connect to a network share (by it's UNC) from the browser, but am unable to.

If I run my script from the command line, everything is fine and I can access the share. I'm also able to navigate to it through Windows' file explorer, so I don't think there's anything wrong with my code, or the permissions for my Windows account.

My script looks like this:

$dir = '\\\\some\path';

if (is_dir($dir))
{
    echo 'dir exists';
} 
else
{
    echo 'dir does not exist';
}

I also tried using DirectoryIterator($dir), but that throws this exception error: PHP Warning: opendir(...): Access is denied. (code: 5)

Here's my setup:
- Windows Server 2008 R2
- IIS 7.5
- PHP 5.3.13
- Anonymous Authentication disabled
- Windows Authentication enabled

And I have these config settings in my php.ini:

cgi.force_redirect=0
cgi.fix_pathinfo=1
fastcgi.impersonate=1

To add to the confusion, I was able to connect through the browser under these scenarios:

1 - using system("net use \"".$dir."\" ".$pass." /user:".$user." /persistent:no>nul 2>&1"); But this requires hardcoding the user's Windows auth password, which I can't do.

2 - Setting fastcgi.impersonate=0 But this means the user would have to authenticate everytime they hit the script, which is unacceptable.

3 - Enabling Anonymous Authentication, disabling Windows Authentication, but I need Windows Auth enabled in order to know who's accessing the site.

I don't know if this has anything to do with my problem, but I get different values for $_SERVER['USERNAME'] when running my script from the browser and from command line.

Is this a permissions issue? Is there an authentication token that's not being passed along?

Edit
Mapping the share to a network drive isn't an option in this case, unfortunately.


回答1:


It should work but you need the user who runs the php process to have access to the path.

In your case, if not in a domain, you can try to create a user on your server and set it as the application pool owner. Then you create the same user/password on the other computer and give access to the shared folder.

Looks ugly I agree but should work.

EDIT

Or yes, as suggested by Neal, create a mapped folder. May be easier.

EDIT 2

Assuming you are not in a domain, to create the user and assign it to run the application do as following:

  1. Create the user

  2. Run iismanager and set the user to run the application

The last step is to create the same exact user (password as well) on the remote server where you are sharing the path and add this user in the security tab with the rights you need.

You may need to restart iis: iisreset




回答2:


You cannot use a UNC path in PHP to access files easily.

Try making a mapped Network Drive.



来源:https://stackoverflow.com/questions/13884857/unable-to-connect-to-network-share

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!