Помогите с собственными функциями

Статус
В этой теме нельзя размещать новые ответы.

асс

Мой дом здесь!
Регистрация
13 Окт 2006
Сообщения
762
Реакции
230
Добрый вечер всем заглянувшим.

Пособите пожалуйста.


Задача такова. Чтоб не добавлять два раза вызов курла в коде надо сделать через функцию.

через file_get_contents выглядело бы так

PHP:
$min= file_get_contents('http://www.google.ru');
Регулярка  1

$max = file_get_contents('http://yandex.ru');
Регулярка  2




Есть функция ее задача обрабатывать ссылку, и отдавать в регулярку контент.


Пример кода, я честно не знаю как мне делать, по этому код для примера
PHP:
<?php


  function get_download($links){
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, "$links");
$content = curl_exec($ch);

 }

#Это  код  первой ссылки
$content1 = get_download('http://yandex.ru/') ;
    preg_match("/<a href=\"\(.*?)\">(.*?)<\/a>/is",$content ,$ok);

  var_dump($ok) ;


#Это  код  второй ссылки
  $content2 = get_download('http://google.ru/') ;
   preg_match("/<a href=\"\(.*?)\">(.*?)<\/a>/is",$content ,$ok1);

  var_dump($ok1) ;


?>
 
Добрый вечер всем заглянувшим.

Пособите пожалуйста.


Задача такова. Чтоб не добавлять два раза вызов курла в коде надо сделать через функцию.

через file_get_contents выглядело бы так

PHP:
$min= file_get_contents('http://www.google.ru');
Регулярка  1

$max = file_get_contents('http://yandex.ru');
Регулярка  2




Есть функция ее задача обрабатывать ссылку, и отдавать в регулярку контент.


Пример кода, я честно не знаю как мне делать, по этому код для примера
PHP:
<?php


  function get_download($links){
$ch = curl_init();
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_URL, "$links");
 $content = curl_exec($ch);

}

#Это  код  первой ссылки
$content1 = get_download('http://yandex.ru/') ;
    preg_match("/<a href=\"\(.*?)\">(.*?)<\/a>/is",$content ,$ok);

  var_dump($ok) ;


#Это  код  второй ссылки
  $content2 = get_download('http://google.ru/') ;
   preg_match("/<a href=\"\(.*?)\">(.*?)<\/a>/is",$content ,$ok1);

  var_dump($ok1) ;


?>
Что-то я не понял, что требуется.

Чтоб не добавлять два раза вызов курла в коде надо сделать через функцию - так у Вас в коде и так через функцию.

Если Вам регулярку надо в функцию вставить, то так:
PHP:
function get_download($link){
    $ch = curl_init($link);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $content = curl_exec($ch);
    curl_close($ch);

    preg_match("/<a href=\"\(.*?)\">(.*?)<\/a>/is",$content ,$ok);

    return $ok
}

$content = get_download('http://google.ru/') ;

var_dump($content) ;

так же у Вас в функции с получением через курл нет return и curl_close();
И если Вы хотите получить все ссылки со страницы то надо preg_match_all, а не preg_match.

Ну и из поисковиков так просто Вы не спарсите контент. У них защита, сразу в бан попадет IP
 
Последнее редактирование:
PHP:
$ch = curl_init($url); //!!!
//Или
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//Добавим заголовки
$header = [];
$header[] = "Accept-Encoding: gzip,deflate";
//Добавим реферер. В заголовок)) Куда же ещё))
$header[] = 'Referer: Мы подошли из за угла)))';
//Разбавим юзерагенотом))
//Можно в заголовке, лень писать, а можно так
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9");
//А впрочем, вот так в заголовок. Только дублировать не надо там и там
$header[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.8.1.9";
//для $header[] = "Accept-Encoding: gzip,deflate";
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
// для всего остального))
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
//Ну и куда же без
/* время, в течении которого курл пытается подключится к серверу */
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6);
/* время на передачу самого запроса */
curl_setopt($ch, CURLOPT_TIMEOUT,  6);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
Остальное вроде у тебя всё есть))
А ну да)) Правильно заметили))
Не хватает curl_close($ch);
После $result = curl_exec($ch); )))
Что то я сегодня добрый))
Готовую функцию не даю, но теперь всё что нужно у тебя есть))
Собери в кучу)) А то что подумать при этом придётся, так это хорошо))
 
Последнее редактирование:
Ребяты, все заголовки у меня есть, я кинул часть кода чтоб не делать портянок.
Попробую еще раз объяснить.
Я пишу задолбался по несколько раз делать вызовы курлом.
Тоесть у меня курл парсит морду, берет ссылку и парсит страницу


примерно так будет двумя вызовами курла.
Код:
<?php
#Парсим морду
$links="yandex.ru";
  $ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_URL, "$links");

$content = curl_exec($ch);
# выдираем одну ссылку
preg_match("/<a href=\"\(.*?)\">(.*?)<\/a>/is",$content,$ok);
  var_dump($ok) ;
#Ссылку получили  в $link_full.   Пример   yandex.ru/text_full_news.html
$link_full=$ok[1];
#Парсим  ссылку  yandex.ru/text_full_news.html    полученную из первого скрипта
    $ch2 = curl_init();
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch2, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch2, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch2, CURLOPT_URL, "$link_ful");
$content_full = curl_exec($ch2);

# выдираем Текст
preg_match("/<a href=\"\(.*?)\">(.*?)<\/a>/is",$content_full,$okf);
  var_dump($okf) ;
curl_close($ch);
curl_close($ch2);
 
Я не умею работать с функциями, ну никак не понимаю я их.

Сделать скрипт я могу, но без функций.

Хочется через функцию.


Вот я сделал через функцию

PHP:
<?php

  function get_download($links){
  $ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_URL, "$links");
echo $content = curl_exec($ch);

         }


$content1 = get_download('http://yandex.ru/') ;
$content2 = get_download('http://xit.ru/') ;
?>


Мне надо получить данные по каждой ссылке.

Но я получаю
в echo $content = curl_exec($ch);

сразу из двух ссылок контент


а надо разные переменные для каждой ссылки.
И далее в регулярки их сунуть.

А мне надо чтоб было

echo $content1 = get_download('Для просмотра ссылки Войди или Зарегистрируйся') ;
echo $content2 = get_download('Для просмотра ссылки Войди или Зарегистрируйся') ;
 
Последнее редактирование:
Тебя спасёт мультикурл (для поисковых систем через прокси). Иначе слишком долго всё.
Даже из фришных прокси можно кое что выжать.
Наработками не поделюсь (и за деньги тоже). И в инете такого не найдёшь. Точнее - практически не найдёшь. Попадается кое что, но это кое что может быть полезно только тем, кто уже имеет знания и умеет их применить. А остальное такое гавно, что не стоит внимания не то что профи, но даже новичков.
Но новички то этого не знают и принимая это за аксиому, начинают что то на этой основе лепить. Попутно приобретая знания.
В общем в нужную сторону я тебя пнул.
Может другие посоветуют библиотеку для мультикурла - я нет, у меня свой самопис.
 
Да я просто хотел сделать функцию, закинуть ее в отдельный файл и работать с ней.


Например вот так я могу вызвать две не зависимые страницы, и вывести в двух разных переменных


$min=file_get_contents("yandex.ru") ;
$max=file_get_contents("google.ru") ;
# Ниже в коде выводим в браузер
echo $min;
echo $max;


как сделать тоже самое но используя file_get_contents один раз?

На сколько я знаю можно через фунцию, но как не понимаю.
 
как сделать тоже самое но используя file_get_contents один раз?
Никак. Одна страница - один вызов file_get_contents
И даже если напишешь функцию для curl, ничего не изменится.
1 страница - 1 вызов функции.
Мультикурл - написал выше.
Т.е, одновременный запрос к куче страниц, по мере выполнения запросов - их обработка
 
Кажись до петрил.

Не хватало return


вот что мне надо.
<?php
function get_download($link){
$min=file_get_contents($link) ;
return $min;
}

echo $content2 = get_download('Для просмотра ссылки Войди или Зарегистрируйся') ;
echo $content = get_download('Для просмотра ссылки Войди или Зарегистрируйся') ;

?>



Для просмотра ссылки Войди или Зарегистрируйся мне надо было разные ссылки загнать в один код который тянул бы разный контент.


Спасибо что вы помогали.
 
У тебя как было два вызова file_get_contents так и осталось)))
И да file_get_contents тоже функция, только твоя пользовательская, а file_get_contents нет))
И да. Смысла в обёртывании file_get_contents своей функцией, не внося дополнительного функционала, никакого нет.
Подскажу даже как сократить код))
PHP:
function get_download($link){
    return file_get_contents($link);
}
Ну и логическим завершением будет отказаться от get_download и оставить один file_get_contents))
UP. Блин)) Перед кем я распинаюсь, думал новичёк - 2006!!! год регистрации!!!
Только время своё потратил(( Не в коня корм.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху