Пошлый redirect php. PHP редирект внешних ссылок

Послать каждый может. А вот правильно перенаправить – это целое искусство. Но еще труднее дается перенаправление пользователей на нужный путь в интернете. Для этого лучше всего подходит редирект на php .

Что за редирект?

В веб-программировании возникают ситуации, когда нужно перенаправить пользователя, переходящего по ссылке, на другой адрес. Конечно, на первый взгляд реализация такого перенаправления выглядит немного «незаконной ». На практике же, такой редирект востребован не только среди злоумышленников, но и среди честных вебмастеров:

В каких случаях может потребоваться редирект:

  • Когда происходит замена движка сайта – в результате этого меняется архитектура всего ресурса. После чего возникает проблема, как сделать редирект;
  • При перекройке структуры ресурса – происходит добавление, удаление или перенос целых разделов или одного материала. Пока происходит этот процесс, временно можно организовать перенаправление пользователя на нужный раздел;
  • Если сайт недавно сменил свое доменное имя – после смены имени домена старое еще некоторое время будет фигурировать в поисковой выдаче. В этом случае редирект пользователя на новый домен будет реализован поисковой системой автоматически;
  • В процессе авторизации – как правило, на большом сайте есть две группы пользователей: обычные посетители и администраторы ресурса. В таком случае имеет смысл реализовать редирект каждого пользователя согласно его правам и роли. После авторизации администратор или модераторы сайта попадают в административную часть ресурса, а посетители – на пользовательскую часть ресурса.

Особенности редиректа на php

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

  • Php является серверным языком программирования. Поэтому перенаправление будет происходить не в html коде страниц, отображаемых в браузере, а в скрипте, размещенном на сервере;
  • Редирект на php может быть реализован несколькими способами. Что во многом расширяет его применение;
  • Благодаря обработке данных на сервере перенаправление, реализованное с помощью php, менее восприимчиво к действию фильтров поисковых систем.

Для редиректа в php используется функция header() . Она применяется для отправки заголовка http . Ее синтаксис:

void header (string $string [, bool $replace = true [, int $http_response_code ]])

Принимаемые функцией аргументы:


  • string $string – строка заголовка;

Существует два типа этого аргумента. Первый предназначен для отправки кода состояния соединения. Он начинается с "HTTP/". Другой тип вместе с заголовком передает клиентскому браузеру код состояния (REDIRECT 302). Этот аргумент начинается с "Location:"


  • bool $replace – является необязательным атрибутом типа bool . Отвечает за переопределение предыдущего заголовка. Если будет задано true , то предыдущий заголовок или заголовки одного типа будут заменены. Если в аргументе задано false , то перезапись заголовка не состоится. По умолчанию, задано значение true ;
  • http_response_code – аргумент принудительно устанавливает код ответа HTTP . Установка кода пройдет успешно при условии, что аргумент string не будет пустым.

Код состояния HTTP представляет собой часть верхней строки ответа сервера. Код состоит из трех цифр, после которых идет поясняющая надпись на английском языке. Первая цифра отвечает за класс состояния. Редиректу соответствуют коды от 300 до 307. Их полное описание можно найти в соответствующей технической документации.

При использовании функции header() для редиректа внешних ссылок большое значение имеет место расположения ее вызова. В коде он должен находиться выше всех тегов html :


Применение редиректа header()

Для демонстрации действия функции на локальном сервере нужно создать два файла. Один из них назовем redirect.php , а другой redirect2.php . Внутри первого разместим вызов функции в следующем формате:

В другом файле помещаем строку:

echo "Привет! Вы находитесь в файле redirect2.php";


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

  • Принудительная передача кода состояния http – при использовании первого аргумента функции header() типа «location » по умолчанию в заголовок передается код состояния «302 » (временно перемещен ). Это может стать проблемой при переносе ресурса на другое доменное имя. В поисковиках такое временное перенаправление может затянуться. Ведь поисковик постоянно анализирует код состояния. А в нем записано «временно перемещен ». Пример принудительной перезаписи кода состояния «302 » на «301 » (постоянно перемещен ):

Также перезапись возможна в два этапа. Первая строка производит перезапись кода состояния, а вторая перенаправляет на новый адрес:

  • Использование редиректа внешних ссылок для перенаправления в зависимости от роли пользователя. Роль определяется во время процедуры аутентификации. Значение для обработки записывается в переменную $who :

  • Упрощенный практический пример реализации редиректа внешней ссылки – клик по ссылке ведет на страницу php . Отсюда пользователя через 5 секунд перекидывает на Рамблер. Код html :

Нажми меня

Код файла redirect3.php :


Ну, вот мы и научились основам редиректа на php. Теперь можно смело браться за перенаправление пользователей в нужное русло. Главное не ошибиться в направлении, а то приведете всех своих юзеров на чужой сайт…

Last modified on February 25th, 2017 by Vincy.

PHP redirect mechanism is used to navigate the user from one page to another without clicking any hyperlinks. This will be helpful in such circumstances where the redirect should be done in the background. For example, when the user is accessing payment gateway, the redirect should automatically be taken place to notify URL using PHP script.

PHP provides predefined function, named header(),for URL redirection. Using this header() function, we need to send location header by specifying URL to which the page should be redirected.

Unlike where there are several ways to handle URL redirect works based on the browser, PHP avoids such confusion and have header() function create the same effect in all browsers. For that only, we have concluded with JavaScript redirect article that server side redirect is preferable.

PHP Redirect Syntax

header("Location: target-url ");

In the above syntax of PHP redirect, we need to replace with a valid URL to which we want to move. We can specify either absolute URL or relative URL for this location header. If we specify relative URL, it will search for the page in our domain where we exist.

Note: Before specifying page URL for location header, we should make sure that the page exists.

Caution before Redirect

Before executing PHP redirect, we should ensure about, no output is sent to the browser before the line where we call the header() function. For example,

Echo "PHP Redirect"; header("Location: сайт");

This script will display the following warning notice to the browser.

Warning: Cannot modify header information - headers already sent by (...

It is not only applicable for header function, rather for all the PHP functions like set_cookie(), session_start() and etc., whatever can modify the header. For that, we should remove all content which will stop sending location header to the browser.

Possible Ways of Sending Output

  • HTML content like text or tags.
  • Unnecessary white spaces before PHP delimiters.
  • PHP error or warning notices that occur before calling redirect.
  • PHP , like, echo(), print().

Safety Measures from output being Sent before PHP Redirect

  • Since HTML content should be sent before the redirect, we can separate PHP logic from HTML content.
  • For being in the safety side we can put exit command after redirect statement of PHP file. For example, header("Location: сайт"); exit;
  • We can enable PHP output buffering to stop sending output to the browser and stored into a buffer instead.

(PHP 4, PHP 5, PHP 7)

header — Send a raw HTTP header

Description

header (string $header [, bool $replace = TRUE [, int $http_response_code ]]) : void

header() is used to send a raw HTTP header. See the » HTTP/1.1 specification for more information on HTTP headers.

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include , or require , functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.


/* This will give an error. Note the output
* above, which is before the header() call */
header ();
exit;
?>

Parameters

The header string.

There are two special-case header calls. The first is a header that starts with the string "HTTP/ " (case is not significant), which will be used to figure out the HTTP status code to send. For example, if you have configured Apache to use a PHP script to handle requests for missing files (using the ErrorDocument directive), you may want to make sure that your script generates the proper status code.

header ("HTTP/1.0 404 Not Found" );
?>

The second special case is the "Location:" header. Not only does it send this header back to the browser, but it also returns a REDIRECT (302) status code to the browser unless the 201 or a 3xx status code has already been set.

header ("Location: http://www.example.com/" ); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

Replace

The optional replace parameter indicates whether the header should replace a previous similar header, or add a second header of the same type. By default it will replace, but if you pass in FALSE as the second argument you can force multiple headers of the same type. For example:

header ("WWW-Authenticate: Negotiate" );
header ("WWW-Authenticate: NTLM" , false );
?>

Http_response_code

Forces the HTTP response code to the specified value. Note that this parameter only has an effect if the header is not empty.

Return Values

No value is returned.

Changelog

Version Description
5.1.2 This function now prevents more than one header to be sent at once as a protection against header injection attacks.

Examples

Example #1 Download dialog

If you want the user to be prompted to save the data you are sending, such as a generated PDF file, you can use the » Content-Disposition header to supply a recommended filename and force the browser to display the save dialog.

// We"ll be outputting a PDF
header ("Content-Type: application/pdf" );

// It will be called downloaded.pdf
header ("Content-Disposition: attachment; filename="downloaded.pdf"" );

// The PDF source is in original.pdf
readfile ("original.pdf" );
?>

Example #2 Caching directives

PHP scripts often generate dynamic content that must not be cached by the client browser or any proxy caches between the server and the client browser. Many proxies and clients can be forced to disable caching with:

header ("Cache-Control: no-cache, must-revalidate" ); // HTTP/1.1
header ("Expires: Sat, 26 Jul 1997 05:00:00 GMT" ); // Date in the past
?>

You may find that your pages aren"t cached even if you don"t output all of the headers above. There are a number of options that users may be able to set for their browser that change its default caching behavior. By sending the headers above, you should override any settings that may otherwise cause the output of your script to be cached.

«An obsolete version of the HTTP 1.1 specifications (IETF RFC 2616) required a complete absolute URI for redirection. The IETF HTTP working group found that the most popular web browsers tolerate the passing of a relative URL and, consequently, the updated HTTP 1.1 specifications (IETF RFC 7231) relaxed the original constraint, allowing the use of relative URLs in Location headers.»

Workaround: do not send those headers.

Also, be aware that IE versions 5, 6, 7, and 8 double-compress already-compressed files and do not reverse the process correctly, so ZIP files and similar are corrupted on download.

Workaround: disable compression (beyond text/html) for these particular versions of IE, e.g., using Apache"s "BrowserMatch" directive. The following example disables compression in all versions of IE:

BrowserMatch ".*MSIE.*" gzip-only-text/html

4. Relative URIs are NOT allowed

wrong: Location: /something.php?a=1
wrong: Location: ?a=1

It will make proxy server and http clients happier.

15 years ago

If you haven"t used, HTTP Response 204 can be very convenient. 204 tells the server to immediately termiante this request. This is helpful if you want a javascript (or similar) client-side function to execute a server-side function without refreshing or changing the current webpage. Great for updating database, setting global variables, etc.

Header("status: 204"); (or the other call)
header("HTTP/1.0 204 No Response");

15 years ago

A call to session_write_close() before the statement

header ("Location: URL" );
exit();
?>
is recommended if you want to be sure the session is updated before proceeding to the redirection.

We encountered a situation where the script accessed by the redirection wasn"t loading the session correctly because the precedent script hadn"t the time to update it (we used a database handler).

9 months ago

// Beware that adding a space between the keyword "Location" and the colon causes an Internal Sever Error

//This line causes the error
7
header("Location: index.php&controller=produit&action=index");

// While It must be written without the space
header("Location: index.php&controller=produit&action=index");

1 year ago

The header call can be misleading to novice php users.
when "header call" is stated, it refers the the top leftmost position of the file and not the "header()" function itself.
"

10 years ago

Here is a php script I wrote to stream a file and crypt it with a xor operation on the bytes and with a key:

The encryption works very good but the speed is decrease by 2, it is now 520KiB/s. The user is now asked for a md5 password (instead of keeping it in the code directly). There is some part in French because it"s my native language so modify it as you want.

// Stream files and encrypt the data on-the-fly

// Settings
// -- File to stream
$file = "FILE_out" ;
// -- Reading buffer
$bufferlength = 3840 ;
// -- Key in hex
//$keychar = "9cdfb439c7876e703e307864c9167a15";

// Function: Convertion hex key in a string into binary
function hex2bin ($h ) {
if (! is_string ($h )) return null ;
$r = array();
for ($a = 0 ; ($a * 2 )< strlen ($h ); $a ++) {
$ta = hexdec ($h [ 2 * $a ]);
$tb = hexdec ($h [(2 * $a + 1 )]);
$r [ $a ] = (int) (($ta << 4 ) + $tb );
}
return $r ;
}

// Function to send the auth headers
function askPassword ($text = "Enter the password" ) {
header ("WWW-Authenticate: Basic realm="" . utf8_decode ($text ) . """ );
header ("HTTP/1.0 401 Unauthorized" );
return 1 ;
}

// Key is asked at the first start
if (!isset($_SERVER [ "PHP_AUTH_PW" ])) {
askPassword ();
echo "Une clé est nécessaire !
"
;
exit;
}
// Get the key in hex
$keychar = $_SERVER [ "PHP_AUTH_PW" ];

// Convert key and set the size of the key
$key = hex2bin ($keychar );
$keylength = count ($key );
// Teste si la clé est valide en hex
if ($key == "" || $keylength <= 4 ) {
askPassword ("Clé incorrecte !" );
//echo "Clé incorrecte !
";
exit();
}
// Teste si la clé est de longueur d"une puissance de 2
if (($keylength % 2 ) != 0 ) {
askPassword ("Clé de longueur incorrecte (multiple de 2 uniquement)" );
//echo "Clé de longueur incorrecte (puissance de 2 uniquement)
";
exit();
}

// Headers
header ("Content-Type: application/octet-stream; " );
header ("Content-Transfer-Encoding: binary" );
header ("Content-Length: " . filesize ($file ) . "; " );
header ("filename=\"" . $file . "\"; " );
flush (); // this doesn"t really matter.

// Opening the file in read-only
$fp = fopen ($file , "r" );
while (! feof ($fp ))
{
// Read a buffer size of the file
$buffer = fread ($fp , $bufferlength );
$j = 0 ;
for ($i = 0 ; $i < $bufferlength ; $i ++) {
// The key is read in loop to crypt the whole file
if ($i % $keylength == 0 ) {
$j = 0 ;
}
// Apply a xor operation between the key and the file to crypt
// This operation eats a lots of CPU time (Stream at 1MiB/s on my server; Intel E2180)
$tmp = pack ("C" , $key [ $j ]);
$bufferE = ($buffer [ $i ]^ $tmp ); // <==== Le fameux XOR

/*
echo "
key[".$j."]: ";
var_dump($tmp);
echo "
buffer[".$i."]: ";
var_dump($buffer[$i]);
echo "
bufferE: ";
var_dump($bufferE);
echo "
";
//*/

// Send the encrypted data
echo $bufferE ;
// Clean the memory
$bufferE = "" ;
$j ++;
}
$buffer = "" ;
flush (); // this is essential for large downloads
/*
fclose($fp);
exit();
//*/
}
// Close the file and it"s finished
fclose ($fp );

Быстрая навигация по этой странице:

Если вы решили написать скрипт и сделать редирект PHP, преимущества этого шага очевидны: PHP – серверно ориентированный язык скриптов; перенаправление будет выполняться посредством скрипта на сервере, а не в браузере посетителей. Некоторые перенаправления могут быть выполнены на стороне клиента — через редирект js (то есть через JavaScript редирект).

Это более гибкий и универсальный подход, и вы можете выполнить несколько типов редиректа в PHP, в отличие от других методов. Вот — наиболее частые виды редиректа, которые можно сделать в PHP: a) 301 редирект PHP (статус постоянного перенаправления), b) 302 редирект PHP (временный статус переадресации), с) Обновление.

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

Заголовок языка PHP функции

Например, предположим, вы хотите сделать редирект к этому URL http://www.somewebsite.com/target.php. В исходном PHP страницы, Вам просто следует вызвать этот скрипт редиректа:

Попробуйте также провести этот простой эксперимент на вашем локальном хостинге:

1) Откройте текстовый редактор и введите этот код:

Сохраните его как targetpage.php.

2) Откройте другой пустой текстовый файл и введите этот код:

Сохраните его как originatingpage.php.

3) Теперь запустите веб-браузер. В адресной строке браузера введите: http://localhost/originatingpage.php

4) Вы заметите, что после нажатия кнопки ввода, этот URL: http://localhost/originatingpage.php делает редирект на http://localhost/targetpage.php и на targetpage.php, и вы видите слова «Hi this is codex-x».

Одна из самых распространенных ошибок может крыться в оформлении кода html редиректа:

Попробуйте выполнить этот эксперимент:

Перейдите к скрипту originatingpage.php и добавьте любой HTML тег:

header(‘Location: http://localhost/targetpage.php’);

Предположим, у вас есть такой код:

Это – ошибка редиректа </ TITLE> </ HEAD> <body> <? PHP header("Location: http://localhost/targetpage.php"); > </ BODY> </ HTML> </p><p>2) Сохраните файл.</p> <p>3) Запустите снова скрипт originating.php в . Если вы не видите любые ошибки, вы заметите, что она по-прежнему чисто перенаправляет к targetpage.php</p> <p>4) Теперь попробуйте изменить целевой URL, чтобы указать на реальный сайт, например:</p><p> <html> <head> <title> пример ошибки редиректа</ TITLE> </ HEAD> <body> <? PHP header("Location: http://localhost/targetpage.php"); > </ BODY> </ HTML> </p><p>5) Загрузите originatingpage.php на удаленный хостинг в корневой каталог сайта.</p> <p>6) Выполните скрипт в браузере с помощью вызова originatingpage.php URL, например: http://www.php-developer.org/originatingpage.php</p> <p>7) Вы заметите, что на этот раз, вы столкнетесь с ошибкой:</p><p>Warning: Cannot modify header information - headers already sent by (output started at /home/phpdevel/public_html/originatingpage.php:6) in /home/phpdevel/public_html/originatingpage.php on line 7 </p><p>Что здесь происходит? Причиной проблемы является то, что у вас уже выведен код HTML перед заголовком функции.</p> <h2>В чем польза редиректа?</h2> <p>Благодаря редиректу, вы можете осуществлять перенаправление пользователей с одной веб-страницы на другую. Также, если например, на вашем сайте тексты ссылок на статьи пребывают в неприглядном виде (набор цифр или знаков), их можно изменить, применив транслитерацию и сделав редирект на эти ссылки. Возможности перенаправления практически неограниченны! Польза этого метода для повышения индексации страниц, улучшения показателей сайта, привлечения пользователей очевидна.</p> <p><span class="Xf6dVRetPVY"></span></p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div> <footer class="entry-meta"> </footer> </div> </article> </main> </div> </div> <div id="secondary" class="widget-area col-sm-12 col-md-4" role="complementary"> <div class="well"> <aside id="search-2" class="widget widget_search"> <form method="get" class="form-search" action="/"> <div class="input-group"> <input type="text" class="form-control search-query" value="" name="s" id="s" placeholder="Поиск..."> <span class="input-group-btn"> <button type="submit" class="btn btn-default" name="submit" id="searchsubmit" value="Search"><span class="glyphicon glyphicon-search"></span></button> </span> </div> </form> </aside> <aside id="recent-comments-2" class="widget widget_recent_comments"> <h3 class="widget-title">Новые статьи</h3> <ul id="recentcomments"> <li class="recentcomments"><a href="/classmates/es-fail-eksplorer-provodnik-es-explorer-luchshii-failovyi-menedzher-dlya-android-glavnye/">Проводник ES Explorer – лучший файловый менеджер для Android</a></li> <li class="recentcomments"><a href="/windows-7/oshibka-scenariya-v-1s-kak-ubrat-kak-ubrat-oshibku-scenariya-v-windows-reshaem/">Как убрать ошибку сценария в Windows?</a></li> <li class="recentcomments"><a href="/skype/pechat-eksele-zagolovka-kazhdoi-stranice-sozdanie-skvoznyh/">Создание сквозных строк в Microsoft Excel</a></li> <li class="recentcomments"><a href="/classmates/l-10-e-mail-obyazatelno-ne-publikuetsya-obzor-stiralnoi-mashiny-vyazma-harakteristiki-i-instrukciya/">Обзор стиральной машины Вязьма: характеристики и инструкция</a></li> <li class="recentcomments"><a href="/audio/kak-sdelat-bekap-na-xiaomi-dlya-sozdaniya-rezervnoi-kopii-dannyh-vse-rabochie/">Все рабочие способы сделать бэкап на Xiaomi Где miui хранит бэкап</a></li> <li class="recentcomments"><a href="/audio/kolonka-jbl-charge-3-kitaiskaya-kopiya-obzor-kolonki-jbl-uchimsya/">Колонки JBL: учимся отличать подделку от оригинала</a></li> <li class="recentcomments"><a href="/windows-7/kak-uznat-naimenovanie-materinskoi-platy-na-kompyutere-kak-uznat-materinskuyu-platu-na-noutbuke/">Как узнать материнскую плату на ноутбуке</a></li> <li class="recentcomments"><a href="/usb-flash-drive/ustanovka-vindovs-dannyi-disk-ne-ustanovka-windows-na-dannyi-disk-nevozmozhna/">Установка Windows на данный диск невозможна – стиль разделов GPT</a></li> <li class="recentcomments"><a href="/vkontakte/kakie-fleshki-usb-samye-nadezhnye-i-bystrye-kak-vybrat-fleshku-s-vysokoi/">Как выбрать флешку с высокой скоростью и надежной памятью Лучшие Flash-накопители с двумя вариантами подключения</a></li> <li class="recentcomments"><a href="/vkontakte/kak-na-mts-v-minuse-vzyat-v-dolg-kak-pozvonit-esli-net-deneg-na/">Как позвонить, если нет денег на сим-карте мтс Мтс нет денег на счету</a></li> </ul> </aside> <aside id="recent-comments-2" class="widget widget_recent_comments"> <h3 class="widget-title">Последние статьи</h3> <ul id="recentcomments"> <li class="recentcomments"><a href="/windows-7/gugl-plei-market-ne-poluchaetsya-zaiti-neobhodimo-voiti-v-akkaunt/">Почему не заходит в Плей Маркет?</a></li> <li class="recentcomments"><a href="/usb-flash-drive/kak-udalit-istoriyu-prosmotrov-v-safari-na-mac-upravlyaem/">Управляем веб-историей в Safari для iOS История safari ipad</a></li> <li class="recentcomments"><a href="/odnoklassniki/kak-popast-v-umnuyu-lentu-vkontakte-umnaya-lenta-vkontakte-kak-rabotaet-i/">Умная лента ВКонтакте: как работает и как попасть</a></li> <li class="recentcomments"><a href="/browsers/shema-podklyucheniya-provodov-na-materinskoi-plate-foxconn-kak-k/">Как к материнской плате подключить провода: пошаговая инструкция</a></li> <li class="recentcomments"><a href="/browsers/kak-sdelat-proshivku-dlya-samsunga-proshivka-android-samsung-s-pomoshchyu-odin-proshivka-samsung/">Прошивка Android Samsung с помощью Odin</a></li> <li class="recentcomments"><a href="/audio/smartfon-vernee-thor-e-prodolzhenie-lineiki-thor-smartfon-vernee-thor-e/">Смартфон Vernee Thor E, продолжение линейки Thor Коммуникация между устройствами в мобильных сетях осуществляется посредством технологий, предоставляющих разные скорости передачи данных</a></li> <li class="recentcomments"><a href="/classmates/gorod-kvandzhu-udivitelnye-fakty-deshevye-aviabilety/">Дешевые авиабилеты Кванджу – Южная Корея (KWJ – KR)</a></li> <li class="recentcomments"><a href="/vkontakte/irkutskenergosbyt-lichnyi-kabinet-vhod-v-kabinet-voiti-po-nomeru/">Иркутскэнергосбыт личный кабинет физического лица — российская энергосбытовая компания Иркутскэнергосбыт личный кабинет физического лица передать</a></li> <li class="recentcomments"><a href="/wi-fi-ethernet/vk-mobil-polnaya-i-mobilnaya-versii-vkontakte-vk-mobilnaya-versiya-voiti/">Полная и мобильная версии вконтакте</a></li> <li class="recentcomments"><a href="/skype/vvedenie-v-tranzakcii-v-mysql-ispolzovanie-tranzakcii-v-pdo-na/">Использование транзакций в PDO на PHP Транзакции php</a></li> </ul> </aside> <aside id="recent-comments-2" class="widget widget_recent_comments"> </aside> </div> </div> </div> <div id="yandex_rtb_R-A-202909-1"></div> </div> </div> </div> <div id="footer-area"> <div class="container footer-inner"> <div class="row"> </div> </div> <footer id="colophon" class="site-footer"> <div class="site-info container"> <div class="row"> lickeys.ru - Полезные советы по социальным сетям. Инструкции по настройке ПК </div> </div> <div class="scroll-to-top"><i class="fa fa-angle-up"></i></div> </footer> </div> <script type="text/javascript"> disableSelection(document.body) </script> <script type='text/javascript' src='https://lickeys.ru/wp-content/plugins/akismet/_inc/form.js?ver=3.2'></script> <script type='text/javascript'> /* <![CDATA[ */ var cm_imgs = { "fileTypeError":"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0412\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043e \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044e.","fileSizeError":"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u0412\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0430\u0439\u043b. \u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f, \u0444\u0430\u0439\u043b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d! \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430:","limitFileSize":"2097152","fileCountError":"<strong>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/strong> \u0412\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f, \u0444\u0430\u0439\u043b\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b <br \/>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439: ","limitFileCount":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://lickeys.ru/wp-content/plugins/comment-images-reloaded/js/cir.min.js?ver=4.9.1'></script> <script type='text/javascript' src='https://lickeys.ru/wp-content/themes/sparkling/inc/js/skip-link-focus-fix.js?ver=20140222'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.9.1'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.9.1'></script> <script type='text/javascript' src='https://lickeys.ru/wp-content/plugins/easy-fancybox/fancybox/jquery.fancybox-1.3.8.min.js?ver=1.6'></script> <script type='text/javascript' src='https://lickeys.ru/wp-content/plugins/easy-fancybox/js/jquery.easing.min.js?ver=1.4.0'></script> <script type='text/javascript' src='https://lickeys.ru/wp-content/plugins/easy-fancybox/js/jquery.mousewheel.min.js?ver=3.1.13'></script> <script type="text/javascript"> jQuery(document).on('ready post-load', function(){ jQuery('.nofancybox,a.pin-it-button,a[href*="pinterest.com/pin/create/button"]').addClass('nolightbox'); } ); jQuery(document).on('ready post-load',easy_fancybox_handler); jQuery(document).on('ready',easy_fancybox_auto);</script> </body> </html>