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 ($response) return 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);
	//Set curl to return the data instead of printing it to the browser.
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        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″>\</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:password@mydomain.com: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);