« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга

Тестирование 64-битных приложений

ПнВтСрЧтПтСбВс
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
    Популярное
Вычисляемые поля запроса

Часть IX. Приложение

Функция AccessResource

Компиляция

Сравнительный анализ компиляторов С++

Трассировка и отладка в .NET

4-й час. Переменные и управление ими

Введение в аудит-возможности Oracle

Урок 3. Некоторые правила построения баз данных.

Oracle PL/SQL для профессионалов




    Архив файлов



    Сообщества



    Документация

Статьи:: Интернет технологии :: PHP :: Работа с удаленными документами


отправить ссылку другу версия для печати  Обсудить на форуме

Работа с удаленными документами



Служебные секретные документы существуют не для того,
чтобы защищать секреты, а для
того, чтобы защищать служащих.
Джонатан Линн и Энтони Джей

Интересная особенность php заключается в том, что он может выступать не только в роли обработчика и исполнителя сценария, но и в качестве клиента сети. Если до этого урока мы манипулировали только локальными объектами, такими как файлы и директории, то на этом мы познакомимся со способами взаимодействия с удаленными объектами.



Обращение к веб-документам.

Обращение к документам, расположенным на удаленном сервере, производится уже знакомой нам функцией fopen(). Как вы понимаете, в этом случае она может быть вызвана только в режиме чтения.

Далее с полученным дескриптором файла можно делать все то же, что и с дескриптором локального файла. Например, можно вывести все содержимое на экран пользователя:

if (!($fp = fopen("http://someurl.com/", "r") ) exit("Не могу соединиться");
fpassthru($fp);

Функцией fpassthru() мы просто вывели все содержимое веб-документа, то есть на своей странице мы получим точную копию желаемой страницы.

Извлечение информации из документа.

Чаще всего работа с удаленными файлами проводится для получения необходимой информации из целого документа. Примером может служить установленный на сайте прогноз погоды, получаемый, например, с Метеобюро, либо курс доллара с http://www.rbc.ru/, либо афоризм дня или лучший анекдот. Все это и многое другое можно создать с помощью сетевых возможностей php.

Извлечение части информации производится с помощью регулярных выражений. Использование регулярных выражений основано на расположении желаемых данных в html-коде документа.

Скрипт по показу анекдотов.

В качестве иллюстрации к вышесказанному предлагаю написать скрипт, который будет выводить анекдоты с сайта Анекдоты наКроватке в соответствии с указанным пользователем рейтингом.

Сперва напишем функцию, которая выводила бы форму для задания диапазона рейтингов анекдотов для вывода.

<?function show_form() {?>

<form method="post" action="">

<table width="200" border="0" cellspacing="0" cellpadding="2">

<tr>

<td>Минимальный рейтинг</td>

<td><select name="min">

<?for ($i = 0; $i < 11; $i++) {
echo "<option";

if ($i == 5) echo " selected";

echo ">".$i."/option>n";}?>

>/select></td>

</tr>

Мы вставили элемент select, с помощьюкоторого пользователь будет определять нижний предел для рейтинга. Теперь добавим второй select - для верхней границы рейтинга.

<tr>

<td>Максимальный рейтинг</td>

<td><select name="max">

<?for ($i = 6; $i < 17; $i++) {

   echo "<option";

   if ($i == 16) {

      echo " value='no' selected>";

      echo "Неограниченный</option>n";continue;

   }

   echo ">".$i."/option>n";}?>

</select></td>

</tr>

<tr>

<td><input type="submit" value="Показать"></td>

<td></td>

</tr>

</table>

</form>

<?}    // конец функции show_form()

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

function show_anecdots($min, $max) {
   if ( !($fp = fopen("http://www.umora.ru/", "r")) ) exit("Не могу соединиться");
   $file = fread($fp, 1500000);
   $file = trim(chop($file));
   $file = convert_cyr_string($file, "k", "w");
   preg_match_all("!<center><hr width=80%></center>([^<]+)<br><br>!si", $file, $anecdots);
preg_match_all("!Рейтинг: <b>([^<]+)</b>!si", $file, $rating);

 

Данная функция начинается с получения дескриптора удаленного файла. Если происходит ошибка, выходим из скрипта, выводя соответствующее предупреждение. Далее мы считываем файл, указывая немыслимо большой размердокумента, чтобы гарантированно считать весьфайл. Напомню, что мы не можем использовать функцию filesize(), так как онаработает только слокальными объектами.

Следующей строкой мы обрезаем пустые символы по краям текста, а также удаляем повторяющиесяпробелы. Обратите внимание на следующую строку: меняем кодировку текста с koi-8 на windows-1251, так как файл читается с удаленного сервераименно в этой нежелательной для нас кодировке.

После идет ключевой момент всей функции: спомощью регулярных выражений мы сначала помещаем в массив $anecdots найденные анекдоты, а в массив $rating - их рейтинг. Рассмотрим, как это делается. 

Заглянув в html-код страницы с анекдотами, мы увидим, каким образом они располагаются:

...

<br>

<center><hr width=80%></center>

Сам анекдот. <br><br> 

Рассказал(а) <a href="mailto:some@email.ru">

<b>Имярассказавшего</b></a>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

Рейтинг: <b>Число</b>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

Оценить: ...

Отсюда мы можем сделать вывод, чтоинтересующие нас данные находятся междувыделенными последовательностями символов.Причем мы можем с достаточной долейуверенностью утверждать, что они однозначноопределяют необходимую информацию: длятела анекдота таким уникальным указателемявляется тег <hr ...>, а для рейтинга - слово"Рейтинг". Больше таких последовательностей символовв документе не встречается.

Исходя из полученных умозаключений, мысоставили регулярные выражения, причем сиспользованием подшаблонов, заключенных вскобках. Напомню, что функция preg_match_all() помещает строки, соответствующиеподшаблонам, в массив с индексом 1, то естьсами анекдоты (без посторонних html тегов)будут храниться в массиве $anecdots[1], а числа-рейтинги - в массиве $rating[1].

Ну, а теперь осталось самое легкое -вывести подходящие условию анекдоты наэкран пользователя:

if ($max == 'no') $max = 999;

for ($i = 0; $i < sizeof($rating[1]); $i++) {

   if ((int)$rating[1][$i] >= $min && (int)$rating[1][$i] <= $max) {

      echo $anecdots[1][$i] . "<br><br>";

      echo $rating[0][$i] . "<hr>";
   }
}

Если максимум указан как неограниченный,то верхний предел мы устанавливаемневероятно большим. Далее мы просматриваемвесь массив с рейтингами, и если его элементнаходится в заданном диапазоне, то мывыводим анекдот, соответствующий этомурейтингу, и внизу пишем сам рейтинг, причемиспользуем массив $rating[0], то естьвыводим строку, соответствующую всемуаблону поиска рейтинга. Таким образом, унас выведется не просто цифра, а "Рейтинг:<b>цифра</b>".

И, наконец, нам осталось только грамотновызвать написанные функции:

if ( isset($min) && isset($max) ) show_anecdots($min, $max);

else show_form();
?>

Я хотел дать возможность читателямиспытать скрипт в действии, но, к сожалению,хостинг этого сайта не дает возможностиобращения к файлам других серверов. Так чтопробуйте сами.

До встречи на следующем уроке!

Источник: http://myphp.net.ru/




Рубрика: PHP




9 правил для начинающего Ajax-разработчика.

AJAX

Эти девять правил несложны, никаких кусков кода — только общие советы начинающим Ajax-разработчикам. Крайне вольный перевод 9 AJAX Tips & Tricks.


Подробнее... | Рубрика: AJAX | Добавлено: 25.08.2008

ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения.

AJAX

Приветствуем наших читателей. Что-то в последнее время много новостей и я даже не успеваю все отобрать и написать о самых интересных технологиях и продуктах. А ведь ещё и работать иногда надо. Но мимо этой новости мы просто не могли пройти - ведь AJAX и ExtJS как его наглядное воплощения это наша основная технологическая платформа. А буквально вчера вышла следующая версия в текущей ветке 2.х - 2.2 Что же там нового, полезного и интересного мы сейчас и рассмотрим.


Подробнее... | Рубрика: AJAX | Добавлено: 25.08.2008

Windows 7: под покровом тайны.

Windows 7

О преемнице Windows Vista, носящей кодовое имя Windows 7, известно очень мало. Корпорация Microsoft, наученная горьким опытом, с крайней неохотой делится с журналистами информацией о разрабатываемой системе, дабы у пользователей и разработчиков программного обеспечения не сложилось искаженное представление о продукте, которое бы повлияло на продажи новой операционки, как это случилось с "Вистой". Тем не менее, некоторые скупые сведения хоть и изредка, но просачиваются из стен редмондского гиганта.


Подробнее... | Рубрика: Windows 7 | Добавлено: 25.08.2008

Остальные статьи:

Apache mod_ndb - MySQL кластер с доступом через HTTP и Ajax
Поиск уязвимостей в программах с помощью анализаторов кода
Как появилась библиотека VivaCore
Это сложно
ASP.NET и немного поисковой оптимизации
Protocol buffers: библиотека обмена данными для C++, Java, Python от Google
Описание VivaVisualCode
JQuery: Пара сотен плагинов в одной заметке
Касание сетки
Разработка элементов управления ASP.NET на примере навигационной панели
Сохранения параметров приложения в .Net
Custom cursors в .Net
Бегун убегает от хозяина
"Битрикс" выпустил седьмую версию CMS
Выбираем систему управления сайтом
Рынок CMS в Европе или впечатления с CeBIT 2008


Цитата дня (все,добавить):



    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 95
Пользователей: 0