16

Windows XP コンピュータにインストールされた PHP (XAMPP) 内 ローカル ネットワーク サーバーに存在するディレクトリを読み込もうとしています。is_dir()読むことができるディレクトリかどうかを確認するために使用しています。

Windows エクスプローラーで入力\\\server\dirすると、そのディレクトリが表示されます。ネットワークドライブをマップすると、それにアクセスすることもできますz:\dir

PHPには、そのスクリプトがあります:

<?php if( is_dir($dir){ echo 'success' } ) ?>

$dir私が試したために:

  • /server/dir
  • //server/dir
  • \server\dir
  • \\server\dir
  • \\\\server\\dir

  • z:\dir
  • z:\\dir
  • z:/dir
  • z://dir

しかし、私は決して成功しませんか?何か案が?どうも

4

4 に答える 4

10

このディスカッションの最後の回答で説明されているように、サーバーのレジストリ内のいくつかのものを変更することで解決しました。

http://bugs.php.net/bug.php?id=25805

とにかくVolkerKとGumboに感謝!私はstackoverflowと、信じられないほど速くあなたを助けてくれる彼らの素晴らしい人々が大好きです!!

編集(php.netから取得):

このサービスは、資格情報を持たず、null セッションを使用して接続する必要があるため、共有やパイプなどのネットワーク リソースへのアクセスが制限されています。次のレジストリ キーには、NullSessionPipes 値と NullSessionShares 値が含まれています。これらの値は、null セッションが接続できるパイプと共有を指定するために使用されます。 0 に設定すると、すべてのヌル セッションがそのマシンで作成されたすべてのパイプと共有にアクセスできるようになります。

レジストリに RestrictNullSessAccess=0 を追加します。

于 2009-07-20T20:10:02.360 に答える
9

おそらく、xampp に apache をサービスとしてインストールさせ、この apache を介して php スクリプトを実行させます。また、Apache サービス ( localsystemとして実行) は、ユーザー アカウントの方法でネットワークにアクセスすることはできません。

LocalSystem アカウントのコンテキストで実行されるサービスは、SCM のセキュリティ コンテキストを継承します。ユーザー SID は、SECURITY_LOCAL_SYSTEM_RID 値から作成されます。アカウントは、ログオンしているユーザー アカウントに関連付けられていません
これにはいくつかの意味があります:
...
   *サービスは、コンピューターの資格情報をリモート サーバーに提示します
...

これをテストするには、apache をコンソール アプリケーションとして起動し (xampp ディレクトリの apache_start.bat で実行する必要があります)、スクリプトを再度実行します。unc パスでは、スラッシュとバックスラッシュの両方を使用できます。PHP は文字列リテラルの / を気にしないため、 //server/share を使用することをお勧めします。

<?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>\n";
var_dump($dh, error_get_last());
echo  "\n</pre>";
于 2009-07-20T15:15:34.077 に答える
3

file:URI スキームを試してください:

file://server/dir
file:///Z:/dir

開始は常にfile://です。次のパス セグメントはサーバーです。ローカル マシン上にある場合は、空白のままにします (2 番目の例を参照)。Windows のファイル URIも参照してください。

于 2009-07-20T14:15:26.017 に答える