Показать сообщение отдельно
  #52 (permalink)  
Старый 08.02.2018, 20:55
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А больше картинки не нашлось?

Последнее, подробнее и практически полное. Более писать подробности не буду.

1) Создать на сервере папку current, с правами 644 (уточнить у хостера), закрыв прямой доступ к ней через .htaccess, то есть поместить этот файл в папку current. Этот файл так и называется - с точкой вначале без всяких подстановок kurs и прочей белиберды, а также не имеет никакого расширения. В нем должны быть строки которые я ранее приводил.

2) Узнать - если на сервере cron выполняет скрипты из закрытого каталога, то код следующего файла поместить в папку current под именем current.php. Если нет, то поместить его под этим именем в корень документов (это там где и индексный файл), при этом код этого файла поместить в условие показанное ниже:
<?
if(PHP_SAPI == 'cli') {
    //тут далее код файла current.php, естественно без РНР тегов <? и ?>
}
?>


current.php
<?
$dir = dirname(__FILE__);
chdir($dir);

libxml_use_internal_errors();
if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.date('d/m/Y', strtotime('-2 day')).'&date_req2='.date('d/m/Y').'&VAL_NM_RQ=R01235')) {
    $last = round((float)str_replace(',', '.', current($xml->Record[0]->Value)), 2);
    $usd_prev = round((float)str_replace(',', '.', current($xml->Record[1]->Value)), 2);
    $usd_curr = round((float)str_replace(',', '.', current($xml->Record[2]->Value)), 2);
    
    chmod($dir, 0777); //уточнить у хостера
    
    file_put_contents('current.json',
        json_encode([
            'current' => [
                'date' => date('j.n.Y'),
                'value' => $usd_curr,
                'rate' => $usd_curr > $usd_prev ? '▲' : '▼' 
            ],
            'previous' => [
                'date' => date('j.n.Y', strtotime('-1 day')),
                'value' => $usd_prev,
                'rate' => $usd_prev > $last ? '▲' : '▼'
            ]
        ], JSON_UNESCAPED_UNICODE)
    );
    
    chmod($dir, 0644); //уточнить у хостера
}
?>


Курс за три дня, чтобы динамику предыдущего дня получить. JSON ответа:

{"current":{"date":"8.2.2018","value":56.95,"rate":"▼"},"previous":{"date":"7.2.2018","value":57.22,"rate":"▲"}}


index.php
<?
header('Access-Control-Allow-Origin: http://h116641.s08.test-hf.su');
header('Vary: Origin');
header('Access-Control-Allow-Methods: GET');
header('Content-type: application/json; charset=utf-8');
exit(file_exists('current/current.json') ? file_get_contents(current/current.json) : json_encode(false));
?>


<Files *> к РНР отношения не имеет, это в .htaccess, в РНР файле это:

<Files *>
header ....

просто вызовет фатальную ошибку.

На клиенте:

$.getJSON(url домена, function(data) {
    if(data) {
        //думаю дальше пояснять уже не надо
    } else {
        //еще не было сохраненного курса на сервере
        //решать не мне что делать, но можно на сервер поместит json файл, к котором прописать вручную данные, а cron обновлять будет
    }  
})

Последний раз редактировалось laimas, 08.02.2018 в 21:32.
Ответить с цитированием