- Пропускане на файл с грешки
WT форуми -> PHP MySQL ASP.NET -> Пропускане на файл с грешки
Създайте нова тема Напишете отговор 
Автор Съобщение
Msecurity
Потребител
Потребител

Регистриран на: 18/09/2010 8:12 am

Support: 19
Bonus: 37
Мнения: 753
Мнение 25/08/2018 11:31 am     Пропускане на файл с грешки Отговорете с цитат


Здравейте колеги,
има ли възможност при инклудване на файл, тои ако съдържа някаква грешка при изпълнението да не се инклудва, и всичко да продължи да си работи след него?
Примерно си индклудвам файл с функция за галерия, но има грешка в нея ... и вместо да дъни Fatal error .. и т.н, просто дане го инклудва, а всичко друго да си продължи да работи без галерията?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 189
Bonus: 464
Мнения: 2181
Мнение 25/08/2018 1:00 pm      Отговорете с цитат


include() не предизвиква фатална грешка, а само предупреждение.
Всичко след include продължава да се изпълнява. За да продължи да работи всичко останало трябва да знаеш кои файлове не са се заредили - можеш да записваш резултата от всеки include. След това на всяко място на което използваш класове, функции или променливи от инклуднат файл първо проверяваш резултата от include - ако е false не изпълняваш кода.
Имай предвид обаче, че ако има синтактичнa грешкa в инклудвания файл, това ще спре изпълнението и на скрипта който извиква include
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 158
Bonus: 315
Мнения: 1475
Мнение 25/08/2018 1:13 pm     Re: Пропускане на файл с грешки Отговорете с цитат


Msecurity написа:
Здравейте колеги,
има ли възможност при инклудване на файл, тои ако съдържа някаква грешка при изпълнението да не се инклудва, и всичко да продължи да си работи след него?
Примерно си индклудвам файл с функция за галерия, но има грешка в нея ... и вместо да дъни Fatal error .. и т.н, просто дане го инклудва, а всичко друго да си продължи да работи без галерията?


Няма как да стане, или поне не можеш да покриеш всички случаи - ти искаш да се върнеш назад във времето.
Един print в инклуднатия файл и грешка след него как ще възстановиш? Можеш да буферираш outputа преди инклуда и да изпразниш буфера след това, но така е твърде hacky.
Друго - какво правиш с дефинираните класове и функции? Ще ги un-дефинираш ли? Ако използваш функции от инклуднатия файл, които поради по-ранна грешка са недефинирани, цялото изпълнение ще гръмне така или иначе.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
djman
Активен
Активен

Регистриран на: 12/09/2009 10:07 am

Support: 105
Bonus: 200
Мнения: 2778
Мнение 25/08/2018 9:00 pm      Отговорете с цитат


Зависи какви грешки. Например може така:

PHP code:
try {
require 'file-with-parse-error.php';
} catch (ParseError $e) {
echo $e->getMessage(), "\n";
}

(от тук)

Можеш направо Throwable да прихващаш.

Ако искаш също да няма и Warnings (например Division by zero), погледни set_error_handler и хвърляй Exception вътре.

Но като цяло това цялото занимание не звучи хубаво. Може би има друг начин? Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3075
Мнение 26/08/2018 6:45 pm      Отговорете с цитат


Тук има едно доста добро решение на казуса, като проверка на кода във файла:

https://www.tehplayground.com/026v6OSCW8y1eakr

PHP code:

$fileName = '/path/to/file.php';
exec("php -l {$fileName}", $output, $return);

if ($return === 0) {
// Correct syntax
} else {
// Syntax errors
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pix3l
Нов
Нов

Регистриран на: 08/10/2016 4:31 pm

Support: 6
Bonus: 12
Мнения: 139
Мнение 27/08/2018 8:25 pm      Отговорете с цитат


Да не знаеш какъв файл include-ваш си е чист пробив в сигурността... и въпреки това има начин, казва се eval().
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети