MySQL 5.6 & PHP 4.4

В MySQL 5.6 значительно поменялись настройки безопасности.

При попытке соединения с базой данных из PHP 4.4.x появляется ошибка:

Client does not support authentication protocol requested
by server; consider upgrading MySQL client

Что бы заставить работать PHP 4.4 вместе с MySQL 5.6 нужно:

  1. Добавить в файл my.conf параметр skip-secure-auth после чего нужно перезапустить сервис MySQL
  2. Обновить информацию о пароле пользователя. Вместо нового формата нужно использовать старый. Для этого:
UPDATE mysql.user SET plugin = 'mysql_old_password'
WHERE User = 'some_user' AND Host = 'some_host';
FLUSH PRIVILEGES;
SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

ASP: Печать на форму и чтение параметров

Совсем уже простая задача: Сделать страничку, с использованием ASP и VBScript, на которой будет форма (тестовое поле и кнопка). По Клику на кнопку на страницу вывести то, что было написано в тестовом поле.

Код:

<HTML>
<HEAD><TITLE>TEST</TITLE>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
</head>
<body>
<form action="" method="get">
<input name="Text1" type="text">
<input type="submit" value="Отправить">
</form>
<SCRIPT LANGUAGE="vbscript" RUNAT="SERVER" type="text/vbscript">
Response.Write(Request.QueryString("Text1"))
</SCRIPT>
</body>

Идея простая. Берем форму, а дальше к ней пишем скриптик на языке VBScript (Да, знаю, штука гадкая, но заставили). Внимание следует обратить на тег RUNAT=»SERVER» — это значит, что этот скрипт должен исполняться на сервере.

Внутри его: есть объект Response (ответ) и у него метод Write, который умеет писать на страницу.  Request.QueryString позволяет получить значение переданного параметра. в качестве параметра принимает строку, в которой содержится имя элемента формы — в нашем случае это Text1. Совместив 2 функции можно выполнить задание.

Для работы примера потребуется IIS со включенной поддержкой ASP.

О API Яндекс.Фоток. Как получить Token из php

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

Сейчас занялся Яндексом, а точнее его api для приложений. Первое что пригодилось — Api Яндекс.Фоток. Этот интерфейс позволяет общаться с сервисом хранения фотографий яндекса. Первое что нужно для работы с ним — получение токена от пользователя. Для того, что бы получить этот token я написал следующую функцию:

 

function GetToken($username, $password, $client_id, $client_secret)
	{
		$url = 'https://oauth.yandex.ru/token';
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
		curl_setopt($ch, CURLOPT_FAILONERROR, 1);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
		curl_setopt($ch, CURLOPT_TIMEOUT, 9); 
		curl_setopt($ch, CURLOPT_POST, 1); // set POST method
		curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=password&username=$username&password=$password&client_id=$client_id&client_secret=$client_secret"); // add POST fields
		$result = curl_exec($ch); // run the whole process
		curl_close($ch);  
		$Resp = json_decode($result, true);
		return $Resp['access_token'];
	}

Я захотел использовать метод по логину и паролю, поэтому передаю и эти параметры. Процедура получения токена описана в api на этой странице. Для получения token’а нужно отправить POST запрос на специальный адрес.Здесь я в основном настраиваю тот самый запрос.

Указываю, куда отправить запрос; Указываю, что нужно прерываться при ошибке; Что нужно следовать редиректам; Указываю, что нужно сохранить результат выполнения в переменную; Указываю время до тайм-аута в 9 ms; говорю, что это будет тот самый POST-запрос и указываю данные которые нужно отправить — как в документе с Яндекса. После чего выполняю запрос и завершаю работу с cURL.

После выполнения запроса, в переменной $result будет находится документ в формате json, который остается только преобразовать в массив и извлечь нужные данные.

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

 

PHP: Правильный сдвиг часов

Несколько дней назад понадобилось написать скрипт, который учитывал бы время с каким-либо интервалом. Время определить удалось, но возникла проблема как задать точность. Например время определилось как 0 часов. Тогда при точности +- 2 будет интервал от -2 до 2 часов. Но что такое минус 2 часа? Такого не бывает! Для исправления этой ситуации потребовалось написать функцию, которая бы правильно считала время.
[code lang=»c»]
function TimeChange($hour, $shift)
{
if ($shift + $hour > 24)
{
return abs($hour + $shift) — 24;
}
else if ($shift + $hour < 0)
{
return 24 — abs($hour + $shift);
}
else
{
if ($shift + $hour == 24)
return 0;
return $shift + $hour;
}
}[/code]
Функция принимает текущий час (24-часовой формат) и число, на которое нужно сдвинуть часы.

 

php,mysql, Reg_exp : http://go.pyatnitsev.ru или удобная навигация

Мне сильно понравилась мысль коротких ссылок на сайтах. Нет, это не сервисы как bit.ly или goo.gl, а страницы переадресации внутри домена. Таковые есть у Microsoft, Intel. Нужны, чтобы их можно было легко запомнить и раздать клиентам, для их же удобства.

Захотелось сделать такую же страничку. Сделал. Дело было так:

Иду и создаю поддомен http://go.pyatnitsev.ru, пока он развертывается, начинаю продумывать структуру базы и php-кода, который этим занимался бы.

Continue reading

Получение списка сайтов кредитных огранизаций России с сайта ЦБ РФ (XML в PHP)

Когда-то была задача получить и обработать список банков России, при этом должна быть надежность и достоверность информации. Информацию нашел на сайте ЦБ РФ, на мое счастье, там очень любят разработчиков и нам предоставляют данные в удобном XML-формате. Таким образом, задача свелась к тому, чтобы просто разобрать (пропарсить) XML и извлечь данные. Я покажу функцию, которая будет печатать список сайтов банков на лист.

[php]

function print_banks_list()
{
$xmlString = file_get_contents(«http://www.cbr.ru/credit/GetAsXML.asp»);
$xml = new SimpleXMLElement($xmlString);
foreach($xml->Bnk as $Bnk)
{
foreach($Bnk->Itm as $Itm)
{
echo($Itm[url] . ‘<br />’);
}
}
return 0;
}

[/php]

Получилась процедура какая-то, а не функция, но внутрь можно вписать хоть что… У меня это работало в паре с MySQL.

И еще такой моментик:

[php]
$Bnk[name]

[/php]

Так можно обратиться к названию банка, правда, оно не всегда бывает в правильной кодировке, но для этого можно использовать функцию iconv, примерно так:

[php]
$bname = iconv(‘UTF-8’, ‘Windows-1251’, $Bnk[name]);
[/php]

В примере он переводит из UTF-8 в Windows-1251.