All of Soft: Все о софте
Программирование: PHP в вопросах и ответах. Часть II.
Колонка редактора Веб-дизайн Раскрутка Заработок Программирование Уроки Photoshop Уроки Flash Журнал Софт Юмор

Menu:


Лучший интернет магазин по лучшей цене!

RusForumz.ru
Огромное количество статей по веб-дизайну, раскрутке, анимации, оптимизации и программированию. Всем читать!
Подробнее

Ageofcomp.ru
Вторая, неофициальная часть форума RusForumz.com. Если хочется отдохнуть и развлечься, приходи на этот форум. Зажжём!
Подробнее

Jinfo.ru
Информационно-развлекательный портал обо всём, что интересно
Подробнее


БЫСТРЫЙ ПЕРЕХОД

PHP в вопросах и ответах. Часть II.

Автор: Дмитрий Бородин
Источник: php.spb.ru


Вопрос: Как вырезать со страницы все ссылки?
Ответ.

<? 
   echo "<pre>";

   // качаем страницу в переменную $buf
   $buf=implode("",file("http://www.ru/")); 

   // получем ссылки в массив
   preg_match_all("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]+)[^>]*>/",$buf,$url); 

   // выводим массив на экран
   while($i<count($url[1])) { echo $url[1][$i++]."\n"; }

   echo "</pre>"; 
?>



Вопрос: Как вытащить слова из текста?
Ответ. Слово - непрерывная последовательность символов. Используем это в нашем скрипте.

<?php
$x="Типа, %^& читайте___люди~~~~__маны__  На... РУССКОМ!! Будете+здоровы.  abc, qwe, zxc";
preg_match_all('/([a-zA-Zа-яА-Я]+)/',$x,$ok);
for ($i=0; $i<count($ok[1]); $i++) echo $ok[1][$i]."<br>"; 
?>

Результат будет таким:
Типа
читайте
люди
маны
На
РУССКОМ
Будете
здоровы
abc
qwe
zxc

Вопрос: Есть некий текст, в котором встречаются фразы типа "А не пойти ли тебе на http://softportal.com ?". Нужно сделать все слова, похожие на ссылки, html-ссылками, т.е. преобразовать текст примерно так: "А не пойти ли тебе на <a href=http://softportal.com>http://softportal.com ?</a>".
Ответ: (Решение)

<?php
   $buf="

http://любые слова

sadkjfjkas dfkjasdf ajksd fjkdsfh jksdf kasjdfh kjdfjksdaf 
asfdasd.fklja sdfk.jaas kasldf.jaskldjfls.kadjfkls.dfjaklsdf 

1     www1.ru    
2     www2.ru/123/123
3     SOFTPORTAL.COM
4     www.softportal.com
5     www.123.456.ru/1234/asd#tip-top
6     http://www.ru
7     http://www.ru/123/123
8     http://softportal.com
9     http://www.softportal.com
10    HTTP://www.download.softportal.com (скачать новую Асю :-)
11    dmitry.spb.ru
      
      BAD
      BAD234579324875.12312
      BAD.q
      www.BAD.rrrr
      www.BAD.123
";

   echo "<big><b>Имеется текст:</b></big> <pre>$buf</pre>";

// 1 //

   $buf=strtolower($buf);
   preg_match_all("/(http:\\/\\/)?([a-z_0-9-.]+\\.[a-z]{2,3}(([ \"'>\r\n\t])|(\\/([^ \"'>\r\n\t]*)?)))/",$buf,$url); 
   echo "<big><b><br><br>Часть 1. В тексте было найдено:</b></big><pre>";
   for($i=0; $i<count($url[2]); $i++)
      echo "<a href="javascript:if(confirm('http://".$url[2][$i]."/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://".$url[2][$i]."/'" tppabs="http://".$url[2][$i]."/">".$url[2][$i]."</a>\n";
   echo "</pre>";

// 2 //

   echo "<big><b><br><br>Часть 2. Замена текста-ссылки на html-код прямо в тексте:</b></big><pre>"; 
   $x=explode(" ",$buf);
   for ($j=0; $j<count($x); $j++) {
      if (preg_match("/(http:\\/\\/)?([a-z_0-9-.]+\\.[a-z]{2,3}(([ \"'>\r\n\t])|(\\/([^ \"'>\r\n\t]*)?)))/",$x[$j],$ok))
      echo str_replace($ok[2],"<a href="javascript:if(confirm('http://$ok[2]/  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  \n\nDo you want to open it from the server?'))window.location='http://$ok[2]/'" tppabs="http://$ok[2]/">$ok[2]</a>",
                         str_replace("http://","",$x[$j]))." ";
      else
      echo $x[$j]." ";
   }
?>


P.S. почему www1.ru не превратилась в ссылку? Попытайтесь найти ответ на этот вопрос сами...


Вопрос: Как узнать размер файла на каком-то веб-сервере?
Ответ.Чтобы это сделать, нужно открыть сокет (установить соединение с удаленным веб-сервером). Сокет - это файл, в который можно писать и читать. Далее в сокет (как в файл) нужно написать заголовок (HEAD filename ...). После считать из сокета то, что нам напишут. Для начала выведите это на экран, чтобы было понятно, что именно вам возвращают. В ответе сервера, что мы считаем, будет много полезной информации - тип и ОС сервера, дата модификации и размер файла, другая информации. Все, что нужно - выкусить из текста нужное число и вывести его на экран.

<?php
$fname='/path-to-file/big-big-big.mpg';
$fhost='www.super-mega.ru';

$x=0;
$fp = fsockopen($fhost, 80, &$errno, &$errstr, 30) or die("облом");

fputs($fp,"HEAD $fname HTTP/1.0\nHOST: $fhost\n\n");
while(!feof($fp)) $x.=fgets($fp,128);
fclose($fp);

if (ereg(<"Content-Length: ([0-9]+)",$x,$size)) echo "Размер файла $size[1] байт";
else echo "Определить невозможно";
?>



База каталогов для авторегистрации в AllSubmitter 4.x