Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сграбить часть содержимого страницы 
:(
    Опции темы
Aliance
Дата 13.5.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Доброго времени суток. Задача такая:

с помощью cURL, sockets, fopen, file_get_contents (или любым другим способом) получить содержимое страницы и выдезать только часть между:
Код

<!-- Begin of text -->
................
................
................
<!-- End of text -->


И далее работать с этим текстом.
Как это осуществить и чем лучше? Их вышеперечисленного не работал ниразу с cURL, но говорят они лидеры в этом :-)
Что посоветуете? 
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 13.5.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Цитата(Aliance @  13.5.2006,  18:51 Найти цитируемый пост)
fopen, file_get_contents (или любым другим способом)

Это сразу выкинь.
fsockopen для начала. В поискепоюзай.
 
PM ICQ   Вверх
Aliance
Дата 13.5.2006, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Ну с ними умею. А вот с cURLами не работал. Советуешь для данной задачи что использовать?
Я могу сокетами получить содержимое всей страницы, а как только ее часть, подскажи плз ) 
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 13.5.2006, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Цитата(Aliance @  13.5.2006,  20:17 Найти цитируемый пост)
Я могу сокетами получить содержимое всей страницы, а как только ее часть, подскажи плз )  

Считав все выцепить нужное.
Выцепить можно и через DOM, но это не надежно, т.к. скорее всего код не стандартизирован. 
PM ICQ   Вверх
Aliance
Дата 13.5.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Цитата(Mal Hack @  13.5.2006,  21:41 Найти цитируемый пост)
Выцепить можно и через DOM, но это не надежно, т.к. скорее всего код не стандартизирован.  

Да, он не стандартизирован.
Единственное что абсолютно точно - нужный мне кусок находится между комментариями, которые я привел в первом посту. Так как мне их выцепить-то? 
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 13.5.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Регулярками smile 
PM ICQ   Вверх
Aliance
Дата 13.5.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Да это понятно, но не выходит у меня. Вот что пишу, но явно что бред...

Код

<?php

$mas= array();

$text = <<<EOS
<!-- Begin of text -->
TEST===TEST===TEST===TEST
<!-- End of text -->
EOS;

$text = preg_grep("/^.*[<!-- Begin of text -->].+[<!-- End of text -->].*$/", $mas);

print_r($mas);

?>


В общем мне нужно получить это: TEST===TEST===TEST===TEST  

Это сообщение отредактировал(а) Aliance - 13.5.2006, 21:44
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 13.5.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Код
<pre>
<?php
$mas= array();
$text = <<<EOS
<!-- Begin of text -->
TEST===TEST===TEST===TEST
<!-- End of text -->
EOS;
//!--\sEnd\sof\stext\s\-\->
$text = preg_match_all("#<\!\-\-\sBegin\sof\stext\s\-\->(.+?)<\!\-\-\sEnd\sof\stext\s\-\->#s",$text, $mas);
print_r($mas);
?>
 
PM ICQ   Вверх
Aliance
Дата 13.5.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Спасибо, помогло. А реально ли усовершенствовать это так:
возьмем переменную $mas[0][0] и сделаем такую вещь:
Код

$new_mas = explode("<br />", $mas[0][0]);


Далее берем первый элемент - $new_mas[0], его текст таков:
Цитата

<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="ссылка1" target=_blank>название</A>
<IMG SRC="картинка1" WIDTH=12 HEIGHT=15>  (Значение1: само_значение1) <BR>
<b>значение2: само_значение2</b><BR>
значение3: само_значение3</FONT><BR>
<B>текст1:</B><BR>значение4<BR>
<B>текст2:</B><BR>значение5<BR>    
<B>текст3:</B><BR>значение6<BR>    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="ссылка1"><SPAN style='background-color: #E0E0E0'><img src="картинка1" alt="значение7" name="image" border="0"></SPAN></a></td>
</tr>
</table>


И нужно получить все выделенные фрагменты. Тут я вообще сомневаюсь, что такое возможно.
Текст большой (я все пробелы и табуляцию удалил, их полно перед строчками), регулярками наверное никак... 
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 13.5.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Можно вычленить и такое.
Только тут лучше будет текст целиком прогнать, как есть.
При этом, важно чтобы код HTML был хотя бы валидным с точки зрения синтаксиса.
Когда я писал подцветку, я все то сделал.
Тут несколько попроще... 
Код
<?php

$text = <<<EOS
<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="ссылка1" target=_blank>название</A>
<IMG SRC="картинка1" WIDTH=12 HEIGHT=15>  (Значение1: само_значение1) <BR>
<b>значение2: само_значение2</b><BR>
значение3: само_значение3</FONT><BR>
<B>текст1:</B><BR>значение4<BR>
<B>текст2:</B><BR>значение5<BR>    
<B>текст3:</B><BR>значение6<BR>    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="ссылка1"><SPAN style='background-color: #E0E0E0'><img src="картинка1" alt="значение7" name="image" border="0"></SPAN></a></td>
</tr>
</table>
EOS;
//<(?:a|img)\s(?:.*?)    (.*?)>
//print $text = str_replace( "\"" , "\&quot;" , $text );
//preg_match_all( "#(?:src|alt)=(\"|\')(.+?)\\1#is" , $text , $match );
preg_match_all( "#<(?:a|img)?\s(?:.*?)(?:(?:src|alt|href)=(\"|\')(.+?)\\1)(?:.*?)>#ise" , $text , $match );

print_r( $match );

?>


А вот значения, уже так просто не получится... Тут уже надо конкретизировать как-то. 
PM ICQ   Вверх
Aliance
Дата 13.5.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



А уточнять нечего smile Дан такой текст, он на чужом домене. Мне он нужен, чтобы не вбивать его ручками (текста очень много, а главное он меняеться...а я планирую крон сделать)
Вот, единственное что менется - это выделенные слова. Их-то мне и нужно заполучить.
Есть много тсраниц, на каждой от 0 до бесконечности таких блоков. Я планировал циклом прокрутить, получить все эти слова и забить в БД свою, выполнять скрипт кроном.
Впринципе сейчас с твоей помощью у меня сам этот текст есть, но если я его так буду вставлять на страницу - то это никак не подойдет под мой дизайн. Хотелось бы иметь отдельные необходимые слова.

Очень нужна это вещь, просто без нее не пишется ничего другое, т.к. на этом все основано smile

Добавлено @ 23:06 
Может по строчкам просто рзбивать сперва? 
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 13.5.2006, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Aliance, дай линк откуда надо стырить. В принципе все можно сделать. 
PM ICQ   Вверх
Aliance
Дата 14.5.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Дык линков много. Могу дать парочку, поймешь думаю закономерность :-)

http://capitalcity.combats.ru/encicl/crutch.html
http://capitalcity.combats.ru/encicl/shirt.html

Делаю энциклопедию предметов из этой игры. Т.к. предметы изменяються/добавляются + их очень много - в ручную заносить в БД - это непосильная работа. 
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 14.5.2006, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Код

<?php

$text = strip_tags( $text );
preg_match_all( "#:(.+?)$#i" , $text , $matches );
// Может перед : надо будет \ поставить.

?> 
 

Это сообщение отредактировал(а) Mal Hack - 14.5.2006, 01:54
PM ICQ   Вверх
Aliance
Дата 14.5.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Пустой массив получается smile

Код

<?php

$text = <<<EOS
<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="ссылка1" target=_blank>название</A>
<IMG SRC="картинка1" WIDTH=12 HEIGHT=15>  (Значение1: само_значение1) <BR>
<b>значение2: само_значение2</b><BR>
значение3: само_значение3</FONT><BR>
<B>текст1:</B><BR>значение4<BR>
<B>текст2:</B><BR>значение5<BR>    
<B>текст3:</B><BR>значение6<BR>    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="ссылка1"><SPAN style='background-color: #E0E0E0'><img src="картинка1" alt="значение7" name="image" border="0"></SPAN></a></td>
</tr>
</table>
EOS;

$text = strip_tags( $text );
preg_match_all( "#:(.+?)$#i" , $text , $match );
// preg_match_all( "#\:(.+?)$#i" , $text , $match );

print("<pre>");
print_r( $match );
print("</pre>");

?>
 
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 14.5.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Код
<?php
$text = <<<EOS
<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="ссылка1" target=_blank>название</A>
<IMG SRC="картинка1" WIDTH=12 HEIGHT=15>  (Значение1: само_значение1) <BR>
<b>значение2: само_значение2</b><BR>
значение3: само_значение3</FONT><BR>
<B>текст1:</B><BR>значение4<BR>
<B>текст2:</B><BR>значение5<BR>    
<B>текст3:</B><BR>значение6<BR>    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="ссылка1"><SPAN style='background-color: #E0E0E0'><img src="картинка1" alt="значение7" name="image" border="0"></SPAN></a></td>
</tr>
</table>
EOS;
print $text = strip_tags( $text );
preg_match_all( "#:(.+)#i" , $text , $match );
// preg_match_all( "#\:(.+?)$#i" , $text , $match );
print("<pre>");
print_r( $match );
print("</pre>");
?>



 
PM ICQ   Вверх
Aliance
Дата 14.5.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Все работает почти идеально! :-)
Пойду писать, какие будут вопросы по ходу, буду задавать!

ЗЫ: получай, гений, +1 smile 
PM MAIL WWW ICQ Skype   Вверх
Aliance
Дата 14.5.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Итак, совместил 2 кода, вот он:
Код

<?php

$text;
$mas;
$match2;
$data;
$match;

$fp = fsockopen("capitalcity.combats.ru", 80, $errno, $errstr, 30);
if (!$fp) {
   echo "Error ;)<br />\n";
} else {
   $out = "GET /encicl/crutch.html HTTP/1.1\r\n";
   $out .= "Host: capitalcity.combats.ru\r\n";
   $out .= "Connection: Close\r\n\r\n";

   fwrite($fp, $out);
   while (!feof($fp)) {
        $text .= fgets($fp, 128);
   }
   fclose($fp);
}

preg_match_all("#<\!\-\-\sBegin\sof\stext\s\-\->(.+?)<\!\-\-\sEnd\sof\stext\s\-\->#s", $text, $mas);

$data = explode("<br />", $mas[0][0]);

preg_match_all("#<(?:a|img)?\s(?:.*?)(?:(?:src|alt|href)=(\"|\')(.+?)\\1)(?:.*?)>#ise", $data[0], $match2);

$data[0] = strip_tags($data[0]);

$data[0] = str_replace('&bull;', '<br />&bull;', $data[0]);

preg_match_all("#:(.+)#i", $data[0], $match);

echo <<<EOS

<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="/encicl/object/kostyl2.html" target=_blank>Укрепленный Костыль</A>
<IMG SRC="http://img.combats.ru/i/align.gif" WIDTH=12 HEIGHT=15>  (Масса{$match[0][0]} <BR>
<b>Цена{$match[0][1]}</b><BR>
Долговечность{$match[0][2]}</FONT><BR>
    
<B>Требуется минимальное</B>{$match[0][3]}<BR>
<B>Свойства предмета</B>{$match[0][4]}<BR>
<B>Особенности</B>{$match[0][5]}<BR>
    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="/encicl/object/kostyl2.html"><SPAN style='background-color: #E0E0E0'>
{$match2[0][6]}</SPAN></a></td>
</tr>
</table>

EOS;

print("<hr><pre>");
print_r($match2);
print("<hr>");
print($match2[0][2]);
print("</pre>");

?>


Все выходит, но это лишь первый элемент ($mas[0][0]). В перспективе я бы хотел циклом перебирать и резать все вхождения ($mas[0][$i]). Проблем нет, кроме одной: в первый элемент имеет 2 и 3 лишние строчки, которые мешают. Вот они:
Код

      <p><b><br>
        &gt;&gt;</b> <a href="index.html">Содержание</a> /  <a href="subjects.html">Предметы</a> /  <a href="ammunition.html">Амуниция</a> /   <em><strong>Костыли</strong></em> 


Их нужно вырезать, думаю.

Вот значение переменной $mas[0][0] для данного кода:
Код

<!-- Begin of text -->
      <p><b><br>
        &gt;&gt;</b> <a href="index.html">Содержание</a> /  <a href="subjects.html">Предметы</a> /  <a href="ammunition.html">Амуниция</a> /   <em><strong>Костыли</strong></em> 
      
    
    <table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
        <tr>
        <td width="100%">
    <A HREF="/encicl/object/kostyl2.html" target=_blank>Укрепленный Костыль</A>
    <IMG SRC="http://img.combats.ru/i/align.gif" WIDTH=12 HEIGHT=15>  (Масса: 4) <BR>
    <b>Цена: 4 кр.</b><BR>
    Долговечность: 0/110</FONT><BR>

    <B>Требуется минимальное:</B><BR>&bull; Уровень: 4<BR>
    
    
    <B>Свойства предмета:</B><BR>&bull; Урон: 5 - 10<BR>&bull; Второе оружие<BR>
    
    <B>Особенности:</B><BR>&bull; Колющие атаки: Малы<BR>&bull; Дробящие атаки: Регулярны<BR>
    
    </td>
         <td align="center" valign="top" style='padding: 0,2,0,5'>
         <a href="/encicl/object/kostyl2.html"><SPAN style='background-color: #E0E0E0'><img src="http://img.combats.ru/i/items/kostyl2.gif" alt="kostyl2" name="image" border="0"></SPAN></a></td>
        </tr>
      </table>

      <br />
      
    
    <table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
        <tr>
        <td width="100%">
    <A HREF="/encicl/object/kostyl1.html" target=_blank>Простой Костыль</A>
    <IMG SRC="http://img.combats.ru/i/align.gif" WIDTH=12 HEIGHT=15>  (Масса: 3) <BR>
    <b>Цена: 3 кр.</b><BR>
    Долговечность: 0/100</FONT><BR>
    
    <B>Требуется минимальное:</B><BR>&bull; Уровень: 4<BR>
    
    
    <B>Свойства предмета:</B><BR>&bull; Урон: 3 - 10<BR>&bull; Второе оружие<BR>
    
    <B>Особенности:</B><BR>&bull; Колющие атаки: Временами<BR>&bull; Дробящие атаки: Временами<BR>
    
    </td>
         <td align="center" valign="top" style='padding: 0,2,0,5'>
         <a href="/encicl/object/kostyl1.html"><SPAN style='background-color: #E0E0E0'><img src="http://img.combats.ru/i/items/kostyl1.gif" alt="kostyl1" name="image" border="0"></SPAN></a></td>
        </tr>
      </table>

      <br />
      
        <!-- End of text -->


Она получается путем этой строчки кода из всего исходного текста кода:
Код

preg_match_all("#<\!\-\-\sBegin\sof\stext\s\-\->(.+?)<\!\-\-\sEnd\sof\stext\s\-\->#s", $text, $mas);


Далее мы делит эту переменную с помощью функции explode (в данном случае получается 2 элемента):
Код

$data = explode("<br />", $mas[0][0]);


Если не очень понятно изъяснился - скажите, напишу полностью код с циклом и покажу чего именно не получается. 
PM MAIL WWW ICQ Skype   Вверх
Wowa
Дата 14.5.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Mal Hack, чем не нравится file_get_contents ?

Добавлено @ 17:30 
Цитата(Aliance @  14.5.2006,  16:18 Найти цитируемый пост)
Их нужно вырезать, думаю.

Код

$to_del=<<<EOF
      <b><br>
        &gt;&gt;</b> <a href="index.html">Содержание</a> /  <a href="subjects.html">Предметы</a> /  <a href="ammunition.html">Амуниция</a> /   <em><strong>Костыли</strong></em> 
EOF;

$mas[0][0]=str_replace($to_del, '', $mas[0][0]);


Цитата(Aliance @  14.5.2006,  16:18 Найти цитируемый пост)
Далее мы делит эту переменную с помощью функции explode (в данном случае получается 2 элемента):


Да, два.. Но использовать <br /> разграничителем ненадежно.
Попробуй может хотя бы так, чтобы на переходы строк еще ориентироваться.
Код

$data = explode("\n<br />\n", $mas[0][0]);


А теперь доступ через $data[0] и $data[1]

Или можешь сразу в переменные, а не в массив:

list($mydata1, $mydata2) = explode("\n<br />\n", $mas[0][0]);   
PM WWW   Вверх
Aliance
Дата 14.5.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Wowa, твой код с переменной $to_del не подходит. Так как эти строчки меняются.

А на счет 
Цитата(Wowa @  14.5.2006,  18:23 Найти цитируемый пост)
Но использовать <br /> разграничителем ненадежно

так тут да, так канечно лучше, но посмотри в исходники страницы этой: http://capitalcity.combats.ru/encicl/crutch.html
Там все сделано именно так, чтобы программисты могли ее парсить. Обычные переносы там такие: <BR>, а разделитель именно такой: <br />
Но вообще тут я с тобой согласен smile

Вообще страницы там более менее одинаковые. Меняются данные, которые мне и нужно заполучить. Если бы не эти строчки - все бы было супер :-( 
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 14.5.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Цитата(Wowa @  14.5.2006,  17:23 Найти цитируемый пост)
Mal Hack, чем не нравится file_get_contents ?

Работает с удаленными файлами только при определенных настройках ПХП. А это дыра в безопасности.

Тебе вообще не так делать надо было smile

Вот:
Код
<?php

    $text;
    $mas;
    $match2;
    $data;
    $match;
    
    $fp = fsockopen("capitalcity.combats.ru", 80, $errno, $errstr, 30);
    
    if (!$fp) 
        {
            echo "Error ;)<br />\n";
        } 
    else 
        {
            $out =  "GET /encicl/crutch.html HTTP/1.1\r\n";
            $out .= "Host: capitalcity.combats.ru\r\n";
            $out .= "Connection: Close\r\n\r\n";
            
            fwrite($fp, $out);
            
            while (!feof($fp)) 
                {
                 $text .= fgets($fp, 128);
                }
                
            fclose($fp);
        }
        
    $text = preg_replace( "#^((.+)Содержание(.+))$#i" , "" , $text );

    preg_match("#<\!\-\-\sBegin\sof\stext\s\-\->(.+?)<\!\-\-\sEnd\sof\stext\s\-\->#s", $text , $m );
    preg_match_all( "#<table(.+?)>(.+?)</table>#s" , $m[0] , $mas );

    for($i = 0;$i<count($mas[0]);$i++)
        {
            $data = $mas[0][$i];
            
            preg_match_all("#<(?:a|img)?\s(?:.*?)(?:(?:src|alt|href)=(\"|\')(.+?)\\1)(?:.*?)>#ise", $data, $match2);
            
            $data = strip_tags($data);
            //$data= str_replace('&bull;', '<br />&bull;', $data);
            preg_match_all("#:(.+)#i", $data, $match);
        
            echo <<<EOS
<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="/encicl/object/kostyl2.html" target=_blank>Укрепленный Костыль</A>
<IMG SRC="http://img.combats.ru/i/align.gif" WIDTH=12 HEIGHT=15>  (Масса{$match[0][0]} <BR>
<b>Цена{$match[0][1]}</b><BR>
Долговечность{$match[0][2]}</FONT><BR>
    
<B>Требуется минимальное</B>{$match[0][3]}<BR>
<B>Свойства предмета</B>{$match[0][4]}<BR>
<B>Особенности</B>{$match[0][5]}<BR>
    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="/encicl/object/kostyl2.html"><SPAN style='background-color: #E0E0E0'>
{$match2[0][6]}</SPAN></a></td>
</tr>
</table>
EOS;
        }

?>
 
PM ICQ   Вверх
Wowa
Дата 14.5.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(Mal Hack @  14.5.2006,  17:07 Найти цитируемый пост)
Работает с удаленными файлами только при определенных настройках ПХП. А это дыра в безопасности.


Должно быть включено fopen wrappers в php.ini. Не представляю, какая тут может быть дыра.. 
PM WWW   Вверх
Aliance
Дата 14.5.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Mal Hack, не могу получить  это:
Цитата

            echo <<<EOS
<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="/encicl/object/kostyl2.html" target=_blank>Укрепленный Костыль</A>
<IMG SRC="http://img.combats.ru/i/align.gif" WIDTH=12 HEIGHT=15>  (Масса{$match[0][0]} <BR>
<b>Цена{$match[0][1]}</b><BR>
Долговечность{$match[0][2]}</FONT><BR>
    
<B>Требуется минимальное</B>{$match[0][3]}<BR>
<B>Свойства предмета</B>{$match[0][4]}<BR>
<B>Особенности</B>{$match[0][5]}<BR>
    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="/encicl/object/kostyl2.html"><SPAN style='background-color: #E0E0E0'>
{$match2[0][6]}</SPAN></a></td>
</tr>
</table>
EOS;
 

Хотя вот здесь мы это получили: http://forum.vingrad.ru/index.php?showtopi...st&p=730640 

Это сообщение отредактировал(а) Aliance - 14.5.2006, 18:26
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 14.5.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



Код
<?php

    $text;
    $mas;
    $match2;
    $data;
    $match;
    
    $fp = fsockopen("capitalcity.combats.ru", 80, $errno, $errstr, 30);
    
    if (!$fp) 
        {
            echo "Error ;)<br />\n";
        } 
    else 
        {
            $out =  "GET /encicl/crutch.html HTTP/1.1\r\n";
            $out .= "Host: capitalcity.combats.ru\r\n";
            $out .= "Connection: Close\r\n\r\n";
            
            fwrite($fp, $out);
            
            while (!feof($fp)) 
                {
                 $text .= fgets($fp, 128);
                }
                
            fclose($fp);
        }
        
    $text = preg_replace( "#^((.+)Содержание(.+))$#i" , "" , $text );

    preg_match("#<\!\-\-\sBegin\sof\stext\s\-\->(.+?)<\!\-\-\sEnd\sof\stext\s\-\->#s", $text , $m );
    preg_match_all( "#<table(.+?)>(.+?)</table>#s" , $m[0] , $mas );

    for($i = 0;$i<count($mas[0]);$i++)
        {
            $data = $mas[0][$i];
            
            preg_match("#<a href=(\"|\')(.+?)\\1(?:.*?)>(.+?)</a>#is", $data, $b3);
            preg_match_all("#<img src=(?:.+?)>#is", $data, $match2);

            $data = strip_tags($data);
            //$data= str_replace('&bull;', '<br />&bull;', $data);
            preg_match_all("#:(.+)#i", $data, $match);
        
            echo <<<EOS
<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="http://combats.ru{b3[2]}" target=_blank>{$b3[3]}</A>
<IMG SRC="http://img.combats.ru/i/align.gif" WIDTH=12 HEIGHT=15>  (Масса{$match[0][0]} <BR>
<b>Цена{$match[0][1]}</b><BR>
Долговечность{$match[0][2]}</FONT><BR>
    
<B>Требуется минимальное</B>{$match[0][3]}<BR>
<B>Свойства предмета</B>{$match[0][4]}<BR>
<B>Особенности</B>{$match[0][5]}<BR>
    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="http://combats.ru{$b[2]}"><SPAN style='background-color: #E0E0E0'>
{$match2[0][1]}</SPAN></a></td>
</tr>
</table>
EOS;
        }

?>
 
PM ICQ   Вверх
Aliance
Дата 14.5.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Вот конечный, работающий вариант:
Код

<?php

function encyclopedia ($section) {

    if (empty($section)) {
       die("Отсутствует аргумент!");
    }

    $text;
    $mas;
    $match2;
    $data;
    $match;
    
    $fp = fsockopen("capitalcity.combats.ru", 80, $errno, $errstr, 30);
    
    if (!$fp) {
       echo "Error!\n<br />";
    } else {
       $out = "GET ".$section." HTTP/1.1\r\n";
       $out .= "Host: capitalcity.combats.ru\r\n";
       $out .= "Connection: Close\r\n\r\n";
            
       fwrite($fp, $out);
            
    while (!feof($fp)) {
       $text .= fgets($fp, 128);
    }
                
    fclose($fp);
    }
        
    $text = preg_replace("#^((.+)Содержание(.+))$#i", "", $text);

    preg_match("#<\!\-\-\sBegin\sof\stext\s\-\->(.+?)<\!\-\-\sEnd\sof\stext\s\-\->#s", $text, $m);
    preg_match_all("#<table(.+?)>(.+?)</table>#s", $m[0], $mas);

    for($i = 0;$i<count($mas[0]);$i++) {
            $data = $mas[0][$i];
            
            preg_match("#<a href=(\"|\')(.+?)\\1(?:.*?)>(.+?)</a>#is", $data, $b3);
            preg_match_all("#<img src=(?:.+?)>#is", $data, $match2);

            $data = strip_tags($data);
            $data = str_replace('&bull;', '<br />&bull;', $data);
            preg_match_all("#:(.+)#i", $data, $match);
        
echo <<<EOS
<table width="95%"  border="0" align="center" cellpadding="3" cellspacing="0" class="inup3">
<tr>
<td width="100%">
<A HREF="http://capitalcity.combats.ru{$b3[2]}" target=_blank>{$b3[3]}</A>
<IMG SRC="http://img.combats.ru/i/align.gif" WIDTH=12 HEIGHT=15>  (Масса{$match[0][0]} <BR>
<b>Цена{$match[0][1]}</b><BR>
Долговечность{$match[0][2]}</FONT><BR>
    
<B>Требуется минимальное</B>{$match[0][3]}<BR>
<B>Свойства предмета</B>{$match[0][4]}<BR>
<B>Особенности</B>{$match[0][5]}<BR>
    
</td>
<td align="center" valign="top" style='padding: 0,2,0,5'>
<a href="http://capitalcity.combats.ru{$b3[2]}"><SPAN style='background-color: #E0E0E0'>
{$match2[0][1]}</SPAN></a></td>
</tr>
</table>
EOS;
    }

}

//encyclopedia("/encicl/crutch.html");
encyclopedia("/encicl/knuckleduster.html");

?>
   

Это сообщение отредактировал(а) Aliance - 14.5.2006, 19:09
PM MAIL WWW ICQ Skype   Вверх
regret
Дата 22.7.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



вот блин!!!   ищу в реале таких как ты для  user posted image....  Всё делай ручкаМИ! 


(код скопировал себе в архивчеГ- пригодитсо user posted image

Это сообщение отредактировал(а) regret - 22.7.2006, 21:25
PM MAIL   Вверх
Guest
Дата 9.10.2006, 14:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уважаемые господа, не могли бы вы "прочитать" конструкцию типа (.*?) или (.+?), так вот как бы логика ястна, но не везде. И ещё в некоторых местах используется ключ #s - "<\!\-\-\sEnd\sof\stext\s\-\->#s" зачем он здесь и как бы он работал без него?

Спасибо, извеняюсь за ламерсие вопросы, но не мог найти оввет на них в другом месте
  Вверх
Aliance
Дата 9.10.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Первое - это управление жадностью квантификаторов. Про них читай в книгах о регульрных выражениях.

Второе - это модификатор s, обозначабщий строчность данных, где происходит поиск/замена. О них читай там же.

Это сообщение отредактировал(а) Aliance - 9.10.2006, 14:54
PM MAIL WWW ICQ Skype   Вверх
Guest
Дата 9.10.2006, 15:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Большое спасибо, теперь буду знать что искать smile 
  Вверх
dvska
Дата 17.10.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 30.1.2006

Репутация: нет
Всего: 9



Немного оффтоп, потому как не PHP (а Python), но
Посмотрите какая рульная либаhttp://www.crummy.com/software/BeautifulSo...umentation.html
--------------------
PM MAIL   Вверх
pnd_ku
Дата 20.9.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 25.9.2006

Репутация: нет
Всего: 1



Вечер добрый!
В получении странички по сокету есть подводный камень, я не знаю как его обойти.
Камень этот в размере буфера.
Штука такая  - если буфер больше чем примерно 2*1024 то в контенте странички появляются строчки такова вида \r\n[a-f0-9]{4}\r\n - в общем шестнадцатиричное число, окруженное переносами строк.
Если же буфер меньше чем 2*1024, то периодически теряется по символу из получаемых данных.
Как обойти, и что это вообще за такое я так и не осознал.
Может кто встречался, и знает причину/решение?
Спасибо!
PM MAIL   Вверх
sTa1kEr
Дата 21.9.2007, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



pnd_ku, это называется в протоколе HTTP 1.1 Chunked Transfer Coding. Если сервер передал заголовок "transfer-coding: chunked", то данные будут передаваться не одним потоком, а по блокам с динамическим размером. hex числа - это длина следующего блока. Данные будут передаваться пока длина блока не будет 0.
Если не хотите получать данные по блокам, то используйте протокол HTTP 1.0
PM MAIL   Вверх
pnd_ku
Дата 21.9.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 25.9.2006

Репутация: нет
Всего: 1



Спасибо большое, а то я уж и не знал что подумать smile
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1333 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.