2

PHPでは、を呼び出してファイルを一覧表示しますexec("dir ...")。ただし、これは奇妙なことにローカルドライブでのみ機能します。ネットワークドライブでは、ゼロ以外の結果ステータスコードがあり、結果は返されません。

私はWindowsXPProfessionalでApacheを実行しています。

これを修正するためのトリックはありますか?または、エラーメッセージを表示するには?

編集:apacheは私と同じユーザーの下で実行されており、コマンドラインから実行できます

4

1 に答える 1

5

「コマンドラインからもできない」と言うつもりでしたが、以前はそうだったと思いますが、WinXP Pro SP3 で試してみたところ、うまくいきました。

しばらく前 (私が PHP の世界で明らかに環境に配慮していたとき)、ネットワーク ドライブと通信するために PHP を取得する必要があり、それを機能させるには悪夢を見ました。 :

  • 「サービス」MMC スナップインで、Apache を実行するユーザー アカウントをローカル ユーザーに変更します。現時点ではおそらくSYSTEMに設定されており、(AFAIK)そのアカウントはネットワークドライブにアクセスできません。これを行った後、サービスを再起動する必要があります。
  • アクセスしようとする前に次の行を追加してください: system('net use Z: "\\servername\sharename" PASSWORD /user:USERNAME /persistent:no');、ドライブ文字、UNC パス、ユーザー名などを要件に合わせて変更します。ドライブが既にマップされている場合でも、これを行ってください。system()orの代わりに使用する必要があったことを覚えているようですexec()or shell_exec()or 動作しませんでした-結果として、出力がSTDOUTに渡されるのを停止するには、output-bufferが必要です。

なぜこれが機能したのかわかりませんが、機能しました。ただし、ドライブに対して外部プログラムを使用しようとするのではなく、opendir()や などのネイティブ PHP 関数でドライブを使用しようとしていたことに注意してください。fopen()exec()

への呼び出しからのエラー メッセージを表示する場合は、コマンドの末尾にdir追加します。2>&1これにより、STDERR が STDOUT にリダイレクトされるため、exec().

したがって、行は次のようになります。

exec("dir Z:\\some\\path 2>&1")
于 2011-12-15T18:17:02.377 に答える