Продолжаем отвечать на вопросы, возникающие при программировании на PHP. Вопрос: Как вырезать со страницы все ссылки? Ответ. <? echo "<pre>"; // качаем страницу в переменную $buf $buf=implode("",file("http://www.ru/")); // получем ссылки в массив preg_match_all("/<[Aa][
]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '"
]*([^ "'>
#]+)[^>]*>/",$buf,$url); // выводим массив на экран while($i<count($url[1])) { echo $url[1][$i++]."
"; } 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}(([ "'>
])|(\/([^ "'>
]*)?)))/",$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]."/
This file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.
Do you want to open it from the server?'))window.location='http://".$url[2][$i]."/'" tppabs="http://".$url[2][$i]."/">".$url[2][$i]."</a>
"; 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}(([ "'>
])|(\/([^ "'>
]*)?)))/",$x[$j],$ok)) echo str_replace($ok[2],"<a href="javascript:if(confirm('http://$ok[2]/
This file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.
Do 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
HOST: $fhost
"); while(!feof($fp)) $x.=fgets($fp,128); fclose($fp); if (ereg("Content-Length: ([0-9]+)",$x,$size)) echo "Размер файла $size[1] байт"; else echo "Определить невозможно"; ?> |