奇妙な問題が発生しています。ホストサーバーにアップロードする前に、xamppサーバーでWebサイトのローカルホストを開発しています。ついにホームページをロードできるように、Web サイトの基本的なコンポーネントを完成させました。すべてが計画どおりに機能しました。
そのため、ホスト サーバーにアップロードすることにし、MySQL 資格情報を設定しました。これで動作するはずです。ええと..いいえ、そうではありませんでした。空のページです。
echo 'test';
そこで私は手袋をはめ、何が起こっているのかを追跡できるように、ランダムな表現でコードを掘り下げ始めまし
た。実行されるまでis_callable()
は問題なく動作しているようです。
is_callable()
実行する必要が__autoload($class)
あるので、試しましたvar_dump($class)
それは私にこの結果を与えました:
string(11) "Initializer"
string(8) "Database"
string(14) "PageController"
string(14) "BaseController"
string(14) "pcu2phmmr6pam3"
string(14) "pcu2phmmr6pam3"
これで、最後の 2 つを除いて、ここにリストされているすべてのクラスがそこにあるはずです。どこにも設定した文字列ではないため、その名前の由来はわかりません。
Google が私に示した唯一の結果pcu2phmmr6pam3
は、同様の問題を抱えている別の Web サイトでした。
今、本当に奇妙なことが起こります。私の autoload 関数は次のようになります。
function __autoload($class) {
var_dump($class);
if (file_exists(ROOT_PATH . DS . 'site' . DS . 'class' . DS . $class . '.class.php')) {
require_once(ROOT_PATH . DS . 'site' . DS . 'class' . DS . $class . '.class.php');
} else if (file_exists(ROOT_PATH . DS . 'site' . DS . 'controller' . DS . $class . '.class.php')) {
require_once(ROOT_PATH . DS . 'site' . DS . 'controller' . DS . $class . '.class.php');
} else if (file_exists(ROOT_PATH . DS . 'site' . DS . 'model' . DS . $class . '.class.php')) {
require_once(ROOT_PATH . DS . 'site' . DS . 'model' . DS . $class . '.class.php');
} else{
throw new Exception('Class `' . $class . '` could not be loaded!');
}
}
ロードする必要があるすべてのクラスがロードされます。存在しないクラスを作成したい場合は、例外がスローされます。
しかし、pcu2phmmr6pam3
「クラス」の場合はそうではありません。設定したにもかかわらず、例外はスローされず、画面にエラーが出力されましたerror_reporting(E_ALL)
の周囲のコードは次のis_callable()
とおりです。
$controllerName = ucfirst($this->structure) . 'Controller';
$action = strtolower(((!empty($this->uri[1]))?$this->uri[1]:'index'));
if (is_callable(array($controllerName, $action))) {
$controller = new $controllerName($this->uri, $this->database, $this->structure, $action, $page);
$controller->$action();
} else if (is_callable(array($controllerName, 'index'))) {
$controller = new $controllerName($this->uri, $this->database, $this->structure, 'index', $page);
$controller->index();
} else {
$controller = new NotfoundController($this->uri, $this->database, 'Notfound', 'index', $page);
$controller->index();
}
私があなたに提供できる最後の情報:
私のローカルホスト xampp サーバーは PHP 5.4.7 を実行し、ホスト サーバーは PHP 5.3.20 を実行します。
解決済み、奇妙なクラス名がどのように表示されたのかわかりません。誰かが知っていれば、理由を知りたいです:)