Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите с функцией "курс-валют"

Сообщения:  [1-10]   [11-13] 

 
 автор: Trianon   (14.07.2009 в 15:30)   письмо автору
 
   для: sim5   (14.07.2009 в 15:03)
 

А по каким причинам у вас intval не будет выполнен?

Да ни по каким.
В $curData в любом случае будет лежать null.

  Ответить  
 
 автор: sl1p   (14.07.2009 в 15:20)   письмо автору
 
   для: sim5   (14.07.2009 в 15:16)
 

ну я у себя подправил на просто
if($ts >= @intval($curData[0]))


тут уже по-моему как кому нравится)

  Ответить  
 
 автор: sim5   (14.07.2009 в 15:16)   письмо автору
 
   для: sl1p   (14.07.2009 в 15:06)
 

А проверяем по $curData. У вас пока не было запроса курса, вообще не существует файла, так неужели нельзя это проверить, а кучу собак вешать?

  Ответить  
 
 автор: sl1p   (14.07.2009 в 15:06)   письмо автору
 
   для: sim5   (14.07.2009 в 15:03)
 

если не существует файла.

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

  Ответить  
 
 автор: sim5   (14.07.2009 в 15:03)   письмо автору
 
   для: sl1p   (14.07.2009 в 14:38)
 

Не проще ли записывать курсы в базу, и если текущая дата больше даты имеющихся курсов то получать курс. В любом случае первый же пользователь обновит курс, если требуется, и если сервер доступен. А по каким причинам у вас intval не будет выполнен?

  Ответить  
 
 автор: sl1p   (14.07.2009 в 14:38)   письмо автору
 
   для: 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$out2);
            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;
}

  Ответить  
 
 автор: Trianon   (14.07.2009 в 13:09)   письмо автору
 
   для: sl1p   (14.07.2009 в 13:07)
 

или курс старый.

  Ответить  
 
 автор: sl1p   (14.07.2009 в 13:07)   письмо автору
 
   для: Trianon   (14.07.2009 в 12:56)
 

Ну так здесь раз в сутки и происходит обновление с сервера.

Пол часа это если сервер не рабочий..
Или я не правильно Вас понял?)

  Ответить  
 
 автор: Саня   (14.07.2009 в 12:57)   письмо автору
 
   для: sl1p   (14.07.2009 в 12:52)
 

В момент первого обращения записать данные в локальный файл и в дальнейшем обращаться только к нему. Соответственно обновлять данные в файле раз в сутки (или когда там обновляются данные на удалённом файле).

  Ответить  
 
 автор: Trianon   (14.07.2009 в 12:56)   письмо автору
 
   для: sl1p   (14.07.2009 в 12:52)
 

насколько я помню, правила большинства банков крайне не рекомендуют дергать сервер чаще раза в сутки, так как торги всяко проходят не чаще, и как правило в одно и то же (или близкое) время суток .

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

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования