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 22:48

laimas,
index.php? должен быть в пути?

spinastr 09.02.2018 22:53

Раньше было написано так

Надо удостовериться, что данные в нем меняются, то есть файл current.php

я думал этот файл в планировщик прописать.

а теперь запутался нужно index.php прописать?

laimas 09.02.2018 22:56

Цитата:

Сообщение от spinastr
index.php? должен быть в пути?

Да, тяжелый случай. Ладно, JS не знаем, но читать то можем и не просто читать, а вникать в прочитанное?

Перечитать этот пост, где я специально рассказывал, что такое индексный файл.

Перечитать этот пост, где я рассказывал о вопросах связанных с получением курса валюты с ЦБ и почему нужна закрытая папка.

Ответить на вопрос - какой файл и по какому пути должен быть указан в планировщике задач?

spinastr 09.02.2018 23:01

laimas,
вот от current.php

он находится в закрытом каталоге что бы его не открыли и не могли генерировать.

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

Верно?

laimas 09.02.2018 23:02

Цитата:

Сообщение от spinastr
Верно?

Верно, а значит что в пути надо указать?

spinastr 09.02.2018 23:04

laimas,

http://h116641.s08.test-hf.su/current/current.php

верно?

laimas 09.02.2018 23:09

Цитата:

Сообщение от spinastr
/current/current.php

Наконец-то. Что касается www/h116641.s08.test-hf.su сказать не могу верно ли это, можно ли вместо протокола http:// указывать www или нет.

laimas 09.02.2018 23:13

Сделано, что было описано тут - https://javascript.ru/forum/477434-post100.html?

В этой строке в индексном файле домен указан верно?

header('Access-Control-Allow-Origin: http://domain_2');

А в JS в этой строке домен указан верно?

$.getJSON("http://domain_1", function(data) {

spinastr 09.02.2018 23:14

laimas,
теперь у меня на сайте и на домене должен курс поменяться в 0:00 ?

laimas 09.02.2018 23:18

Цитата:

Сообщение от spinastr
теперь у меня на сайте и на домене должен курс поменяться в 0:00 ?

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

wget -O /dev/null "http://имя домена/current/current.php"

spinastr 09.02.2018 23:24

laimas,

https://pp.userapi.com/c840427/v8404...-HKT_Q-TXA.jpg

https://pp.userapi.com/c840427/v8404...qWb0Jgc4mg.jpg

Верно?


А тут адрес моего второго сайта?

header('Access-Control-Allow-Origin: http://domain_2');

spinastr 09.02.2018 23:27

Цитата:

Сообщение от laimas (Сообщение 477479)
Да. Если только параметры планировщику заданы правильно. Судя по описанию должно быть

wget -O /dev/null "http://имя домена/current/current.php"

у меня без пробелов во всех скриптах

spinastr 09.02.2018 23:32

А тут адрес моего второго сайта?

header('Access-Control-Allow-Origin: http://domain_2');

а то уже скоро 0:00

spinastr 09.02.2018 23:44

laimas,

уже 23:45 верно всё?

spinastr 10.02.2018 00:18

Нету ничего, одни стрелки

https://pp.userapi.com/c841121/v8411...uujV928W6A.jpg

spinastr 10.02.2018 00:42

Что не так то?

страница моего первого сайта где будет курс

<style>
/*общие правила для элементов отображающих курс*/
span[class|=rate] {
 display: block;
 text-align: center;
 padding: 3px 0;
 color: #000;
 font-weight: bold;
}

/*правила для знака доллара*/
span[class|=rate]:before {
 margin-right: 10px;
 content: "$";
}

/*общие правила для стрелок*/
span[class|=rate]:after {
 margin-left: 10px;
}

/*правила для стрелки вверх*/
.rate-1:after {
 content: "▲";
 color: #BC0101;
}

/*правила для стрелки вниз*/
.rate-0:after {
 content: "▼";
 color: #089301;
}

</style>


<div id="usd" class="">
 <span id="current" class="rate-0"></span>
 <span id="previous" class="rate-0"></span>
</div>


<script>
$.getJSON("http://h116641.s08.test-hf.su/", function(data) {
 $.each(data, function(k, o) {
 $('#'+k).text(o.value).attr('class', function() {
 return this.className.replace(/\d/, o.rate) 
 })
 })
});
</script>


index.php

<?
header('Access-Control-Allow-Origin: адрес сайта где выводить курс.ру');
header('Vary: Origin');
header('Access-Control-Allow-Methods: GET');
header('Content-type: application/json; charset=utf-8');
exit(file_get_contents('current/current.json'));
?>


.htaccess

<Files *>
Deny from all
</Files>


current.json

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


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' => intval($usd_curr > $usd_prev)
            ],
            'previous' => [
                'date' => date('j.n.Y', strtotime('-1 day')),
                'value' => $usd_prev,
                'rate' => intval($usd_prev > $last)
            ]
        ], JSON_UNESCAPED_UNICODE)
    );
    
    chmod($dir, 0644); //уточнить у хостера
}
?>

spinastr 10.02.2018 01:16

В этом файле current.json данные не изменились

spinastr 10.02.2018 01:37

когда в файле index.php прописано
exit(file_get_contents('current/current.json'));

то отображается его содержимое.

А когда в index.php прописан полный путь
exit(file_get_contents('http://h116641.s08.test-hf.su/current/current.json'));

то в этом файле ничего не видно пусто

laimas 10.02.2018 05:28

Цитата:

Сообщение от spinastr
А когда в index.php прописан полный путь
exit(file_get_contents('http://h116641.s08.test-hf.su/current/current.json'));

то в этом файле ничего не видно пусто

А кто вас заставляет это делать? И почему JS скриптов два, один старый, другой какой требуется. Выбросить лишнее.

laimas 10.02.2018 05:29

Цитата:

Сообщение от spinastr
В этом файле current.json данные не изменились

Причина этого может быть только одна - cron не был запущен и причиной этому путь. Протокол указанный в примерах, это нечто невероятное, запуск cron, это обращение к нему в пределах файлов системы на которой вам выделено место, какие нахрен могут быть протоколы.

spinastr 10.02.2018 16:10

laimas,
скрипт удалил второй,

крон на других скриптах работает хорошо.

Видно эту проблему никому не решить, очень много заморочек

laimas 11.02.2018 00:19

Цитата:

Сообщение от spinastr
Видно эту проблему никому не решить, очень много заморочек

Нет никаких заморочек, код очень простой. Можно запустить его из браузера для тестирования. Для этого на время теста кода сделать папку current доступной для внешнего доступа. Сделать это просто - закомментировав инструкцию в .htaccess. Откройте .htaccess на редактирование и перед строкой Deny from all поставьте решетку:

#Deny from all

Сохраните файл.

Примечание: этот файл вообще может иметь только эту одну строку, это будет равнозначно

<Files *>
Deny from all
</Files>

Теперь запустить скрипт запроса к ЦБ браузером - http:/domain_name/current/current.php.

Если будут ошибки, то они будут выведены в бразуер (правда в зависимости от настроек РНР на сервере не все их уровни могут выведены, но и это не проблема, можно определить их вывод на время теста). Причин ошибок, которые связаны только с сервером конкретным, может только две:

1) Права на папку, то есть в строках задания прав, о чем ранее говорилось: chmod($dir, 0777); и chmod($dir, 0644); Решается обращением в техподдержку.

2) На сервере РНР версии ниже 5.4. В этом случае будет ошибка по поводу объявления массива - []. В этом случае код записи полученных курсов в файл current.json переписать так:

file_put_contents('current.json',
        json_encode(
            array(
                'current' => array(
                'date' => date('j.n.Y'),
                'value' => $usd_curr,
                'rate' => intval($usd_curr > $usd_prev) 
            ),
            'previous' => array(
                'date' => date('j.n.Y', strtotime('-1 day')),
                'value' => $usd_prev,
                'rate' => intval($usd_prev > $last)
            )
        ))
    );


Все, более в коде файла current.php нет ничего, что вызывало бы проблемы. JSON_UNESCAPED_UNICODE - это константа, которая указывает не кодировать UTF как \хххх, а представлять как есть. Это было существенно для передачи стрелок в json, чтобы видеть их, а не юникод. Данная константа функции json_encode доступна в РНР с версии 5.4. Но ее наличие и в ранних версиях проблем у функции json_encode не вызовет - значение неопределенной константы равно NULL. Так как в последнем варианте сервер возвращает не символы стрелок, а integer и jsjon не имеет строк на русском, то наличие константы не нужно и она удалена.

Сделайте изменения указанные выше в коде current.php и опять запустите его браузером. Файл current.json изменяется, принимает курс от ЦБ?

Удалите решетку в .htaccess у Deny from all и сохраните файл, опять закрыв папку current.

Все, более никаких проблем с кодом быть не может. Далее проблемы могут быть только с cron.

spinastr 11.02.2018 01:50

laimas,

Версия php



Запуск через браузер дал просто белый результат, всё пусто.

spinastr 11.02.2018 01:55

не могу теперь вообще зайти в папку current

Пишет:ошибка доступа

скачал папку, она пустая

и удалить папку current нельзя

laimas 11.02.2018 02:04

Файлы папки. Инструкция в .htaccess уже закомментирована, можно вызывать файл из под браузера.

spinastr 11.02.2018 02:17

laimas,
как удалить ту папку теперь? Вдруг весь сервер полетит?

spinastr 11.02.2018 02:32

Нужно удалить ту папку, не будет совпадать путь

laimas 11.02.2018 02:46

Цитата:

Сообщение от spinastr
Вдруг весь сервер полетит?

С чего вдруг?

Цитата:

Сообщение от spinastr
Нужно удалить ту папку, не будет совпадать путь

С чего вдруг не будет, если имя папки не изменялось?

Не надо ничего выдумывать. Загрузите файлы в папку и пробуйте. Если не будет работать, попробуйте заменить права папки на 700 (файлы папки тоже должны иметь эти права), в current.php строку chmod($dir, 0644); заменить на chmod($dir, 0700);

И попробуйте с этими правами.

spinastr 11.02.2018 02:48

laimas,
а что стой папкой делать, current?

Я уже в поддержку написал, в неё зайти нельзя, удалить нельзя.

Просто ваши файлы залить?

laimas 11.02.2018 03:01

Цитата:

Сообщение от spinastr
Просто ваши файлы залить?

Если в папку нельзя зайти, то и загрузить в нее файлы не получится. Но коли входа нет, то откуда сведения, что в папке нет файлов?

laimas 11.02.2018 03:06

Поместите в корень документов файл с этим кодом:

<?
chmod('current', 0700);
?>


назвав его как угодно, например f.php и запустите его из под браузера http://domain/a.php

Будет ли после этого доступна папка?

spinastr 11.02.2018 03:09

Каталог удалите не могу права доступа нашёл

spinastr 11.02.2018 03:09

laimas,
я скачал его и написано что размер 0

spinastr 11.02.2018 03:10

Цитата:

Сообщение от laimas (Сообщение 477569)
Поместите в корень документов файл с этим кодом:

<?
chmod('current', 0700);
?>


назвав его как угодно, например f.php и запустите его из под браузера http://domain/a.php

Будет ли после этого доступна папка?

сейчас попробую

laimas 11.02.2018 03:14

Цитата:

Сообщение от spinastr
я скачал его и написано что размер 0

Это потому, что недоступен каталог, а не потому, что в нем пусто.

spinastr 11.02.2018 03:16

Востановил папку бекапом!

Так теперь что делать?

spinastr 11.02.2018 03:19

Права доступа папки


laimas 11.02.2018 03:21

Цитата:

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

Замените права папки на 700, и в файле current.php также 0700 после записи. То есть строку кода chmod($dir, 0644); в этом файле заменить на chmod($dir, 0700);

Далее разрешить доступ к папке (как было написано ранее) и запустить current.php браузером.

Файл который в корневой каталог помещался (f.php) удалить.

laimas 11.02.2018 03:21

Не 755, а 700.

spinastr 11.02.2018 03:22

Закачал ваши файлы что дальше?


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