Нас не забанят!

Есть небольшой комментарий, который, возможно, окажется полезным другим авторам журнала. Мысль для написания этой статьи пришла в момент полного душевного опустошения. Пусто было, как в Большом Провале, который никак не провалится. Даже ветер посвистывал. Но провал-провалом, а засел-таки за изложение мысли. Писалось так себе. Но шло. Когда занялся продолжением на следующий день – было еще хуже. Тогда я взял текст и стал методически истреблять восклицательные знаки, шутки, смайлы – все, что источало хотя бы самый слабый признак веселья и жизнерадостности. А потом продолжил писать в таком же духе. И что вышло? МЕГА ошибка, которую обнаружил только тогда, когда ушла пустота. Когда вернулся смысл. Когда жизнь окрасилась буйными красками. Так что, мой всем совет – не писать материал в состоянии душевного упадка. А если и писать – то перечитывать потом "по-черному", и тщательно проверять каждый пример кода.

Есть желание создать свой сайт? Отлично! Есть умения, возможности, время? Отлично! А что насчет хостинга? Хотелось бы на бесплатном? Да всем охота на бесплатном. Вот только реклама, будь она неладна...

Возрадуйтесь, граждане-товарищи! Из этой коротенькой листовки вы узнаете, как можно вовсю пользоваться 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:

<?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 type="text/javascript" src="http://..../negotiator.php?имя_скрипта"></script>

Вот и все.

Приведу пример. Создадим небольшую страничку, на которой (средствами PHP) будет выведен ip-адрес и локальный порт посетителя, по которому производится связь с сервером сайта. Скрипт import.php (размещаем по адресу http://сервер.типа.A/import.php - на хостинге типа A):

<?php
header("Content-Type: image/gif");
echo "Соединение производится по адресу " . $_SERVER["REMOTE_ADDR"] . ", локальный порт " . $_SERVER["REMOTE_PORT"];
?>

Там же находится и Посредник - http://сервер.типа.A/negotiator.php. Страница import.htm, вызывающая скрипт (размещаем по адресу http://сервер.типа.B/import.htm - на хостинге типа B), выглядит так:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=windows-1251">
</head>
<body>
    <--А ну-ка, что скажет PHP?-->
    <script type="text/javascript" src="http://сервер.типа.A/negotiator.php?import.php"></script>
</body>
</html>

Открыв в браузере http://сервер.типа.B/import.htm, легко убеждаемся в работоспособности примера. И никакой рекламы.

P.S. Единственное возможное препятствие на пути применения указанной технологии обхода рекламы – запрет (на самом хостинге) на генерацию "картинного" контента скриптами. Но, во-первых, и поныне есть бесплатные хостинги с разрешенной генерацией картинок. А во-вторых, даже если не останется ни одного такого "милостивого" хостинга - нас больше, чем их. Придумаем что-то новенькое. :)

Внимание!
Данный материал публикуется только в ознакомительных целях для повышения Вашей квалификации и указанию службе поддержки бесплатных хостингов на потенциальную недоработку. За применение подобного метода, в случае если это заметит служба поддержки, Ваш аккаунт на бесплатном хостинге будет незамедлительно и безвозвратно удален.