ФорумПрограммированиеPHP для идиотов → Траблы с установкой define (константами, мать их)

Траблы с установкой define (константами, мать их)

  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 14 декабря 2010 г. 0:43

    В общем, пиздец такой:
    1. Есть файл конфига, в нем прописываем дефайном путь с системным файлам и к модулям.
    define('SYSPATH','/system/');

    2. Есть файл индекс, в котором вписан аутолоад, внутри которого есть строка с применением константы. Ну и, ясен хрен, в самом начале (до функции аутолоад) подключаем конфиг-файл.
    Трабла в том, что это пиздото выдает мне (как я понимаю, по типу "неопределенна константа")
    Use of undefined constant SYSPATH - assumed 'SYSPATH'

    ссылаясь на вот такую строку в индексе:
    include_once(SYSPATH.strtolower($class).'.php');

    При этом если перед этой строкой вставить определение константы как и в конфиг-файле, то говорит что уже все определенно:
    Constant SYSPATH already defined
    .
    Где может быть зарыта собака? А то я пиздец не могу найти ошибку и все тут.
  • shurastik

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz 14 декабря 2010 г. 0:57, спустя 13 минут 33 секунды


    2. Есть файл индекс, в котором вписан аутолоад, внутри которого есть строка с применением константы. Ну и, ясен хрен, в самом начале (до функции аутолоад) подключаем конфиг-файл.


    видимо, компиляция функции аутолоада происходит до подключения конфига
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 14 декабря 2010 г. 1:01, спустя 4 минуты 2 секунды

    файл с автолоадом покажи.
  • master

    Сообщения: 3242 Репутация: N Группа: Джедаи

    Spritz 14 декабря 2010 г. 1:08, спустя 6 минут 31 секунду

    Такая же проблема как в сабже, проявляется и исчезает самопроизвольно. Что любопытно на других хостингах этот баг не проявлялся никогда (код тот же). Так что возможно дело в настройках сервера, акселераторе например. Настоящей причины не знаю.
    не всё полезно, что в swap полезло
  • master

    Сообщения: 3242 Репутация: N Группа: Джедаи

    Spritz 14 декабря 2010 г. 1:18, спустя 9 минут 57 секунд

    PHP Version 5.3.2-1
    with XCache v1.3.0, Copyright © 2005-2009, by mOo
    with Suhosin v0.9.29, Copyright © 2007, by SektionEins GmbH
    не всё полезно, что в swap полезло
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 14 декабря 2010 г. 1:20, спустя 2 минуты 47 секунд

    vasa_c,
    <?php
    error_reporting(E_ALL);
    define('VIEW_DEBUG',true);
    $_d = new Debug;

    include_once('config.php');

    function __autoload($class)
    {
    if (substr($class,-6) === '_model' OR substr($class,-11) === '_controller')
    {
    list($folder,$type) = explode('_',$class);
    include_once(MODPATH.strtolower($folder).'/'.strtolower($class).'.php');
    }
    else
    {
    include_once(SYSPATH.strtolower($class).'.php');
    }
    }

    $_r = new Router;
    $_c = new Core($_r->get_option());
    $_c->execute();
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 14 декабря 2010 г. 1:33, спустя 13 минут 11 секунд

    подозреваю, что срабатывает на new Debug
  • Reestr

    Сообщения: 20 Репутация: N Группа: Кто попало

    Spritz 14 декабря 2010 г. 1:34, спустя 20 секунд


    if (defined('SYSPATH'))
    {
       echo SYSPATH;
    }
    else
    {
       echo 'ебаная жизнь…';
      define('SYSPATH', '/system/');
    }

       
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 декабря 2010 г. 2:03, спустя 28 минут 52 секунды


    подозреваю, что срабатывает на new Debug
    стопудово. к тому же функции парсятся перед выполнением файла насколько я помню(по карйней мере пхп5 этим хвастался, хвастаясь мол - вначале скрипта вы можете юзать функции определенные позднее их определения)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5146 Репутация: N Группа: в ухо

    Spritz 14 декабря 2010 г. 2:06, спустя 3 минуты 14 секунд

    Видимо конфиг должен подключаться строго до любого new MyAss()
    я бы вставил в автолоад
    if (defined('SYSPATH')) die('Кто-то нарушил порядок инициализации');

    ιιlllιlllι унц-унц
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 14 декабря 2010 г. 5:15, спустя 3 часа 8 минут 50 секунд

    vasa_c, точно. Спасибище! Реально туплю. Вставил дебаг сугубо для отладки, потому как-то даже не обратил внимания куда сую его. Теперь все стало на свои места.
    phpdude, от и я тоже о подобном читал, мол пофиг где определены функции в файле, все равно они с самого "старта" уже могут юзаться. Но тут у меня явно другая собака рылась, сцуко эдакая.
    artoodetoo, спасибо за совет, сделаю такую фишку.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!