Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
637 views
in Technique[技术] by (71.8m points)

php - Unable to connect to network share

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 = '\\somepath';

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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 Create the user

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

Assign the user to run your 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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...