Web - кодинг: PHP:


Как можно вовсю пользоваться PHP на бесплатном хостинге



  Автор: Александр Рябов
  Источник:

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



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

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

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

© 2005