3

「何かが変更されたに違いない」ことはわかっていますが、私のコードは理由もなく一晩で壊れたようです。

私のサーバーディレクトリ構造は次のようなものです:

/
/scripts
/audit
/other_things

curl を使用して Web ページからデータを収集し、読み取った Web ページの日付付きコピーを「audit」フォルダーに保存する「scripts」フォルダーにスクリプト (「/scripts/MyScript.php」と呼びます) があります。

監査フォルダーに書き込むには、使用しました

$fh = fopen("./audit/2008-09-09-183000.backup.log","w");

しかし、それは機能しなくなり、投げました

[function.fopen]: ストリームを開くことができませんでした: No such file or directory in /home/web/website.co.uk/audit/2008-09-09-183000.backup.log 行 353

ただし、パスを次のように変更することでこれを修正しました

「../audit/2008 など」「./audit/2008」から (1 つではなく 2 つのピリオド/ピリオド)

ロジックは、サーバー構成で何かが変更されたに違いないと指示しますが、何ですか? 私が管理している専用サーバーです。このようなことが再び起こらないようにするにはどうすればよいでしょうか。

MyScript.php の SVN も調べましたが、以前のバージョンはすべて単一の .php を使用していました。パスで。

4

3 に答える 3

8

dirname(__FILE__)現在のファイルのファイルシステム パスを取得するために使用します。次に、そこからの相対パスを使用してauditディレクトリを見つけます。

たとえば、 withinscripts/MyScript.phpdirname(__FILE__)を返し/home/web/website.co.uk/scriptsます。それに確実に追加できます/../audit

(これはincluded またはrequired ファイルでも機能することに注意してください。その場合、インクルードされたファイルが配置されているディレクトリが返さます)。

于 2009-08-20T00:07:52.173 に答える
0

CWD (現在の作業ディレクトリ) が変更され、ドキュメント ルートからドキュメント ルート/スクリプトになりました。

これは、スクリプトへのアクセスに使用されたパスが原因で発生した可能性があります。たとえば、URL の書き換えなどのために以前にhttp://website.co.uk/MyScript.phpを使用していて、現在はhttp://にアクセスしている場合などです。 website.co.uk/scripts/MyScript.php .

他にも可能性のある犯人がいたことを思い出すようですが、今は思い出せません。いくつかの書き換えルールまたは URL をいじりましたか? (つまり、PATH_INFO の使用を開始しましたか?)

于 2009-08-20T00:01:11.673 に答える