Как сделать модуль во фрейме или независимый моудль

#16 6 ноября 2014 в 11:33
вот собстевнно сам код, и его мне уже вроде подделали, прошу проверить кто разбирается, нет ли ошибок и может что то нужно исправить или доделать!
<?php
$url = "www.cbr.ru/scripts/XML_daily.asp"; // URL, XML документ, всегда содержит актуальные данные
$curs = array(); // массив с данными

// функция полчуния даты из спарсенного XML
function get_timestamp($date)
{
list($d, $m, $y) = explode('.', $date);
return mktime(0, 0, 0, $m, $d, $y);
}


if(!$xml=simplexml_load_file($url)) {
echo 'Курс обновляется';
}
else {
$curs['date']=get_timestamp($xml->attributes()->Date); // получаем текущую дату

foreach($xml->Valute as $m){ // перебор всех значений
// для примера будем получать значения курсов лишь для двух валют USD и EUR
if($m->CharCode=="CNY" ){
$curs =(float)str_replace(",", ".", (string)$m->Value); // запись значений в массив
}
}


$curs=$curs/10;
$curs=$curs+0.1;
$curs=round($curs,2);
echo "1 юань= $curs рублей"; }
?>
#17 6 ноября 2014 в 12:08
вот этот код щас в модуле, сегодня заметил, открываю сайт опять просто белая страница — видимо в банке что то обновляют!!!, отключил этот модуль самйт нормально работает!!! в чём может быть проблема!?? думаю всё таки как то в фрейм нужно заталкать этот код, пусть во фрейме будет просто пусто, а то весь сайт протсо белая страница!!(((
#18 6 ноября 2014 в 14:09
сегодня посмтотел, может дело и не в коде, по моему банк просто заблокировал, но почему сразу выскакивала белая страница всего сайта, а не модуля?? подскажите как правильно реализовать такое, что бы банк не блокировал, то есть из этого
  1. $url = "http://www.cbr.ru/scripts/XML_daily.asp";
брть данные раз например в 3 дня и записывать в файл их, и на сайте пользователям выдавать именно с этого сайта курс!!! как такое реализовать ??
#19 6 ноября 2014 в 18:33
сегодня перестали обновлятся курсы валют с cbr
ошибку пишет
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't find <definitions> in 'http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL' in /home/юююююююююююююююю/ююю/
#20 7 ноября 2014 в 23:02
как вариант опять задосили сайт центробанка.
#21 8 ноября 2014 в 02:17


как вариант опять задосили сайт центробанка.

maxisoft
Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст
#22 8 ноября 2014 в 10:43
Могу конечно ошибаться, но по всей видимости банк не любит особо дотошных. То есть при слишком частом запросе данных он начинает отдавать "неправильный" xml. А следовательно вся проблемы решаются если проверять не только на файл как таковой, но и на корректность его содержимого… В общем как-то так:
  1.  
  2. define('PATH', $_SERVER['DOCUMENT_ROOT']);
  3. $file = PATH.'/courses.xml';
  4.  
  5. $xml_source = 'http://www.cbr.ru/scripts/XML_daily.asp';
  6.  
  7. // Если файла нет, то пытаемся его получить
  8. if(!file_exists($file)){
  9.  
  10. $xml = simplexml_load_file($xml_source);
  11.  
  12. // Перед сохранением проверим что файл не только загрузился, но и содержит нужные нам данные
  13. if($xml && $xml->Valute){
  14.  
  15. $xml->asXML($file);
  16.  
  17. }
  18.  
  19. echo 'Курс обновляется...';
  20.  
  21. } else {
  22.  
  23. // Иначе загружаемся с локальной копии
  24. $xml = simplexml_load_file($file);
  25.  
  26. // Проверим не истек ли срок хранения
  27. $curr_date = date('U')*1;
  28. $file_date = date('U', filemtime($file))*1;
  29. $difference = ($curr_date - $file_date)/60/60/24; // Ну пусть например будет в днях
  30.  
  31. // То есть если прошло меньше 3 дней и файл правильный, то работаем...
  32. if($xml && $difference < 3){
  33.  
  34. foreach($xml->Valute as $v){
  35.  
  36. echo $v->Name.' - '.$v->Value.'
  37. ';
  38.  
  39. }
  40.  
  41. } else {
  42.  
  43. // Иначе файл удаляем и ждем следующего обновления сранички
  44. @unset($file);
  45.  
  46. echo 'Старье удалено. Курс снова обновляется...';
  47.  
  48. }
  49.  
  50. }
  51.  
#23 8 ноября 2014 в 10:53
Pasha, большое спасибо, но не совсем разобрался что то я!!! А можно так сделать? — Например выводим курс на сайте из своей базы данных (что бы не раздражать банк), а в базу данных записывать с www.cbr.ru/scripts/XML_daily.asp например один раз в 3 дня! Это как делается вообще по планировщику? или Ваш способ более правильный? я пока что начинающий и хочется разобратся!!!
#24 8 ноября 2014 в 11:35
Приведенный код именно это и делает. Читайте комментарии.
#25 8 ноября 2014 в 12:17
Pasha, Уважаемый Паша, я всё таки хочу по планировщику на хостингу запускать вот такой скрипт и с базы данных затем вытягивать на сайт, посмотрите на предмет безопастности, а то я новичок написание такого кода, может есть ошибки, вот сам код
  1.  
  2. <?php
  3. $url = "http://www.cbr.ru/scripts/XML_daily.asp" ;
  4. $curs = array();
  5.  
  6. // функция полчуния даты из спарсенного XML
  7. function get_timestamp($date)
  8. {
  9. list($d, $m, $y) = explode('.', $date);
  10. return mktime(0, 0, 0, $m, $d, $y);
  11. }
  12.  
  13.  
  14. if(!$xml=simplexml_load_file($url)) {
  15. echo 'Курс обновляется';
  16. }
  17. else {
  18. $curs['date']=get_timestamp($xml->attributes()->Date); // получаем текущую дату
  19.  
  20. foreach($xml->Valute as $m){ // перебор всех значений
  21. // для примера будем получать значения курсов лишь для двух валют USD и EUR
  22. if($m->CharCode=="CNY" ){
  23. $curs =(float)str_replace(",", ".", (string)$m->Value); // запись значений в массив
  24. }
  25. }
  26.  
  27.  
  28. $curs=$curs/10;
  29. $curs=$curs+0.1;
  30. $curs=round($curs,2);}
  31. // Подключение к серверу
  32. $server = 'localhost';
  33. $user = 'Здесь имя пользователя;
  34. $password = 'Здесь пароль пользователя';
  35.  
  36. $dblink = mysql_connect($server, $user, $password);
  37.  
  38. if($dblink)
  39. echo 'Соединение установлено.';
  40. else
  41. die('Ошибка подключения к серверу баз данных.');
  42.  
  43. $database = 'Здесь имя базы данных';
  44. $selected = mysql_select_db($database, $dblink);
  45. if($selected)
  46. echo ' Подключение к базе данных прошло успешно.';
  47. else
  48. die(' База данных не найдена или отсутствует доступ.');
  49.  
  50. $strSQL = "UPDATE kurs_uan SET kurs_uan = $curs"; // перезапись значения переменной kurs_uan курса в таблице kurs_uan базы данных
  51. mysql_query($strSQL) or die(mysql_error());
  52. ?>
  53.  
  54.  
Ещё вопрос с таким кодом если банк не отдаст файл или ошибка подключения к банку, что запишется в таблицу базы данных?
#26 8 ноября 2014 в 12:52
а вывожу на сайт вот таким кодом, проверьте пожалуйста то же, а то мог напортачить!!! —
  1.  
  2.  
  3. <?php
  4.  
  5. $server = 'localhost';
  6. $user = 'Имя';
  7. $password = 'Пароль';
  8.  
  9. $dblink = mysql_connect($server, $user, $password);
  10.  
  11. if($dblink)
  12. echo '';
  13. else
  14. die('Обновление');
  15.  
  16. $database = 'Имя базы данных';
  17. $selected = mysql_select_db($database, $dblink);
  18. if($selected)
  19. echo '';
  20. else
  21. die('обновление');
  22.  
  23. $curs=mysql_query("SELECT * FROM kurs_uan;");
  24.  
  25. $rezilt = mysql_fetch_array($curs);
  26. echo $rezilt['kurs_uan'];
  27. ?>
  28.  
  29.  
#27 10 ноября 2014 в 08:39
Хочется что бы кто то посмотрел на предмет безопастности приведённый выше код!!!
#28 10 ноября 2014 в 13:31
vsemkrot, В сообщении номер 22 выложено практически готовое решение удовлетворяющее всем описанным условиям. Хоть в чистом виде, хоть модулем цепляйте (без первой строки). В чем проблемы и зачем вообще нужна вся эта суета вокруг БД?
#29 10 ноября 2014 в 13:56
Pasha, да я понял что ваш метот более оправдан, я просто начал разбираттся с базой данной, учусь, вот я спрашиваю какие ошибки допустил в выше написаном коде!!! безопастность и так далее!!!
#30 10 ноября 2014 в 18:59


как вариант опять задосили сайт центробанка.

maxisoft

Странно и правда все вернулось в норму сейчас
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.