Забыли пароль?
Запросите новый здесь.

Автор темы: grungestranger
ID темы: 1666
Информация:
Тема содержит 16 сообщения, была просмотрена 13574 раз.
Просмотр темы
PHP-Fusion Russia » Разное » Разное
 Распечатать тему
Прикол с require_once
grungestranger
Привет всем.

Такая конструкция:
/index.php -
Скачать исходники  Код
<?php require_once "folder2/index2.php"; ?>



/folder2/index2.php -
Скачать исходники  Код
<?php require_once "folder3/index3.php"; ?>



/folder2/folder3/index3.php -
Скачать исходники  Код
<?php echo "Hello"; ?>




Открываем /index.php - выводит Hello

Как такое может быть, что, если в /folder2/index2.php -
Скачать исходники  Код
<?php require_once "folder2/folder3/index3.php"; ?>


, то тоже работает?
 
Web
Rush
почитайте батенька про относительные пути
 
Web
grungestranger
относительные пути - это отлично, но никакого ответа на вопрос - почему в такой конструкции в файле /folder2/index2.php
Скачать исходники  Код
require_once "folder3/index3.php";


также работает как и
Скачать исходники  Код
require_once "folder2/folder3/index3.php";


они не дадут. При чем если открыть файл /folder2/index2.php с кодом
Скачать исходники  Код
<?php require_once "folder2/folder3/index3.php"; ?>


, то естественно будет ошибка.
 
Web
Polarfox
У тебя уровень меняется наверняка в папках.
Уровень сделай как у нас - константой и все будет.
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
grungestranger
Да у меня нет никаких переменных и констант, это просто пример без движка, без всего. Тут дело во вложенности require.

Если идти с конца, то файл /folder2/folder3/index3.php require-ится в файл /folder2/index2.php (require_once "folder3/index3.php";), потом этот файл /folder2/index2.php require-ится в файл /index.php (require_once "folder2/index2.php";). Правильно?

Или по-другому:
В файл /index.php (require_once "folder2/index2.php";) require-ится файл /folder2/index2.php и потом уже срабатывает вот это - require_once "folder2/folder3/index3.php";

Но как может одновременно работать с разным кодом в файле /folder2/index2.php (и с require_once "folder3/index3.php"; и с require_once "folder2/folder3/index3.php";) ?
 
Web
Polarfox
омг много букв, одна картинка с ветками информативней была б.
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
grungestranger
Вот самое информативное - http://yadi.sk/d/WPMJWvOL6ozO6 . Сравните файлы /folder2/index2.php .
 
Web
Rush
Warning: require_once(folder2/folder3/index3.php) [function.require-once]: failed to open stream: No such file or directory in D:\webart\openserver\OpenServer\domains\localhost\123\2\folder2\index2.php on line 3

Fatal error: require_once() [function.require]: Failed opening required 'folder2/folder3/index3.php' (include_path='.;D:/webart/openserver/OpenServer/modules/php/PHP-5.3.19/;D:/webart/openserver/OpenServer/modules/php/PHP-5.3.19/PEAR'ad in D:\webart\openserver\OpenServer\domains\localhost\123\2\folder2\index2.php on line 3

и?
 
Web
grungestranger
Rush написал:

Warning: require_once(folder2/folder3/index3.php) [function.require-once]: failed to open stream: No such file or directory in D:\webart\openserver\OpenServer\domains\localhost\123\2\folder2\index2.php on line 3

Fatal error: require_once() [function.require]: Failed opening required 'folder2/folder3/index3.php' (include_path='.;D:/webart/openserver/OpenServer/modules/php/PHP-5.3.19/;D:/webart/openserver/OpenServer/modules/php/PHP-5.3.19/PEAR'ad in D:\webart\openserver\OpenServer\domains\localhost\123\2\folder2\index2.php on line 3

и?


Открывать надо не /folder2/index2.php ,а /index.php .
 
Web
Rush
ты меня в конец запутал
 
Web
grungestranger
Rush написал:

ты меня в конец запутал


Я скинул 2 папки, отличия в них только в файлах /folder2/index2.php

Но открывать в браузере нужно файлы /index.php

В обоих случаях выведет Hello, и ошибки не будет.

В этом и есть мой вопрос, как может работать в обоих случаях, хотя в файлах /folder2/index2.php прописаны разные пути.
 
Web
FILON
grungestranger написал:
В этом и есть мой вопрос, как может работать в обоих случаях, хотя в файлах /folder2/index2.php прописаны разные пути.


Скорее всего зависит от версий PHP. 5-ая версия вычисляет путь от вызванного файла, поэтому "folder2/folder3/index3.php" считается приемлемым, а 4-ая версия – от подключаемого файла. Но лучше использовать константу уровня вложенности и вычислять путь относительно корня на примере BASEDIR в PHP-Fusion. Меньше проблем возникнет при организации иерархии.
What's common between Halloween and Christmas? Every programmer knows: 31 oct = 25 dec.
x1
 
grungestranger
FILON написал:

grungestranger написал:
В этом и есть мой вопрос, как может работать в обоих случаях, хотя в файлах /folder2/index2.php прописаны разные пути.


Скорее всего зависит от версий PHP. 5-ая версия вычисляет путь от вызванного файла, поэтому "folder2/folder3/index3.php" считается приемлемым, а 4-ая версия – от подключаемого файла. Но лучше использовать константу уровня вложенности и вычислять путь относительно корня на примере BASEDIR в PHP-Fusion. Меньше проблем возникнет при организации иерархии.


Но я проверяю все на одной версии php (5). Или в 5-й версии оставлена возможность поиска файла по пути от подключаемого файла? То есть, если он не находит файл по пути от вызванного файла, то он не выдает ошибку и ищет файл по пути от подключаемого файла?
 
Web
FILON
grungestranger написал:

Но я проверяю все на одной версии php (5). Или в 5-й версии оставлена возможность поиска файла по пути от подключаемого файла? То есть, если он не находит файл по пути от вызванного файла, то он не выдает ошибку и ищет файл по пути от подключаемого файла?


На примерах получается именно так. Если бы при переходе на PHP 5 эту возможность не оставили, то у большинства проекты бы просто "посыпались".
What's common between Halloween and Christmas? Every programmer knows: 31 oct = 25 dec.
 
grungestranger
FILON написал:

grungestranger написал:

Но я проверяю все на одной версии php (5). Или в 5-й версии оставлена возможность поиска файла по пути от подключаемого файла? То есть, если он не находит файл по пути от вызванного файла, то он не выдает ошибку и ищет файл по пути от подключаемого файла?


На примерах получается именно так. Если бы при переходе на PHP 5 эту возможность не оставили, то у большинства проекты бы просто "посыпались".


Все прояснилось, спасибо))
 
Web
Polarfox
Оффтопик костыли, это как дос в семерке, ущербно и плохо, но они есть.

Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Темы Форум Ответов / Просмотров Последние сообщения
Прикол)  →  Юмор 15 / 5759 18.01.2016 12:43
Топ 5 пользователей форума
Zaxap Zaxap (1,090)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)   SchreiBear SchreiBear (625)