IISのWindows Server 2012 R2で動作するPHPスクリプトを使用しているサイトがあります。私はネットワーク上の別のサーバ上のファイルを読むためにfopenを使用しようとしていますが、問題があります。 fopenコマンドを使用してローカルサーバー上のファイルを開き、PHP CLIを使用して、リモートサーバー上のファイルを正常に開くことができます。私は私のブラウザを使用してサイトを経由して、それを処理しようとすると、PHPはネットワークファイルを開くことができません
しかし、それはエラーで失敗する:IISで
"failed to open stream: Permission denied"
、私は新しいアプリケーションプールを作成し、ドメイン管理者としてのアイデンティティーを設定しています両方のサーバーへの管理者アクセス権がありますが、これは役に立たないようです。これは、CLIが動作したときにCLIを実行したアカウントと同じです。私は(あまりにものをエスケープして)バックスラッシュを使用してみました
fopen("//remoteservername/c$/inetpub/wwwroot/test.html", "w") or die("Can't open file!");
:
はここで私が使用している私のPHPスクリプトコードです。 FILE://を先に使ってみました。リモートサーバーのドライブをPHPを実行するWebサーバーにマッピングし、Y:\ inetpub ...のようなパスを使用してみました。Windowsサーバーであるため、 "w"の代わりに "rb"を使用しようとしました。
サイトが実行されているアカウント/アイデンティティと関係がありますが、私が変更した後もまだそれがなぜ機能しないのか分かりません。
UPDATE:私は、同じファイルを開くしようとした場合、私はfopenの作品がローカルサーバー上のファイルを読み込むことを述べたが、私は以下のように相対パスを使用する場合には、唯一の真のだそうです...
fopen("test.html", "w") or die("Can't open file!");
以下のような絶対パスを使用してローカルサーバに接続すると失敗します。だから私は...それはアイデンティティの問題だともう
fopen("//localservername/c$/inetpub/wwwroot/test.html", "w") or die("Can't open file!");
UPDATE確信していない。だから私は両方のCLIでとブラウザを経由して(「whoamiを」)はshell_exec走りました。 CLIでそれを実行すると、シェルを実行しているドメインアカウントが表示されます。しかし、ブラウザでスクリプトを実行すると、 "nt authority \ iusr"と表示されます。他のユーザーの下で実行する方法を知りたいIIS内のアプリケーションプールIDを変更しても、テストで知ることのできるものとは違いはありません。
echo shell_exec("whoami");
もしも助けがあれば、ずっと前にPHP/IISやネットワークドライブと戦いました。サイトの管理者/開発者は、異なるユーザーによって報告された矛盾した動作を見ていました。これは、認証にNTLMを使用するイントラネットアプリケーションでした。その動作を説明するために唯一の合理的な説明がありましたが、PHPコードはNTLM(erk!)経由で提供されているアクセス許可で実行されていました。我々はこれを完全には検証しなかった。 – symcbean