За последние 24 часа нас посетили 21309 программистов и 1007 роботов. Сейчас ищут 685 программистов ...

[Помогите] Fatal error: require_once() [Решено]

Тема в разделе "Решения, алгоритмы", создана пользователем yura29, 16 июл 2013.

  1. yura29

    yura29 Новичок

    С нами с:
    16 июл 2013
    Сообщения:
    11
    Симпатии:
    0
    В php я новичок и поэтому не особо понимаю в чем моя ошибка

    Поставил денвер с php 5.3 и пакет расширений
    Накатил DLE 9.8
    И всё работает, но мне нужно влепить еще одну маленькую cms модулем
    Сам DLE и cms по отдельности работают, но стоит мне впилить эту cms в окно {content} сайта, как всё крашится с ошибкой

    Fatal error: require_once(): Failed opening required './smarty/libs/Smarty.class.php' (include_path='.;Z:\usr\local\php5\pear;/usr/local/php5/PEAR') in Z:\home\site.com\www\cabinet\index.php on line 4

    Сама cms использует для работы smarty
    И я сначала подумал, что этот smarty конфликтует с каким-нибудь API, но такая ошибка появляется всегда, как в основном файле модуля появляется команда require_once

    Помогите решить проблему позязя))

    Вот сам основной файл подключаемого модуля
    Код (Text):
    1. <?php
    2. define('INCLUDE_CHECK',true);
    3. session_start();
    4. require_once('./smarty/libs/Smarty.class.php');
    5. include ('./include/config.php');
    6. include ('./include/kassa_config.php');
    7. include ('./include/func.php');
    8. $path = dirname(__FILE__);
    9. define('GLI',true);
    10. $logger = new Logger("./mcshop.log");
    11. $log_date = "[" . date("d/m/Y H:i") . "] ";
    12. $q = mysql_query("SELECT `value` FROM `settings` WHERE `name`='theme';",$sql);
    13. $theme = mysql_result($q,0);
    14. $tpl = new Smarty();
    15. $theme_path = './theme/'.$theme.'/';
    16. $tpl->template_dir = $theme_path;
    17. $tpl->compile_dir = './cache/';
    18. $tpl->cache_dir = './cache/';
    19. $tpl->assign('path', $theme_path);
    20.  
    21. if(empty($_SESSION['id'])) {
    22.     // Тут делаем авторизацию
    23.     $tpl->assign('title', 'Авторизация');
    24.     if(isset($_GET['error'])) {
    25.         $tpl->assign('errno', 'Неверный логин или пароль!');
    26.         $logger->WriteLine($log_date . "Неудачная попытка авторизации с ip: " . $_SERVER['REMOTE_ADDR']);
    27.     }
    28.  
    29.     $tpl->assign('title', 'Личный Кабинет');
    30.     $tpl->display('guest.tpl');
    31. } else {
    32.     $username = mysql_real_escape_string($_SESSION['name']);
    33.     $right = privelegie($username, $db_users, $db_users_name, $sql);
    34.     $q = mysql_query("SELECT money FROM {$db_users} WHERE {$db_users_name}='$username';",$sql);
    35.     $tpl->assign('money', mysql_result($q,0));
    36.     $tpl->assign('username', $username);
    37.     $q = mysql_query("SELECT value FROM settings WHERE name='ip' OR name='port';",$sql);
    38.     $ip = mysql_result($q,0);
    39.     $port = mysql_result($q,1);
    40.     $settings = GetSettings($sql);
    41.     $server = Server($ip,$port);
    42.     if(!isset($server['name'])) $server['name'] = 'Неопознанно';
    43.     $tpl->assign("shop_id",$shop_id);
    44.     $tpl->assign("right",$right);
    45.     $tpl->assign("map_enabled",$settings['map_enabled']);
    46.     $tpl->assign('srv_name', $server['name']);
    47.     $tpl->assign('ip', 'ip='.$ip.'&port='.$port);
    48.     $tpl->assign('navigation', 'menu.tpl');
    49.     if(!isset($_GET['page']) || $_GET['page'] == '') {
    50.         $tpl->assign('title', 'Личный Кабинет');
    51.         $tpl->assign('content', 'skin.tpl');
    52.         include("./modules/blocks_main.php");
    53.         include("./modules/skin.php");
    54.         include("./modules/cp.php");
    55.         $tpl->assign('welcome1', 'Добро пожаловать '.$username.'!');
    56.         $tpl->assign('welcome2', 'Это ваш личный кабинет на игровом сервере '.$server['name']);
    57.     } else {
    58.         $full_path = './theme/'.$theme.'/'.$_GET['page'].'.tpl';
    59.         if(!file_exists($full_path)) {
    60.             $tpl->assign('title', 'Ошибка 404');
    61.             $tpl->assign('content', 'error.tpl');
    62.             $tpl->assign('welcome1', 'Ошибка 404');
    63.             $tpl->assign('welcome2', '');
    64.         }
    65.         if($_GET['page'] == 'buy') {
    66.             $tpl->assign('title', 'Покупка статуса');
    67.             include("./modules/buy.php");
    68.             $tpl->assign('welcome1', 'Покупка статуса');
    69.             $tpl->assign('welcome2', 'Здесь вы можете купить игровой статус');
    70.         }
    71.         if($_GET['page'] == 'skin') {
    72.             $tpl->assign('title', 'Сменить скин');
    73.             include("./modules/skin.php");
    74.             $tpl->assign('content', 'skin.tpl');
    75.             $tpl->assign('welcome1', 'Смена скина');
    76.             $tpl->assign('welcome2', 'Здесь вы можете изменить свой игровой скин');
    77.         }
    78.         if($_GET['page'] == 'support') {
    79.             $tpl->assign('title', 'Техническая поддержка');
    80.             include("./modules/support.php");
    81.             $tpl->assign('content', 'support.tpl');
    82.             $tpl->assign('welcome1', 'Тех поддержка');
    83.             $tpl->assign('welcome2', 'Здесь вы можете написать в тех. поддержку');
    84.         }
    85.         if($_GET['page'] == 'cp') {
    86.             $tpl->assign('title', 'Дополнительные услуги');
    87.             include("./modules/cp.php");
    88.             $tpl->assign('welcome1', 'Дополнительные услуги');
    89.             $tpl->assign('welcome2', 'Здесь вы можете воспользоваться другими услугами сервера');
    90.         }
    91.         if($_GET['page'] == 'admin') {
    92.             $tpl->assign('title', 'Панель администратора');
    93.             include("./modules/admin.php");
    94.             $tpl->assign('welcome1', 'Панель администратора');
    95.             $tpl->assign('welcome2', 'Здесь вы можете управлять магазином в зависимости от Ваших прав');
    96.         }
    97.         if($_GET['page'] == 'map') {
    98.             $tpl->assign('title', 'Карта сервера');
    99.             include("./modules/map.php");
    100.             $tpl->assign('welcome1', 'Карта сервера');
    101.             $tpl->assign('welcome2', 'Здесь вы можете увидеть карту сервера');
    102.         }
    103.         if($_GET['page'] == 'blocks') {
    104.             $tpl->assign('title', 'Продажа блоков');
    105.             include("./modules/blocks.php");
    106.             $tpl->assign('welcome1', 'Продажа блоков');
    107.             $tpl->assign('welcome2', 'Здесь вы можете купить необходимыа Вам для игры блоки');
    108.         }
    109.         // Для интерфейсов оплаты
    110.         if($_GET['page'] == 'success') {
    111.             $tpl->assign('title', 'Пополнение счета');
    112.             include("./kassa/success.php");
    113.             $tpl->assign('welcome1', 'Пополнение счета');
    114.             $tpl->assign('welcome2', '');
    115.         }
    116.         if($_GET['page'] == 'fail') {
    117.             $tpl->assign('title', 'Пополнение счета');
    118.             include("./kassa/fail.php");
    119.             $tpl->assign('welcome1', 'Пополнение счета');
    120.             $tpl->assign('welcome2', '');
    121.         }
    122.         if($_GET['page'] == 'quit') {
    123.             session_destroy();
    124.             header("Location: index.php");
    125.         }
    126.     }
    127.     $tpl->display('main.tpl');
    128. }
    129. mysql_close($sql);
     
  2. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    Re: [Помогите] Fatal error: require_once()

    у тебя в папке Z:\home\site.com\www\cabinet\ есть папка smarty ?
     
  3. yura29

    yura29 Новичок

    С нами с:
    16 июл 2013
    Сообщения:
    11
    Симпатии:
    0
    Re: [Помогите] Fatal error: require_once()

    да
    и папка и все файлы имеются
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    require/include ищут файл относительно папки с "точкой входа", а не относительно папки с файлом в котором стоит этот require/include.

    поясню:
    если наш запрос обрабатывается файлом
    Z:\home\site.com\www\index.php
    который подключает, например файл './cabinet/ololo.php' , то есть уже
    Z:\home\site.com\www\cabinet\ololo.php
    а тот, в свою очередь пытается подключить './smarty/libs/Smarty.class.php' , то этот файл будет искаться в
    Z:\home\site.com\www\smarty\libs\Smarty.class.php -- относительно первого файла!!! никаких "cabinet" здесь уже не наблюдаем

    Добавлено спустя 5 минут 13 секунд:
    хотите инклудить относительно текущего файла? делайте так:
    Код (PHP):
    1. include __DIR__.'/path/to/file.php'; // начиная с PHP 5.3   
    или
    Код (PHP):
    1. include dirname(__FILE__).'/path/to/file.php'; // во всех версиях PHP   
    Добавлено спустя 3 минуты 57 секунд:p.s. ты глянь в свой код, там даже есть готовая переменная $path, которую ты можешь использовать для "умного" инклуда :)
     
  5. yura29

    yura29 Новичок

    С нами с:
    16 июл 2013
    Сообщения:
    11
    Симпатии:
    0
    Re: [Помогите] Fatal error: require_once()

    Спасибо вам огромное))
    Благодаря вам сэкономил кучу времени

    Адреса поправил в основном фале руками, но есть ли какой нибудь инструмент, который исправит это автоматически?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    а не надо автоматически. думать надо и индивидуально решать.
     
  7. yura29

    yura29 Новичок

    С нами с:
    16 июл 2013
    Сообщения:
    11
    Симпатии:
    0
    ок
    спасибо за совет))
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    вобще, достаточно было убрать "./"...
    относительно include path они ищут файл
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    верно. и тем не менее. :D
    http://goo.gl/YGEHv
    я так понимаю, что здесь "более эффективно" значит не "более быстро", а "менее глупо". зачем нам перебирать какие-то папки в надежде что там упоминается ".", когда мы четко знаем где в НАШЕМ проекте находится нужный файл.

    если нам понадобится подключить pear-овский модуль, тогда конечно полагаемся на include_path :D