(Злиться на себя можно до
бесконечности,
но, рано или поздно, надо что-то делать.
Последствия - не предсказуемы, но лучше иметь
последствия, чем сожалеть об их отсутствии.)
Есть небольшой комментарий, который, возможно, окажется полезным другим
авторам журнала. Мысль для написания этой статьи пришла в момент
полного душевного опустошения. Пусто было, как в Большом Провале,
который никак не провалится. Даже ветер посвистывал. Но
провал-провалом, а засел-таки за изложение мысли. Писалось так
себе. Но шло. Когда занялся продолжением на следующий день -
было еще хуже. Тогда я взял текст и стал методически истреблять
восклицательные знаки, шутки, смайлы - все, что источало хотя бы
самый слабый признак веселья и жизнерадостности. А потом
продолжил писать в таком же духе. И что вышло? МЕГА ошибка,
которую обнаружил только тогда, когда ушла пустота. Когда
вернулся смысл. Когда жизнь окрасилась буйными красками. Так что,
мой всем совет - не писать материал в состоянии душевного упадка.
А если и писать - то перечитывать потом "по-черному", и
тщательно проверять каждый пример кода.
Есть желание создать свой сайт? Отлично!!! Есть умения,
возможности, время? Отлично!!! А что насчет хостинга? Хотелось
бы на бесплатном? Да всем охота на бесплатном. Вот только
реклама, будь она неладна...
Возрадуйтесь, граждане-товарищи! Из этой коротенькой листовки вы
узнаете, как можно вовсю пользоваться 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=windows-1251">
</head>
<body>
А ну-ка, что скажет PHP?<br>
<script type="text/javascript" src="http://сервер.типа.A/negotiator.php?ipport.php"></script>
</body>
</html>
Открыв в браузере http://сервер.типа.B/ipport.htm, легко
убеждаемся в работоспособности примера. И никакой рекламы.
P. S. Единственное возможное препятствие на пути применения
указанной технологии обхода рекламы - запрет (на самом хостинге)
на генерацию "картинного" контента скриптами. Но, во-первых, и
поныне есть бесплатные хостинги с разрешенной генерацией
картинок. А во-вторых, даже если не останется ни одного такого "милостивого"
хостинга, - нас больше, чем их. Придумаем что-то новенькое :)
(Внимание! Данный материал публикуется только в ознакомительных
целях для повышения Вашей квалификации и указанию службе
поддержки бесплатных хостингов на потенциальную недоработку
(*Предупреждение! Не удалите эту ссылку: любопытные статьи,
шокирующие факты, развлечении:
http://tebea.ru *). . За
применение подобного метода, в случае если это заметит служба
поддержки, Ваш аккаунт на бесплатном хостинге будет
незамедлительно и безвозвратно удален. Прим. ред.)