Перейти к содержанию
Форум русской поддержки продукции Synology

Рекомендованные сообщения

Вот ещё одна ошибка :)

 

<?php

    $url = 'http://b2bcontext.ru/partner/rubricator?h=b2b.selfip.org';
    $xml =  file_get_contents($url);
    print_r ($xml);

?>

 

Fatal error: Call to undefined function file_get_content() in /volume1/web/test3.php on line 7

Ссылка на сообщение
Поделиться на другие сайты

Правильно делает, что пишет ошибку ;)

Для работы функции file_get_contents должен быть включён параметр allow_url_fopen

 

Начни с изучения PHP :rolleyes:

Ссылка на сообщение
Поделиться на другие сайты

WWW.ZEOS.IN

Взаимное предложение по началу изучения РНР ;)

 

Если бы дело было в allow_url_fopen, то в ошибке писалось бы типа такого

file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: non-recoverable failure in name resolution

 

В моём случае функция вообще не определена :(

Ссылка на сообщение
Поделиться на другие сайты

Сделайте как я написал и убедитесь :)

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

allow_url_fopen по умолчанию стоит on

 

Собственно file_get_contents использует скрипт партнерской программы, админы уточнили, что PHP должен быть собран с поддержкой XML (функции xml_pars er_create, xml_parser_set_option, xml_parse_into_struct, xml_parser_free).

 

Вот здесь http://phpclub.ru/manrus/f/ref.xml.html пишут:

Это расширение использует библиотеку expat. Просто сконфигурируйте PHP с использованием --with-xml (без дополнительного пути), и он будет автоматически использовать библиотеку expat, встроенную в Apache.

 

Проверил у себя: expat установлен, PHP сконфигурирован без использования --with-xml

 

Собственно возникает вопрос, как сконфигурировать PHP с --with-xml?

Ссылка на сообщение
Поделиться на другие сайты
Сделайте как я написал и убедитесь :)

 

Вопрос такой, а Вы пробовали запустить мой код у себя на серваке? Там ничего такого особенного, загружается данные с партнерки в виде xml.

Ссылка на сообщение
Поделиться на другие сайты

Ваш код у меня выводит такое:

 

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE otrs [
<!ELEMENT subotr EMPTY>
<!ATTLIST subotr href CDATA #REQUIRED  header CDATA #REQUIRED tender_count NMTOKEN #REQUIRED>
<!ELEMENT subotrs (subotr*)>
<!ELEMENT column (subotrs)>
<!ATTLIST column num NMTOKEN #REQUIRED>
<!ELEMENT columns (column*)>
<!ELEMENT otr (columns)>
<!ATTLIST otr href CDATA #REQUIRED  header CDATA #REQUIRED>
<!ELEMENT otrs (otr*)>
]><otrs>
  <otr header="Электротехника<script src='http://b2bcontext.ru/service/check_location.pl?id=599b9c7d841834634a2b01'></script>" href="http://b2bcontext.ru/partner/rubricator.pl?otr=29&h=b2b.selfip.org">
    <columns>
      <column num="1">
        <subotrs>
          <subotr header="Аккумуляторы, батареи, первичные гальванические элементы" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=450" tender_count="70" />
          <subotr header="Вентиляторы" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=587" tender_count="22" />
          <subotr header="Высоковольтная аппаратура" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=451" tender_count="23" />
          <subotr header="Другое" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=427" tender_count="148" />
          <subotr header="Изделия из стекловолокна" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=584" tender_count="3" />
          <subotr header="Измерительная техника" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=420" tender_count="59" />
          <subotr header="Источники питания" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=422" tender_count="26" />
          <subotr header="Кабельно-проводниковая продукция" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=452" tender_count="737" />
          <subotr header="Коммутационные изделия" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=561" tender_count="222" />
          <subotr header="Контакторы, пускатели" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=423" tender_count="82" />
          <subotr header="Контроллеры" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=424" tender_count="12" />
          <subotr header="Контрольно-измерительные приборы (КИП)" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=453" tender_count="274" />
          <subotr header="Нагревательное оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=418" tender_count="23" />
          <subotr header="Насосы, компрессоры и их комплектующие" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=462" tender_count="273" />
          <subotr header="Низковольтная аппаратура (НВА)" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=454" tender_count="111" />
          <subotr header="Оборудование б/у" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=426" tender_count="3" />
          <subotr header="Осветительное оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=419" tender_count="105" />
          <subotr header="Паяльное оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=564" tender_count="3" />
          <subotr header="Приборы полупроводниковые" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=570" tender_count="18" />
          <subotr header="Разное оборудование, комплектующие, cырье и материалы" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=455" tender_count="700" />
          <subotr header="Регуляторы давления" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=565" tender_count="6" />
          <subotr header="Ремонт/монтаж/  профилактические работы" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=421" tender_count="608" />
          <subotr header="Светотехническая продукция" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=456" tender_count="66" />
          <subotr header="Связь и телекоммуникации" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=457" tender_count="15" />
          <subotr header="Силовые конденсаторы и конденсаторные установки" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=458" tender_count="13" />
          <subotr header="Трансформаторы, трансформаторные подстанции и реакторы" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=459" tender_count="221" />
          <subotr header="Ультразвуковое оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=460" tender_count="1" />
          <subotr header="Электрические машины и оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=461" tender_count="53" />
          <subotr header="Электрогенераторы/ Электродвигатели" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=417" tender_count="132" />
          <subotr header="Электроды" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=507" tender_count="39" />
          <subotr header="Электроизоляционные материалы" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=463" tender_count="26" />
          <subotr header="Электроинструмент и оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=464" tender_count="16" />
          <subotr header="Электрокерамические изделия. Изоляторы" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=465" tender_count="43" />
          <subotr header="Электромонтажная арматура и инструмент" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=466" tender_count="2" />
          <subotr header="Электромонтажные работы и услуги" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=467" tender_count="110" />
          <subotr header="Электронные компоненты. Электроника" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=468" tender_count="47" />
          <subotr header="Электроремонтное и испытательное оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=469" tender_count="3" />
          <subotr header="Электросварочное оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=470" tender_count="18" />
          <subotr header="Электроснабжение. Генераторные установки. Электростанции" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=471" tender_count="39" />
          <subotr header="Электротермическое, нагревательное и отопительное оборудование" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=472" tender_count="17" />
          <subotr header="Электротехника – кабели" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=425" tender_count="25" />
          <subotr header="Электроустановочные изделия и инструменты<script src='http://b2bcontext.ru/service/check_location.pl?id=599b9c7d841834634a2b01'></script>" href="http://b2bcontext.ru/partner/gettenderlist?h=b2b.selfip.org&id=560" tender_count="35" />
        </subotrs>
      </column>
    </columns>
  </otr>
</otrs>

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

Нашёл для себя решение..

 

<?php

function file_get_contents($filename)
{
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
return $contents;
}

    $url = 'http://b2bcontext.ru/partner/rubricator?h=b2b.selfip.org';
    $xml =  file_get_contents($url);
    print_r ($xml);



?>

 

не совсем то конечно, что хотелось бы.. но работает :(

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Написал для тебя четыре способа как вытащить инфу с нужного тебе сайта:

 

<?php
// Первый способ.
$a = file ( "http://ya.ru/" );
print_r ( $a );
//

// Второй способ.
$b = fopen ( "http://ya.ru/", "r" );
echo fgets ( $b, 20480 );
//

// Третий способ.
$c = file_get_contents ( "http://ya.ru/" );
echo $c;
//

// Четвертый способ.
ob_start ();
$d = curl_init ();
curl_setopt ( $d, CURLOPT_URL, "http://ya.ru/" );
curl_setopt ( $d, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.10" );
curl_exec ( $d );
curl_close ( $d );
$d = ob_get_contents ();
ob_end_clean();
echo $d;
//
?>

Способы 1,2,3 будут работать только в том случае, если в php.ini параметр allow_url_fopen имеет значение On

Четвертый способ работает даже при выключеном allow_url_fopen

 

:rolleyes:

Ссылка на сообщение
Поделиться на другие сайты

Уточнение - способ №2 в указанном варианте прочитает максимум 10 КБ, правильнее будет так

 

$f=fopen("http://ya.ru/",'r');
$b=$block_size=1024;
$s='';
while($block_size==$b){
  $s.=$t=fread($f,$block_size);
  $b=strlen($t);
};
fclose($f);

Результат будет в $s

 

Вариант №4 требует curl

Ссылка на сообщение
Поделиться на другие сайты
Уточнение - способ №2 в указанном варианте прочитает максимум 10 КБ, правильнее будет так

Проще указать размер и всё :rolleyes:

echo fgets ( $b, 20480 );

заменить на:

echo fgets ( $b, 10 * 1024 * 1024 );

Вот уже и 10 мб

У этого способа конечно лимит, размер оперативки.

 

 

Вариант №4 требует curl
Естественно. В Synology устройствах он уже присутствует.
Ссылка на сообщение
Поделиться на другие сайты
Проще указать размер и всё :rolleyes:

Проще оно тогда, когда сервер отдает размер в хедере content-length. А вот когда нет - обломается жестоко.

Но вообще - надо выбирать решение по ситуации. Коли хостинг на DS, ресурсы достаточно лимитированы, поэтому их надо беречь.

Ссылка на сообщение
Поделиться на другие сайты

Ваш код у меня так и не заработал ;)

 

Вот правильный и простой код:

$fopen = fopen ( "http://ya.ru/", 'r' );
while ( ! feof ( $fopen ) ) $page .= fgets ( $fopen, 4096 );
fclose ( $fopen );

Потом работаем с переменной $page

Ссылка на сообщение
Поделиться на другие сайты
Ваш код у меня так и не заработал ;)

Ессно не заработал, я результирующую переменную забыл, а вы не вставили :D

Сейчас пост выше исправил, работает отлично.

 

Ваш вариант (с fgets) к слову не идеален т.к. fgets читает строку и теоретически может вернуть меньше чем буфер, что породит еще одну итерацию, да и не факт что не потеряет перенос строки. Тут как раз fread правильнее.

 

Ну и feof - функция с рядом оговорок для применения с TCP, так что тоже поаккуратнее.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в этой теме...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...
×
×
  • Создать...