Смысл подключения в php простым русским языком:
Файл 1.php
Верхнее меню
Файл 2.php
Нижнее меню
Файл example.php
Подкючаем Файл 1.php
Содержание страницы
Подкючаем Файл 2.php
В результате проработки файла example.php будет отображено
Верхнее меню
Содержание страницы
Нижнее меню
Соответственно, чтобы что-либо изменить в нижнем меню, нужно внести изменения только в файле 2.php
Код PHP
// пример относительного пути
include "include/ваш_файл.php"; // файл лежит в папке include, которая находится в той же директории, что и файл с подключением
// пример абсолютного пути
include $_SERVER["DOCUMENT_ROOT"]."/include/ваш_файл.php"; // $_SERVER["DOCUMENT_ROOT"] - указывает корневую директорию сайта
Рассмотрим работу include на примере двух файлов: index.php и text.php . Для простоты работы допустим, что они лежат в одной директории.
Код PHP (файл index.php )
Echo "Обычный текст, содержащийся в основном файле";
include "text.php"; // подключаем содержимое файла text.php
?>
Код PHP
(файл text.php
)
Echo "Текст, содержащийся в подключаемом файле";
?>
В результате работы файла index.php отобразится:
Обычный текст, содержащийся в основном файле
Текст, содержащийся в подключаемом файле
Правда удобно? Теперь, поменяв содержимое в файле text.php будет совершенно другой результат работы index.php!
Теперь поговорим о другой конструкции - include_once . Она работает абсолютно также как и include, только создана позже и для тех случаев, когда нельзя повторно подключить файл. Например, Вы боитесь, что в результате ошибки можете подключить файл 2 и более раз, что скажется на некорректной работе страницы и получении соответствующего сообщения об ошибке.
Код PHP
Include_once "text.php"; // файл text.php будет подключен только один раз
// повторное подключения ниже не будет учтено и отображено
// и из-за него не будет выведено сообщение об ошибке
include_once "text.php"; // ничего не произойдёт
1.
Проверьте, работает ли Ваш сервер и php, работает ли вообще любой php код на сайте
2.
Убедитесь, существует ли файл подключаемый файл
3.
Проверьте, правильно ли введено название файла и расширение в подключении
4.
Убедитесь, что подключаемый php-файл действительно находится по тому адресу, по которому указали
5.
Попробуйте указать не относительный путь, а абсолютный (полный путь к файлу).
Пример Код PHP
Include "http://www.example.com/include/ваш_файл.php";
// DOCUMENT_ROOT - обозначает корневую директорию ресурса
include $_SERVER["DOCUMENT_ROOT"]."/include/ваш_файл.php";
6. Если у Вас не подключается файл и не отображается никакой ошибки, то в директории с файлом, который подключаете, создайте файл .htaccess со следующим содержимым
Php_flag display_errors On
или в файле php
, перед подключением, вставьте следующую строку
Error_reporting(E_ALL);
И та, и другая настройки будут принудительно отображать ошибки
Спасибо за внимание!
0
Я строящие крошечная рамку PHP MVC, и вот моя структура
/app /controllers /models /views /templates /config /config.php /core /Controller.php /Router.php /init.php /index.php
папки Внутри index.php, который является фронтом-контроллером у меня есть этот код требовать от init.php /app/core/init.php
приложение/ядро / init.php
init.php требует, чтобы каждый базовый контроллер и Classe в каталоге/ядра, включая controller.php и router.php и здесь index.php также конкретизирует классов
Каждая вещь работает отлично на данный момент, как я проверил это путем создания конструктора в обоих controller.php и router.php так что код в этих двух файлов будет как этот
приложение/ядро / controller.php
приложение/ядро / маршрутизатор. php
внутри index.php это эхо ОК! поскольку классы создаются правильно, но проблема в том, что когда я хочу включить config.php, который находится в /app/config/config.php из Controller.php, находящегося в /app/core/Controller.php, с этим кодом
Всякий раз, когда я делаю это возвращает эту ошибку
Controller::include(../config/config.php) : failed to open stream: No such file or directory in C:\AppServ\www\myapp\app\core\Controller.php on line 6
Controller::include() : Failed opening "../config/config.php" for inclusion (include_path=".;C:\php5\pear") in C:\AppServ\www\myapp\app\core\Controller.php on line 6
Я думаю, что я использовал правильное местоположение, я работаю с /app/core/Controller.php и w ant требует /app/config/config.php. Я возвращаюсь в один каталог, используя../
Тогда почему я не могу потребовать файл?
- 3 ответа
Сортировка:
Активность
2
Из моего личного опыта использование относительных путей файла в какой-то момент приведет к головным болям. Поэтому я обычно использую полный путь к файлу. Преимущество этого также в том, что он немного быстрее. Тогда, если в какой-то момент вы получите ошибку включения, легче найти ошибку, так как у вас есть весь доступный путь.
Чтобы иметь возможность делать абсолютные пути, я бы рекомендовал вам добавить константу в свой файл index.php (frontcontroller). Что-то вроде следующего:
Define("ROOT_PATH", realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR);
Определяет константу, называемую ROOT_PATH , которая ссылается на каталог, в котором находится файл index.php , и, следовательно, ваш корневой каталог. В то же время я добавил разделитель каталога в конец, чтобы упростить запись путей.Чтобы использовать это, вы должны писать.
Require_once ROOT_PATH . "config/config.php";
Bonus Информация
Но если вы используете этот подход в своем классе controller.php вы делаете это зависит в этой константе. Чтобы исправить это, вы можете передать корневой путь как переменную в конструкторе.
Public function __construct($root) {...
И затем использовать его как следующее:
Public function __construct($root) { require_once($root . "config/config.php"); }
Надеется, что это помогает.
0
Я не знаю, что происходит, но require_once() не выдавал ошибку, ссылаясь на себя как include() , потому что это разные функции, плюс, если это весь код, номер строки ошибки не совпадает с ваша линия require_once() , так как это должно быть 4. Попробуйте перезагрузить свой веб-сервер и посмотрите, не исправить ли это что-то, иначе вы, вероятно, будете что-то шутить.
Для любого web-разработчика пока нет более серьезной проблемы, как полная кроссбраузерность его продукта. Наверное, это одна из основных задач хорошего специалиста: добиться того, чтобы его сайт всегда правильно отображался во всех браузерах.
Параметр required , который иногда используется для input, не работает в древних IE, что просто нельзя так оставить. Пользователи-пенсионеры, которые до сих пор пользуются IE6 должны одинаково легко работать с вашим сайтом, наряду с пользователями Google Chrome последней версии. Кто, кроме web-разработчиков, о них может позаботиться.
О наболевшем, о Internet ExplorerДля нормальных браузеров, к которым можно отнести Firefox, Opera и Google Chrome, эта задача относительно легка. Даже давние версии этих браузеров одинаково хорошо отображают html-код, если в нем конечно же не используются какие-то новые технологии. Но чтобы добиться подобного в браузерах семейства Internet Explorer, требуются просто титанические усилия.
Каждая версия браузера Internet Exlorer обладает своей, уникальной тупостью. Что работает в IE6, может как положено не работать в IE7 и наоборот. Этот зоопарк компании Microsoft не удалось побороть даже в самой последней версии своего браузера.
Понять почему разработчики браузеров не могут просто взять открыть и почитать стандарты W3C для сайтостроения, я не могу.
Поэтому мне, как web-разработчику, приходится выступать некоторой «прослойкой» между капризными браузерами и требующими знаний и зрелищ посетителями сайтов. И замечательно, что web-разработчикам пока это удается.
Дак, как же заставить работать required в старых версиях IE?На помощь нам приходит JS. Раньше я терпеть его не мог, а теперь не вижу дальнейшего пути без него на просторе «правильного» WEB .
Решение приведенное ниже я выдумал не сам, а взял с буржуйского блога. Так как я жадный, а блог буржуйский, я не стану приводить на него ссылку.
За все у нас будет отвечать функция fnCheckFields() . Поместите на вашем сайте JS-код:
function fnCheckFields(form_obj){ var error_msg = "Пожалуйста, заполните все обязательные поля."; var is_error = false; for (var i = 0; form_obj_elem = form_obj.elements[i]; i++) if (form_obj_elem.type "input" || form_obj_elem.type "text") if (form_obj_elem.getAttribute("required") && !form_obj_elem.value) is_error = true; if (is_error) alert(error_msg); return !is_error; }
Обычно рекомендуют размещать его между html-тегами HEAD в начале страницы, но я бы рекомендовал все же размещать его в самом низу страницы до закрывающегося тега BODY . Таким образом JS меньше влияет на скорость загрузки страницы.
Окно ввода, где должен вводиться обязательный параметр, на html-языке должно выглядеть так:
Этот скрипт работает очень просто: после нажатия кнопки Отправить , скрипт проверяет все инпуты на наличие параметра required и если находит его, то соответственно смотрит на введенное значение этого поля. Если в такой инпут ничего не введено, то выводится предупреждающее окно о необходимости ввода. Данные соответственно никуда не отправляются.
Замечательно еще и то, что если у Вас нормальный браузер, который уже научился понимать этот параметр как положено, такого предупреждающего окна не всплывет и будут работать стандартные инструменты обработки параметра required для вашего браузера.
Рассказать в соц. сетях