Разделы -> Новости -> Development/Разработка -> Использование Reload...

31 Январь




















Немного более года назад в ReloadCMS был добавлен модуль "Статические страницы", и практически сразу к этим страницам был прикручен новый режим — "PHP".

Это позволяет писать код прямо в редакторе, и таким образом создавать новые модули и дорабатывать через редактор сайта — очень удобно.
Причем эти модули строго говоря являются просто одной из страниц модуля "Статические страницы" (?module=pages&id=Имя страницы).

В качестве прикола был написан небольшой проксик, который не делает космических запусков Белки и Стрелки, однако может отображать чужой сайт прямо на Вашей странице. Практическое применение — так например я вижу, доступен ли скажем сайт в Белоруссии из России. Бывали такие случаи, когда из Белоруссии сайт доступен, а из России его напрочь не видно;)

А теперь немного кода с использованием библиотечки cUrl (имеется на всех адекватных хостингах).
Код:
echo '
<form action="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'" method="POST">
Url: <input type="text" name="url" value="'.post('url','http://').'">
<input type="submit" value="Показать">
</form>
';

if (post('url')) {
//Инициализация cURL и задание адреса
$ch = curl_init(post('url'));
//Установка опций
curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx Site Parser');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, 'http://'.$_SERVER['HTTP_HOST']);
//выполнение и запись результата в переменную 
ob_start();
curl_exec($ch);
print(curl_error($ch));
curl_close($ch);
$result = ob_get_clean();
//Обработка адресов
$result=str_replace('?module',post('url').'?module',$result);
//Вырезать штмл, хидеры и боди
$result = str_replace( array('<html>','<head>','<body>','</html>','</head>','</body>'),
array('<div>','<div>','<div>','</div>','</div>','</div>'),
$result);
echo $result;
}
Результат выполнения:

Немного замечаний.
1. Код не годится на полноценный прокси, это лишь пример. Для постоянного использования нужно учитывать, что теги <html> и др. обычно содержат атрибуты, и не заменятся на <div>. Для этого нужно писать соответствующие регулярки. Также возможно потребуется вырезать доктайп, переносить код во фрейм и делать другие страшные вещи, например проверять права доступа;)
2. В режиме "PHP" результат выполнения кешируется. Поэтому даже критические ошибки в коде не приведут к неработоспособности сайта. Однако в коде надо быть осторожным и корректно обращаться с функциями, начинающимися на ob_
3. Функция function post($value,$no_value='') — новая штатная функция, содержится в ReloadCMS после 15 января 2013г.
Проверяет есть ли соответствующее значение в переменной $_POST.
В случае удачи возвращает это значение, иначе второй параметр.
Если у Вас более ранняя версия ReloadCMS, можете дописать такую функцию, она выглядит так:
Код:
function post($value,$no_value=''){
return (!empty($_POST[$value])?$_POST[$value]:$no_value);
}
Замечания, ругательства, пожелания оставляйте в комментариях.

Комментировать

Вы не залогинены!