PHPでは、を呼び出してファイルを一覧表示しますexec("dir ...")
。ただし、これは奇妙なことにローカルドライブでのみ機能します。ネットワークドライブでは、ゼロ以外の結果ステータスコードがあり、結果は返されません。
私はWindowsXPProfessionalでApacheを実行しています。
これを修正するためのトリックはありますか?または、エラーメッセージを表示するには?
編集:apacheは私と同じユーザーの下で実行されており、コマンドラインから実行できます
PHPでは、を呼び出してファイルを一覧表示しますexec("dir ...")
。ただし、これは奇妙なことにローカルドライブでのみ機能します。ネットワークドライブでは、ゼロ以外の結果ステータスコードがあり、結果は返されません。
私はWindowsXPProfessionalでApacheを実行しています。
これを修正するためのトリックはありますか?または、エラーメッセージを表示するには?
編集:apacheは私と同じユーザーの下で実行されており、コマンドラインから実行できます
「コマンドラインからもできない」と言うつもりでしたが、以前はそうだったと思いますが、WinXP Pro SP3 で試してみたところ、うまくいきました。
しばらく前 (私が PHP の世界で明らかに環境に配慮していたとき)、ネットワーク ドライブと通信するために PHP を取得する必要があり、それを機能させるには悪夢を見ました。 :
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")