9

Windows Server で Xampp を実行しています。Apache は、ローカル アカウントでサービスとして実行されています。このサーバーでは、ネットワーク共有は特定の資格情報を持つ X: としてマウントされます。

X: にあるファイルにアクセスして、次のコードを実行したい

<?php
echo shell_exec("whoami");
fopen('X:\\text.txt',"r");
?>

そして得る

theservername\thelocaluser
Warning: fopen(X:\text.txt) [function.fopen]: failed to open stream: No such file or directory

サービスとしてではなく、httpd.exeを起動して直接Apacheを実行しようとしました...コードは機能しました。

サービスとアプリケーションの違いの原因と、それを機能させる方法がわかりません。

4

2 に答える 2

16

ネットワークにマップされたドライブは単一のユーザー専用であり、サービスで使用できないため (そのユーザー用にマウントする場合でも)、ドライブ文字を使用してこれを行うことはできません。

代わりにできることは、UNC パスを直接使用することです。次に例を示します。

fopen('\\\\server\\share\\text.txt', 'r');

ただし、UNC パスに対する PHP のファイルシステム アクセスにはいくつかの問題があることに注意してください。1 つの例は、私が imagettftext に対して提出したバグですが、 とにも問題がfile_existsありis_writeableます。後者については報告していません。これは、私の長年の未解決のバグからわかるようにimagettftext、何がポイントなのかという理由によるものです。

于 2013-01-16T20:58:23.637 に答える
7

ネットワーク共有の場合、UNC 名を使用する必要があります: "//server/share/dir/file.ext"

IP またはホスト名を使用すると、正常に動作するはずです。

$isFolder = is_dir("\\\\NAS\\Main Disk");
var_dump($isFolder); //TRUE

$isFolder = is_dir("//NAS/Main Disk");
var_dump($isFolder); //TRUE

$isFolder = is_dir("N:/Main Disk");
var_dump($isFolder); //FALSE
于 2013-01-16T20:58:38.070 に答える