X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
> Поиск fatal error
Degradator
Degradator
Topic Starter сообщение 28.1.2014, 0:49; Ответить: Degradator
Сообщение #1


По сути проблема такая - есть file.php который должен быть include file.php;. Но заранее мы не знаем что там внутри, и он может положить весь сайт. Есть ли способы, как проверить на валидность и если все ок, то инклудить, если не ок, то не инклудить?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Azazaza_hb
Azazaza_hb
сообщение 28.1.2014, 1:18; Ответить: Azazaza_hb
Сообщение #2


http://www.php.net/manual/ru/language.exceptions.php
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
сообщение 28.1.2014, 8:29; Ответить: Den1xxx
Сообщение #3


(Degradator @ 28.1.2014, 03:49) *
По сути проблема такая - есть file.php который должен быть include file.php;. Но заранее мы не знаем что там внутри, и он может положить весь сайт. Есть ли способы, как проверить на валидность и если все ок, то инклудить, если не ок, то не инклудить?

Я в таком случае не проверяю на валидность, иначе не будет отображено в чем ошибка.

Я его просто кеширую, и в случае ошибки выдается предпреждение без обрушивания всего скрипта:
ob_start();
include($page);//или eval, даже потенциально небезопасный
$text = ob_get_contents();
ob_end_clean();
echo $text;
Но в движке позволяю такое творить только суперадмину;)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Degradator
Degradator
Topic Starter сообщение 28.1.2014, 10:48; Ответить: Degradator
Сообщение #4


(Azazaza_hb @ 28.1.2014, 04:18) *

Спасибо, но перехватить таким образом например Fatal error: Call to undefined function asdfasd() не получится

Кеширование хорошая идея, но к сожалению не могу позволить себе такую роскошь, хотя идея хороша, не думал что это можно обыграть таким образом.

Я вот так делаю
[PHP]function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include($filename);
return ob_get_clean();
}
}[/PHP]
Не думаю что $text = ob_get_contents(); echo $text; тут необходимо
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
сообщение 28.1.2014, 12:58; Ответить: Den1xxx
Сообщение #5


(Degradator @ 28.1.2014, 13:48) *
Не думаю что $text = ob_get_contents(); echo $text; тут необходимо

Работает уже 2 года именно таким (ну почти таким) образом.

(Degradator @ 28.1.2014, 13:48) *
Не думаю что $text = ob_get_contents(); echo $text; тут необходимо

Ну если не важно что возвращает скрипт то да, можете опустить.
$text = ob_get_contents(); echo $text; — это эмуляция обычной работы скрипта.
Но при этом защищенного от фатальных ошибок (парсинга и т.п.).

Так же никто не мешает сделать:
[PHP]
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include($filename);
$text = ob_get_contents();
ob_end_clean();
return $text;
}
}[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Degradator
Degradator
Topic Starter сообщение 28.1.2014, 16:58; Ответить: Degradator
Сообщение #6


:prilichno:
Падает всеми тремя способами и на Fatal error: Call to undefined function asdfasd()
и на
Parse error: syntax error, unexpected T_VARIABLE in
Что может быть не так?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
сообщение 28.1.2014, 19:01; Ответить: Den1xxx
Сообщение #7


Я думаю, не надо запихивать код в функцию.
При ошибке парсинга буфер не очищается, с о всеми вытекающими.
Можно ещё так попробовать.
[PHP]
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
$eval_code=file_get_contents($filename);
eval($eval_code);
$text = ob_get_contents();ob_end_clean();return $text;
}
}
[/PHP]
Фишка в том, что eval() сам кидает исключение, не обваливая скрипт и при невозможности выполнить просто возвращается false

ЗЫ. Degradator, если хотите могу дать тестовый доступ в скрипт где это все работает:)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 28.1.2014, 19:35; Ответить: alexdrob
Сообщение #8


Да не поможешь кеширование вывода с отлавливанием фатальной ошибки. Как оно вообще может помочь?
Вы просто текст может скроете, но скрипт оборвётся.
Да и try catch не поможет.
так как он отлавливает ошибки вызванные throw.

поищите на сайте stackoverflow.com, там обычно етсь ответы на все вопросы, думаю вы не первый кто решил сделать такую задачу
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
сообщение 28.1.2014, 19:42; Ответить: Den1xxx
Сообщение #9


(alexdrob @ 28.1.2014, 22:35) *
Вы просто текст может скроете, но скрипт оборвётся.

Так о том и речь. Скрипт внутри буфера отвалится, а внешний останется цел:goodpost:
Никто не говорит о том, что возможно найти ошибку парсинга и исправить автоматически:sarcastic:
Но и внешний скрипт не должен рушиться из-за незакрытой кавычки — посмотрите защиту от кривых плагинов в Вордпрессе, например.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 28.1.2014, 20:22; Ответить: alexdrob
Сообщение #10


фатал ерор, валит скрипт, при чём тут буфер вывода?
буфер вывода, это буфер вывода :)

простой пример
[PHP]<?php

ob_start();
foo();
$text = ob_get_contents();
ob_end_clean();
[/PHP]
результат
Fatal error: Call to undefined function foo()
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Smmsearch.net - поиск самой дешевой накрутки в социальных сетях.
0 Professor7717 3270 13.8.2021, 19:53
автор: Professor7717
Открытая тема (нет новых ответов) Поиск кодера в команду. PHP, Pyton. На постоянку.
7 getsend_mw 2808 3.2.2021, 21:15
автор: getsend_mw
Открытая тема (нет новых ответов) Поиск копирайтера на игровую тематику
Поиск копирайтера на игровую тематику
4 a1ex777 1627 2.10.2020, 16:01
автор: AndreyBozhenko
Открытая тема (нет новых ответов) SmmBox - поиск, аналитика и отложенная публикация в соцсетях. Официально!
23 smmbox 11857 13.5.2020, 11:12
автор: smmbox
Открытая тема (нет новых ответов) Поиск, сбор информации, парсинг (недорого)
Предлагаю услуги по поиску, сбору информации, парсингу и т.д.
0 Kabardin 1334 11.3.2020, 14:59
автор: Kabardin


 



RSS Текстовая версия Сейчас: 28.3.2024, 21:24
Дизайн