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

Форум PHP

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

 

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

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

тема: почему не работает fopen("http://...")
 
 автор: larush   (20.07.2007 в 14:39)   письмо автору
 
 

пытаюсь скачатькурс валют,а подключиться удалось тока к localhost'у Всеостальные сайты, даже www.mail.ru и прочие выдается ошибка

fopen(http://export.rbc.ru/free/cb.0/free.fcgi?period=DAILY&tickers=USD&lastdays=0&separator=;&data_format=BROWSER&header=0):

failed to open stream: Bad file descriptor in ...

какие советы будут ?

   
 
 автор: malish   (20.07.2007 в 14:44)   письмо автору
 
   для: larush   (20.07.2007 в 14:39)
 

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

http://www.softtime.ru/dic/id_dic=188&id_group=6

   
 
 автор: larush   (20.07.2007 в 14:55)   письмо автору
 
   для: malish   (20.07.2007 в 14:44)
 

кавычки не помогают и потом вот пример используемого мной кода:

    $date = date("d/m/Y");
    $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
    $fd = fopen($link, "r");

пробовал заключать дополнительно в одинарные и двойные- пофиг...

allow_url_fopen нашел только в php.ini , думал что на Апачи сначала искать - не правильно понял слово "сервер". параметр стоит в ON

Где еще покапать ?

   
 
 автор: malish   (20.07.2007 в 15:09)   письмо автору
 
   для: larush   (20.07.2007 в 14:55)
 

вообщето вам нужна скорее всего ф-ция file_get_contents а не fopen.. именно она позвоялет получить содержимое удаленного файла именно вотм виде в котором видем мы то есть после обработки парсером

   
 
 автор: larush   (20.07.2007 в 15:13)   письмо автору
 
   для: malish   (20.07.2007 в 15:09)
 

тоже-самое...
$handle = file_get_contents("http://www.mail.ru/", "r");

результат:
file_get_contents(http://www.mail.ru/): failed to open stream: Bad file descriptor

   
 
 автор: malish   (20.07.2007 в 15:16)   письмо автору
 
   для: larush   (20.07.2007 в 15:13)
 


$date = date("d/m/Y");
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
$result = file_get_contents($link); 


в результате в $result будет строка содержащая то что выдал вам удаленный файл

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

   
 
 автор: larush   (20.07.2007 в 15:19)   письмо автору
 
   для: malish   (20.07.2007 в 15:16)
 

ответ :
file_get_contents(http://www.cbr.ru/scripts/XML_daily.asp?date_req=20/07/2007): failed to open stream: Bad file descriptor in z:\home\localhost\www\opex\common\curs.php on line 12

   
 
 автор: testdriver   (20.07.2007 в 15:19)   письмо автору
 
   для: larush   (20.07.2007 в 14:55)
 


<?PHP
function get_value_content() 
{
 
$data file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));
 return 
$data
}
  
#Получаем текущие курсы валют
$content get_value_content();

#Разбираем содержимое, при помощи регулярных выражений 
$divider "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i"
preg_match_all($divider$content$currencyPREG_SET_ORDER);

#создаем массив валют  
$NumCode = array("AUD"=>036,"GBR"=>826,"BYR"=>974,"DKK"=>208,"USD"=>840,"EUR"=>978,
                 
"ISK"=>352,"KZT"=>398,"CAD"=>124,"CNY"=>156,"NOK"=>578,"XDR"=>960,
                 
"SGD"=>702,"TRY"=>949,"UAH"=>980,"SEK"=>752,"CHF"=>756,"JPY"=>392);
                 
#массив содержащий список валют подлежащих выводу на экран
$CharCode = array("EUR","USD");//валюта которая будет выведенна

#цикл вывода
foreach($currency as $data) {
    for (
$i=0;$i<count($CharCode);$i++) {
         if(
$data[2] == $NumCode[$CharCode[$i]]) $valute[$CharCode[$i]] = $data[3]." - ".str_replace(",",".",$data[4]);
    }
}
echo 
"<u>Курс валют предоставлен ЦБРФ:</u><br><br>";

#цикл вывода на экран
for ($i=0;$i<count($CharCode);$i++) {
     echo 
$valute[$CharCode[$i]]."<br>";
}
?>


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

   
 
 автор: larush   (20.07.2007 в 15:21)   письмо автору
 
   для: testdriver   (20.07.2007 в 15:19)
 

вопрос в том, что из скрипта не могу закачать ни одну страничку, а не в том как ее потом обработать...
Если эти ссылки втыкаю в адресную строку браузера, то результат получаю - нет работает :-)

А может иметь значение что ставил Денвер - типа у него где еще есть ограничения на выход в сеть ?

   
 
 автор: Futurer   (20.07.2007 в 16:05)   письмо автору
 
   для: larush   (20.07.2007 в 15:21)
 

Я разбираюсь с той же темой по ходу дела:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=40804&page=1

   
 
 автор: larush   (30.07.2007 в 16:46)   письмо автору
 
   для: Futurer   (20.07.2007 в 16:05)
 

так что, никто не в силах мне помочь ? Почему ссылка на получение курса доллара в браузере работает и выводит информацию на экран, а все функции в скриптах зависают.. ?

   
 
 автор: Sobachka   (30.07.2007 в 16:50)   письмо автору
 
   для: larush   (30.07.2007 в 16:46)
 

а как вам помочь?
МЫ ж не умеем чужые мысли читать... может у вас фаирвол блочит коннекты на этот порт,а может провайдер.... а может апаче криво настроен...

   
 
 автор: Unkind   (30.07.2007 в 16:55)   письмо автору
 
   для: testdriver   (20.07.2007 в 15:19)
 

#создаем массив валют
$NumCode = array("AUD"=>036,

PHP подумает, что Вы хотите задать число в восьмиричной системе счисления. Либо не пишите ноль, либо берите в кавычки.

   
 
 автор: larush   (31.07.2007 в 09:18)   письмо автору
 
   для: Unkind   (30.07.2007 в 16:55)
 

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

про файервол и порт. А каким портом пользусь ? Я посмотрет в PHPINFO вроде все порты стоят на 80

   
 
 автор: Trianon   (31.07.2007 в 09:21)   письмо автору
 
   для: larush   (31.07.2007 в 09:18)
 

применяя fopen или file_get_contents, Вы так и не узнаете по какой причине Ваш запрос не выполнен. Это функции работы с файлами, а не функции доступа к документам на другом сервере.

   
 
 автор: CrazyAngel   (31.07.2007 в 10:01)   письмо автору
 
   для: larush   (20.07.2007 в 14:39)
 

попробуй через сокеты или curl

   
 
 автор: larush   (31.07.2007 в 13:54)   письмо автору
 
   для: CrazyAngel   (31.07.2007 в 10:01)
 

устаонвил CURL

$ch = curl_init("http://www.mts.ru/");
$fp = fopen("example_homepage.txt", "w");
curl_setopt($ch, CURLOPT_PORT, 8080); пробовал и 80
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);

У меня стоит OutPost, полез в журнал запрещенных соединений, смотрю Opera (ну люблю я ее) ломится на PROXY:8080 (прокся по этому порту открыта) и ошибка Пакет на закрытый порт. А как мне узнать на какаой порт идет запрос ?

   
 
 автор: Trianon   (31.07.2007 в 14:25)   письмо автору
 
   для: larush   (31.07.2007 в 13:54)
 

У меня стоит OutPost,
на клиненте?
на сервере?
или это одно и то же?

Если последнее верно и если Вы хотите, чтобы Ваш скрипт работал как opera, то почему он соединяется не с прокси, а напрямую к http://www.mts.ru ?

   
 
 автор: larush   (01.08.2007 в 12:25)   письмо автору
 
   для: Trianon   (31.07.2007 в 14:25)
 

я тестирую на локальной станции с запущеным Денвером, значит все тут и стоит.

мне как-бы без особой разницы как будет работать скрипт (напрямую или через прокси, второее логичнее), я хочу получить данные с некого сайта, взял к примеру МТС, если не указывать порт или указать 8080, как и настроен прокси, то в OutPoste возникает запрет на исходящее соединение по неразрешенному порту - PROXY:8080. Т.е. скрипт пытается вылезти во внешний мир, но по какому же порту, если не 8080 ?

   
Rambler's Top100
вверх

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