|
|
|
|
|
для: sim5
(14.07.2009 в 15:03)
| | А по каким причинам у вас intval не будет выполнен?
Да ни по каким.
В $curData в любом случае будет лежать null. | |
|
|
|
|
|
|
|
для: sim5
(14.07.2009 в 15:16)
| | ну я у себя подправил на просто
if($ts >= @intval($curData[0]))
|
тут уже по-моему как кому нравится) | |
|
|
|
|
|
|
|
для: sl1p
(14.07.2009 в 15:06)
| | А проверяем по $curData. У вас пока не было запроса курса, вообще не существует файла, так неужели нельзя это проверить, а кучу собак вешать? | |
|
|
|
|
|
|
|
для: sim5
(14.07.2009 в 15:03)
| | если не существует файла.
то есть косяк будет если файла нет и недоступен сервер, но тут уже не решабельно по-моему.
значения то брать неоткуда, разве что дефолтные использовать.. | |
|
|
|
|
|
|
|
для: sl1p
(14.07.2009 в 14:38)
| | Не проще ли записывать курсы в базу, и если текущая дата больше даты имеющихся курсов то получать курс. В любом случае первый же пользователь обновит курс, если требуется, и если сервер доступен. А по каким причинам у вас intval не будет выполнен? | |
|
|
|
|
|
|
|
для: Trianon
(14.07.2009 в 13:09)
| | в общем переписал так:
потестил вроде бы всё нормально.
проблем не должно быть с одновременным обращением?
<?
function getCurrency() {
// cfg
$xml = 'http://bank-ua.com/export/currrate.xml';
$file = 'inc/currency.txt';
$need_vals = array(840 => 'usd', 978 => 'eur'); //fgc_code => name
//
$ts = time();
$curData = @mtrim(@file($file));
if(!$curData || $ts >= @intval($curData[0])) {
if(($fgc = @file_get_contents($xml))) {
$curData = array();
$curData[0] = strtotime('tomorrow'); // MUST UPDATE
$curData[1] = $ts; // LAST UPDATE
preg_match_all('#<code>([^<]+).+?<size>([^<]+).+?<rate>([^<]+)#sx', $fgc, $out, 2);
foreach($out as $a => $b)
if(array_key_exists($out[$a][1], $need_vals)) {
$curData[] = $need_vals[$out[$a][1]];
$curData[] = $out[$a][3] / $out[$a][2];
}
} else {
$curData[0] = strtotime('+30 minutes');
fwrite_save($file, $curData);
}
fwrite_save($file, $curData);
}
$temp = $curData;
$curData = array();
$curData[0] = intval($temp[0]);
$curData[1] = intval($temp[1]);
for($i = 2, $j = count($temp); $i < $j; $i+=2)
$curData[$temp[$i]] = $temp[$i + 1];
return $curData;
}
|
| |
|
|
|
|
|
|
|
для: sl1p
(14.07.2009 в 13:07)
| | или курс старый. | |
|
|
|
|
|
|
|
для: Trianon
(14.07.2009 в 12:56)
| | Ну так здесь раз в сутки и происходит обновление с сервера.
Пол часа это если сервер не рабочий..
Или я не правильно Вас понял?) | |
|
|
|
|
|
|
|
для: sl1p
(14.07.2009 в 12:52)
| | В момент первого обращения записать данные в локальный файл и в дальнейшем обращаться только к нему. Соответственно обновлять данные в файле раз в сутки (или когда там обновляются данные на удалённом файле). | |
|
|
|
|
|
|
|
для: sl1p
(14.07.2009 в 12:52)
| | насколько я помню, правила большинства банков крайне не рекомендуют дергать сервер чаще раза в сутки, так как торги всяко проходят не чаще, и как правило в одно и то же (или близкое) время суток .
таким образом вечером банковского дня есть смысл дернуть сервер раз в полчаса.
Делать тоже самое ночью, днем или утром смысла нет никакого. | |
|
|
|
|