web-dev-qa-db-ja.com

IISを構成して、PHPスクリプトのネットワークリソースへのアクセスを許可します。

私は現在、PHPフロントエンドで作業しており、別々のサーバーで実行されている一連のアプリケーションを結合します。これらのアプリケーションの多くは、アクセスする必要があるファイルを生成しますが、これらのファイル(さまざまな理由で) )親サーバーに常駐します。

コマンドラインから、次のようなスクリプトを少し発行します。

<?php
var_dump(glob("\\\\machine-name\\some\\share\\*"));

PHP UNC共有のコンテンツを読み取ることでプログラム的に問題がないことを証明し、そのディレクトリの完全なコンテンツを取得します。ただし、同じスクリプトをWebサーバーから実行しようとすると、空の配列を取得します。具体的には、ファイルのようにディレクトリを「開く」ように設計されたより明示的な関数を使用すると、アクセスエラーが発生します。

これはアクセス許可の問題だと思いますが、私はサーバー/ネットワーク管理者のタイプではないため、これを修正してスクリプトを実行するために何をする必要があるのか​​わからず、チェックアウトしたリンクにはIISに関する限り、おそらく私のバックグラウンド、またはその欠如のために、これは実際に.NETを使用していないという事実と相まって、ひどい助けとなりました。

関連する統計:Windows Server 2008 Standard SP2 IIS 7.0 PHP 5.2.9

2つのタイプのサーバーに接続します。他のいくつかのほぼ同一のServer 2008マシンと、組み込みXPを実行するマシンです。

特に役に立たなかったリンクですが、おそらく誤解している可能性があります。

5
Dereleased

ご想像のとおり、これはアクセス許可の問題です... IISワーカープロセスがマシンのローカルアカウントとして実行されているユーザー(ほとんどの場合、IUSER _<MACHINENAME>)、およびそのユーザーは、UNC経由で参照しようとしている他のマシンでは認証されていません(また、acocuntも存在しません!)

テストと同じように、IIS managerに移動し、IISサービスがそのWebサイトで実行しているものを変更することができます...私はからの用語を使用していますServer 2003/IIS 6ですが、今はServer 2008のボックスが手元にないためです。IIS 7マネージャーでざっと見たら、ユーザーを設定できる場所を見つけることができるはずです。ワーカープロセスが実行されること。

1
Eric Gearhart

PHPアプリケーションはサービスアカウントを使用して実行されます。これは、ネットワークリソースにアクセスするために資格情報が使用されるユーザーアカウントです。IISのデフォルトは、このためのWebサーバーのローカルアカウント。そのアカウントには、ネットワークリソースにアクセスするためのアクセス許可がありません(ローカルアカウントであるため)。

IIS Webサイトのアプリケーションプールをドメインユーザーアカウントを使用して実行するように構成し、そのユーザーアカウントにネットワーク共有に対する適切なアクセス許可を与える必要があります。

Active Directoryドメインがない場合、またはこれらの2つのサーバーがそのメンバーでない場合は、少しトリッキーになりますが、どちらのサーバーでも同じユーザー名とパスワードで2つのユーザーアカウントを作成することでそれを行うことができます。

2
Massimo