xandeadx.ru Блог музицирующего веб-девелопера

PHPАвторизация с помощью сервиса Loginza

Опубликовано в

Описание сервиса

Loginza — это сервис, который работает как мостик между вашим сайтом и множеством сторонних OpenID и OAuth провайдеров. Другими словами, сервис позволяет авторизоваться на вашем сайте с помощью аккаунтов Вконтакте, Яндекс, Google, Twitter и многих других.

Форма входа с помощью сервиса Loginza

PHPКак писать ошибки выполнения скриптов в файл

Опубликовано в

Все php ошибки нужно обязательно записывать в лог, и регулярно изучать его. Иначе есть шанс пропустить часть багов, которые появляются например перед редиректом и не выводятся на экран. По умолчанию, запись ошибок в файл отключена, но есть несколько способов это исправить:

Способ 1 — изменить php.ini:

log_errors = On
error_log = /var/log/php_errors.log

PHPСоздаём аналог ImageCache для использования вне друпала

Опубликовано в

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

/imagecache/preset-name/path/to/image.jpg

При первом запросе такой картинки, скрипт на основе файла path/to/image.jpg и набора правил preset-name создаст новое изображение и положит его в кэш. При последующих запросах, картинка будет отдаваться из кэша, минуя запуск скрипта и поднятия php.

PHPСкачать картинку по её url

Первый вариант будет работать если в php.ini параметр allow_url_fopen равен 1:

$url = 'http://img.yandex.net/i/www/logo.png';
$path = './images/logo.png';
file_put_contents($path, file_get_contents($url));

Второй вариант требует cURL:

$ch = curl_init('http://img.yandex.net/i/www/logo.png');
$fp = fopen('./images/logo.png', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

PHPОсобенность функции in_array()

Опубликовано в

in_array() всегда возвращает true, если в массиве одно из значений $haystack равно нулю и $needle это строка:

$array = array(0, 'one', 'two');
var_dump(in_array('three', $array)); // bool(true)

Чтобы этого не происходило, нужно параметр $strict установить в true:

var_dump(in_array('three', $array, true)); // bool(false)

PHPНасколько быстра функция function_exists

Опубликовано в

В Drupal, функция function_exists используется повсеместно. Вся система хуков держится на ней и на call_user_func*. Поэтому мне стало интересно, насколько быстро она делает своё дело.

Для тестов был взят php файл (~88kb, ~3500 строк кода) с набором небольших функций (144 штуки), в конец добавлен код:

$timestart = microtime(true); 
 
for ($i = 0; $i < 10000; $i++){
    if (function_exists('function_' . rand(0, 999999999))){
        // ...
    }
}
 
echo round(microtime(true) - $timestart, 10) . ' sec.';

В результате, среднее время на 10 000 итераций составило 0.0078 sec. Потрясающе! :)

Тестирование проводилось на боевом VDS.

PHPПолезные параметры командной строки

Опубликовано в

Версия PHP

# php -v
PHP 5.2.12 (cli) (built: Mar 01 2010 12:00:00)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

Список установленных расширений

# php -m
[PHP Modules]
ctype
curl
date
iconv
...

PHPОтправка письма в UTF-8

Опубликовано в
function mail_utf8($to, $from, $subject, $message)
{
    $subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';
 
    $headers  = "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-type: text/plain; charset=utf-8\r\n";
    $headers .= "From: $from\r\n";
 
    return mail($to, $subject, $message, $headers);
}
 
// пример использования
mail_utf8('to-user@gmail.com', 'no-reply@example.ru', 'Заголовок сообщения', 'Текст сообщения');