Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PHP дура или include or die
nx0.ru - бесплатный хостинг > Около хостинга nx0.ru > Вопросы по PHP, Perl и пр.
Горбушка
В общем, при написании кода потребовалось проверять подключился ли файл и корректно ли он сделал это... Дело всё в том, что код предусматривает отсутсвие таких файлов и это не должно приводить к выводу на экран ошибок PHP...

Отличным вариантом было бы использование такого кода:
Код
@include ('index.php') or die ('нет такого файла');

Но случилось чудо!!! include не дружит с or ... unsure.gif

Вопрос: чё делать?

--------------------
upd:
Методом тыка придумал способ:
Код
if (!@include 'index.php') die ('Немогу подключить файл');

вот только очень интерено, насколько он верен rolleyes.gif Файл вроде подгружается верно, всё содержимое выполняется... Если файла нет - скрипт прекращает работу... Но будет ли это работать за пределами локали или заданного сервера?

Откуда вообще посетила такая мысля:
1) include кроме ошибки в случае отсутсвия файла возвращает false... => можно использовать IF
2) ! требуется для того, чтобы поменять true и false местами (отстутствие файла становится истиной), т.к. факт наличия файла меня мало интересует
3) @ ставится для отключения вывода ошибки об отсутсвии файла, т.к. у меня стоит свой обработчик ошибок.
4) Не использую отключение ошибок в системе через error_reporting т.к. код пишется кусками, часть кусков 100% выводит ошибки, а мне оно надо для контроля "это ещё не закончино"... На рабочей машинке можно будет @ проудалять...
Kildor
А почему бы не проверить файл перед тем как его инклюдить? Что-то типа if (fexists($filename)) include($filename) else die "…";
Горбушка
Дело в том, что мне не нужно отслеживать его наличие. Меня интересует факт его отсутсвия... Если делать через fexists возникает много лишнего кода if, else, сам fexists... Думаю, моё решение будет менее затратным по ресурсам, ибо:
1) include включает в себя проверку на существование
2) Не требуется условие "иначе"
Да и выглядит симпотичнее...

Вопрос в том, будет ли оно работать на любом хостинге или мне с Debian так повезло...
vit9696
Запустил у себя на PHP 5.3.6 под win32 - все без проблем....
(с) если уж под виндой..... ставь смело.
BaNru
Я в свое время сделал такое
Код
if (is_file ($file)){
    include $file;
}
else {echo 'Что за х*** ты мне впариваешь?!';exit;}

Тут конечно от елсе можно избавится, в елсе выводится как раз ошибка.
И происходит два запроса к файловой системе.
Горбушка
По идеи,
Код
if (!@include 'index.php') die ('Немогу подключить файл');
делает только один запрос к файловой системе, им же подгружает нужный мне файл => скорость будет в 2 раза (ну ладно, ладно, опрасить наличие файла быстрее, чем его прочитать, согласен, в 1,5 раза) быстрее...

На винде проверил на 5.2 - тоже работает. Дебиан 5 и 6 тоже съели... Думаю, можно юзать спокойно...

Меня просто смущало сочетание !@ - первый раз его использую, а в документации про него ни слова happy.gif
BaNru
Ну так по отдельности то они есть.

У меня просто на моем варианте не заканчивается код.
У меня там случае наличия файла, после подключения идет еще пару действий. Кстати, одно из них - что то ищ рода тобой когда подсказанное...
Помнишь я тебя спрашивал про запрос в БД и если ответ пустой. Ты говорил присвоить переменной значение и потом проверить на него.

У меня там и такое есть (правда сделано оно было еще до совета...хотя не отменяет полезность по вопросу БД - спасибо). И еще пару функций, которые должны выполняться обязательно при наличие инклуда.
Горбушка
Да просто include и or die тоже отдельно есть... А вот вместе не дружат =) Боялся, что и @ с ! не подружаться =)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2020 IPS, Inc.