2017-02-21 15 views
1

(Linux上で動作します)は、Windows 10上の既存のファイルをロードすることはできません。それ以外の場合は元のpsr4オートローダーの例です:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.mdのrequire_onceは、私たちのオートローダーとの神秘的な問題があります

このオートローダーは私のLinux PCと私たちのサーバーで動作します。ただし、Windowsではfile_exists($file)がtrueを返しますが、require_once $file;は機能しません。 $fileを返すと、ロードするファイルと正確に同じファイルが返されます。

エラーメッセージがある:

Fatal error: Class 'basedir\DatabaseAbstraction\AEntity' not found in C:\xampp\htdocs\xyz\classes\DatabaseAbstraction\Entity\UserLogin.php on line 14

線であること:class UserLogin extends AEntity。状況:

namespace basedir\DatabaseAbstraction\Entity; 


use basedir\DatabaseAbstraction\AEntity; 

class UserLogin extends AEntity 

+0

とにかくあなたが問題に直面していたので、私は答えを続けます...あなたの編集に関しては、エラーがトリガされたときの '$ file'の内容は何ですか? – NaeiKinDus

+0

'$ file'ですべてがうまくいきます。 '<?php'にPHPがありませんでした... – Tekay37

+0

少なくともあなたは今何か働いています。しかし、これをチェックするのは良いかもしれません;) – NaeiKinDus

答えて

2

Windowsのディレクトリ区切り文字は "\"ですがLinuxは "/"です。 「DIRECTORY_SEPARATOR」キーワードを使用してパスの作成に使用する文字を表す必要があります。現在のOSに応じて、実行時に決定されます。あなたはまた、それに応じSOURCE_DIRを手直しする必要があります

$base_dir = SOURCE_DIR . DIRECTORY_SEPARATOR; 
[...] 
$file = $base_dir . str_replace('\\', DIRECTORY_SEPARATOR, $relative_class) . '.php'; // assuming your $base_dir follows the same logic 

:与えるだろう、あなたの場合は

AEntity.phpが<?の代わり<?phpで開始したファイル:念のため

+0

ありがとう、しかし、それはそれを解決しませんでした。私は私の質問を編集しました。オートローダはクラスで動作しましたが、拡張するクラスでは機能しません。 – Tekay37

+0

"/"はWindows上のphpでうまく動作します – Jaime

+0

@Jaime:どのWindows版ですか?どのPHPバージョンですか?私はそれに興味があるでしょう:) – NaeiKinDus

0

。そのため、そのファイルはそのWindowsコンピュータにロードされませんでした。

私は今泣いています。

+0

短いタグはphp.iniの設定オプションです。これは、おそらく2台のコンピュータで異なる設定になっています。設定に関係なくいつも '<?php'を使うことをお勧めします – Jaime

関連する問題