На сайте должны выводиться актуальные курсы валют. Они их берет из файла, допустим 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 написал(а):
Цитата |
Какая вобщем то разница) |
А вот за это по рукам бить надо.
Подобные вещи надо заставлять себя делать, пока это не будет на уровне
Для любой исключительной ситуации (а недоступность файла - это как раз оно и есть) должен быть обработчик / ветвление логики программы.
Это аксиома, как коментарии, отступы, правило, что скобку открыли, потом закрыли, а только потом пишем между ними.
Иначе будет у тебя быдлокод.
Спустя 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
ага, забыл
ага, забыл