Дек 21

Тут у человека систематически виснет fpm, попытки это вылечить и самый дельный совет – «собирать нужный софт для production-сервера нужно руками».
http://phpclub.ru/talk/threads/%D0%B7%D0%B0%D0%B2%D0%B8%D1%81-fpm.66810/

Теги:
Окт 18

Работал раньше сайт с memcache.
Решили перейти на memcached.
И повалились ошибки SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY, причём сначала одна CLIENT ERROR, а уже потом куча SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY.
Гугление ничего не дало, а проблема оказалась в следующем: первая ошибка возникала из-за некорректного ключа (пробел в названии ключа), после чего сервер расстраивался, и больше ничего делать не давал.
Ключ был следующий: info__rating DESC__1, генерился автоматически и никаких проблем при использовании его в memcache не вызывал. Понятное дело, что ключ плохой, но это не мешало другому расширению успешно работать.
А решение применили банальное: $Key = str_replace( ‘ ‘, ‘_’, $Key );, теперь вроде работает).
Окончательно все проблемы решила опция

$this->setOption( Memcached::OPT_BINARY_PROTOCOL,   true );

После этого лог ошибок стал пустым.
Коллега, который этим вопросом плотно занимается, считает, что это оттого, что по умолчанию протокол используется plain text (а именно, ascii), и UTF-символы интерпретируются неправильно (у нас ферма из нескольких машин, и на каждой окружение несколько отличается, к сожалению). И как только включили бинарный протокол, разногласия исчезли.

	function __construct()
	{
		parent::__construct();

		$this->setOption( Memcached::OPT_BINARY_PROTOCOL, true );
		$this->setOption( Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT );
		$this->setOption( Memcached::OPT_HASH, Memcached::HASH_CRC );
		$this->setOption( Memcached::OPT_SERVER_FAILURE_LIMIT, 3 );
		$this->setOption( Memcached::OPT_NO_BLOCK, true );									// асинхронный ввод-вывод
		$this->setOption( Memcached::OPT_TCP_NODELAY, true );									// при работе с сокетами надо потестить - может ускорить работу

		$this->connection = $this->addServers( array(	array( <хост>, <порт> ) ) );
		...
	}

При использовании ключа:

	...
	$key = str_replace( array( ' ', ',', ':' ), '_', $key );

	if ( strlen($key) > 220 ) {
		$key = md5( $key );
	}
	...
Теги:
Мар 28

Вкратце: трейт (аналог mixin в Ruby) – возможность в классе использовать функционал нескольких классов в обход традиционного наследования (по-моему, костыль, чтобы не реализовывать множественное наследование).
Всё сводится к новой инструкции use внутри класса, при этом класс, функциональность которого нужно подмешивать. объявляется инструкцией trait.

trait Singleton {
    public static function getInstance() { ... }
}

class A {
    use Singleton;
    // ...
}

class B extends ArrayObject {
    use Singleton;
    // ...
}

// Singleton method is now available for both classes
A::getInstance();
B::getInstance();

Подробнее:
New to PHP 5.4: Traits

Теги:
Июл 30

Вот достаточно подробная статья на эту тему.
В принципе достаточно написать

xdebug_start_trace('<Путь-к файлу>.html', XDEBUG_TRACE_HTML);
...
...
xdebug_stop_trace();
Теги:
Янв 18

Чтобы при обращении по данному урлу браузер выдавал запрос на сохранение файла, нужно передать заголовки.
Для этого достаточно только одного заголовка
«Content-Disposition: attachment; filename=\»myfile.csv\»\r\n»
Continue reading »

Теги:
Янв 14

В двух местах прописываем.
Continue reading »

Теги:
Янв 14

Мы уже установили nginx и php-fpm.
К этому моменту при обращении к http://localhost/ выводится Welcome to nginx!, а через CLI запускаются php-скрипты.
Самое время намекнуть nginx, где искать php-fpm.
Continue reading »

Теги:
Янв 06

Понадобилось сделать обратимое XOR-шифрование с возможностью вставить зашифрованную строку в урл:
Continue reading »

Теги:
Янв 04

Установка MySQL:
Continue reading »

Теги:
Дек 21

http://sourcemaking.com/design_patterns

Теги:
preload preload preload