0

私はindex.phpを持っています

<?php
    include('_controller/Autoloader.php');
    Gold_Autoloader::init();

    $mysql = new Gold_MySQL();

_controller / Autoloader.php

<?php
class Gold_Autoloader
{

    public static $loader;

    public static function init()
    {
        if (self::$loader == NULL)
            self::$loader = new self();

        return self::$loader;
    }

    public function __construct()
    {
        spl_autoload_register(array($this, 'controller'));
        spl_autoload_register(array($this, 'resources'));
    }

    public function resources($className)
    {
        $className = preg_replace('#Gold_#', '', $className);
        $className = preg_replace('#_#', DIRECTORY_SEPARATOR, $className);

        set_include_path(PROJECT_ROOT . '_resources');
        spl_autoload_extensions('.php');
        spl_autoload($className);
    }

    public function controller($className)
    {
        $className = preg_replace('#Gold_#', '', $className);
        $className = preg_replace('#_#', DIRECTORY_SEPARATOR, $className);

        set_include_path(PROJECT_ROOT . '_controller');
        spl_autoload_extensions('.php');
        spl_autoload($className);
    }
}

そして、Gold_MySQL.classを含むファイル_controller/MySQL.phpがあります。Windowsシステムでは、このコードは機能し、MySQL.phpを含みますが、このコードをホストすると機能しません((

[Thu Jan 27 12:55:57 2011] [error] PHP Fatal error: Class 'Gold_MySQL' not found in /home/u91167/youd0main.com/www/index_.php on line 5

編集

Unixが任意のファイルを参照できるようにするにはどうすればよいですか?Zendには小文字のファイルはありません。

4

3 に答える 3

3

ファイル名で大文字と小文字が区別され、間違った大文字と小文字でファイルを読み込もうとしているようです。gold_mysql.phpつまり、代わりに必要になる可能性がありますGold_MySql.phpか?

于 2011-01-27T10:08:27.480 に答える
2

サーバーファイルシステムで大文字と小文字を区別する問題のように聞こえます。パスとファイル名で大文字と小文字が正しいかどうかを確認してください。

linux/unixは大文字と小文字を区別します。Windowsはしません。


注:これは、以前のバージョンの質問に回答します

于 2011-01-27T10:08:31.987 に答える
0

インクルードパスをオーバーライドしている可能性があります。index.phpで次のようなものを試してください

<?php

set_include_path(
    implode(PATH_SEPARATOR,
    array(
        realpath('./_controller'),
        realpath('./_resources'),
        get_include_path()
    ))
);

そして、オートローダークラスのset_include_path()呼び出しを削除します。

IMHO、Zend Frameworkを使用している場合は、2つのセパレーターオートローダーを作成し、それらをZendのオートローダースタックにプッシュすることをお勧めします。

于 2011-01-28T01:32:47.037 に答える