Форумы портала PHP.SU » » Вопросы новичков » Помогите с autoload

Страниц (1): [1]
 

1. sKaa - 09 Ноября, 2011 - 12:18:01 - перейти к сообщению
PHP 5.3.8
PHP:
скопировать код в буфер обмена
  1.  
  2. function __autoload($classname) {
  3.         $filename = 'system/php/' . $classname . '.php';
  4.         if(file_exists($filename)){
  5.                 echo 'please wait for loading ' . $classname .'.php...';
  6.                 include_once($filename);
  7.                 }else{
  8.                 echo 'invalid file '. $filename;
  9.                 }
  10.        
  11.         }
  12.  
  13. $base = new core();
  14.  

Выдает мне следующее : please wait for loading core.php... Fatal error: Class 'core' not found in C:\www\tm\index.php on line 30

В чем причина??
2. Мелкий - 09 Ноября, 2011 - 12:25:28 - перейти к сообщению
autoload совершенно не при делах, он честно отработал.
В подключённом файле не оказалось класса core.

PS: include_once для автолоада не нужен, он и сам проверяет, доступен ли уже запрашиваемый класс, или его надо загружать. Двойная работа получается.
3. sKaa - 09 Ноября, 2011 - 12:27:56 - перейти к сообщению
Содержимое файла system/php/core.php :
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. class core {
  4.         //@{
  5.         public $registry;      
  6.                
  7.         //@}
  8.        
  9.  
  10.                
  11.         function __construct(){
  12.                 echo 123;
  13.                 }
  14.        
  15.        
  16.         }
  17.  

Мелкий, мне себя достаточно трудно отнести к новичкам, в пхп 5.1 всё работало, сегодня перешел на 5.3.8 и сразу такое, как я только не бился..
4. Мелкий - 09 Ноября, 2011 - 12:50:57 - перейти к сообщению
Ну, чего быть не может. Проверяйте пути, может хватается какой другой файл core.

PHP5.3.3, 5.3.5, 5.3.8 копипаста представленного кода работает.
5. sKaa - 09 Ноября, 2011 - 12:56:30 - перейти к сообщению
У меня нет другова файла! Все папки пусты, только
index.php
и
system/php/core.php
)))) ну я че за тип бы был еслиб другой файл цеплял )))
пробовал даже так :
PHP:
скопировать код в буфер обмена
  1.  
  2. define ('DS', DIRECTORY_SEPARATOR);
  3. define ('SITE_PATH', realpath(dirname(__FILE__) . DS . '..' . DS) . DS);
  4.  

толку нет ))
щя ещё попробую core.php переместить в корень чтоли) хз уже че делать...
мне кажется это как-то связано с namespace в 5.3.8 но я их не использовал ещё.
гугл тоже выдает кучу результатов по "не работает __autoload php 5.3.8" но по делу там ниче конкретного ))
6. EuGen - 09 Ноября, 2011 - 13:03:19 - перейти к сообщению
Посмотрите, что же отладка сообщает. Например, так:
PHP:
скопировать код в буфер обмена
  1. function __autoload($classname) {
  2.         $filename = 'system/php/' . $classname . '.php';
  3.         if(file_exists($filename)){
  4.                 echo 'please wait for loading ' . $classname .'.php...';
  5.                 include_once($filename);
  6.                 }else{
  7.                 echo 'invalid file '. $filename;
  8.                 }
  9.            var_dump(get_declared_classes());   
  10.         }
7. caballero - 09 Ноября, 2011 - 13:05:03 - перейти к сообщению
укажи полный путь к файлу
8. Мелкий - 09 Ноября, 2011 - 13:06:20 - перейти к сообщению
И заодно realpath($filename).
9. sKaa - 09 Ноября, 2011 - 13:12:50 - перейти к сообщению
Так вы тут все умные)), столько советов, чисто человеческое огромное спасибо за идеи, но вот :
мой файл index.php :
Спойлер (Отобразить)


core.php :
Спойлер (Отобразить)


Вот всё что пишет браузер :
Спойлер (Отобразить)
10. DlTA - 09 Ноября, 2011 - 13:34:15 - перейти к сообщению
попробуем по глупым вариантам пройтись
$base = new core; => $base = new core();
11. sKaa - 09 Ноября, 2011 - 13:42:55 - перейти к сообщению
Короче кто думает что я издеваюсь глядите до чего я дошел :
Спойлер (Отобразить)


Спойлер (Отобразить)


Но за то работает !!!!))))))))) Гуру скажите в чем прикол?
12. EuGen - 09 Ноября, 2011 - 13:52:12 - перейти к сообщению
В этом случае рискну предположить, что в силе ограничение, не позволяющее попросту делать include из указанного каталога.
http://ru.php.net/manual/en/ini....ini.include-path

http://ru.php.net/manual/en/ini....ini.open-basedir

И, если у Вас php ниже 5.3 (хотя судя по замыканию это не так, но все же на всякий случай)
http://ru.php.net/manual/en/ini....hp#ini.safe-mode

И, да, сделайте
13. sKaa - 09 Ноября, 2011 - 13:56:44 - перейти к сообщению
EuGen, с настройкой пхп у меня туговато ))
Просто в пхп.ини установить значения как там указано?
(Добавление)
EuGen пишет:

Ничего не происходит..

EuGen, Спасибо. Спасибо всем за внимание. Разобрался. Причина действительно крылась где-то в пхп.ини
14. EuGen - 09 Ноября, 2011 - 14:40:44 - перейти к сообщению
Ну так это нужно использовать вместе с include (в первоначальном варианте __autoload)

 

Powered by ExBB FM 1.0 RC1