Веб-программирование

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

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

Полезные примеры использования cURL с PHP
Поделиться в соцсетях:

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

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

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

<?php
if (isDomainAvailible('https://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: 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);

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

Новый комментарий

Имя:
Для редактирования комментария осталось 10 минут
Комментарии отсутствуют