За последние 24 часа нас посетили 18454 программиста и 1798 роботов. Сейчас ищут 846 программистов ...

Выборка E-mail адресов из html-страницы

Тема в разделе "Прочее", создана пользователем Professor, 1 мар 2008.

Статус темы:
Закрыта.
  1. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    Знаю, тема заежжена вдоль и поперёк, но всё же вот столкнулся с такой проблемой. Точнее, споткнулся на одном из этапов решения задачи. Подскажите, где я недоглядел.
    Вобщем, задача: вводится в форму УРЛ, мы просматриваем страницу, ищем e-mail'ы и сохраняем в файл.
    Вот что у меня получилось:
    PHP:
    1.  
    2. <?php
    3.  
    4. $url = $_POST['URL'];
    5.  
    6. $ch = curl_init ($url);
    7.  
    8. curl_setopt ($ch, CURLOPT_HEADER, 0);
    9. curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
    10. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    11.  
    12. $content = curl_exec ($ch);
    13.  
    14. curl_close ($ch);
    15.  
    16. $temp_file = "temp.txt";
    17. /* это я пытался решить проблему сохранением в файл и считыванием...
    18. $fp = fopen ($temp_file, "wb");
    19.  
    20. if ( flock ($fp, LOCK_EX)) {
    21.     fwrite ($fp, $content);
    22.     flock ($fp, LOCK_UN);
    23.     echo "Файл " . $temp_file . " записан<br>";
    24. }
    25. else
    26.     echo "Ошибка запирания файла !";
    27.  
    28. $fp = fopen ($temp_file, "r");
    29. if ( flock ($fp, LOCK_SH)) {
    30.     $temp = fread ($fp, filesize ($temp_file));
    31.     flock ($fp, LOCK_UN);
    32.     echo "Файл " . $temp_file . " считан<br>";
    33. }
    34. else
    35.     echo "Ошибка запирания файла !";
    36. */
    37. /*
    38. $fp = fopen ($_POST['URL'], "r");
    39. while ($f = fgets ($fp, 1024))
    40.     $content .= $f;
    41. */
    42.  
    43. // phpinfo (32);
    44. // поиск по шаблону
    45. preg_match_all ("/(mailto:)?(([\w-]+\.?)+@[\w-]+\.[\w-]+(\.[\w-]+)*)(\?[\w-]*=[\w-]*)?/i", $content, $found);
    46.  
    47. $n = count ($found[0]);
    48.  
    49. foreach ($found[2] as $email)
    50.     echo "<br>" . $email;
    51.  
    52.  
    53. echo "<br><br>" . $n;
    54. /*
    55. if ( $n > 0 ) {
    56.     $fp = fopen ("emails.txt", "a+t");
    57.  
    58.     if ( flock ($fp, LOCK_EX)) {
    59.  
    60.         for ( $i = 0; $i < $n; $i++ ) {
    61.             fwrite ($fp, $found[0][$i] . "%%");
    62.         }
    63.         flock ($fp, LOCK_UN);
    64.     }
    65.     else
    66.         echo "Ошибка запирания файла !";
    67. }
    68. */
    69. echo "<pre>";
    70. print_r ($found[2]);
    71. echo "</pre>";
    72.  
    73. echo $_POST['URL'];
    74.  
    75. ?>
    76.  
    77. <form name="SearchEmails" action="" method="POST">
    78. <input type="text" name="URL" size="100" value="<?php echo $_POST['URL'];?>"><br>
    79. <input type="submit" value="Выдрать e-mail адреса !" style="height: 30px; width: 626px; border: 1px solid">
    80. </form>
    81.  
    Проблема в чём: регулярное выражение работает нормально, в простом тексте находит e-mail'ы, выводит их отформатированно и красиво. Когда вызываю URL - не находит совпадений. Пытался взять кусок скачанной страницы, присвоить переменной и провести поиск по переменной. Тот же результат. Тогда убирал части строки, в итоге убрал какие-то 5 символов - и работает. Вернул символы - не работает. Вот что делал:
    PHP:
    1.  
    2. $temp = "d as sad ВАШ_НИК_В_SKYNET@skynet.kherson.ua sadlj <br><img src='/templates/Default/images/[b]dlet_adblock_2.gif[/b]' width='18' height='60'></td>
    3.                  <td align='center'><div align='CENTER'><a href='mailto:stranger@skynet.kherson.ua'><img src='/uploads/banner.jpg' style='border: none;' /></a></div></td>
    4.                  <td width='18' align='right' valign='top'> [email=str-anger@skynet.kherson.ua]str-anger@skynet.kherson.ua[/email] ";
    5.  
    так находит только "ВАШ_НИК_В_SKYNET@skynet.kherson.ua". Если убрать выделенную жирным подстроку - будет находить остальные ("stranger@skynet.kherson.ua", "str-anger@skynet.kherson.ua")
    вопрос: кто знает почему ?))
    Понимаю, так себе головоломка. Но всё таки, нужно заставить работать скрипт нормально.
     
  2. dAllonE

    dAllonE Guest

    2.5. Запрещается создание тем и ведение обсуждений о методах, направленных на взлом, неправомочное использование ресурсов или кражу контента сайтов.
     
Статус темы:
Закрыта.