[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка связи с сервером
alexxsilvers@gmail.com
Есть такая задача.
На сайте должны выводиться актуальные курсы валют. Они их берет из файла, допустим rates.txt.

Данные в этот файл записывает отдельный скрипт, rates.php. Записывает по крону, с интервалом, скажем 4 раза в день. Вот его исходник:

<?php
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));

$xml = $file->xpath("//Valute[@ID='R01239']");
$_eur = strval($xml[0]->Value);

$xml = $file->xpath("//Valute[@ID='R01820']");
$_yen = strval($xml[0]->Value);

$xml = $file->xpath("//Valute[@ID='R01235']");
$_usd = strval($xml[0]->Value);

$xml = $file->xpath("//Valute[@ID='R01035']");
$_gbp = strval($xml[0]->Value);

$rates = array ("EUR"=>$_eur,
"YEN"=>$_yen,
"USD"=>$_usd,
"GBP"=>$_gbp
);

file_put_contents ('rates.txt', serialize($rates));
?>


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



Спустя 22 минуты, 22 секунды (11.07.2012 - 13:49) Invis1ble написал(а):
посылать предварительно запрос и проверять код ответа

Спустя 3 минуты, 56 секунд (11.07.2012 - 13:53) alexxsilvers@gmail.com написал(а):

<?php
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));

$xml = $file->xpath("//Valute[@ID='R01239']");
$_eur = strval($xml[0]->Value);

$xml = $file->xpath("//Valute[@ID='R01820']");
$_yen = strval($xml[0]->Value);

$xml = $file->xpath("//Valute[@ID='R01235']");
$_usd = strval($xml[0]->Value);

$xml = $file->xpath("//Valute[@ID='R01035']");
$_gbp = strval($xml[0]->Value);

if ($_eur != '' || $_yen != '' || $_usd != '' || $_gbp != '') {
$rates = array ("EUR"=>$_eur,
"YEN"=>$_yen,
"USD"=>$_usd,
"GBP"=>$_gbp
);

file_put_contents ('rates.txt', serialize($rates));
}
?>


Что то типо того? Сам допер уже.. не успел написать. Так правильно по логике вещей?

Спустя 26 минут, 3 секунды (11.07.2012 - 14:19) kamanch написал(а):
Ты сначала открываешь файл, потом его парсишь, а только потом проверяшеь, напарсилось ли там что-нибудь.

Нет, сначала проверяешь, доступен ли файл. Если да, то парсишь.

Спустя 2 минуты, 22 секунды (11.07.2012 - 14:22) alexxsilvers@gmail.com написал(а):
Какая вобщем то разница) На самом деле просто немогу понять как проверить файл на доступность.

Спустя 2 минуты, 3 секунды (11.07.2012 - 14:24) Игорь_Vasinsky написал(а):
if(file_get_contents('http://site.com/file.xml'))

Спустя 15 минут, 30 секунд (11.07.2012 - 14:39) kamanch написал(а):
Цитата
Какая вобщем то разница)

А вот за это по рукам бить надо.
Подобные вещи надо заставлять себя делать, пока это не будет на уровне инстинкта рефлекса, всмысле smile.gif.
Для любой исключительной ситуации (а недоступность файла - это как раз оно и есть) должен быть обработчик / ветвление логики программы.
Это аксиома, как коментарии, отступы, правило, что скобку открыли, потом закрыли, а только потом пишем между ними.

Иначе будет у тебя быдлокод.

Спустя 19 минут, 36 секунд (11.07.2012 - 14:59) kamanch написал(а):
Кстати, не буду открывать новую тему, т.к. вопрос полностью соответсвует данной теме и является его продолжением.
Автору - ссори за вторжение, но зато все в одном месте.

Необходимо проверить существование файла на удаленном сервере.
file_get_contents()

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

Какой вариант самый оптимальный?

Спустя 10 минут, 40 секунд (11.07.2012 - 15:10) Invis1ble написал(а):
h.n.81
ну как-то так наверное
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_NOBODY => true,
));

curl_exec($ch);
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

Спустя 2 часа, 52 минуты, 32 секунды (11.07.2012 - 18:02) Guest написал(а):
Цитата (h.n.81 @ 11.07.2012 - 11:39)
[Q

Цитата

Цитата
Какая вобщем то разница)

А вот за это по рукам бить надо.
Подобные вещи надо заставлять себя делать, пока это не будет на уровне инстинкта.
Для любой исключительной ситуации (а недоступность файла - это как раз оно и есть) должен быть обработчик / ветвление логики программы.
Это аксиома, как коментарии, отступы, правило, что скобку открыли, потом закрыли, а только потом пишем между ними.

Иначе будет у тебя быдлокод.

Вобщем то да, вы правы. Будем исправляться.

2 Invis1ble
Не могли бы вы пояснить каждую строчку данного кода? Очень заинтересовало.

Спустя 2 минуты, 58 секунд (11.07.2012 - 18:05) alexxsilvers@gmail.com написал(а):
Забыл авторизироваться(

Спустя 17 минут, 22 секунды (11.07.2012 - 18:22) Invis1ble написал(а):
alexxsilvers@gmail.com
в мануале все написано

Спустя 34 минуты, 34 секунды (11.07.2012 - 18:57) alexxsilvers@gmail.com написал(а):
Всем спасибо за ответы и помощь.

Спустя 52 минуты, 39 секунд (11.07.2012 - 19:50) Winston написал(а):

Спустя 47 минут, 13 секунд (11.07.2012 - 20:37) Invis1ble написал(а):
Winston
ага, забыл smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.