Злиться на себя можно до
бесконечности, но, рано или поздно, надо что-то
делать. Последствия – не предсказуемы, но лучше
иметь последствия, чем сожалеть об их отсутствии.
Есть небольшой комментарий, который, возможно, окажется
полезным другим авторам журнала. Мысль для написания этой статьи
пришла в момент полного душевного опустошения. Пусто было, как в
Большом Провале, который никак не провалится. Даже ветер
посвистывал. Но провал-провалом, а засел-таки за изложение мысли.
Писалось так себе. Но шло. Когда занялся продолжением на следующий
день – было еще хуже. Тогда я взял текст и стал методически
истреблять восклицательные знаки, шутки, смайлы – все, что источало
хотя бы самый слабый признак веселья и жизнерадостности. А потом
продолжил писать в таком же духе. И что вышло? МЕГА ошибка, которую
обнаружил только тогда, когда ушла пустота. Когда вернулся смысл.
Когда жизнь окрасилась буйными красками. Так что, мой всем совет –
не писать материал в состоянии душевного упадка. А если и писать –
то перечитывать потом "по-черному", и тщательно проверять каждый
пример кода.
Есть желание создать свой сайт? Отлично!!! Есть умения,
возможности, время? Отлично!!! А что насчет хостинга? Хотелось бы на
бесплатном? Да всем охота на бесплатном. Вот только реклама, будь
она неладна...
Возрадуйтесь, граждане-товарищи! Из этой коротенькой листовки вы
узнаете, как можно вовсю пользоваться PHP на бесплатном хостинге, не
утруждая трафик посетителей и дизайн сайта назойливой рекламой :)
Итак, задача. Есть сайт. Написан с использованием PHP.
Хостинг - в розыске, денег - жалко. Что делать?
Решение. Разнесем весь сайт на два хостинга: первый - с
поддержкой PHP (без рекламы - днем с огнем не сыскать) - типа A,
второй - без поддержки скриптов, но и без рекламы - типа B. Вот одна
из возможных комбинаций: h12.ru + hotbox.ru. На
хостинге типа A будут размещены все скрипты, а на хостинге типа B -
html-страницы, эти скрипты запускающие. Я не оговорился. Именно
html-страницы будут запускать скрипты. Для этой цели будем
использовать возможность подключения к странице js-скриптов (или
иных скриптов этого рода) из внешних файлов.
Каким образом бесплатные хостинги подвешивают рекламу на выход
PHP-скриптов? Они анализируют HTTP-заголовок Content-Type,
выдаваемый скриптом. Тот хостинг, на котором я ставил эксперименты,
вешал рекламу, в частности, на такие типы контента: text/html,
text/plain, text/javascript. Т.е. даже если
Content-Type=text/javascript, выход скрипта банится ("подгружается"
баннером) (но это только для php-скриптов. *.js файлы выдаются без
"банов"). Зато "картинный" контент – не банится. Например,
image/gif. Вот мы и дадим пинка по этой ахиллесовой пяте
(<вырезано цензурой> засмотрелся на <вырезано цензурой>,
как внезапно <вырезано цензурой>, отправив создателей сайта в
<вырезано цензурой>, наступил на <вырезано цензурой>
врага – по мотивам лога боя в БК). Как? Да очень даже просто. Я
проверил в трех браузерах – js скрипт корректно считывается и
отрабатывается, даже если сервер его выдает как
Content-Type=image/gif. Вот так-то.
Осталось только сгенерировать соответствующий js-файл. Вот как мы
это сделаем. Причем, с одной-единственной дополнительной строчкой в
"маскируемом" скрипте. Эта единственная строчка -
header("Content-Type: image/gif"); - которую нужно добавить в самое
начало скрипта (в принципе, из-за применения в Посреднике
буферизации, можно ставить хоть и в самый конец. Ничего от этого не
изменится. Но лучше ставить отсылку заголовка в самое начало – так
правильнее со всех точек зрения.) Далее, смастерим скрипт-посредник,
принимающий один параметр через строку запроса. Этот скрипт будет
обрабатывать специальным образом вывод скрипта, имя которого
передано в запросе. Вот он, Посредник (не побоюсь большой буквы), -
negotiator.php:
<? header("Content-Type: image/gif"); #
указываем на тип вывода скрипта ob_start(); # сброс всего вывода
скрипта во внутренний
буфер
require($_SERVER["QUERY_STRING"]);
$page =
ob_get_contents(); # получаем содержимое буфера ob_end_clean(); #
очищаем буфер и отключаем буферизацию echo
"document.write(\"".addslashes($page)."\");"; # вывод теперь уже
js-скрипта ?>
Так просто. Любой (для усиления эффекта повторю еще раз), любой
PHP-скрипт, вызываемый через negotiator.php?имя_скрипта , будет
выдавать точно то же, что и выдавал ранее, только в контексте
image/gif . Теперь остается только правильно подключить его к
странице, чтобы вывод скрипта появился в нужном месте (и,
разумеется, в нужное время): <script
language="javascript"
src="http://..../negotiator.php?имя_скрипта"></script> Вот
и все....
Приведу пример. Создадим небольшую страничку, на
которой (средствами PHP) будет выведен ip-адрес и локальный порт
посетителя, по которому производится связь с сервером
сайта. Скрипт ipport.php (размещаем по адресу
http://сервер.типа.A/ipport.php - на хостинге типа
A):
<? header("Content-Type: image/gif"); echo
"Соединение производится по адресу ".$_SERVER["REMOTE_ADDR"].",
локальный порт ".$_SERVER["REMOTE_PORT"]; ?>
Там же находится и Посредник -
http://сервер.типа.A/negotiator.php. Страница ipport.htm, вызывающая
скрипт (размещаем по адресу http://сервер.типа.B/ipport.htm - на
хостинге типа B), выглядит
так:
<html> <head> <meta
http-equiv="Content-Type"
content="text/html;charset=utf-8"> </head> <body> А
ну-ка, что скажет PHP?<br> <script
type="text/javascript"
src="http://сервер.типа.A/negotiator.php?ipport.php"></script> </body> </html>
Открыв в браузере http://сервер.типа.B/ipport.htm, легко
убеждаемся в работоспособности примера. И никакой рекламы.
P. S. Единственное возможное препятствие на пути
применения указанной технологии обхода рекламы – запрет (на самом
хостинге) на генерацию "картинного" контента скриптами. Но,
во-первых, и поныне есть бесплатные хостинги с разрешенной
генерацией картинок. А во-вторых, даже если не останется ни одного
такого "милостивого" хостинга, - нас больше, чем их. Придумаем
что-то новенькое :)
(Внимание! Данный
материал публикуется только в ознакомительных целях для повышения
Вашей квалификации и указанию службе поддержки бесплатных хостингов
на потенциальную недоработку. За применение подобного метода, в
случае если это заметит служба поддержки, Ваш аккаунт на бесплатном
хостинге будет незамедлительно и безвозвратно удален. Прим. ред.)
Александр Рябов. Сентябрь 2004,
Украина. ryabov@ua.fm
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.