| |
|
|
| | При выполнении скрипта на Localhost c подключенным интернетом
<?php
// Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
$content = get_content();
// Разбираем содержимое, при помощи регулярных выражений
$pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
$dollar = "";
$euro = "";
foreach($out as $cur)
{
if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]);
if($cur[2] == 978) $euro = str_replace(",",".",$cur[4]);
}
echo "Доллар - ".$dollar."<br>";
echo "Евро - ".$euro."<br>";
function get_content()
{
// Формируем сегодняшнюю дату
$date = date("d/m/Y");
// Формируем ссылку
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
// Загружаем HTML-страницу
$fd = fopen($link, "r");
$text="";
if (!$fd) echo "Запрашиваемая страница не найдена";
else
{
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text .= fgets($fd, 4096);
}
// Закрыть открытый файловый дескриптор
fclose ($fd);
return $text;
}
?>
Возникает ошибка
Программа PHP вызвала сбой при обращении к странице памяти
в модуле PHP4TS.DLL по адресу 0177:100c5fca.
Регистры:
EAX=00000005 CS=0177 EIP=100c5fca EFLGS=00010246
EBX=007628f0 SS=017f ESP=0063e374 EBP=01179e8c
ECX=00000000 DS=017f ESI=01179e7c FS=372f
EDX=0000001b ES=017f EDI=007628f0 GS=0000
Байты по адресу CS:EIP:
8b 44 82 fc 3b 30 75 06 8b 0e 89 08 eb 07 8b 56
Содержимое стека:
00000000 00000000 10062e35 01179e8c 007743f0 00000000 007628f0 0000000c 01176f4c 01176dfc 01175448 00000011 00000000 01177dd0 00000000 01176eb4
Почему? | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 19:04)
| | | Я не утверждаю, что ошибка именно в этом, но у вас перед считыванием стоит ничего не значащая $text, для чего? | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 19:04)
| | | Вопрос снят, у меня неверно перевелась строка и я не заметил что это часть комментария | |
| |
|
|
| |
|
|
| |
для: bronenos
(25.01.2007 в 20:10)
| | | А кто-нибудь может помочь? | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 20:23)
| | | Внутренняя Ошибка Сервера
Сервер сталкивался с внутренней ошибкой или misconfiguration и был не в состоянии завершить ваш запрос. | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 20:23)
| | | Всё очень просто. У Вас динамически IP, на него функция CURL, FSOCKET не могут вернуть значения. | |
| |
|
|
| |
|
|
| |
для: bronenos
(25.01.2007 в 20:10)
| | | Вопрос не снят Вопрос остаётся в силе В ЧЁМ ОШИБКА!
ПОМОГИТЕ! | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 21:52)
| | | а отдельно чтение ответа на запрос валют у ЦБРФ у Вас проходит? | |
| |
|
|
| |
|
|
| |
для: Trianon
(25.01.2007 в 21:58)
| | | да если пишу ссылку в адресной строке браузера - всё нормально возвращает xml файл. | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 22:01)
| | | Я имел в виду если отдельно запускаете echo get_content(); (или как у Вас там эта процедура называется....) | |
| |
|
|
| |
|
|
| |
для: Trianon
(25.01.2007 в 22:03)
| | | Не работает даже так:
<?php
$date = "25/01/2007";
// Формируем ссылку
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
// Загружаем HTML-страницу
$fd = fopen($link, "r");
$text="";
if (!$fd) echo "Запрашиваемая страница не найдена";
else
{
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text=fgets($fd, 4096);
echo"$text";
}
// Закрыть открытый файловый дескриптор
fclose ($fd);
?>
Программа PHP вызвала сбой при обращении к странице памяти
в модуле PHP4TS.DLL по адресу 0177:100c5fca.
Регистры:
EAX=00000005 CS=0177 EIP=100c5fca EFLGS=00010246
EBX=00762900 SS=017f ESP=0063e858 EBP=0117809c
ECX=00000000 DS=017f ESI=0117808c FS=4e87
EDX=0000001b ES=017f EDI=00762900 GS=0000
Байты по адресу CS:EIP:
8b 44 82 fc 3b 30 75 06 8b 0e 89 08 eb 07 8b 56
Содержимое стека:
00000000 00000000 10062e35 0117809c 00775c00 00000000 00762900 0000000c 01178010 01175e24 01173df8 00000011 00000000 01175fbc 00000000 01175edc | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 22:33)
| | | Проверил оперативку Чекитом 7.0 профешинал едишн - Всё Ок
Чо ему надо не пойму | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 23:09)
| | | 500 interval eror
Может он (РНР) не видит интернет?
Тогда как это проверить? | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 23:15)
| | | попробуйте получить данные с сайта другим способом.... через fsockopen или CURL...
В принципе, fopen не обязан читать удаленные файлы.
>500 interval eror
Впрочем, нет. Рано. Сперва научитесь без ошибок цитировать диагностические сообщения. | |
| |
|
|
| |
|
|
| |
для: Trianon
(26.01.2007 в 09:28)
| | | да палюбому .. облом во время парсинга самим php содержимого пути ... 100%, но не потому что он по ней лезет не туда, а потому что пасинговая функция сама при обработки пути сбивается .. скорее всего
правильно сказали выше: другими методами | |
| |
|
|
| |
|
|
| |
для: ssdmt
(26.01.2007 в 11:35)
| | | Спасибо попробую как посоветовали при любом исходе сообщу! | |
| |
|
|
| |
|
|
| |
для: ssdmt
(26.01.2007 в 11:35)
| | | Дату 25/01/2007 нужно урленкодить.
Будет 25%2F01%2F2007 | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 22:33)
| | | Директива allow_url_fopen включена? | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(25.01.2007 в 22:33)
| | | У меня так работает:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Далее переменная для переключения теста/нормального режима
//работы скрипта: 0 - нормальный режим, 1 - тест режим (для его отладки)
//Просто при тесте я сохранил страничку xml и распарсиваю ее
$var_test = 0;
//
//+++===Далее получаемые переменные данные===+++
//+++Получаем курс доллара/евро:
//Не обращайте внимание на следующие две переменные - просто они остались из автосмены курса моего инет-магазина
$serv_const_dayobmen =0;
$serv_const_obmennone =1;
$date = date("d/m/Y", mktime(23,59,59,date('m'),date('d')-$serv_const_dayobmen,date('Y'))); //дата курса
// Получаем текущие курсы валют с сайта www.cbr.ru
$content = get_content_val($date);
if (($content == "" or $content == "err_load" or strlen($content) < 200) and $serv_const_obmennone == 1) {
$serv_const_dayobmen = $serv_const_dayobmen+1;
$date = date("d/m/Y", mktime(23,59,59,date('m'),date('d')-$serv_const_dayobmen,date('Y'))); //дата курса
$content = get_content_val($date);
}
if ($content == "" or $content == "err_load" or strlen($content) < 200) {//Если нет данных-загружаем последний курс
$content = get_content_val('');
}
if ($content != "" and $content != "err_load" and strlen($content) > 200) {
// Разбираем содержимое, при помощи регулярных выражений
eregi('<ValCurs Date="([^"]*)"',$content,$val_data); //Дата обновленного курса
$val_data[1] = str_replace(".","/",$val_data[1]); //Приводим к единому формату полученную и запрашиваемую дату
$val_data_end = substr($val_data[1],0,6).substr($val_data[1],8);//Для отправки даты курса по SMS
//echo $date."*".$val_data[1]."<br>"; //Для отладкм
$pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i";
preg_match_all($pattern, $content, $out, PREG_SET_ORDER);
$dollar = "";
$euro = "";
foreach($out as $cur) {
if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]);
if($cur[2] == 978) $euro = str_replace(",",".",$cur[4]);
}
$const_usd = round($dollar,2);
$const_eur = round($euro,2);
}
//$const_usd - курс доллара округленный до сотых
//$const_eur - курс евро округленный до сотых
//END: курс доллара/евро
//Здесь можно сделать вывод через echo или использовать переменные указанные выше
function get_content_val($date) {
//Курс доллара и евро
// Формируем ссылку
global $var_test;
if ($var_test==0) $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
else $link = "XML_daily.asp"; //Строка для отладки сценария
// Загружаем HTML-страницу
$fd = fopen($link, "r");
$text="";
if (!$fd) $text="err_load";
else {
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text .= fgets($fd, 4096);
}
// Закрыть открытый файловый дескриптор
fclose ($fd);
return $text;
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Нужен еще курс металлов обращайтесь через http://smskopilka.ru/?info&id=10209 ....
Еще есть кроме металлов - погода с hmn.ru она отправляется мне по sms на телефон -- демо скрипт по адресу http://www.vzrosleem.ru/u-tel_sms_cron.php, только прошу не злоупотреблять, т.к. этот скрипт отправляет мне SMS с тем текстом что написан на: Переданные данные на телефон.... ну короче увидите результат на экране | |
| |
|
|
| |
|
|
| |
для: alwhite
(27.01.2007 в 23:23)
| | | Директива allow_url_fopen=On.
Урленкодирование даты в 25%2F01%2F2007 не помогло. Та же ошибка.
И версия от alwhite. Тоже не хочет работать.
Пробовал и так:
<?php
echo get_content();
// Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru
function get_content()
{
// Формируем сегодняшнюю дату
$date = date("d/m/Y");
// Формируем ссылку
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
// Загружаем HTML-страницу
$fd = fopen($link, "r");
$text="";
if (!$fd) echo "Запрашиваемая страница не найдена";
else
{
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text .= fgets($fd, 4096);
}
// Закрыть открытый файловый дескриптор
fclose ($fd);
return $text;
}
?>
Программа PHP вызвала сбой при обращении к странице памяти
в модуле PHP4TS.DLL по адресу 0177:100c5fca.
Регистры:
EAX=00000005 CS=0177 EIP=100c5fca EFLGS=00010246
EBX=00762900 SS=017f ESP=0063e374 EBP=011745c0
ECX=00000000 DS=017f ESI=011745b0 FS=44ef
EDX=0000001b ES=017f EDI=00762900 GS=0000
Байты по адресу CS:EIP:
8b 44 82 fc 3b 30 75 06 8b 0e 89 08 eb 07 8b 56
Содержимое стека:
00000000 00000000 10062e35 011745c0 00775c00 00000000 00762900 0000000c 01174534 01176af4 01176bf0 00000011 00000000 011744f4 00000000 01174414 | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(30.01.2007 в 20:09)
| | | ПОМОГИТЕ ПОЖАЛУЙСТА.
КИНЬТЕ ПРИМЕРЧИК КОТОРЫЙ ВСЁ ТАКИ ЗАРАБОТАЕТ И ЭТА ПРОБЛЕМА У МЕНЯ НАКОНЕЦ-ТО ОТПАДЁТ!!!! | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(30.01.2007 в 20:51)
| | | PHP 4.2
Apache:1.3.34
Ну почему же не работает
?????????????
Ну всё уже перепробовал! | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(30.01.2007 в 21:50)
| | | Если нигде не используете MySQL, то у вас где-то текст при помощи UTF8 преобразуется из русского в кракозяблики. | |
| |
|
|
| |
|
|
| |
для: cheops
(31.01.2007 в 00:36)
| | | Загрузил в Макромедия 2004 Поставил UTF8. Все команды латинскими буквами и не претерпели изменения только русские комментарии.
Не знаю как это может повлиять. MySQL вообще-то стоит на компьютере , о но при запросах курсов валют, я его не запускал. Вроде бы тоже отпадает.
Может кто нибудь даст примерчик для проверки связи localhost с интернетом. может где-то здесь вкрался косячок. Но тоже вроде бы не должен.
А в связке PHP, MySQL и Apache работают без нареканий. | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(31.01.2007 в 16:20)
| | | Ну в чём же может быть ошибка?
Ответьте мне пожалуйста !
Неужели ни у кого не было такой ошибки? | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(31.01.2007 в 22:03)
| | | ????????????? | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(31.01.2007 в 22:03)
| | | Попробуй переменную передавать как
$link = "http://www.cbr.ru/scripts/XML_daily.asp";
Само cbr в данном случае передает последние известные курсы валют не зависимо от даты (и utf в данном случае не передается а просто ссылка на страницу), если и в этом случае ошибка -- тем более к хостеру беги и напрягай его!!! У меня хостинг от мультихост и все в норме!!! Пиши о результатах! Но скорее всего данная ошибка точно не из-за allow_url_fopen, у тебя не хочет грузить данные -- попробу1 4096 уменьший на менmibq блок памяти 512 допустим или ... | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(30.01.2007 в 20:51)
| | | Моя версия работает на 100%, т.к. я себе каждое утро по SMS кидаю курсы валют и металлов с погодой на сотовый -- смотри значит у тебя что-то с хостером не то творится, т.к. отвечаю -- мой примерчик работает...... | |
| |
|
|
| |
|
|
| |
для: alwhite
(01.02.2007 в 05:32)
| | | Да у меня на localhost не работает (почитайте с самого начала). Сам себе хостер пока. А вот с памятью - попробую её уменьшить. | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(01.02.2007 в 13:16)
| | | Подскажите пожалуйста какие dll должны быть подключенны в php.ini.
Может быть ошибка в этом.
Изменение в строке
while (!feof ($fd)) $text .= fgets($fd, 512);
не помогло. | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(01.02.2007 в 17:57)
| | | Конкретно ничего не скажу --но зайди по http://www.vzrosleem.ru/phpinfo.php и посмотри что на моем сайте у хостера включено и проведи параллель, а лучше для локального теста используй http://dklab.ru/chicken/web/base.html -- я им постоянно пользуюсь, но с тем что у меня сохранена страница отдельно с ответом от cbr и переключаю в тест режим скрипт(см.переменную $var_test), т.е. в данном случае при локальном тесте я не лезу в инет, а сохранив страницу локально -- распарсиваю ее, попробуй и ты так ... если все пойдет -- значит настройки обращения в инет нелокально у тебя что-то проблемничают... посмотри таймсейвер при обращении к нелокальному сайту и максимальное время выполнении скрипта (защита против демонов).... Я здесь выдал готовое решение и оно рабочее, так что смотри косяки у себя на серваке!!! | |
| |
|
|
| |
|
|
| |
для: alwhite
(01.02.2007 в 18:50)
| | | Да что -то не так у меня на localhost.
Проверил на своём хостинге - Всё нормально!
Ну почему у меня на машине выскакивает ошибка. Что-то же ведь можно сделать | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(01.02.2007 в 19:45)
| | | пройди по ссылке http://dklab.ru/chicken/web/base.html и скачай себе эмулятор сервера, установи и проблем не будет... по крайней мере еще у меня не было, т.к. он запросы к локально созданным сайтам закругляет на себя по адресу 127.0.0.1 -- а все остальные которых нет на локальной машине -- пропускает в инет... о результатах скажешь | |
| |
|
|
| |
|
|
| |
для: alwhite
(01.02.2007 в 20:58)
| | | как проверить пропуск адресов, которых нет на локальной машине в моей существующей конфигурации. | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(01.02.2007 в 21:33)
| | | Блин, вот в данной ситуации я тебе подсказать не могу... У меня просто установлен OutPost и при обращении к адресам инета он в сводке своей выдает кто-куда-лезит... Вот по нему я и смотрю. | |
| |
|
|
| |
|
|
| |
для: alwhite
(01.02.2007 в 22:04)
| | | Но на настоящем хостинге всё работает без проблем.
assec.log:
127.0.0.1 - - [01/Feb/2007:20:50:31 +0300] "GET /cour.php HTTP/1.1" 500 594
eror.log:
[Thu Feb 01 20:50:24 2007] [warn] exec() may not be safe
[Thu Feb 01 20:50:24 2007] [warn] exec() may not be safe
[Thu Feb 01 20:50:24 2007] [warn] exec() may not be safe
[Thu Feb 01 20:50:24 2007] [warn] exec() may not be safe
[Thu Feb 01 20:50:31 2007] [error] [client 127.0.0.1] Premature end of script headers: c:/program files/php/php.exe
PHP 4.2 Apache 1.3.34
на всё работает нормально апри попытке загрузить курсы валют - ошибка, хотя на настоящем хостинге работает всё нормально
Почему? | |
| |
|
|
| |
|
|
| |
для: Port_Artur1
(01.02.2007 в 22:16)
| | | Если ты курс загружаешь и пытаешься сохранить на диск в какой-то файл, то выстави ему cmod = 777 по-моему просто у тебя не дает сохранять (просто я не сталкивался с такими проблемами) ... Ну а если работает на настоящем хостинге, то зачем же более тебе .. ставь скрипт туда и все! | |
| |
|
|