Debug в PHPStorm

Устанавливаем xdebug:

[code lang=»bash»]
$ sudo apt-get install php5-xdebug
[/code]

В php.ini вставить следующий блок (желательно в самый низ):
ВНИМАНИЕ! У вас путь «zend_extension=»/usr/lib/php5/20090626/xdebug.so»» может отличатся! Необходимо написать путь до xdebug.so.

[code]
[XDebug]
zend_extension="/usr/lib/php5/20090626/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp"
[/code]

Перезапускаем apache:

[code lang=»bash»]
$ sudo /etc/init.d/apache2 restart
[/code]

Теперь в PHPStorm.
Заходим в настройки, раздел PHP, подраздел Debug. Проверяем, что в XDebug порт должен стоять — 9000. Принимаем все изменения.
Далее заходим в Run/Edit configuration, нажимаем на плюсик, добавляем PHP Web Application. Называем, например, «phpdebug». Напротив Server нажимаем «…».
Пишем имя веб-приложения, которое будем отлаживать, пишем виртуальный хост, в качестве дебаггера — XDebug. Принимаем все изменения.

Теперь ставим брейкпоинт и нажимаем shift+F9.

EMongoDB failed to open connection: Transport endpoint is not connected

Если у вас появляется такая ошибка, это значит, что вы всего-навсего не запустили демон MongoDB. Это делается так:

[code lang=»bash»]
$ sudo mongod —dbpath /var/lib/mongodb
[/code]

Если все равно будет ошибка, проверьте, есть ли права на запись у mongo-user:

[code lang=»bash»]
$ sudo chown -R mongodb:mongodb /var/lib/mongodb
[/code]

Чтобы запустить демон монго и можно было закрыть консоль, выполните следующую команду:

[code lang=»bash»]
$ sudo nohup mongod & exit
[/code]

WordPress: Error establishing a database connection

Если у вас на wordpress после переноса сайта появляется строка «Error establishing a database connection», хотя логин, пароль, название базы данных введены правильно, то попробуйте добавить в wp-config.php эту строчку. И все должно заработать 😉

[code lang=»php»]
define(‘WP_ALLOW_REPAIR’, true);
[/code]

Origin null is not allowed by Access-Control-Allow-Origin

Эта ошибка возникает, когда вы пытаетесь сделать ajax-запрос к какому-либо сервису с локалхоста. Исправляется очень просто — припишите в конце адреса, на который делаете запрос, &callback=?.

Пример:

[code lang=»javascript»]
$.ajax({
type : "GET",
url : "http://api.twitter.com/1/users/show.json?screen_name="+groupname+’&callback=?’,
dataType: "json",
success : function(data) { … }
});
[/code]

Подробнее читайте тут.

Создание zip архива папки с вложенными папками в PHP

Для такой задачи потребуется рекурсивный обход вложенных папок, и добавление их в архив. Эту задачу (в данном случае) выполняет функция ZipDirectory, которая вызывается рекурсивно. Функция ZipFull же проверяет, возможно ли создать zip-архив, запускает ZipDirectory и закрывает файл при завершении обхода папок.

[code lang=»php»]
function ZipDirectory($src_dir, $zip, $dir_in_archive=») {
$dirHandle = opendir($src_dir);
while (false !== ($file = readdir($dirHandle))) {
if (($file != ‘.’)&&($file != ‘..’)) {
if (!is_dir($src_dir.$file)) {
$zip->addFile($src_dir.$file, $dir_in_archive.$file);
} else {
$zip->addEmptyDir($dir_in_archive.$file);
$zip = ZipDirectory($src_dir.$file.DIRECTORY_SEPARATOR,$zip,$dir_in_archive.$file.DIRECTORY_SEPARATOR);
}
}
}
return $zip;
}

function ZipFull($src_dir, $archive_path) {
$zip = new ZipArchive();
if ($zip->open($archive_path, ZIPARCHIVE::CREATE) !== true) {
return false;
}
$zip = ZipDirectory($src_dir,$zip);
$zip->close();
return true;
}
[/code]

Использование, например, следующее:

[code lang=»php»]
if (ZipFull(‘D:/test/’,’D:/result.zip’)) {
echo ‘Архив успешно создан!’;
} else {
echo ‘Ошибка при создании архива!’;
}
[/code]

Более подробно про ZipArchive вы можете почитать здесь — http://php.net/manual/en/ziparchive.open.php.

Как получить координаты в формате Excel из числового вида

Допустим, нам надо представить ячейку с координатами (5,4) в Excel-формате, т.е. как «E4». Либо (27,3) как «AA3». Эту задачу легко выполнить, если представить буквенный формат таблицы Excel в виде 26ричной системы счисления, состоящей из букв.
Т.е., нам потребуется словарь, мы можем представить его одной алфавитной строкой, и собственно, сам алгоритм, который несложен сам по себе.
Для того, чтобы получать правильные координаты ячейки Excel, будем использовать начало координат не (0,0), а (1,1), как в экселе.
Получился такой вот код:

[code lang=»php»]

function getExcelCell($x,$y) {
if (($x < 1) || ($y < 1)) { return False; }
$alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$excelX = »;
while ($x > 0) {
$r = $x % 26;
$x = (int)($x / 26);
if ($r == 0) { $r = 26; $x = $x — 1;}
$excelX = $alphabet[$r-1] . $excelX;
}
$excelCell = $excelX . $y;
return $excelCell;
}

// Тест

for ($i = -10; $i < 1500; $i++) {
$res = getExcelCell($i,$i);
if ($res) {
echo $res . "<br>";
} else {
echo ‘Значение (‘ . $i . ‘, ‘ . $i . ‘) не может быть обработано!<br>’;
}
}
[/code]

Как видите, в случае, если передаются отрицательные значения (или 0) в $x или $y, то функция возвращает False.