Работа с куками (cookie) в Zend Framework

Для установки куки необходимо:

$cookie = new Zend_Http_Cookie('name',
    'value',
    '.site.ru',
    time() + 7200,
    '/'
);
$this->getResponse()->setHeader('Set-Cookie', $cookie->__toString());
//Для передачи всех данных нужно использовать
$this->getResponse()->setHeader('Set-Cookie', $cookie->__toStringFull());

Читать далее

Обрезание писем в Zend_mail

Обнаружил интересную проблему, некоторая часть писем с сайта доходит не полностью, письма обрезались на самом интересном месте.

Письма отправляются через Zend_Mail. Используется дефолтовый транспорт. Кодировка писем KOI8-R.

Методом перебора определил, что письмо обрезалось после знаков №, — , и нестандартных кавычек.

Таким образом проблема решается очисткой содержимого письма, следующим кодом:


	$a = str_replace('№', 'N', $a);
	$a = str_replace("–", '_', $a);
	$a = str_replace(array('«','»','„','“'), '"', $a);

Не попадайтесь на такое.

Ошибка MySQL Error writing file Errcode: 28

При выполнении некоторых требовательных sql запросов на локалке в Mysql стала выпадать ошибка Error writing file ‘C:\WINDOWS\TEMP\MY46F.tmp’ (Errcode: 28).

Причина оказалась в нехватке места для временных файлов.

Выхода два:
1) Очистить место на диске C:
2) Использовать другую директорию для временных файлов:

В файле конфига my.ini в секции [mysqld] указать:
tmpdir=»E:/php5/tmp»  или
tmpdir = /another_path/tmp

MySQL ошибка Incorrect key file for table

При некоторых запросах к MySQL возникала следующая ошибка:
Incorrect key file for table ‘#sql_e04_0.MYI’; try to repair it

После долгих разбирательств, выяснил причину.

Оказалось, что для выполнения данного запроса Mysql создавал временный файл sql_e04_0.MYI . Когда данный файл вырастал до больших размеров и заканчивалось свободное место, выскакивала данная ошибка.

Так что после увеличения размера диска на хостинге или места под mysql проблема будет решена.

Установка правильной временной зоны в php и mysql

Установка временной зоны в mysql из php делается следующим образом:

$db->query("SET time_zone = 'Europe/Moscow'");

Установка временной зоны в php для функций работы с датой и временем :

if (function_exists('date_default_timezone_set'))
date_default_timezone_set('Europe/Moscow');

Временные зоны:
Читать далее

Битовые операции и двоичное исчисление в php

Перевод числа из двоичной системы исчисления в десятичную:

int bindec(string binary_string)

$x = bindec(10101010); // $x = 170

Можно:
$x = base_convert("10101010",2,10);

Перевод наоборот, из десятичной системы в двоичную:
Читать далее

JavaScript функция получения координат мыши

JavaScript функция получения координат мыши:


function mousePageXY(e)
{
var x = 0, y = 0;
if (!e) e = window.event;
if (e.pageX || e.pageY)
{
x = e.pageX;
y = e.pageY;
}
else if (e.clientX || e.clientY)
{
x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
}
return {"x":x, "y":y};
}

Оптимизация таблиц и запросов в MySQL

Для просмотра, что можно оптимизировать подойдет следующий sql запрос:
SELECT *
FROM `table_name`
PROCEDURE ANALYSE ( )

Оценка производительности отдельного запроса происходит так:
EXPLAIN EXTENDED {ВАШ_ЗАПРОС}

Периодически нужно делать :
OPTIMIZE TABLE `table_name`
, что позволяет упорядочить данные если было удалено много записей.

При оптимизации важно измерять время без кэширование запросов. Данного можно добиться следующей конструкцией:
SELECT SQL_NO_CACHE *
FROM `table_name`

Порно бот

Улыбнуло одно сообщение не прошедшее фильтрацию:

Hi, I’m a adult porn bot. If you receive this message, your forum will be filled by porn photos and videos.
Please, defence you resource from automated porn content.

Очень приятно, что пошли такие культурные порно боты.

MySQL выбор повторяющихся значений из таблицы

MySQL выбор повторяющихся значений из таблицы:

Например, выберем повторяющиеся названия статей из таблицы articles:

SELECT title,count(*) 
FROM articles 
GROUP BY title 
HAVING count(*) > 1 
ORDER BY count(*);