1

機能していない私に受け継がれたサイトで作業を始めたところです。/admin/index.php で /classes/admin.php のインスタンスをインスタンス化しようとするときに問題があることがわかりました。ただし、/admin/index.php を /admin-index.php にコピーすると、クラスを正常にインスタンス化できます。また、/classes/admin.php を /admin/classes/admin.php に移動すると、問題なくインスタンス化することもできます。私がこれに気付いた他のクラスが少なくとも1つあります。

また、これは私のローカル開発マシンでは問題にならないことにも気付きました。サーバー側だけの問題です。

サーバーに関する情報はhttp://charlesekublyfoundation.org/admin/phpinfo.phpにあります。私の開発マシンは、Apache 2.2 と PHP 5.2.11 (Apache/2.2.14 (Win32) PHP/5.2.11 ) を実行する WinXP マシンです。

誰もこのようなものを見たことがありますか?奇妙に思えます。私は PHP 開発 (主に .NET 開発者) にかなり慣れていないので、何が原因なのかわかりません。それがPHPの違いなのか、Apacheの違いなのか、それとも何か他のものなのかはわかりません。

編集 私は、開発マシンがWindowsであるのに対し、私のサーバーはLinuxのブランドで実行されていることに注意してください。include_pathsを調べた後、これと関係があると感じています。

4

2 に答える 2

2

この問題に関与している可能性があると私が考えることができることがいくつかあります。

あなたの説明から私が思う最も可能性の高いものは、開発者が PHP のinclude_path設定に依存していたということです。この設定は、require()およびinclude()コマンドと連動して、ハード パスが指定されていない場合に要求されたファイルを探す場所を指示します。コードが相対パスを使用していて、include_path設定が異なる場合、問題になる可能性があります。通常、にはパスの一部としてinclude_path「現在のディレクトリ」(つまり) が含まれ、インクルードはそれをベースとして使用して行われます。.

もう 1 つの可能性は、アプリケーションがautoloadingを利用しており、どういうわけかこれが本番環境に適切に変換されていないことです。アプリケーションをすばやく検索して、__autoload()指定された関数があるかどうか、またはspl_autoload_register()使用されているかどうかを確認します。もしそうなら、おそらく自動ロード機能は、開発マシンでのみ当てはまるディレクトリの仮定を行っていますか?

于 2010-01-29T18:34:25.840 に答える
0

インクルード パスを調べて、正しく機能しない理由を確認する必要があります。インクルード パス情報は、アプリケーション自体だけでなく、PHP 構成ファイル (通常は php.ini) にも配置されます。アプリケーションでは、関数 get_include_path を使用して、それが返すものを出力できます。

于 2010-01-29T18:38:48.613 に答える