Интересная задача на PHP. Нужно чтобы после вызова exit() можно было выполнить свой к

DyaDya
На сайте с 11.04.2007
Offline
147
1080

1. Есть файл _index.php, он закодирован ZEND-ом. Всё нормально работает.

2. Результатом работы файла, является некая html страница с данными.

3. Задача такая, что нужно в полученных данных сделать некоторые изменения, что-то удалить, что-то наоборот добавить.

Уточнение к постановке задачи:


echo "<br>#1<br>"; //выводится в браузер
include("_index.php");
/*
файл закодирован Zend-ом.
Результат работы скрипта выводится в браузер.
Но в конце файла, видимо, есть вызов exit(), так как следующий после этого include код не работает!
*/
echo "<br>#2<br>"; //уже не выводится в браузер!

Вариант решения один могу предположить, но хотелось бы услышать, вдруг есть более интересные решения.

Вот какой вариант пока мне пришёл в голову, принцип такой: делаем не include, а вызов нужного файла с помощью fopen:


$handle = fopen("http://www.example.com/_index.php", "r");
// далее спокойно читать полученный html в переменную и делать с ним, то что нужно.

Но такое решение мне не очень нравится. Хочу услышать от спецов, есть ли другие варианты?

Спасибо.

Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
Demetrio
На сайте с 26.05.2008
Offline
113
#1

Можно попробовать раскодировать зендовый скрипт и модифицировать

Размещусь на ваших площадках по тематикам: мобильная связь, спортивное питание
DyaDya
На сайте с 11.04.2007
Offline
147
#2
Demetrio:
Можно попробовать раскодировать зендовый скрипт и модифицировать

Есть возможность это сделать бесплатно?

Насколько знаю, задача не простая, а иногда и очень дорогая(

Demetrio
На сайте с 26.05.2008
Offline
113
#3

У меня есть пара скриптов для расшифровки, не всегда они срабатывают на 100% корректно, могу попробовать прогнать по ним Ваш скрипт, возможно, что-нибудь да получится ..)

FeoOne
На сайте с 27.12.2008
Offline
32
#4

function func() {
echo "<br>#2<br>";
}
register_shutdown_function('func');
echo "<br>#1<br>";
include("_index.php");
DyaDya
На сайте с 11.04.2007
Offline
147
#5

Пока декодирование оставлю на потом, может ко предложит более простые решения, на PHP?

[Удален]
#6
FeoOne:
function func() {
echo "<br>#2<br>";
}
register_shutdown_function('func');
echo "<br>#1<br>";
include("_index.php");

Есть маленькая проблемка


Зарегистрированные register_shutdown_function() функции будут вызваны после того, как запрос выполнен окончательно (включая отсылку любых буферов вывода), соответственно вы не сможете из этих функций вывести что-либо в броузер, используя echo() или print(), или возвратить содержимое какого-либо буфера вывода, используя ob_get_contents().

neolord добавил 15.07.2009 в 16:23

DyaDya:
Но такое решение мне не очень нравится. Хочу услышать от спецов, есть ли другие варианты?

Скорее всего это единственный вариант.

Если таки тот _index.php не содержит exit() Или die(), можно отловить его вывод через

ob_start / ob_get_contents

DyaDya
На сайте с 11.04.2007
Offline
147
#7

neolord, эх, расстроили).

Нужно как раз, чтобы можно было перехватывать результат вывода и отсылать уже модифицированным.

neolord:
Если таки тот _index.php не содержит exit() Или die(), можно отловить его вывод через
ob_start / ob_get_contents

Так я пробывал, поэтому и предположил, что есть вызов exit(). До вызова ob_get_contents дело уже не доходило ;(

Хотя, может не всё так плохо с register_shutdown_function()...

У меня фунция func() вывела в браузер #2, почти как и надо, но теперь самое главное,

удастся ли вытащить что-нидь из ob_get_contents(), чтобы получить доступ тому, что выводилось до вызова функции func().

--

Пока не получилось(. Дополнительные код ( прописанный в func() ) выполняется, но вот доступ к тому, что уже вывел этот файл _index.php получить не удаётся.

DyaDya добавил 15.07.2009 в 16:46

Сработало, но это пока я локально тестил, вдруг на серваке это не прокатит, согласно доводам neolord

арегистрированные register_shutdown_function() функции будут вызваны после того, как запрос выполнен окончательно (включая отсылку любых буферов вывода), соответственно вы не сможете из этих функций вывести что-либо в броузер, используя echo() или print(), или возвратить содержимое какого-либо буфера вывода, используя ob_get_contents().

Но пока всё работает, делюсь, как получилось:


ob_start();
function func() {
echo "<br>#2<br>";//выводится
$len=ob_get_length();//для теста
$str=ob_get_contents();
ob_end_clean();


echo "<br>Размер буфера=$len<br>";//для теста
echo $str;
//здесь оказалось то, что мне нужно! Отлично! Дальше уже дело техники ;)
echo "<br>#2<br>";
exit;
}
register_shutdown_function('func');

echo "<br>#1<br>";//выводится
include("_index.php");

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий