ФорумПрограммированиеPHP для идиотов → Трабла с include

Трабла с include

  • Lirck

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

    Spritz Июль 9, 2008, 10:42 п.п.

    Есть файл admin.php, в нем только такой текст:
    <?php
    include_once('template/default/index.php');
    ?>


    В template/default/index.php:
    <?php
    include_once('admin.php') // инклуд файла template/default/admin.php
    ?>


    При вызове в браузере admin.php (который первый — который в корне сайта) — текст который есть в template/default/admin.php не отображается, при этом, если сменить имя template/default/admin.php на другое, то все ок. Или если инклудить напрямую из admin.php
    include_once('template/default/admin.php');

    то тоже все ок!!! Что за фигня такая?

    Забыл добавить.
    Ошибки типа no such file … не появляется (error_reporting(E_ALL))
  • XoxMa

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

    Spritz Июль 9, 2008, 11:10 п.п., спустя 27 минут 48 секунд

    Я вообще не понял, что ты тут пишешь.. Откуда-то взялось template/default/admin.php у тебя в третьем абзатце.
    Может просто нужно не include_once, а просто include, хотя я не знаю, я тебя не понял )
  • Lirck

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

    Spritz Июль 9, 2008, 11:13 п.п., спустя 3 минуты 19 секунд

    я уже и require пробовал и тд…
  • XoxMa

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

    Spritz Июль 9, 2008, 11:15 п.п., спустя 1 минуту 44 секунды

    no such file… это означает, что не найден файл.
    попробуй типа include_once("././admin.php");
  • Lirck

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

    Spritz Июль 9, 2008, 11:19 п.п., спустя 4 минуты 13 секунд

    мне нужно инклудить из http://xxx.com/template/default/index.php (который инклудится из http://xxx.com/admin.php) файл http://xxx.com/template/default/admin.php,
    но если инклудить НАПРЯМУЮ из http://xxx.com/admin.php файл http://xxx.com/template/default/admin.php — то все ок! URL приведены в качестве примера.
  • kendo

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

    Spritz Июль 9, 2008, 11:31 п.п., спустя 11 минут 53 секунды

    К слову:
    require отличается от include тем, что если файл невозможно открыть (не найден), то скрипт останавливается.
    А постфикс _once означает, что файл будет компилироваться один раз. А если вызовов данного файла несколько и не использовать once, то файл будет каждый раз компилироваться. Вот… ка-кто так.
  • Lirck

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

    Spritz Июль 9, 2008, 11:34 п.п., спустя 2 минуты 48 секунд

    Да я это знаю xD Помогите мне проблему решить люди плизз
  • sap

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

    Spritz Июль 9, 2008, 11:42 п.п., спустя 7 минут 48 секунд

    Когда ты в template/default/index.php пишешь
    <?php
    include_once('admin.php') // инклуд файла template/default/admin.php
    ?>

    То инклудится отнюдь не template/default/admin.php, потому что template/default/index.php ты тоже инклюлишь — причем из admin.php

    Короче говоря, если ты из one.php иклудишь two/two.php, и в two.php пишешь include('three.php'), то файл three.php будет искаться не в директории two, а в директории, в которой находится самый первый скрипт (one.php), из которого и идет первый инклуд (в данном случае это корень).
  • Lirck

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

    Spritz Июль 9, 2008, 11:52 п.п., спустя 10 минут 10 секунд

    Спасибо, я это с самого начала предполагал, но смущало то, что небыло ошибки «no such file». Сейчас исправил с помощью абсолютных путей (realpath('');)
  • sap

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

    Spritz Июль 9, 2008, 11:56 п.п., спустя 3 минуты 40 секунд

    Ошибки не было потому, что в корне файл admin.php существовал =)
    Кстати, указание полных путей полезно с точки зрения оптимизации.

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