2

これは私のphpコードです:

<?php
require_once 'php/Classes/User/UserDataBaseManager.php';
require_once 'facebook/src/facebook.php';
?>

そして、http:/mydomain/myfile.phpでこのコードを参照しようとすると、ブラウザーはエラー500を返します。

Apacheログによると:

[Wed Apr 18 20:38:07 2012] [error] [client 190.50.81.189] PHP Fatal error: require_once() [<a href='function.require'>function.require</a>]: Failed opening required 'php/classes/DataBase/DataBaseManager.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/virtuales/blyxo.com/php/Classes/User/UserDataBaseManager.php

ソリューション?

4

4 に答える 4

2

これが私にはどのように見えるかは、ファイルUserDatabaseManager.phpがDataBaseManager.phpをインクルードしようとしているが、間違ったパスを提供していることです。apacheエラーは、最初に現在のディレクトリを検索し、次に.現在のディレクトリを検索することを示しています。/usr/share/pear/usr/share/php

DataBasemanger.phpファイルが最後の2つに含まれていません。現在のディレクトリを検索しようとすると、相対パスが含まれます。したがって、UserDataBaseManager.phpファイル(にあるphp/Classes/User/)がそのパスを提供すると、apacheは最終的にDataBaseManager.phpファイルを検索します。php/Classes/User/php/classes/DataBase/DataBaseManager.php

これにアプローチする方法はいくつかあります。ドキュメントルートを取得して、このようにすべてのインクルードに追加することができます

$root = $_SERVER['DOCUMENT_ROOT'];
require_once($root . "/php/classes/DataBase/DataBaseManager.php");

または、このアプリが制御された環境にあり、php.iniファイルを編集できる場合は、インクルードパスを定義して、ファイルをインクルードすることもできます/var/www/virtuales/blyxo.com/php/Classes/

require_once("Database/DataBaseManager.php");

より良い解決策は、新しいオブジェクトをインスタンス化しようとするたびに呼び出される__autoload関数を定義し、含めるファイルを探すためにロジックを使用することです。このソリューションにはもう少し再構築が必要ですが、検討することもできます。独自のオートローダーの定義に関するドキュメントは次のとおりですhttp://us2.php.net/manual/en/function.autoload.php

私はこれを行う他の方法があることを知っています。何があなたに役立つか教えてください!

于 2012-04-19T03:01:57.687 に答える
0

試す

echo getcwd();

パスに関連する問題をトラブルシューティングするための作業パスを見つけるため。

于 2012-04-19T02:41:37.283 に答える
0

あなたが試すことができます

<?php require_once(dirname(__FILE__) . "php/Classes/User/UserDataBaseManager.php");?>
于 2012-04-19T02:48:42.860 に答える
0

Apacheをチェックerror.logしたところ、で問題が見つかりましdbnamedbconn.php

PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000] [1049] Unknown database 'study_db' 

次に、データベース名を修正すると、機能し始めました。

于 2020-12-23T15:43:03.763 に答える