3

PHP を使用して、PHP アプリケーション自体の更新プログラムを解凍しています。これは、更新サーバーから zip ファイルを取得して解凍し、解凍したファイルをアプリケーション用に現在存在するファイルに再帰的に移動することによって行われます。

問題は、次にアプリケーションを使用するときに、__FILE__ (少なくとも 1 つの新しいファイル内) が、zip ファイルが最初に解凍されたディレクトリ内の場所を示していることです。これはファイルの実際の場所ではないため、現在のディレクトリを見つけるために __FILE__ を使用する後続の require 関数呼び出しでエラーが発生します。

最も奇妙な部分: エディターでファイルを開いて再保存するだけで (スペースを追加して削除するなど)、PHP がファイル パスを正しく解決します。

何がうまくいかないのかについてのアイデアはありますか? どういうわけかPHPは、ファイルがどこから来たのかを「知って」おり、現在の場所ではなくその情報を取得しているようです。ファイルを再保存すると、PHP (またはファイル システム) が起動します。

4

2 に答える 2

4

私は問題を発見しました。キャッシングの問題だと推測するべきでした。問題は、サーバーが APC opcode キャッシュを使用していることです。このファイルは、解凍フォルダーの場所にある必要があります。ファイルはすでに APC キャッシュに存在するため (同じ変更日を持つまったく同じファイル)、新しい場所でファイルが必要になると、古いパスを含む APC オペコード キャッシュにキャッシュされたファイルが使用されます。

そのようにパスを混同するバグのようですが、修正は簡単です。ファイルを移動した後に opcode キャッシュをリセットすると、問題が修正されます。

于 2012-08-22T01:10:25.307 に答える
0

PHP はファイルを別の名前で一時的な場所に保存します。私の推測では、解凍プロセスによって一時ディレクトリにファイルが作成され、それらを移動してファイルが見つからないということです。

私は間違っている可能性があり、あなたの質問をよく理解していませんでしたが、ファイルの名前とパスを出力してみてください。「移動」操作でも同じです

于 2012-08-22T01:05:55.020 に答える