windowsにインストールされたPHP(XAMPP)内)XPコンピューターローカルネットワークサーバーに存在するディレクトリを読み取ろうとしています。is_dir()
を使用しています。それが私が読むことができる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
しかし、私は決して成功しませんか?何か案が?どうも
このディスカッションの最後の回答で説明したように、サーバーのレジストリ内のいくつかのものを変更することで問題を解決しました。
http://bugs.php.net/bug.php?id=25805
とにかくVolkerKとGumboに感謝します!私はstackoverflowとあなたを信じられないほど速く助ける彼らの素晴らしい人々が大好きです!!
編集(php.netから取得):
このサービスには資格情報がなく、nullセッションを使用して接続する必要があるため、共有やパイプなどのネットワークリソースへのアクセスが制限されています。次のレジストリキーには、Nullセッションが接続できるパイプと共有を指定するために使用されるNullSessionPipes値とNullSessionShares値が含まれています。HKEY_LOCAL_MACHINE\ SYSTEM\CurrentControlSet\Services\LanmanServer\Parametersまたは、REG_DWORD値RestrictNullSessAccessをキーに追加することもできます。 0に設定すると、すべてのnullセッションがそのマシンで作成されたすべてのパイプと共有にアクセスできるようになります。`
restrictNullSessAccess = 0をレジスターに追加します。
おそらく、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>";
file:
URIスキームを試してください。
file://server/dir
file:///Z:/dir
始まりは常にfile://
です。次のパスセグメントはサーバーです。ローカルマシン上にある場合は、空白のままにします(2番目の例を参照)。 WindowsのファイルURI も参照してください。
はい、これは古い投稿であることはわかっていますが、それでも見つかりました。他の誰かが見つけた場合は... Windowsで、新しいサーバーを使用して、SMBがターゲットにインストールされ、有効になっていることを確認してください機械。