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

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

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

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

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

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

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

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

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

Эта функция еще проще в использовании:
echo get_status('sitearchitector');

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

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

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

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

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

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

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

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

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

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

Функция ресайза и кропа изображений на PHP

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

Код функции:

 

Теперь можно вызвать функцию например так:

Важное:

  • Прозрачность гифа будет утеряна.
  • В папке images надо создать папку resized.
  • Из-за кэширования уже созданных картинок, функция не будет перегружать сервер.

Эта функция есть небольшая модификация этой взятой с форума по NetCat.

Отправка Google Формы с сайта разными способами

Сейчас люди частенько юзают сервис google forms для любых форм на сайте. Поэтому часто возникает вопрос о встраивании Google формы на сайт, её стилизации и обработки ошибок в стиле сайта, поэтому мы разберем все это дело в текущей статье.

Зачем вообще использовать сервис гугл форм:

  • Формы создавать просто и быстро;
  • Результаты форм сразу сохраняются в таблице на облачном гугл диске;
  • Уведомление на email о заполнении вам так же приходит;
  • Это бесплатно.

Теперь к делу:

Создание формы:

Итак едем вот сюда жмем на всякие кнопки — создаем форму с нужными полями, там поддерживаются всякие разные типы полей. Я взял несколько стандартных типов полей и получилась вот такая форма.

Теперь будем втыкать форму на сайт.

Способ 1: iframe

Гугл предложит нам самый простой и быстрый способ встраивания — через iframe. Так что просто втыкаем айфрейм на страницу.

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

Способ 2: собственный html + jQuery + ajax

Инспектируем форму и достаем значения атрибутов name у полей и атрибут action у формы:

 

Отправка Google Формы с сайта разными способами

Создаем собственную форму и вставляем полям такие же атрибуты name как и у формы в айфрейме:

 

Теперь отправим форму аяксом с помощью jQuery:

Этот способ подойдет, если ничего важного в форме нет, и нет опасности что вас заспамят.

Способ 3: собственный html + jQuery + ajax + php

Теперь сделаем собственную форму, отправим её аяксом к нам на сервер, там все проверим и обработаем, и отправим в гугл уже на стороне сервера.
Делаем форму, нэймы полей уже не важны, присвоим нужные нэймы потом в php обработчике.

Вешаем на неё событие:

И пишем php-обработку под это дело:

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

 

ДЕМО.

Примeр ajax отпpавки фoрмы на еmаil с пoмoщью jQuеry и phр

Пoкa писaть нe прo чтo, нaпишу прo примeр oтпрaвки фoрмы нa email ajax’oм и прилoжу примeр php-oбрaбoтчикa для нee. Пo сути тут ничeгo слoжнoгo, нo чтoбы сaмoму пoстoяннo нe искaть примeр — oстaвлю eгo тут.
Знaчит, aлгoритм слeдующий: зaпoлняeм фoрму, eё oтпрaвку пeрeхвaтывaeм jQuery скриптoм, прoвeряeм и oбрaбaтывaeм дaнныe, oтпрaвляeм бeз пeрeзaгрузки стрaницы в oбрaбoтчик, тaм всe eщe рaз прoвeряeм, oтпрaвляeм нa email, вoзврaщaeм oтвeт, принимaeм eгo и пишeм, чтo всe oк(или нe oк), прoфит.

oбычнaя html фoрмa

Тут всe прoстo и пoнятнo, aтрибут action пустoй ибo в скриптe укaжeм.

Сoбытиe error лучшe убрaть пoслe тeстирoвaния для лучшeй бeзoпaснoсти.

Тут вся мaгия в echo json_encode($json), т.e. вывeсти прeoбрaзoвaнный в json фoрмaт мaссив кoтoрый принимaeт нaш jQuery скрипт и вывoдит рeзультaт.

Супeр клaсс oтпрaвки TEmail и функцию mime_header_encode я дaвнo спeр нa кaкoм-тo блoгe, сeйчaс ужe нe нaшeл нa кaкoм =(, нe зaмaрaчивaйтeсь пo пoвoду этoгo клaссa и функции — вы мoжeтe испoльзoвaть и oбычный вaриaнт mail(), нo я всeгдa испoльзую eгo и прoблeм с кoдирoвкaми никoгдa нe былo.

ДeМo

Работа с API облачного хранилища copy.com

Регистрация и подготовка:

  • Едем сюда https://www.copy.com/developer/signup и регистрируемся как разработчик.
  • Потом здесь регистрируем наше приложение и ставим все галочки. Получаем Consumer key и Consumer secret и запоминаем их.
  • Качаем мастер архив отсюда и заливаем папку на хостинг, в файле config.php изменяем значение параметра $callbackURL на верный путь до файла get_access_token.php.
  • Заходим в эту папочку и вписываем на странице Set Consumer Key/Secret наши запомненные ранее данные
  • Теперь едем в Default App Permissions и внизу жмем Manually continue to Copy Auth page на следующей странице жмем Allow — нас возвратят обратно и вручат Access Token и Access Token Secret

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

На этом танцы с бубном завершены и можно приступать к самой работе.

Закачивание и изменение:

Тут соль в том, что типа есть форма, в которую подгружают файл и пишут его название, а он попадает в наше облачное хранилище:

 

Удаление

Вот и все, вроде совсем не сложно

Online_Icon

Часто на сайтах можно видите фразу, сейчас данный сайт просматривает столько-то человек, или даже список зарегистрированных посетителей, находящихся в данным момент на сайте. Обычно такой сервис называют «Список посетителей OnLine». Учитывая, что у посетителя может динамически меняться IP-адрес, или наоборот несколько посетителей могут выходить в Интернет из под одного IP-адреса, для подсчёта уникальных посетителей на сайте прибегают к сессиям. Создадим таблицу session в которой будем хранить уникальные идентификаторы сессии (SID), назначенные посетителям.

Таблица session

Таблица имеет три поля — id_session, поле, куда помещается SID сессии, поле putdate, для того, хранения времени обращения посетителя к страницам сайта и поле user, которое нами использоваться не будет, но в котором можно хранить имя пользователя, если у вас имеется система авторизации и вы хотите различать гостей и авторизованных пользователей. Предполагается, что имя пользователя помещается в элемент суперглобального массива $_SESSION[‘user’] — если вас интересует авторизация на PHP, с нейм можно ознакомиться по ссылке

В начало каждой страницы сайта, которая будет участвовать в регистрации посетителей следует при помощи конструкции require_once() поместить следующий код.

Скрипт регистрации посетителей в таблице session

Протокол HTTP не является сессионным протоколом, поэтому мы можем фиксировать только обращения посетителей к страницам сайта — сколько после этого посетитель будет читать страницу — одному богу известно — получить эту информацию мы не сможем. Поэтому мы будем считать, что если посетиель не обращается к страницам сайта более 20 минут — он ушёл и его можно удалять из таблицы session.

Теперь нам остаётся только вывести содержимое таблицы session или подсчитать число посетителей в ней.

Выводим содержимое таблицы session

Для установки соединения с базой данных, нам потребуется конфигурационный файл config.php, следующего содержания.

Конфигурационный файл config.php

Скрипт передачи файлов методом POST предоставлен Арсеньевым Алексеем (больше известным на нашем форуме как JIEXA).

Передача данных методом POST, является интереснейшей задачей: часто требуется подделка имени пользовательского агента (USER_AGENT), реферера (адреса предыдущей страницы), cookie и т.п.

уравнение 3 неизвестных

Скрипт предназначен для решения системы уравнений с тремя неизвестными по правилу Крамера.

Напоминаем, что если детерминант матрицы равен 0, это означает, что система уравнений линейно зависима и получить единственное решение невозможно.

При решении систем с более чем тремя переменными, следует прибегать к более сложным алогиритмам. Одним из таких алгоритмов является метод Гаусса-Жордана, который часто используют и при ручном вычислении систем линейных уравнений. Ниже приведена возможная реализация для все той же системы с тремя неизвестными, но в отличие от представленного выше скрипта, здесь можно увеличивать количество неизвестных в системе.

Метод Гаусса-Жордана
/****************
4x + 7y + 2z = 34
3x + 1y + 5z = 21
8x + 2y + 6z = 52
****************/
$matrix[0] = array(4, 7, 2);
$matrix[1] = array(3, 1, 5);
$matrix[2] = array(8, 2, 6);
$b[0] = 34;
$b[1] = 21;
$b[2] = 52;
// Решаем уравнение
list(list($x, $y, $z)) = gaussj($matrix, $b);
echo «Решение
«;
echo «X = $x
«;
echo «Y = $y
«;
echo «Z = $z
«;
// Проверка
echo 4 * $x + 7 * $y + 2 * $z;
echo »
«;
echo 3 * $x + 1 * $y + 5 * $z;
echo »
«;
echo 8 * $x + 2 * $y + 6 * $z;
// Решение системы линейных уравнений
// методом Метод Гаусса-Жордана
function gaussj($a, $b)
{
$n = count($a);
for($j = 0; $j < $n; $j++)
{
$ipiv[$j] = 0;
}
for($i = 0; $i < $n; $i++)
{
$big = 0;
for($j = 0; $j < $n; $j++)
{
if($ipiv[$j] != 1)
{
for($k = 0; $k < $n; $k++) { if($ipiv[$k] == 0) { if(abs($a[$j][$k]) >= $big)
{
$big = abs($a[$j][$k]);
$irow = $j;
$icol = $k;
}
}
else if($ipiv[$k] > 1)
{
return «Матрица сингулярна»;
}
}
}
}
$ipiv[$icol] = $ipiv[$icol] + 1;
if ($irow != $icol)
{
for($l = 0; $l < $n; $l++)
{
$dum = $a[$irow][$l];
$a[$irow][$l] = $a[$icol][$l];
$a[$icol][$l] = $dum;
}
$dum = $b[$irow];
$b[$irow] = $b[$icol];
$b[$icol] = $dum;
}
$indxr[$i] = $irow;
$indxc[$i] = $icol;
if($a[$icol][$icol] == 0) return «Матрица сингулярна»;
$pivinv = 1 / $a[$icol][$icol];
$a[$icol][$icol] = 1;
for($l = 0; $l < $n; $l++) $a[$icol][$l] = $a[$icol][$l] * $pivinv;
$b[$icol] = $b[$icol] * $pivinv;
for($ll = 0; $ll < $n; $ll++)
{
if($ll != $icol)
{
$dum = $a[$ll][$icol];
$a[$ll][$icol] = 0;
for($l = 0; $l < $n; $l++) { $a[$ll][$l] = $a[$ll][$l] — $a[$icol][$l] * $dum; } $b[$ll] = $b[$ll] — $b[$icol] * $dum; } } } for($l = $n -1; $l >= 0; $l—)
{
if($indxr[$l] != $indxc[$l])
{
for($k = 1; $k < $n; $k++) { $dum = $a[$k][$indxr[$l]]; $a[$k][$indxr[$l]] = $a[$k][$indxc[$l]]; $a[$k][$indxc[$l]] = $dum; } } } // $b — решение уравнения // $a — обратная матрица return array($b, $a); } ?>
Функция gaussj() принимает два параметра: квадратную матрицу коэффециентов $a и вектор свободных членов $b. На выходе также возвращаются два решения: $b содержит значения переменных, а $a — обратную матрицу. Если задача состоит только в нахождении обратной матрицы можно воспользоваться решением из темы Как найти обратную матрицу?

Класс для генерации CSV-файла на PHP

CSV-файлы очень популярны для представления электронных таблиц — файл является текстовым, ячейки таблицы в нём разделяются точкой с запятой. Представляем вашему вниманию класс, разработанный Кондраковым Александром Владимировичем, позволяющий генерировать CSV-файл из массива PHP.

Генерация CSV-файла

Перевод русского текста в транслит

Скрипт переводит русский текст в транслит (предоставлен Дрыгой Андреем (anddriga@yandex.ru)).

Перевод русского текста в транслит