Вопрос

У меня есть сервер, на котором работает много клиентов, и когда я разрабатываю, я включаю свой init.php, в котором у меня есть __autoloader() функция, которая включает файл с dir_name(__FILE__)."/classes/".$className например.

Но вчера я увидел, что сервер не может найти конкретный класс, я перезапустил Apache, и тогда он снова заработал.

У каждого клиента есть свой init.php...(и, следовательно, множество __autoloads на одном сервере)

customer1/init.php            : holds __autoload()
customer1/classes/class.php

customer2/init.php            : holds __autoload()
customer2/classes/class.php

Я не проводил некоторых тестов и надеюсь, что кто-нибудь сможет ответить на мой вопрос, прежде чем я попытаюсь воспроизвести проблему, но думаете ли вы, что php может использовать неправильную функцию автозагрузки, когда вы получаете 2 или более запросов одновременно?

Является ли spl_autoload_register решением?

Большое спасибо за идеи или мозговой штурм.

Это было полезно?

Решение

Я предполагаю, что у вас должна быть опечатка либо в одной из ваших функций __autoload(), либо вы включаете неправильный файл init.php.

Кроме того, dir_name() не существует, вам следует изменить его на имя каталога() вместо этого или вы также можете использовать новый НАПРАВЛЕНИЕ постоянный для того же эффекта, если вы используете PHP >= 5.3.

РЕДАКТИРОВАТЬ: В свете вашего комментария следует использовать:

require(realpath(dirname(__FILE__)) . '/classes/' . $className);

или

require(realpath(__DIR__) . '/classes/' . $className);

Другие советы

Каждый PHP-запрос совершенно отдельный, фактически невозможно иметь две функции с именами __autoload() в одном и том же запросе PHP, поэтому они не могут вмешиваться.Возможные проблемы:

  • Вы включаете не того клиента init.php
  • Вы забыли включить init.php файл, и в этом случае существует нет автозагрузка вообще.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top