Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сбой
 
 автор: Port_Artur1   (25.01.2007 в 19:04)   письмо автору
 
 

При выполнении скрипта на 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

Почему?

   
 
 автор: bronenos   (25.01.2007 в 20:06)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 19:04)
 

Я не утверждаю, что ошибка именно в этом, но у вас перед считыванием стоит ничего не значащая $text, для чего?

   
 
 автор: bronenos   (25.01.2007 в 20:10)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 19:04)
 

Вопрос снят, у меня неверно перевелась строка и я не заметил что это часть комментария

   
 
 автор: Port_Artur1   (25.01.2007 в 20:23)   письмо автору
 
   для: bronenos   (25.01.2007 в 20:10)
 

А кто-нибудь может помочь?

   
 
 автор: Port_Artur1   (25.01.2007 в 20:30)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 20:23)
 

Внутренняя Ошибка Сервера
Сервер сталкивался с внутренней ошибкой или misconfiguration и был не в состоянии завершить ваш запрос.

   
 
 автор: Expert   (05.06.2007 в 13:09)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 20:23)
 

Всё очень просто. У Вас динамически IP, на него функция CURL, FSOCKET не могут вернуть значения.

   
 
 автор: Port_Artur1   (25.01.2007 в 21:52)   письмо автору
 
   для: bronenos   (25.01.2007 в 20:10)
 

Вопрос не снят Вопрос остаётся в силе В ЧЁМ ОШИБКА!
ПОМОГИТЕ!

   
 
 автор: Trianon   (25.01.2007 в 21:58)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 21:52)
 

а отдельно чтение ответа на запрос валют у ЦБРФ у Вас проходит?

   
 
 автор: Port_Artur1   (25.01.2007 в 22:01)   письмо автору
 
   для: Trianon   (25.01.2007 в 21:58)
 

да если пишу ссылку в адресной строке браузера - всё нормально возвращает xml файл.

   
 
 автор: Trianon   (25.01.2007 в 22:03)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 22:01)
 

Я имел в виду если отдельно запускаете echo get_content(); (или как у Вас там эта процедура называется....)

   
 
 автор: Port_Artur1   (25.01.2007 в 22:33)   письмо автору
 
   для: 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 в 23:09)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 22:33)
 

Проверил оперативку Чекитом 7.0 профешинал едишн - Всё Ок
Чо ему надо не пойму

   
 
 автор: Port_Artur1   (25.01.2007 в 23:15)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 23:09)
 

500 interval eror
Может он (РНР) не видит интернет?
Тогда как это проверить?

   
 
 автор: Trianon   (26.01.2007 в 09:28)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 23:15)
 

попробуйте получить данные с сайта другим способом.... через fsockopen или CURL...
В принципе, fopen не обязан читать удаленные файлы.

>500 interval eror
Впрочем, нет. Рано. Сперва научитесь без ошибок цитировать диагностические сообщения.

   
 
 автор: ssdmt   (26.01.2007 в 11:35)   письмо автору
 
   для: Trianon   (26.01.2007 в 09:28)
 

да палюбому .. облом во время парсинга самим php содержимого пути ... 100%, но не потому что он по ней лезет не туда, а потому что пасинговая функция сама при обработки пути сбивается .. скорее всего
правильно сказали выше: другими методами

   
 
 автор: Port_Artur1   (26.01.2007 в 11:38)   письмо автору
 
   для: ssdmt   (26.01.2007 в 11:35)
 

Спасибо попробую как посоветовали при любом исходе сообщу!

   
 
 автор: Trianon   (26.01.2007 в 11:54)   письмо автору
 
   для: ssdmt   (26.01.2007 в 11:35)
 

Дату 25/01/2007 нужно урленкодить.
Будет 25%2F01%2F2007

   
 
 автор: Sergey89   (26.01.2007 в 11:40)   письмо автору
 
   для: Port_Artur1   (25.01.2007 в 22:33)
 

Директива allow_url_fopen включена?

   
 
 автор: alwhite   (27.01.2007 в 23:23)   письмо автору
 
   для: 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 с тем текстом что написан на: Переданные данные на телефон.... ну короче увидите результат на экране

   
 
 автор: Port_Artur1   (30.01.2007 в 20:09)   письмо автору
 
   для: 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:51)   письмо автору
 
   для: Port_Artur1   (30.01.2007 в 20:09)
 

ПОМОГИТЕ ПОЖАЛУЙСТА.
КИНЬТЕ ПРИМЕРЧИК КОТОРЫЙ ВСЁ ТАКИ ЗАРАБОТАЕТ И ЭТА ПРОБЛЕМА У МЕНЯ НАКОНЕЦ-ТО ОТПАДЁТ!!!!

   
 
 автор: Port_Artur1   (30.01.2007 в 21:50)   письмо автору
 
   для: Port_Artur1   (30.01.2007 в 20:51)
 

PHP 4.2
Apache:1.3.34

Ну почему же не работает
?????????????

Ну всё уже перепробовал!

   
 
 автор: cheops   (31.01.2007 в 00:36)   письмо автору
 
   для: Port_Artur1   (30.01.2007 в 21:50)
 

Если нигде не используете MySQL, то у вас где-то текст при помощи UTF8 преобразуется из русского в кракозяблики.

   
 
 автор: Port_Artur1   (31.01.2007 в 16:20)   письмо автору
 
   для: cheops   (31.01.2007 в 00:36)
 

Загрузил в Макромедия 2004 Поставил UTF8. Все команды латинскими буквами и не претерпели изменения только русские комментарии.
Не знаю как это может повлиять. MySQL вообще-то стоит на компьютере , о но при запросах курсов валют, я его не запускал. Вроде бы тоже отпадает.

Может кто нибудь даст примерчик для проверки связи localhost с интернетом. может где-то здесь вкрался косячок. Но тоже вроде бы не должен.

А в связке PHP, MySQL и Apache работают без нареканий.

   
 
 автор: Port_Artur1   (31.01.2007 в 22:03)   письмо автору
 
   для: Port_Artur1   (31.01.2007 в 16:20)
 

Ну в чём же может быть ошибка?

Ответьте мне пожалуйста !
Неужели ни у кого не было такой ошибки?

   
 
 автор: Port_Artur1   (31.01.2007 в 23:56)   письмо автору
 
   для: Port_Artur1   (31.01.2007 в 22:03)
 

?????????????

   
 
 автор: alwhite   (01.02.2007 в 05:40)   письмо автору
 
   для: 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 допустим или ...

   
 
 автор: alwhite   (01.02.2007 в 05:32)   письмо автору
 
   для: Port_Artur1   (30.01.2007 в 20:51)
 

Моя версия работает на 100%, т.к. я себе каждое утро по SMS кидаю курсы валют и металлов с погодой на сотовый -- смотри значит у тебя что-то с хостером не то творится, т.к. отвечаю -- мой примерчик работает......

   
 
 автор: Port_Artur1   (01.02.2007 в 13:16)   письмо автору
 
   для: alwhite   (01.02.2007 в 05:32)
 

Да у меня на localhost не работает (почитайте с самого начала). Сам себе хостер пока. А вот с памятью - попробую её уменьшить.

   
 
 автор: Port_Artur1   (01.02.2007 в 17:57)   письмо автору
 
   для: Port_Artur1   (01.02.2007 в 13:16)
 

Подскажите пожалуйста какие dll должны быть подключенны в php.ini.
Может быть ошибка в этом.


Изменение в строке
while (!feof ($fd)) $text .= fgets($fd, 512);
не помогло.

   
 
 автор: alwhite   (01.02.2007 в 18:50)   письмо автору
 
   для: Port_Artur1   (01.02.2007 в 17:57)
 

Конкретно ничего не скажу --но зайди по http://www.vzrosleem.ru/phpinfo.php и посмотри что на моем сайте у хостера включено и проведи параллель, а лучше для локального теста используй http://dklab.ru/chicken/web/base.html -- я им постоянно пользуюсь, но с тем что у меня сохранена страница отдельно с ответом от cbr и переключаю в тест режим скрипт(см.переменную $var_test), т.е. в данном случае при локальном тесте я не лезу в инет, а сохранив страницу локально -- распарсиваю ее, попробуй и ты так ... если все пойдет -- значит настройки обращения в инет нелокально у тебя что-то проблемничают... посмотри таймсейвер при обращении к нелокальному сайту и максимальное время выполнении скрипта (защита против демонов).... Я здесь выдал готовое решение и оно рабочее, так что смотри косяки у себя на серваке!!!

   
 
 автор: Port_Artur1   (01.02.2007 в 19:45)   письмо автору
 
   для: alwhite   (01.02.2007 в 18:50)
 

Да что -то не так у меня на localhost.
Проверил на своём хостинге - Всё нормально!

Ну почему у меня на машине выскакивает ошибка. Что-то же ведь можно сделать

   
 
 автор: alwhite   (01.02.2007 в 20:58)   письмо автору
 
   для: Port_Artur1   (01.02.2007 в 19:45)
 

пройди по ссылке http://dklab.ru/chicken/web/base.html и скачай себе эмулятор сервера, установи и проблем не будет... по крайней мере еще у меня не было, т.к. он запросы к локально созданным сайтам закругляет на себя по адресу 127.0.0.1 -- а все остальные которых нет на локальной машине -- пропускает в инет... о результатах скажешь

   
 
 автор: Port_Artur1   (01.02.2007 в 21:33)   письмо автору
 
   для: alwhite   (01.02.2007 в 20:58)
 

как проверить пропуск адресов, которых нет на локальной машине в моей существующей конфигурации.

   
 
 автор: alwhite   (01.02.2007 в 22:04)   письмо автору
 
   для: Port_Artur1   (01.02.2007 в 21:33)
 

Блин, вот в данной ситуации я тебе подсказать не могу... У меня просто установлен OutPost и при обращении к адресам инета он в сводке своей выдает кто-куда-лезит... Вот по нему я и смотрю.

   
 
 автор: Port_Artur1   (01.02.2007 в 22:16)   письмо автору
 
   для: 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
на всё работает нормально апри попытке загрузить курсы валют - ошибка, хотя на настоящем хостинге работает всё нормально

Почему?

   
 
 автор: alwhite   (01.02.2007 в 22:26)   письмо автору
 
   для: Port_Artur1   (01.02.2007 в 22:16)
 

Если ты курс загружаешь и пытаешься сохранить на диск в какой-то файл, то выстави ему cmod = 777 по-моему просто у тебя не дает сохранять (просто я не сталкивался с такими проблемами) ... Ну а если работает на настоящем хостинге, то зачем же более тебе .. ставь скрипт туда и все!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования