Нас не забанят!
Есть небольшой комментарий, который, возможно, окажется полезным другим авторам журнала. Мысль для написания этой статьи пришла в момент полного душевного опустошения. Пусто было, как в Большом Провале, который никак не провалится. Даже ветер посвистывал. Но провал-провалом, а засел-таки за изложение мысли. Писалось так себе. Но шло. Когда занялся продолжением на следующий день – было еще хуже. Тогда я взял текст и стал методически истреблять восклицательные знаки, шутки, смайлы – все, что источало хотя бы самый слабый признак веселья и жизнерадостности. А потом продолжил писать в таком же духе. И что вышло? МЕГА ошибка, которую обнаружил только тогда, когда ушла пустота. Когда вернулся смысл. Когда жизнь окрасилась буйными красками. Так что, мой всем совет – не писать материал в состоянии душевного упадка. А если и писать – то перечитывать потом "по-черному", и тщательно проверять каждый пример кода.
Есть желание создать свой сайт? Отлично! Есть умения, возможности, время? Отлично! А что насчет хостинга? Хотелось бы на бесплатном? Да всем охота на бесплатном. Вот только реклама, будь она неладна...
Возрадуйтесь, граждане-товарищи! Из этой коротенькой листовки вы узнаете, как можно вовсю пользоваться 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. Единственное возможное препятствие на пути применения указанной технологии обхода рекламы – запрет (на самом хостинге) на генерацию "картинного" контента скриптами. Но, во-первых, и поныне есть бесплатные хостинги с разрешенной генерацией картинок. А во-вторых, даже если не останется ни одного такого "милостивого" хостинга - нас больше, чем их. Придумаем что-то новенькое. :)
Внимание!
Данный материал публикуется только в ознакомительных целях для повышения Вашей квалификации и указанию службе поддержки бесплатных хостингов на потенциальную недоработку. За применение подобного метода, в случае если это заметит служба поддержки, Ваш аккаунт на бесплатном хостинге будет незамедлительно и безвозвратно удален.