Здравствуйте.
У меня есть информер курсов валют, который показывает актуальный курс доллара и евро по данным центробанка и его изменение относительно предыдущих котировок. Я думаю php скрипт не работает. Он не показывает курсы валют, если его запустить отдельно и попросить вывести их в браузер. В приведенном примере этот вывод на экран не описан.
Как информер должен работать:
Файл информера загружает данные о валютных котировках из php файла, лежащего рядом,
который в свою очередь получает данные с сайта Центробанка и преобразует их в строку xml. Внутри файла информера данные отображаются через динамические текстовые поля. Я
Вот код php файла:

PHP код:
<?
// Устанавливаем сегодняшную и вчерашную дату
$date1= date("d/m/Y");
$date2= date("d/m/Y",time()-86400);
// Запрашиваем список курсов валют за два дня
$cont1 = file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date1);
$cont2 = file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date2);
// Составляем шаблон для считывания в массив $marches1
$pattern = "/<CharCode>(.*?)<\/CharCode>\s*<Nominal>(.*)<\/Nominal>\s*<Name>(.*)<\/Name>\s*<Value>(.*)<\/Value>/im";
// Формируем массив по шаблону $pattern
$cnt1 = preg_match_all($pattern,$cont1,$matches1);
if($cnt1 != FALSE)
{
// Записываем сегодняшний курс доллара в переменную $bucks1. Он пятый сверху.
$bucks1 = $matches1[4][4];
echo "&bucks1=".$bucks1;
// Записываем сегодняшний курс евро в переменную $euro1. Он шестой сверху.
$euro1 = $matches1[4][5];
echo "&euro1=".$euro1;
}
$cnt2 = preg_match_all($pattern,$cont2,$matches2);
if($cnt2 != FALSE)
{
// Записываем вчерашний курс доллара в переменную $bucks2
$euro2 = $matches2[4][5];
echo "&euro2=".$euro2;
// Записываем вчерашний курс евро в переменную $euro2
$bucks2 = $matches2[4][4];
echo "&bucks2=".$bucks2;
}
?>
Вот код ActionScript в информере:

Код AS1/AS2:
System.useCodepage = true;
kurs = new LoadVars();
kurs.load('valuta.php');
kurs.onLoad = function(ok){
if(ok){
setKurs();
}
}
function setKurs(){
bucks=kurs.bucks1
euro=kurs.euro1
euro_otn=Number(kurs.euro1.substr(0,2)+"."+kurs.euro1.substr(3,4))-Number(kurs.euro2.substr(0,2)+"."+kurs.euro2.substr(3,4));
bucks_otn=Number(kurs.bucks1.substr(0,2)+"."+kurs.bucks1.substr(3,4))-Number(kurs.bucks2.substr(0,2)+"."+kurs.bucks2.substr(3,4));
if(bucks_otn<0){usd_stat.attachMovie('down','usd',1)}
if(bucks_otn>0){usd_stat.attachMovie('up','usd',1)}
if(bucks_otn==0){usd_stat.attachMovie('no','usd',1)}
if(euro_otn<0){eur_stat.attachMovie('down','eur',1)}
if(euro_otn>0){eur_stat.attachMovie('up','eur',1)}
if(euro_otn==0){eur_stat.attachMovie('no','eur',1)}
}
Динамические поля имеют ссылки на переменные:
_root.euro
_root.bucks
Ну понятно в информере есть еще экземпляры символов, которые показывают изменения курса. Они в виде стрелок. Их имена:
usd_stat
eur_stat.
Оба файла лежат на сервере, но информер не работает.
Прошу помочь.
Добавлено через 46 часов 50 минут
Прилагаю другой php скрипт и прежний код AS2. Это не парсер странички Центробанка. Используется спепциальный класс для работы с WEB сервисом Центробанка. Назвали его ExchangeRatesCBRF.
Вот ссылка на страничку разработчиков класса.
Теперь прилагаю php скрипт.

PHP код:
$date1= date("Y-m-d");
$date2= date("Y-m-d",time()-86400);
$e1 = new ExchangeRatesCBRF($date1);
$e2 = new ExchangeRatesCBRF($date2);
$b1 = new ExchangeRatesCBRF($date1);
$b2 = new ExchangeRatesCBRF($date2);
$euro1 = $e1->GetRate('EUR');
$euro2 = $e2->GetRate('EUR');
$bucks1 = $b1->GetRate('USD');
$bucks2 = $b2->GetRate('USD');
echo $euro1."<br>";
echo $euro2."<br>";
echo $bucks1."<br>";
echo $bucks2."<br>";
class ExchangeRatesCBRF
{
var $rates;
function __construct($date = null)
// В PHP версии ниже 5 это метод объекта следует переименовать в ExchangeRatesCBRF
{
$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL");
if (!isset($date)) $date = date("Y-m-d");
$curs = $client->GetCursOnDate(array("On_date" => $date));
$this->rates = new SimpleXMLElement($curs->GetCursOnDateResult->any);
}
function GetRate ($code)
{
//Этот метод получает в качестве параметра цифровой или буквенный код валюты и возвращает ее курс
$code1 = (int)$code;
if ($code1!=0)
{
$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/Vcode[.='.$code.']/parent::*');
}
else
{
$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/VchCode[.="'.$code.'"]/parent::*');
}
if (!$result)
{
return false;
}
else
{
$vc = (float)$result[0]->Vcurs;
$vn = (int)$result[0]->Vnom;
return ($vc/$vn);
}
}
}
?>
Вот по прежнему код AS, который должен подхватывать значения переменных $euro1, $bucks1, $euro2, $bucks2 и использовал по своему.

Код AS1/AS2:
System.useCodepage = true;
kurs = new LoadVars();
kurs.load('valuta.php');
kurs.onLoad = function(ok){
if(ok){
setKurs();
}
}
function setKurs(){
bucks=kurs.bucks1
euro=kurs.euro1
euro_otn=Number(kurs.euro1.substr(0,2)+"."+kurs.euro1.substr(3,4))-Number(kurs.euro2.substr(0,2)+"."+kurs.euro2.substr(3,4));
bucks_otn=Number(kurs.bucks1.substr(0,2)+"."+kurs.bucks1.substr(3,4))-Number(kurs.bucks2.substr(0,2)+"."+kurs.bucks2.substr(3,4));
if(bucks_otn<0){usd_stat.attachMovie('down','usd',1)}
if(bucks_otn>0){usd_stat.attachMovie('up','usd',1)}
if(bucks_otn==0){usd_stat.attachMovie('no','usd',1)}
if(euro_otn<0){eur_stat.attachMovie('down','eur',1)}
if(euro_otn>0){eur_stat.attachMovie('up','eur',1)}
if(euro_otn==0){eur_stat.attachMovie('no','eur',1)}