1

(これが不適切なタイトルである場合は申し訳ありません。私は実際に2つのことを達成しようとしています-PHPで現在のディレクトリがどのように変更されるかを調べ、WAMPで実行されているSimpletestのバグを修正します。)

EasyPHP (WAMP バリエーション) の Windows 7 ローカル マシンで SimpleTest (simpletest.org) を実行しています。

テストを実行すると、getcwd() に従って、ディレクトリがローカル スクリプト ディレクトリから C:\Program Files (x86)\EasyPHP\apache に戻ります。

getcwd() の出力を調べるために、いくつかの短いスクリプトを作成しました。期待どおり、現在のスクリプト パスが返されます: C:\Users\Burton\Desktop\Sites\dbmover. スクリプト:

サーバーパス/getcwd.php:<? echo getcwd(); require_once('tests/getcwd.php) ?>

サーバーパス/tests/getcwd.php:<? echo getcwd(); ?>

どちらも現在のパスを返します: C:\Users\Burton\Desktop\Sites\dbmover

Simpletest ソースを検索して、chdir() と chroot() の使用を確認しました - 唯一の方法です。Simpletest は chdir() を使用しません。

他に何がパスを変更している可能性がありますか??

この相対パスの問題は、Windows で使用される Simpletest では明らかに非常に一般的です。 スタックオーバーフローのこのポスターには、このポスターが他の場所にあるように、それがあります。

この問題を正常に扱う人いますが、私はバグだと思います。

私は dirname( __FILE__) を使用して自分で回避してきましたが、正しく動作するように修正したいと思います。

4

3 に答える 3

1

私は最も単純なものを使ったことがなく、内部を知らなければ言うのは難しいです。ただし、(exec / system /など)と呼ばれるコマンドは、作業ディレクトリに影響を与える可能性があります。注意すべき点の1つは、phpのcgiバージョン(sapi cliではない)が動作ディレクトリをスクリプトのディレクトリに変更し、php -l構文チェックやその他のアプリケーションに使用できる可能性があることです。それが問題である場合は、必ずパラメータを渡して-Cください。

于 2010-07-24T16:22:28.883 に答える
1

パスの問題は、Simpletestの実行方法が原因であることがわかりました。これには「自動実行」と呼ばれる優れた機能があります。これは基本的に、テストを呼び出す最初のファイルの上部にあるインクルードファイルです。

スクリプトが終了する直前に実行されるregister_shutdown_function()を使用します。ただし、この関数が実行されるときのパスは、WAMPの多くのバージョンですべて間違っています

この問題のバグ修正を提出しました。

ところで、PHPのディレクトリを変更できる関数は次のとおりです。system()exec()chdir()chroot()

于 2010-07-25T15:42:23.067 に答える
0

これは include_path の問題のように思えます。何echo get_include_path();を明らかにしますか?

于 2010-07-24T16:16:05.870 に答える