laimas,
Спасибо вам! Но я не понимаю, у меня на стороннем хостинге есть место, туда залито два скрипта, php ссылки на них выше. Они отображают курс всё работает хорошо, есть крон который планирует и обновляет. Но я ничего не понимаю что выше написано))) Если можно всё точно по порядку разложить я на сервере сделаю и добавлю нужный файл. |
Цитата:
Не понял, как нужно написать в скрипте что бы туда добавить дату? |
<li> <div class="wow fadeInLeft animated" style="visibility: visible; animation-name: bounceIn;"> <a href="index/grafik_kursa_valjut/0-167" title="СЮДА ВЫВЕСТИ ДАТУ - Посмотреть курс валют"> <div id="usd"></div> </a> </div> </li> найдите отличия?? ;) $('#usd').parent().attr('title', data.Date +"- Посмотреть курс валют"); |
$('#usd').html("$ " +data.Valute.USD.Value.toFixed(2) +trend); $('#usd').parent().attr('title', data.Date +"- Посмотреть курс валют"); В скрипт добавить новый массив? |
$('#usd').html("$ " +data.Valute.USD.Value.toFixed(2) +trend).parent().attr('title', data.Date +"- Посмотреть курс валют"); вот так можно сразу |
j0hnik,
Спасибо, работает. Сейчас друга попросил, он зашёл с телефона и у него показывает вообще вчерашний курс. ЧТо делать? пипец какойто))) тут описано Как получить последние курсы со стороны сервера? Не пользуетесь PHP? Нет проблем! Добавьте такой код в /etc/cron.hourly/cbr: #!/bin/sh set -e mkdir -p /var/cache/cbr cd /var/cache/cbr for file in daily_utf8.xml daily.xml daily_eng.xml daily_eng_utf8.xml daily_json.js do wget --timestamping --no-verbose https://www.cbr-xml-daily.ru/$file done 2>&1 | xargs -I{} logger --tag $0 --id=$$ "{}" Затем дайте права на выполнение: sudo chmod +x /etc/cron.hourly/cbr И сделайте первую загрузку: sudo /etc/cron.hourly/cbr Эта программа будет поддерживать самую актуальную версию данных о курсах валют во всех форматах в каталоге /var/cache/cbr/ Использовать их можно, например, так: <?php $data = json_decode(file_get_contents('/var/cache/cbr/daily_json.js')); echo "Обменный курс USD по ЦБ РФ на сегодня: {$data->Valute->USD->Value}"; Или так: import json with open('/var/cache/cbr/daily_json.js') as data_file: data = json.load(data_file) print(data['Valute']['USD']['Value']) Может это выход из положения? у меня есть хостинг может там как что сделать? |
Цитата:
if(PHP_SAPI == 'cli') { //установить директорию, все необходимые подключения производить относительно этой директории chdir(dirname(__FILE__)); //получение курса доллара $prev = date('d/m/Y', strtotime('-1 day')); //предыдущая дата $curr = date('d/m/Y'); //текущая дата $xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.$prev.'&date_req2='.$curr.'&VAL_NM_RQ=R01235'); $usd_prev = $xml->Record[0]->Value; //курс за предыдущую дату $usd_curr = $xml->Record[1]->Value; //курс за текущую дату //здесь сохранить полученные курсы //если сохранять не в базе, то в закрытой от прямого доступа директории } Этот скрипт должен выполнять планировщик в 0 часов. Второй скрипт должен быть скриптом отдающим курсы, которые он должен получать из сохраненных. И это будут index.php. В нем код: header('Access-Control-Allow-Origin: имя вашего домена, который запрашивает курс'); //получить сохраненные курсы, и отдать их в виде JSON //как конкретно, зависит от того как сохранялось //отдаем курс клиенту и выход exit($currency); |
Так))
Я создаю два файла PHP, первый файл это первый скрипт, второй файл это второй скрипт. Добавляю в папку Заливаю в папочку на свой хостинг Ставлю таймер в кроне на индех.пхп А дальше что? как отдуда вытянуть на мой сайт где нету php в формате $ 56.77 ▲ Нужно наверно какойто скрипт создать, который будет передавать данные в блок? |
Скрипт первый, это тот который должен запускать cron. Если планировщик сервера позволяет запускать скрипты из закрытых папок, то хорошо, создать такую папку, например, current, в которую и поместить этот скрипт. В эту же папку поместить и файл .htaccess с содержанием:
<Files *> Deny from all </Files> Пусть сохранение полученного курса будет в файл, в json формате. То есть со строки 15 этого файла должно быть: file_put_contents('current.json', json_encode['usd'=>[ date('j.n.Y', strtotime($curr)) => $usd_curr, //текущая дата => курс date('j.n.Y', strtotime($prev)) => $usd_prev //предыдущая дата => курс ]]); Клиент обращается к этому домену, то есть будет запрос к index.php. В нем заменить exit($currency) на: exit(file_get_contents('current/current.json')) Клиент получит json {usd: { '8.2.2018' : 'xx.xxxx', '7.2.2018' : 'xx.xxxx' } } |
laimas,
Верно всё сделал? |
Цитата:
|
А больше картинки не нашлось?
Последнее, подробнее и практически полное. Более писать подробности не буду. 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 обновлять будет } }) |
Цитата:
|
Цитата:
|
Спасибо всем кто
мне помогает очень благодарен. Но я не понимаю 70% что там выше написано))) в них добавил всё как есть выше. на хостинге www.host-food.ru есть крон. Что дальше делать? Я сижу в инвалидной коляске и делаю сайт небольшого портала города, решил вывести курс доллара в обычный числовой формат $ 56.77 ▲ Если кто может, покажите очень подробно что делать, дальше? |
spinastr,
может пора определится, что нужно? Читайте внимательно, вникайте, мечетесь как белка в колесе. Я выделил красным имя файла .htaccess для вас специально, чтобы раз и навсегда вы уяснили, что в рамках веб сервера Apache, это специальное зарезервированное имя. .htaccess.txt - это все что угодно, но не .htaccess xxxx.htaccess - это все что угодно, но не .htaccess xxxx.htaccess.txt - это все что угодно, но не .htaccess Правильно только так .htaccess !!! Это сложно тоже понять, что на севере должна быть такая структура каталог-файлы: current .htaccess current.php index.php Как правильно задать путь cron на файл current/current.php в описаниях планировщика на хостах написано, если нет возможности просто выбора файла. Выяснять прочие мелочи, о которых я писал вы должны сами, и не здесь на форуме, а в техподдержке хоста. Если так сложно это все понять и сделать, тогда используйте ту бодягу, с которой и началась тема, игнорируя, что у них явный баг имеется с датой/курсом. Либо ищите другие сервисы получения курса если не устраивает. |
laimas,
Нужно, передать курс цифры образец $ 56.77 ▲ Есть хостинг с кроном, на нём стоит динамическая обложка vk, скрипт, который берёт вакансии с сайта и через api ucoz, автоматически публикует объявление. (php дорого не подключа на самом юкозе) На хостинге создать скрипты которые передадут на мой сайт числа, который я от стилизую через php. Я понял про структуру, папка и в ней 3 файла. Так у меня и получилось. Что делать дальше? |
Цитата:
1) Есть ведь рабочий сайт, которому и нужны курсы, ну что мешает через FTP посмотреть структуру его каталогов/файлов? Хост выдает вам готовую структуру каталогов, в которой будут один особенный каталог, который и будет является доменом для доступа извне на этот хост. Этот каталог называется публичным и для домена является корнем документов. Имя этого каталога может быть какое угодно: docs, html, etc и прочие фантазии хоста. То есть запрос в браузере http://domain/ или http://domain означает, что сервер обеспечит доступ к публичному каталогу домена. Но чтобы браузер что-то получил сервер запускает индексный файл публичной папки. Имя индексного файла тоже может быть любым, это определяется настройками на сервере. По умолчанию для РНР, как серверного языка, таким именем является index.php. А когда говорят - "создать на сайте папку ....", то это означает - в корне документов (в публичной папке) создать эту папку. Если бы я сказал создать папку current для того чтобы в браузере иметь доступ к ней по адресу http://domain/current/, тогда бы сервер для ответа браузеру искал в этой папке также индексный файл, то есть таковой был бы нужен. Но я постоянно твержу, что эта папка будет закрыта для прямого доступа посредством файла .htaccess и запрос ее или любых файлов из нее вернет 403 - доступ запрещен. Это и требуется. То есть структура папок и файлов на сервере должна быть (в корне документов, хрен знает как этот каталог на вашем сервере называется) current - папка с файлами в корне документов, в ней 2 файла: .htaccess и current.php. Файл index.php расположен в корне документов, а не в папке current. Что непонятного? |
Не вываливайте картинки размером с футбольное поле, они бесят, ибо не всегда я за компом с экраном Full HD, могу и с меньшего разрешения работать.
2) На сервере под Unix системами папки и файлы имеют права, обычно у папок права 644, что и видно по вашей картинке. Но в папку с такими правами скрипт не сможет что-то записать, будет ошибка. Для этого дают права, бывает достаточно и 755, но чаще используют полные 777, а после записи вновь возвращают 644. Файл current.php записывает полученные курсы в файл в папку current, поэтому в скрипте и задаются права на папку функцией chmod(): chmod($dir, 0777); - тут дали права на запись записали в файл chmod($dir, 0644); - вернули прежние права Две эти строки кода имеют комментарий //уточнить у хостера. Дело в том, что права можно задать как 777 и как 0777. С нулем или нет, это и нужно определить, для этого есть техподдержка, да и просто faq на хосте по наиболее частым вопросам есть. Узнать и в коде прописать как надо - с нулем или без. |
laimas,
index.php Вытащить в корень? Может лучше из готового скрипта вытащить данные? |
laimas,
вот тут ошибка 403 у хостера спросил про права и нули жду ответа |
3) и важное
Почему закрытая папка с запретом на внешний доступ? Потому, что файлы конфигураций, системные/служебные файлы не являются публичными. Если разрешить вызов (значит его запуск) файла current.php браузером, то любой желающий может генерировать запросы к ЦБ, что может закончится плачевно - ЦБ заблокирует доступ к своим ресурсам для вашего сайта. Можно вообще разрешить доступ к этому сайту только одному домену - сайту который у вас и выводит курс на странице. Это можно сделать также посредством .htaccess, но который будет располагаться в корне документов (еще раз прочесть 1), чтобы вспомнить что это такое). В этом .htaccess можно указать IP сайта который выводит курс. Все. Всем остальным будет отлуп, включая и поисковых роботов, им там тоже делать нечего. Но это для справки и делать не обязательно, просто закроем папку current. Но нужно выяснить - на хосте будут ли исполняться РНР скрипты из закрытой папки. Это только в техподдержке можно узнать. Если запускаются, то все ОК, и вся структура на сайте будет такая как описано выше. Но если нет, то в папке current будут только два файла: .htaccess и файл с курсами, который будет записывать скрипт - current.json. А файл current.php придется вынести из папки в корень документов. То есть структура на сервере будет такая: current .htaccess current.json current.php index.php Но в этом случае файл current.php становится доступным для внешнего доступа, то есть не проблема его запускать в браузере по адресу http://domain/current.php. Чтобы этого не допустить, в этом случае можно разрешить запуск скрипта в этом файле только если он будет запущен из под командной строки, что и будет в случае запуска его по cron. Для этого код файла current.php немного дополнить, поместив код в условие if(PHP_SAPI == 'cli') { тут код }, о чем я писал ранее. В коде current.php также нужно будет заменить путь записываемого файла, вот эта строка file_put_contents(\'current.json\', должна быть такой - file_put_contents(\'current/current.json\', При этом для php скриптов доступ к закрытой папке никак не ограничен так как они выполняются от имени владельца. Понятно что нужно выяснить и что сделать если ...? |
Цитата:
Вот адрес это должно быть адресом сайта http://h116641.s08.test-hf.su/index.php или просто http://h116641.s08.test-hf.su/. А доступ к http://h116641.s08.test-hf.su/current/ и должен возвращать 403! Читать https://javascript.ru/forum/showpost...0&postcount=62 |
Вот сделал так
https://pp.userapi.com/c840226/v8402...zHVvKcS8ns.jpg на хостинге папка www там файл index.php. И папка current с двумя файлами ( .htaccess и current.php) ссылка http://h116641.s08.test-hf.su/index.php - в корне |
Всё верно сделал никто не сможет поменять что то? так как файл current.php закрыт .htaccess А index.php в корне?
Теперь что делать ждать ответ тех поддержки? |
4)
Я не буду разбираться что есть что среди ваших доменов, какой РНР, какой хочет курс у РНР. Я напишу условно, далее сами подставляйте реальное в код. Пусть домен (сайт) запрашивающий курс валюты у ЦБ, это http://domain_1 Домен который выводит курс на страницу и которому он и нужен, это домен http://domain_2 Тогда код индексного файла будет таким: <? header('Access-Control-Allow-Origin: http://domain_2'); header('Vary: Origin'); header('Access-Control-Allow-Methods: GET'); header('Content-type: application/json; charset=utf-8'); exit(file_get_contents('current/current.json')); ?> Я убрал проверку наличия файла курса, вот эту строку: exit(file_exists('current/current.json') ? file_get_contents(current/current.json) : json_encode(false)); Приготовьте такой файл (current.json) и поместите его в папку current. Это можно сделать запустив и current.php, но не хочу еще кучи долгих пояснений, поэтому возьмите этот текст как исходный: {"current":{"date":"8.2.2018","value":56.95,"rate" :"▼"},"previous":{"date":"7.2.2018","value":57.2 2,"rate":"▲"}} В браузере запросить курс за три дня http://www.cbr.ru/scripts/XML_dynami...L_NM_RQ=R01235, указав в параметрах: date_req1=минус два дня от текущей даты, date_req2=текущую дату, в формате dd/mm/YYYY. Ручками все просчитать, заменив в тексте выше, и этот текст сохранить в папке current под именем current.json. На клиенте Ajax запрос будет к http://domain_1/, а проверка пришел ли ответ будет уже не в плане есть ли уже курс на http://domain_1, он гарантированно есть, а в плане вернул ли вообще сервер ответ (ошибки и т.п.). |
Цитата:
Цитата:
|
индекс файл изменил, подставил доммен сайта.
создать пустой файл (current.json) в блокноте в utf-8 и загрузить в (current)? Дальше это куда? {"current":{"date":"8.2.2018","value":56.95,"ra te" :"▼"},"previous":{"date":"7.2.2018","value":5 7.2 2,"rate":"▲"}} Я не знаю js и php как что дальше запрашивать не знаю |
Мой хостинг не забъётся от запросов? у меня на хостинге всего 50 мб
|
Дополнение к посту https://javascript.ru/forum/showpost...4&postcount=66
Можно приготовить файл current.josn и не ручками. Хороший хост не только предоставляет услуги планировщика, но и имеет хороший сервис по нему. Если в число таких сервисов входит и возможность запуска планировщика в ручную, нужно просто запустить его, не дожидаясь 0:00 часов. |
У меня в папке 3 файла верно?
![]() внутри current.json такой текст? {"current":{"date":"8.2.2018","value":56.95,"ra te" :"▼"},"previous":{"date":"7.2.2018","value":5 7.2 2,"rate":"▲"}} Верно? |
в файле индекса, появилась строчка, которая написана в current.json
|
Цитата:
Код индексного файла для РНР интерпретатора, это хрен знает какая маленькая доля мимисекундочки, чтобы думать о нагрузке. |
у меня есть авто выполнение скрипта
|
Цитата:
Цитата:
|
Что дальше делать?
|
Цитата:
Если в заголовке указан верный домен, то теперь только за клиентом вопрос. |
laimas,
Если в заголовке указан верный домен, то теперь только за клиентом вопрос. Это в индексе? Там прописан мой доммен, хостинга. Что значит за клиентом вопрос? |
Автообнавление скрипта нужно включать самому я ещё невключал
|
Цитата:
|
Часовой пояс GMT +3, время: 02:04. |