Полезные примеры использования cURL с PHP

cURL и его расширение для PHP Libcurl, очень полезный инструмент для таких задач, как моделирование веб-браузера, отправка  формы или авторизация в веб-сервисах. В этой статье я покажу вам некоторые полезные вещи, которые вы можете делать с помощью PHP и cURL.

Проверяем доступность нужного нам веб-сайта

Хотите знать, доступен ли нужный вам веб-сайт? cURL может вам помочь в этом. Этот скрипт можно использовать для мониторинга своих веб-сайтов.

Не забудьте изменить URL веб-сайта на тот который вы хотите проверить, в строке 3. После этого, просто выполните этот скрипт и это позволит вам узнать о доступности сайта.

<?php

 if (isDomainAvailible('http://www.webmasters.by'))
 {
 echo "Сайт доступен!";
 }
 else
 {
 echo "Упс, что то не открывается.";
 }

 //возвращает true, если домен доступен, в противном случае false
 function isDomainAvailible($domain)
 {
 //проверяем валидный ли url
 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, мы можем написать аналогичную функцию, которая работает точно так же, как и file_get_contents().

function file_get_contents_curl($url) {
 $ch = curl_init();

 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //чтобы cURL возвращал данные, а не выводил в браузер.
 curl_setopt($ch, CURLOPT_URL, $url);

 $data = curl_exec($ch);
 curl_close($ch);

 return $data;
}

Получаем последний статус в Твиттере

Используя 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('twitter_id');

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;
}

/* получаем соответствие */
function get_match($regex,$content) {
 preg_match($regex,$content,$matches);
 return $matches[1];
}

/* персоны для теста */
$person1 = 'phpsnippets';
$person2 = 'catswhocode';

/* посылаем запрос в twitter */
$url = 'https://api.twitter.com/1/friendships/exist';
$format = 'xml';

/* проверяем */
$persons12 = make_request($url.'.'.$format.'?user_a='.$person1.'&amp;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, чтобы получить самые последние данные. Функция 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&amp;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) &amp;&amp; !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:<span id="cloak2d9fea26438d97c153e765f800d6511a">Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.</span><script type='text/javascript'>
        document.getElementById('cloak2d9fea26438d97c153e765f800d6511a').innerHTML = '';
        var prefix = '&#109;a' + 'i&#108;' + '&#116;o';
        var path = 'hr' + 'ef' + '=';
        var addy2d9fea26438d97c153e765f800d6511a = 'p&#97;ssw&#111;rd' + '&#64;';
        addy2d9fea26438d97c153e765f800d6511a = addy2d9fea26438d97c153e765f800d6511a + 'myd&#111;m&#97;&#105;n' + '&#46;' + 'c&#111;m';
        var addy_text2d9fea26438d97c153e765f800d6511a = 'p&#97;ssw&#111;rd' + '&#64;' + 'myd&#111;m&#97;&#105;n' + '&#46;' + 'c&#111;m';document.getElementById('cloak2d9fea26438d97c153e765f800d6511a').innerHTML += '<a ' + path + '\'' + prefix + ':' + addy2d9fea26438d97c153e765f800d6511a + '\'>'+addy_text2d9fea26438d97c153e765f800d6511a+'<\/a>';
    </script>: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);

Я надеюсь эти примеры будут полезны вам.

Перевод статьи с catswhocode.com


Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом

You have no rights to post comments