Апр 092017
 

В PHP CURL POST руководство, Мы будем объяснять как использовать HTTP GET / POST запросы с PHP CURL library.

В данной статье ниже мы приводим примеры работы с данным протоколом

1) Отправить HTTP GET Запрос с CURL

2) Отправить HTTP POST Запрос с CURL

3) Отправить Random User-Agent в Запросе

4) Обработка перенаправление redirects ( HTTP 301, 302 )

5) Ошибки обработки ( Handle Errors ).

Почему мы используем PHP CURL ?

Отправить HTTP GET запрос, простой способ использовать метод file_get_contents().

file_get_contents('http://it.w-develop.com')

Но для использования POST запроса и использовать Обработчик ошибок не так просто в месте с командой file_get_contents().

Отправить HTTP запрос очень просто с PHP CURL. Вам надо выполнить четыре шага для отправки запроса

Шаг 1). Инициализация CURL сессии
Шаг 2). Заполняем options для CURL сессии
curl_setopt( $ch, CURLOPT_URL, "http://it.w-develop.com" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
//curl_setopt( $ch, CURLOPT_HEADER, true ); // Если вы хотите использовать заголовки

CURLOPT_URL -> URL для загружки
CURLOPT_HEADER -> добавляем header/not
CURLOPT_RETURNTRANSFER -> если true, информация вернется как строка, а не выводит ее.

Полный список опций, смотри в документации PHP Documentation.

Шаг 3). Загружаем CURL сессию.
$output=curl_exec($ch);
Шаг 4). Зарываем сессию
curl_close($ch);
Note: Вы можете проверить, включен CURL enabled/not со следующим кодом.
if( is_callable( 'curl_init' ) ){
   echo "Enabled";
} else {
   echo "Not enabled";
}

1.PHP CURL GET Пример
You can use the below code to send GET request.

function httpGet( $url ) {

    $ch = curl_init();  
 
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
//  curl_setopt( $ch, CURLOPT_HEADER, false ); 
 
    $output=curl_exec( $ch );
 
    curl_close( $ch );

    return $output;

}
 
echo httpGet("http://it.w-develop.com");

2.PHP CURL POST Пример
You can use the below code to submit form using PHP CURL.

function httpPost( $url, $params ) {

   $postData = '';
   //create name value pairs seperated by &
   foreach( $params as $k => $v ) {
      $postData .= $k . '='.$v.'&';
   }
   $postData = rtrim( $postData, '&' );
 
   $ch = curl_init();
 
   curl_setopt( $ch, CURLOPT_URL,$url );
   curl_setopt( $ch, CURLOPT_RETURNTRANSFER,true );
   curl_setopt( $ch, CURLOPT_HEADER, false );
   curl_setopt( $ch, CURLOPT_POST, count($postData ) );
   curl_setopt( $ch, CURLOPT_POSTFIELDS, $postData );
 
   $output = curl_exec( $ch );
 
   curl_close( $ch );

   return $output;
 
}

How to use the function:

$params = array(
   "name" => "Ravishanker Kusuma",
   "age" => "32",
   "location" => "India"
);
 
echo httpPost( "http://it.w-develop.com/examples/php/curl-examples/post.php", $params );

3.SEND RANDOM USER-AGENT IN THE REQUESTS
You can use the below function to get Random User-Agent.

function getRandomUserAgent() {
    $userAgents=array(
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)",
        "Opera/9.20 (Windows NT 6.0; U; en)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.50",
        "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02 [en]",
        "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; fr; rv:1.7) Gecko/20040624 Firefox/0.9",
        "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/48 (like Gecko) Safari/48"       
    );
    $random = rand(0,count($userAgents)-1);
 
    return $userAgents[$random];

}

Используется CURLOPT_USERAGENT, Вы можете установить User-Agent string.

curl_setopt( $ch, CURLOPT_USERAGENT, getRandomUserAgent()) ;

4. HANDLE REDIRECTS (HTTP 301,302)
Обрабатывать URL redirects, set CURLOPT_FOLLOWLOCATION to TRUE.Максимальное количество переадресаций можно контролировать, используя CURLOPT_MAXREDIRS.

curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
curl_setopt($ch,CURLOPT_MAXREDIRS,2);//only 2 redirects

5. КАК ОБРАТИТЬ ОШИБКИ CURL
мы можем использовать методы curl_errno(), curl_error(), Чтобы получить последние ошибки для текущего сеанса.
curl_error( $ch ) -> returns error as string
curl_errno( $ch ) -> returns error number

Вы можете использовать приведенный ниже код для обработки ошибок.

function httpGetWithErros( $url ) {

    $ch = curl_init();  
 
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
 
    $output=curl_exec( $ch );
 
    if ( $output === false ) {

        echo "Error Number:" . curl_errno( $ch ) . "
"; echo "Error String:" . curl_error( $ch ); } curl_close($ch); return $output; }

Вывод полного списока ошибок, refer CURL errors

Авг 282013
 

Безопасность в PHP. Проверяем типы переменных.

Известно, что PHP относится к слабо типизированным языкам программирования. Что же это значит? Мы можем проводить различные операции между переменными разного типа, и получать «что-то» на выходе. С одной стороны, это удобно. Строка превращается в целое число, целое число может стать объектом, а объект плавно перейти в массив. Но любой программист при создании сайтов на языке php рано или поздно сталкивается с тем, что во многих случаях типы переменных следует приводить (или, как минимум, проверять перед началом использования).

Примечание: такое строгое отношение к переменным связано с тем, что большинство скриптов на php подвержено нездоровому вниманию злоумышленников с целью подстановки параметров различного типа в строке запроса сайта. Это может привести от генерации ошибки с раскрытием пути, по которому находится файл, вплоть до обхода некоторых ограничений. Например: повышения прав пользователя в ранних версиях WordPress путём передачи имени пользователя как массива, а не строки, в скрипт аутентификации в admin панели, или же подстановки в строку запроса вместо целых чисел (например, id новости) – специально сформированных запросов sql с целью несанкционированного доступа, создание на сайте так называемых sql инъекций.

Так что, по возможности, проверяйте типы переменных перед их использованием или явно приводите их во время программирования на PHP.

Приведём функции, которые будут нам полезны с целью контроля безопасности входных данных:

(string) trim($str) – Принимаемые параметры: $var – строка для удаления пробельных символов и символов разрыва строки. Обрезает символы конца строки и пробельные символы вначале и конце строки, возвращает переменную строкового типа.
(bool) is_string($var) — Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var строкой? Возвращает: true: если является, false: если не является.
(bool) is_numeric($var) – Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var набором цифр ? Возвращает: true: если является, false: если не является.
(bool) is_float($var) — Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var вещественным числом? Возвращает: true: если является, false: если не является.
(bool) is_array($var) — Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var массивом? Возвращает: true: если является, false: если не является.
(bool) is_int($var) — Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var целым числом? Возвращает: true: если является, false: если не является.
(bool) isset($var) – Принимаемые параметры: $var – переменная для проверки. Проверяет, существует ли переменная $var (любой тип данных), если существует, возвращает true, иначе возвращает false.
(bool) is_resource($var) – Принимаемые параметры: $var – переменная для проверки. Является ли переменная $var ресурсом? Возвращает: true: если является, false: если не является.
(bool) empty($var) — Принимаемые параметры: $var – переменная для проверки. Проверяет, пуста ли существующая переменная или нет, возвращаемые значения: true для значений («», 0, 0.0, «0», NULL,FALSE,array()), false в остальных случаях
Пример использования при программировании в PHP скриптах:

Передаем в форму через пост запрос массив данных $user, полученный при регистрации пользователя:

<?php
        $user               = $_POST["user"];
        $sizeof             = sizeof($user);
        $username           = "";
        $password           = "";
        $user_id            = 0;
if(is_array($user) && $sizeof && isset($user["username"]) && isset($user["password"];)){
        $username           = trim($user["username"]);
        $password           = trim($user["password"]);
        $password           = is_int($user["user_id"]) ? $user["user_id"]: 0;
}
?>

Еще один пример использования в PHP скриптах:

Зададим вопрос к базе данных:

<?php
        $query              = "SELECT `news_text` FROM `news` WHERE `news_id`=5";
        $p                  = mysql_query($query);
        if($p && is_resource($p)){
            list($news_text)= mysql_fetch_row($p);
        }
?>

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

Авг 282013
 

Безопасность в PHP. Явное приведение типов.

Операторы прямого приведения данных.

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

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

Примечание автора: операторы не изменяют тип переменной, но делает попытку приведения переменной и возвращает значение соответствующего типа.

$var = (int)$some_var, (integer)$some_var – явное приведение переменной $some_var к целочисленному типу
$var = (float)$some_var, (real)$some_var, (double)$some_var – явное приведение переменной $some_var к вещественному типу
$var = (array)$some_var – явное приведение переменной $some_var к массиву
$var = (string)$some_var – явное приведение переменной $some_var к массиву
$var = (bool)$some_var, (boolean)$some_var – явное приведение переменной $some_var логическому значению (true,false)
$var = (object)$some_var – явное приведение переменной $some_var к объекту
Новшества PHP 5:

(unset)$some_var – присвоение типа NULL, уничтожение переменной, освобождение памяти.
Новшества PHP 5.2.1:

(binary) $some_var – приведение переменной к бинарному представлению.
Примеры использования:

Рассмотрим передачу id статьи через массив GET news.php?id=23

Вариант подготовки параметра для безопасной передачи в запрос к базе данных:

?
1
$news_id = (int)$_GET[«id»];
Еще одной интересной функцией является abs, которую советую применять при фильтрации входных данных для заведомо неотрицательных величин, например уникального идентификатора статьи, который является по умолчанию числом уникальным, положительным, с auto increment:

abs($var) – Принимаемые параметры: $var – переменная целого (или вещественного) типа. Возвращает абсолютное по модулю число: для всех отрицательных величин возвращается положительное, для всех положительных возвращается просто значение переменной

Рассмотрим предыдущий пример в новом ракурсе:

Так как integer может быть как положительным, так и отрицательным целым числом, перепишем предыдущий пример с использованием функции abs:

Вариант подготовки параметра для безопасной передачи в запрос к базе данных:

?
1
$news_id = abs((int)$_GET[«id»]);
Функции явного приведения данных.

(int) intval($var,[$base = 10]) — Принимаемые параметры: $var – переменная для приведения типов. Приводит переменную к целочисленному типу. Возвращает переменную, приведенную к целочисленному типу, в случае с массивом 0 если массив пуст, 1 – если есть элементы, в случае со строкой: если удаётся преобразовать к целому числу – то целое число, или 0 в обратном случае.

$base = основание, десятичная система исчисления по умолчанию.

(float) floatval($var) — Принимаемые параметры: $var – переменная для приведения типов. Приводит переменную к вещественному типу. Возвращает переменную, приведенную к вещественному типу, в случае неудачи возвращает 0.
(bool) settype(&$var, string $type ) — Принимаемые параметры: $var – переменная для приведения типов, $type – к какому типу привести переменную:

«boolean»,»bool» – приведение типа переменной к логическому значению (true, false),
«integer»,»int» – приведение типа переменной к целому значению,
«float»,»double» – приведение типа переменной к вещественному значению,
«string» – приведение типа переменной к строковому значению,
«array» – приведение к массиву,
«object» – приведение типа переменной к объекту,
«null» – приведение типа переменной к типу NULL (освобождение занимаемой памяти).
Производит прямое приведение переменной к значению указанного типа. В случае удачи возвращает true, иначе – false.

Общирный пример практического использования вышеописанных функций при программировании на языке PHP:

Приведём пример безопасного запроса к базе данных с получением id новости из строки запроса:

<?php
$id             = isset($_GET["id"]) ? abs(intval($_GET["id"])) : 0;
If(!empty($id)){
    $q          = "SELECT `news_text` FROM `news` WHERE `news_id`=".$id;
    $p          = mysql_query($q);
    if($p && is_resource($p)){
    list($text) = mysql_fetch_row($p);
    echo $text;
}
}
?>
Авг 282013
 

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

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

При заказе данной услуги, клиенту предоставляется полный контроль над выделенным сервером, что дает возможность вносить любые изменения в его настройки, инсталлировать любое программное обеспечение и, даже, операционную систему. Выделенный сервер является лучшим решением для проектов, которым не достаточно ресурсов виртуального хостинга или VPS/VDS.

К преимуществам данной услуги можно отнести то, что клиенту для работы предоставляется полнофункциональный компьютер со всеми правами администратора. Заказчик может осуществлять полный контроль над всеми процессами, файлами и пользователями в системе. У вас будет выделенный IP-адрес (некоторые хостеры предлагают насколько выделенных IP).

Заказав выделенный сервер клиент получает гарантированную безопасность и изолированность. В стоимость, также, входит техническая поддержка постоянный мониторинг, что обеспечивает круглосуточную, бесперебойную работу компьютера. Данный вид хостинга также предполагает резервное копирование данных сервера, так что при необходимости их можно восстановить.

Выбрав аренду сервера в качестве хостинг площадки вы получаете возможность размещать неограниченное количество сайтов и доменов. При заказе этой услуги вы получаете отдельный компьютер выбранной конфигурации, а соответственно вы становитесь обладателем собственным дисковым пространством, оперативной памятью, процессами, отдельным подключением к сети и другими ресурсами.
Недостатком выделенного сервера является его высокая стоимость. Поэтому для вашего проекта не требуются высокие вычислительные мощности, то лучше обратить свое внимание на более дешевые альтернативы, например виртуальный сервер VPS/VDS. Также, аренда сервера требует наличие опыта администрирования. Многие хостинг-провайдеры предлагаю свои услуги по администрированию, однако это будет стоить дополнительных денег, но все же дешевле, чем нанимать штатного сотрудника.

Авг 282013
 

В продолжение поста об «лучших ресурсах для изучения HTML и CSS» представляем вашему вниманию подборку лучших на наш взгляд ресурсов по изучению PHP и MySQL.
Для начала дадим определения MySQL и PHP.

MySQL – система управления базами данных.

PHP (препроцессор гипертекста) – скриптовый язык, который предназначен для генерирования HTML- страниц на сервере. Широко применяется для создания сайтов, PHP значительно расширяет возможности веб-мастера и упрощает его жизнь. Знание основ PHP желательно для каждого вебмастера.

Куда выгодно вкладывать деньги в России? Неправда ли очень интересный вопрос, есть очень много мнений, куда и как правильно вложить деньги, я нашел хороший блог в котором очень много тем на тему деньги и на тему как выгодно их вложить, поэтому, кому интересно всем советую почитать этот блог.

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

PHPclub.ru/talk — это клуб разработчиков PHP. На их форуме можно найти все — от юмора PHP до теории PHP.

PHP.ru- один из самых популярных форумов PHP программистов. Есть хороший раздел по программированию на PHP для новичков. Также есть разделы форума по HTML, MySQL, CSS, Ajax и Javascript. Еще есть в наличии руководство по PHP и руководство по MySQL на русском.

PHP.su – весьма полезный сайт с кучей информации по PHP. Есть форум по PHP и раздел с учебниками по PHP для свободного скачивания.

SoftTime.ru/forum — сотрудники известной студии SoftTime написали множество полезных книг по MySQL и PHP . Также на их сайте есть форум PHP.

Askdev.ru — замечательный сервис ответов и вопросов IT специалистов, здесь помимо PHP, обсуждаются и другие различные темы.

PHP5.ru – на этом сайте можно найти самоучитель по по PHP, правда он еще в процессе написания, но уже написано несколько глав.

PHPbegun.ru – блог который будет очень полезен для новичков в PHP.

On-line-teaching.com/PHP — учебник PHP для новичков онлайн.

ruseller.com — в разделе PHP есть отличные переводы зарубежных материалов касательно PHP.

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

Zhilinsky.ru — блог интернет-разработчика Владимира Жилинского.

Simplecoding.org- блог о программировании Владимира Стаценко.

Samborsky.com — блог Евгения Самборского.

Англоязычные ресурсы по PHP и MySQL

Ресурсы из буржунета – настоящее Эльдорадо для приобретения знаний в интересующей вас области. Не для кого не секрет, что большинство информации в рунете это переводы зарубежных материалов и к сожалению, очень часто переводчики опускают некоторые моменты, что снижает качество перевода. Поэтому лучший вариант — это читать оригиналы.

PHP.net — официальный сайт PHP.

MySQL.com — официальный сайт MySQL.

nettuts.com — раздел PHP один из излюбленных ресурсов по PHP. Здесь систематично издаются интересные материалы с детальным описанием и готовыми файлами.

Goodphptutorials.com – здесь есть хороший выбор уроков PHP для новичков и не только.

Если кто-то знает еще какие-нибудь полезные ресурсы по изучению MySQL и PHP – указывайте их в комментариях.