Все ленты — последние статьи

FTP загрузка с помощью cURL — простой код

FTP загрузка с помощью cURL

PHP имеет библиотеку для работы с FTP, но вы также можете использовать этот пример, который основан на использовании cURL для загрузки файлов на FTP сервер. А вот собственно пример:

 

// путь к папке на сервере
$file = fopen("/path/to/file""r");
// url для доступа
$url = "ftp://username:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.:21/path/to/new/file";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// загрузка опций
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file"));
// настройка для режима ASCII (например для текстовых файлов)
curl_setopt($ch, CURLOPT_FTPASCII, 1);
$output = curl_exec($ch);
curl_close($ch);

Вот 8 примеров работы с cURL на PHP. Надеюсь, они были полезны для вас. Если имеете что-то дополнить, пишите в комментарии к статье.

Получение последнего Twitter статуса / проверка на дружбу между двумя пользователями

Получение последнего Twitter статуса

Используя PHP и cURL, очень просто получить последний статуй из Твиттера конкретного пользователя. Давайте посмотрим пример:

 

function get_status($twitter_id$hyperlinks = true) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/$twitter_id.xml?count=1");
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    $src = curl_exec($c);
    curl_close($c);
    preg_match('/<text>(.*)<\/text>/'$src$m);
    $status = htmlentities($m[1]);
    if$hyperlinks ) $status = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]"'<a href="/%5C%22%5C%5C0%5C%22">\\0</a>'$status);
    return($status);
}

Эта функция еще проще в использовании:

 

echo get_status('sitearchitector');

Twitter: проверка на дружбу между двумя пользователями

Если вы хотите узнать, наследует ли вас конкретный пользователь в Твиттере, то вам необходимо использовать Twitter API. Этот пример кода возвратит true, если два определенных пользователя (строка 18 и 19) дружат. В ином случае, возвратит false.

 

function make_request($url) {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
}
/* gets the match */
function get_match($regex,$content) {
        preg_match($regex,$content,$matches);
        return $matches[1];
}
/* persons to test */
$person1 = 'sitearchitector';
$person2 = 'catswhocode';
/* send request to twitter */
$url = 'https://api.twitter.com/1/friendships/exist';
$format = 'xml';
/* check */
$persons12 = make_request($url.'.'.$format.'?user_a='.$person1.'&user_b='.$person2);
$result = get_match('/<friends>(.*)<\/friends>/isU',$persons12);
echo $result// returns "true" or "false"

cURL аналог функции file_get_contents()

cURL аналог функции file_get_contents()

Функция file_get_contents(), очень удобная, но к несчастью отключена большинством хостингов. Используя cURL, мы можем написать аналог этой функции.

 

function file_get_contents_curl($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
        curl_setopt($ch, CURLOPT_URL, $url);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
}

CURL примеры: 8 изумительных примеров cURL в PHP

реклама

cURL, и его PHP расширение libcURL, очень практичный инструмент для симулирования браузера, заполнения форм или входа на веб сервисы. cURL позволяет работать с сервисами на расстоянии. Например, автоматически получать данные, которые доступны только после входа в аккаунт веб сервиса. Сегодня мы увидим 8 изумительных примеров работы с cURL в PHP.

Проверка сайта на доступность

Как узнать, доступен ли определенный сайт? На помощь придет cURL. Этот скрипт можно использовать по расписанию CRON, для мониторинга за вашими сайтами.

Это пример, вы можете автоматизировать прописывание URL в 3 строке скрипта. Очень простой и полезный скрипт для мониторинга за сайтами.

 

<?php
 
       if (isDomainAvailible('http://sitear.ru'))
       {
               echo "Домен доступен, пример работает!";
       }
       else
       {
               echo "Упс, домен не доступен.";
       }
 
       //возвращает true, если домен доступен, false если нет
       function isDomainAvailible($domain)
       {
               //проверка на валидность урла
               if(!filter_var($domain, FILTER_VALIDATE_URL))
               {
                       return false;
               }
 
               //инициализация curl
               $curlInit = curl_init($domain);
               curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
               curl_setopt($curlInit,CURLOPT_HEADER,true);
               curl_setopt($curlInit,CURLOPT_NOBODY,true);
               curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
 
               //получение ответа
               $response = curl_exec($curlInit);
 
               curl_close($curlInit);
 
               if ($responsereturn true;
 
               return false;
       }
?>

 

cURL аналог функции file_get_contents()

Функция file_get_contents(), очень удобная, но к несчастью отключена большинством хостингов. Используя cURL, мы можем написать аналог этой функции.

 

function file_get_contents_curl($url) {
        $ch = curl_init();
 
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
        curl_setopt($ch, CURLOPT_URL, $url);
 
        $data = curl_exec($ch);
        curl_close($ch);
 
        return $data;
}

 

Получение последнего Twitter статуса

Используя PHP и cURL, очень просто получить последний статуй из Твиттера конкретного пользователя. Давайте посмотрим пример:

 

function get_status($twitter_id$hyperlinks = true) {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/$twitter_id.xml?count=1");
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    $src = curl_exec($c);
    curl_close($c);
    preg_match('/<text>(.*)<\/text>/'$src$m);
    $status = htmlentities($m[1]);
    if$hyperlinks ) $status = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]"'<a href="/%5C%22%5C%5C0%5C%22">\\0</a>'$status);
    return($status);
}

 

Эта функция еще проще в использовании:

 

echo get_status('sitearchitector');

 

Twitter: проверка на дружбу между двумя пользователями

Если вы хотите узнать, наследует ли вас конкретный пользователь в Твиттере, то вам необходимо использовать Twitter API. Этот пример кода возвратит true, если два определенных пользователя (строка 18 и 19) дружат. В ином случае, возвратит false.

 

function make_request($url) {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
}
 
/* gets the match */
function get_match($regex,$content) {
        preg_match($regex,$content,$matches);
        return $matches[1];
}
 
/* persons to test */
$person1 = 'sitearchitector';
$person2 = 'catswhocode';
 
/* send request to twitter */
$url = 'https://api.twitter.com/1/friendships/exist';
$format = 'xml';
 
/* check */
$persons12 = make_request($url.'.'.$format.'?user_a='.$person1.'&user_b='.$person2);
$result = get_match('/<friends>(.*)<\/friends>/isU',$persons12);
echo $result// returns "true" or "false"

 

Пример сохранения картинок со страницы с помощью cURL

Ниже несколько функций, которые очень удобны: просто дайте скрипту url страницы и он сохранит все картинки со страницы на ваш сервер.

 

function getImages($html) {
    $matches = array();
    $regex = '~http://somedomain.com/images/(.*?)\.jpg~i';
    preg_match_all($regex$html$matches);
    foreach ($matches[1] as $img) {
        saveImg($img);
    }
}
 
function saveImg($name) {
    $url = 'http://somedomain.com/images/'.$name.'.jpg';
    $data = get_data($url);
    file_put_contents('photos/'.$name.'.jpg'$data);
}
 
$i = 1;
$l = 101;
 
while ($i < $l) {
    $html = get_data('http://somedomain.com/id/'.$i.'/');
    getImages($html);
    $i += 1;
}

 

Конвертация курса валют с помощью cURL и Google

Конвертировать валюты бывает сложно, необходимо знать хорошие источники для получения данных, потом умножать и так далее. Но с помощью Google и cURL, мы можем реализовать не плохой конвертор валют. Функция currency() принимает 3 параметра: текущая валюта, в которую будем переводить, сумма.

 

function currency($from_Currency,$to_Currency,$amount) {
    $amount = urlencode($amount);
    $from_Currency = urlencode($from_Currency);
    $to_Currency = urlencode($to_Currency);
    $url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency";
    $ch = curl_init();
    $timeout = 0;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,  CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $rawdata = curl_exec($ch);
    curl_close($ch);
    $data = explode('"'$rawdata);
    $data = explode(' '$data['3']);
    $var = $data['0'];
    return round($var,2);
}

 

Пример получения размера файла с помощью cURL

Этот пример будет удобным, для тех, кто хочет узнать размер удаленного файла или веб страницы. Функция ниже принимает 3 параметра: URL, в случае паролированой страницы, имя пользователя и пароль.

 

function remote_filesize($url$user = ""$pw = ""){
    ob_start();
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
 
    if(!empty($user) && !empty($pw))
    {
        $headers = array('Authorization: Basic ' .  base64_encode("$user:$pw"));
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
 
    $ok = curl_exec($ch);
    curl_close($ch);
    $head = ob_get_contents();
    ob_end_clean();
 
    $regex = '/Content-Length:\s([0-9].+?)\s/';
    $count = preg_match($regex$head$matches);
 
    return isset($matches[1]) ? $matches[1] : "unknown";
}

 

FTP загрузка с помощью cURL

PHP имеет библиотеку для работы с FTP, но вы также можете использовать этот пример, который основан на использовании cURL для загрузки файлов на FTP сервер. А вот собственно пример:

 

// путь к папке на сервере
$file = fopen("/path/to/file""r");
 
// url для доступа
$url = "ftp://username:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.:21/path/to/new/file";
 
$ch = curl_init();
 
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
// загрузка опций
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file"));
 
// настройка для режима ASCII (например для текстовых файлов)
curl_setopt($ch, CURLOPT_FTPASCII, 1);
 
$output = curl_exec($ch);
curl_close($ch);

 

Вот 8 примеров работы с cURL на PHP. Надеюсь, они были полезны для вас. Если имеете что-то дополнить, пишите в комментарии к статье.

 


Дальше: Горизонтальное меню на CSS

PHP парсинг HTML, с помощью simple HTML DOM

реклама

Парсинг html с помощью php библиотеки simple html domЕсли вам необходимо сделать парсинг HTML документа, регулярные выражения не наилучший способ для этого. К тому же их написание, трудоемкий процесс, и они уменьшают скорость работы PHP приложения. В этой статье, вы узнаете, как использовать свободный парсер HTML, для чтения, изменения, извлечения некоторых DOM элементов из HTML страниц. Причем, HTML ресурсом может быть внешний источник. То есть адрес HTML страницы на другом домене. Используя, как пример, сайт sitear.ru, вы узнаете, как получить и вывести список всех опубликованных материалов на главной странице сайта. Другими словами, вы будете делать то, что вам необходимо, парсинг HTML с помощью PHP. В данном случае под PHP, подразумевается библиотека simple HTML DOM.

Просто следуйте всем шагам статьи, и узнаете много нового и полезного для себя!

Шаг 1 — Подготовка

Для начала, вам необходимо  скачать копию simple HTML dom библиотеки. Скачивание свободно.

СКАЧАТЬ Simple HTML DOM

В архиве вы найдете несколько файлов, но нам необходим только один — simple_html_dom.php. Все остальные, это примеры и документация.

Шаг 2 — Основы HTML парсинга

Эта библиотека, очень проста в использовании, но все же, необходимо разобрать некоторые основы, перед тем как ее использовать.

Загрузка HTML

 

$html = new simple_html_dom();
 
// Load from a string
 
$html->load('<html><body><p>Hello World!</p><p>We're here</p></body></html>');  
 
// Load a file  
 
$html->load_file('http://sitear.ru/');

 

Все просто, вы можете создать объект, загружая HTML из строки. Или, загрузить HTML код из файла. Загрузить файл вы можете по URL адресу, или с вашей локальной файловой системы (сервера).

Важно помнить: Метод load_file(), работает на использовании PHP функции file_get_contents. Если в вашем файле php.ini, параметр allow_url_fopen не установлен как true, вы не сможете получать HTML файлы по удаленному адресу. Но, вы сможете загрузить эти файлы, используя библиотеку CURL. Далее, прочитать содержимое, используя метод load().

Получение доступа к HTML DOM объектам

PHP парсинг HTML

Предположим у нас уже есть DOM объект, структурой, как на картинке выше. Вы можете начать работать с ним, используя метод find(), и создавая коллекции. Коллекции — это группы объектов, найденные с помощью селекторов — синтаксис в чем-то схож с jQuery.

 

<html>   
 
<body>   
 
    <p>Hello World!</p>   
 
    <p>We're Here.</p>   
 
</body>   
 
</html>

 

Используя этот пример HTML кода, мы узнаем, как получить доступ к информации заключенной во втором параграфе (p). Также, мы изменим полученную информацию и выведем результат на дисплей.

 

// создание объекта парсера и получение HTML   
 
include('simple_html_dom.php');   
 
$html = new simple_html_dom();   
 
$html->load("<html><body><p>Hello World!</p><p>We're here</p></body></html>"); 
 
// получение массивов параграфов   
 
$element = $html->find("p"); 
 
// изменение информации внутри параграфа
 
$element[1]->innertext .= and we're here to stay."
 
// вывод
 
echo $html->save();
 

 

Как видите реализовать PHP парсинг документа HTML, очень даже просто, используя simple HTML DOM библиотеку. В принципе, в этом куске PHP кода, все можно понять интуитивно, но если вы в чем-то сомневаетесь, мы рассмотрим код.

Линия 2-4: подключаем библиотеку, создаем объект класса и загружаем HTML код из строки.

Линия 7: С помощью данной строки, находим все <p>теги в HTML коде, и сохраняем в переменной в виде массива. Первый параграф будет иметь индекс 0, остальные параграфы будут индексированы соответственно 1,2,3…

Линия 10: Получаем содержимое второго параграфа в нашей коллекции. Его индекс будет 1. Также мы вносим изменения в текст с помощью атрибута innertext. Атрибут innertext, меняет все содержимое внутри указанного тега. Также мы сможем  изменить сам тег с помощью атрибута outertext.

Давайте добавим еще одну строку PHP кода, с помощью которой мы назначим класс стиля нашему параграфу.

 

$element[1]->class = "class_name";   
 
echo $html->save();

 

Результатом выполнения нашего кода будет следующий HTML документ:

 

<html>   
 
<body>   
 
    <p>Hello World!</p>   
 
    <p class="class_name">We're here and we're here to stay.</p>   
 
</body>   
 
</html>

 

Другие селекторы

Ниже приведены другие примеры селекторов. Если вы использовали jQuery, то в библиотеке simple html dom синтаксис немножко схожий.

 

// получить первый элемент с id="foo"   
 
$single = $html->find('#foo', 0);   
 
// получает при парсинге все элементы с классом class="foo"   
 
$collection = $html->find('.foo'); 
 
// получает все теги <a> при парсинге htmlдокумента  
 
$collection = $html->find('a'); 
 
// получает все теги <a>, которые помещены в тег <h1>
 
$collection = $html->find('h1 a');  
 
// получает все изображения с title='himom'   
 
$collection = $html->find('img[title=himom]');

 

Использование первого селектора при php парсинге html документа, очень простое и понятное. Его уникальность в том что он возвращает только один html элемент, в отличии от других, которые возвращают массив (коллекцию). Вторым параметром (0), мы указываем, что нам необходим только первый элемент нашей коллекции. Надеюсь, вам понятны все варианты селекторов библиотеки simple HTML DOM, если вы чего-то не поняли, попробуйте метод научного эксперимента. Если даже он не помог, обратитесь в комментарии к статье.

Документация библиотеки simple HTML DOM

Полнейшую документацию по использованию библиотеки simple HTML DOM вы сможете найти по этому адресу:

http://simplehtmldom.sourceforge.net/manual.htm

Просто предоставлю вам иллюстрацию, которая показывает возможные свойства выбранного HTML DOM элемента.

Свойства HTML DOM элемента

Шаг 3 — Реальный пример PHP парсинга HTML документа

Для примера парсинга, и приведения HTML DOM библиотеки в действие, мы напишем грабер материалов на сайте sitear.ru. Далее мы выведем все статьи в виде списка, в котором будут указаны названия статей. При написании граберов, помните, кража контента преследуется законом! Но не в случае, когда на странице стоит активная ссылка на исходный документ.

Sitear парсинг html

 

include('simple_html_dom.php'); 
 
$articles = array();
 
getArticles('http://sitear.ru/');

 

Начинаем с подключения библиотеки, и вызова функции getArticles, которая будет парсить HTML документы соответственно адресу страницы, которая передается в качестве параметра функции.

Также мы указываем глобальный массив, в котором будет, хранится вся информация о статьях. Перед тем как начать парсинг HTML документа, давайте посмотрим, как он выглядит.

 

<div class="title_material">
 
<div class="name_material"><a href="…">Название материала</a></div>
 
<div class="views_material">Просмотров: <b>35</b></div>
 
</div>
 
<div class="description"> Описание статьи…</div>

 

Это базовый шаблон данной страницы. При написании парсера html, нужно тщательно исследовать документ, так как и комментарии, типа <!--comment-->, это тоже потомки. Другими словами, в глазах библиотеки simple HTML DOM, это элементы, которые равноценны другим тегам страницы.

Шаг 4 — Пишем основную функцию PHP парсера HTML

 

function getArticles($page) {   
 
    global $articles;
 
    $html = new simple_html_dom();   
 
    $html->load_file($page);  
 
    // … далее будет …   
 
}
 

 

Вначале функции, мы вызываем наш глобальный массив, который мы указали ранее. Создаем новый объект simple_html_dom. Далее загружаем страницу, которую будем парсить.

Шаг 5 — Находим нужную информацию

 

$items = $html->find('div[class=name_material]'); 
 
foreach($items as $names
 
{
 
$articles[] = array($post->children(0)->plaintext);   
 
}

 

В этом куске кода все предельно просто, мы находим все div с class=name_material. Далее читаем коллекцию элементов и выбираем названия материалов. Все материалы будут сохранены в массиве в данном виде:

 

$articles[0] = "Имя материала 1";   
 
$articles[1] = "Имя материала 2";
 

 

Шаг 6 — Выводим результат парсинга

Для начала, мы установим некоторые стили, для красоты выводимой информации, которую получили при парсинге.

 

.item 
 
{   
 
padding:10px; 
 
color:#600;   
 
font:bold 40px/38px helvetica, verdana, sans-serif;    
 
}

 

Далее, с помощью нескольких строк PHP кода, мы выведем информацию.

 

<?php   
 
    foreach($articles as $item) {   
 
        echo "<div class='item'>";   
 
        echo $item[0];
 
echo "</div>";   
 
    }   
 
?>

 

Результатом выполнения данного скрипта, будет список названий статей на сайте sitear.ru.

Заключение

Вот мы и научились php парсингу html документов. Помните, что парсинг это долгий процесс. Одна страница может парситься около одной секунды. Если вы будете делать парсинг большого числа HTML документов, ваш сервер может перервать работу скрипта в связи с истечением время отведенного для выполнения. Это можно исправить с помощью функции set_time_limit(240); 240 — это время в секундах, отведенное на выполнение скрипта.

Эта статья предназначена для формирования основных понятий парсинга HTML страницы с помощью PHP. Существуют и другие библиотеки и методы парсинга. Если вы знаете таковые, поделитесь в комментариях. Буду рад, узнать какими инструментами и методами html парсинга пользуетесь вы. 

 


Дальше: Читаем ID3 теги mp3 с помощью PHP