私はIIS7.5でphp 5.2を使用しています。PHP5.2 + IIS7.5でネットワーク共有にアクセス
私はNAS上にユーザー名とパスワードで保護されたネットワーク共有を持っています。 NASの認証情報を無効にしたり変更したりすることはできません。私は、PHPを介してそのネットワーク共有にアクセスできるようにする必要があります。
私は次のことをやった:
は、ユーザー名とパスワードをNAS上のものと一致したウィンドウに新規ユーザーを作成しました。 この同じ認証情報を使用するIISアプリケーションプールを作成しました。 同じ認証情報を使用して、偽装をオンにしてphpアプリケーションディレクトリ内にweb.configファイルを作成しました。
身元偽装= "true" のパスワード= "ThePass" のuserName = "TheUser" /> IISでアプリケーション認証でASP.NETの偽装に回さ
。このどれもPHPのコードのこのシンプルなラインで動作するように見えた:
$ dirを=のopendir( "\\ someservername \ somesharename"); 警告:opendir(\ someservername \ somesharename)[function.opendir]:dirを開くことに失敗しました:C:\ websites \ site \ forum \ testing.php 7行目でエラーなし
ASP.NETを使用した構成
string [] diretories = System.IO.Directory.GetDirectories( "\\ someservername \ somesharename"); asp.netテストは完全に機能しました。
さらにウサギの穴を通って、phpinfo()を実行して、その中のユーザー名情報を確認しました。 phpinfoの "Environment"セクションで、 "USERNAME"という項目が見つかりました。私の期待通りに、その価値は "The User"でした。私は試みまで、システムに
すべてポイントが正しく構成されている:
エコーget_current_userを(); 「IUSR」が返されました。確かに私が期待したものではありません。
だから、世界のどのように私はPHP + IIS7.5を外国のネットワーク共有から読み込むのですか?
更新:回答の数に
おかげで、私は成功を返し
$result = shell_exec("net use o: \\\\pathToServer\\27301 /persistent:yes 2>&1");
を追加しました。私はまだopendirでエラーを取得しています。別のテストを試み、is_dirを使用しました。これは、新しく作成されたマップされたドライブでfalseを返しました。
var_dump(is_dir("o:\\"));
// Prints: bool(false)
UPDATE
作成したユーザーとしてログインしたとき、私は、コマンドラインからスクリプトを実行しました。スクリプトは正しく実行されます。これはIUSRを返すget_current_user()に戻ることができますか?私はプロセスIDを返したgetmypid()を試しました。私はそのプロセスIDをタスクマネージャーに渡し、自分が作成したカスタムユーザーアカウントで実行されているphp-cgi.exeであることを発見しました。
[このノート](http://us3.php.net/manual/en/function.opendir.php#89091)(マウント/アクセスに関する)と[このメモ](http:// us3.php.net/manual/en/function.get-current-user.php#75059)(スクリプトの所有者ではなく)スクリプトのプロセスの所有者に関連していますか? – chrisn
最初のものはここでは適用されません。IISではなくApacheを使用していました。 – Darthg8r
地図ネットワークドライブ? –