0

ここで問題があります。すべてのクラスの名前空間を作成しました。以前は、Windows 7を使用して現在のアプリを開発していましたが、すべて問題ありません。今私はubuntuに移動しました、問題が来ます。

index.php

spl_autoload_extensions(".php");
/*spl_autoload_register(function ($class) {
    require __DIR__ . '/../' . $class . '.php';
});*/
//provided i have tried the above method, which works on windows 7 but not Ubuntu
spl_autoload_register(function ($class) {
    require '/../' . $class . '.php';
});

//for your info, i do this
//require "../resources/library/Config.php";
//it works, no error

use resources\library as LIB;
use resources\dal as DAL;

//instantiation
$config = new LIB\Config();
print_r($config->fbKey());

このエラーが発生しました

PHP Warning:  require(../resources\\library\\Config.php): failed to open stream: No such file or directory in /home/user/dir1/dir2/index.php

エラーが見つかりません。皆さんがこれで私を助けてくれることを願っています。どんな質問でも私が編集するコメントをすることを躊躇しないでください。前もって感謝します。

更新-追加情報

PHPバージョン5.4.6

最新の更新

str_replaceを使用せずにこれを解決する方法はありますか?JULPとMOONWAVEが答えを持っています!

4

3 に答える 3

1

WinとUnixではディレクトリ区切り文字が異なるため、ディレクトリ区切り文字に問題があります。

一貫性を保つために、自動ロード関数を更新する必要があります。

spl_autoload_register(function ($class) {
    require '/../' . str_replace("\\", DIRECTORY_SEPARATOR, $class) . '.php';
});

編集:このソリューションは、実稼働環境でかなり広く受け入れられています。

于 2012-12-10T16:20:57.073 に答える
0

どのPHPバージョンを使用していますか?(PHP <5.3.3では、デフォルトのspl_autoload_registerは名前空間を認識していませんでした-つまり、Unixシステムでは\は/に置き換えられませんでした)

コードで、次を置き換えてみてください。

require __DIR__ . '/../' . $class . '.php';

に:

require __DIR__ . '/../' . str_replace('\\', '/', $class) . '.php';

=>パスでは常にスラッシュを使用してください。スラッシュはどこでも機能します。バックスラッシュ、しないでください。また、Unixシステムでは、Windowsとは逆に、ファイル名で大文字と小文字が区別されることを忘れないでください。

于 2012-12-10T16:17:53.610 に答える
0

DIRECTORY_SEPARATORクロスプラットフォーム開発を行う場合は、PHPの定数の使用に慣れておく必要があります。

そこにあるエラーメッセージは、あなたが知る必要があるすべてを教えてくれるはずです。適切なLINUXファイルパスを生成していません。

于 2012-12-10T16:19:13.597 に答える