Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывод курса валют (https://javascript.ru/forum/misc/72548-vyvod-kursa-valyut.html)

spinastr 09.02.2018 03:56

laimas,

вот тут ошибка 403


у хостера спросил про права и нули жду ответа

laimas 09.02.2018 04:02

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 скриптов доступ к закрытой папке никак не ограничен так как они выполняются от имени владельца.

Понятно что нужно выяснить и что сделать если ...?

laimas 09.02.2018 04:07

Цитата:

Сообщение от spinastr

Кто будет читать пост https://javascript.ru/forum/477344-post56.html и вникать что и как? Ну сколько можно говорить об этом бедном индексном файле и где он должен быть? С какого хрена он оказался в папке current?

Вот адрес это должно быть адресом сайта 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

spinastr 09.02.2018 04:07

Вот сделал так

https://pp.userapi.com/c840226/v8402...zHVvKcS8ns.jpg


на хостинге папка www там файл index.php. И папка current с двумя файлами ( .htaccess и current.php)

ссылка http://h116641.s08.test-hf.su/index.php - в корне

spinastr 09.02.2018 04:15

Всё верно сделал никто не сможет поменять что то? так как файл current.php закрыт .htaccess А index.php в корне?

Теперь что делать ждать ответ тех поддержки?

laimas 09.02.2018 04:27

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, он гарантированно есть, а в плане вернул ли вообще сервер ответ (ошибки и т.п.).

laimas 09.02.2018 04:29

Цитата:

Сообщение от spinastr
Всё верно сделал никто не сможет поменять что то? так как файл current.php закрыт .htaccess А index.php в корне?

Да.

Цитата:

Сообщение от spinastr
Теперь что делать ждать ответ тех поддержки?

Выяснить все, что описано здесь и сделать то, что там написано в зависимости от ответа техподдержки.

spinastr 09.02.2018 04:43

индекс файл изменил, подставил доммен сайта.

создать пустой файл (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 как что дальше запрашивать не знаю

spinastr 09.02.2018 04:45

Мой хостинг не забъётся от запросов? у меня на хостинге всего 50 мб

laimas 09.02.2018 04:55

Дополнение к посту https://javascript.ru/forum/showpost...4&postcount=66

Можно приготовить файл current.josn и не ручками. Хороший хост не только предоставляет услуги планировщика, но и имеет хороший сервис по нему. Если в число таких сервисов входит и возможность запуска планировщика в ручную, нужно просто запустить его, не дожидаясь 0:00 часов.


Часовой пояс GMT +3, время: 08:39.