unlink() по маске

Пригодилось тут как-то удаление по маске из PHP именно через unlink(), а вот exec(“rm *.abc”); не подходило никак из-за неуниверсальности.
Помог glob() и хорошо засочетался с unlink. 🙂

$list = glob(“blabla-*.jpg”);
foreach ($list as $filename) {
@unlink($filename);
}

Удалить дубли из таблицы MySQL

Нашёл интересный способ удаления дублей из базы данных. В частности была импортирована база пользователей, но попались и повторения, что недопустимо для поля ‘login’. Починил вот таким запросом:

 ALTER IGNORE TABLE 'users' ADD UNIQUE 'login' ('login');

Установить MC (Midnight Commander) на FreeBSD

Заказчик дал порулить сервером, а я ж кроме своего Debian-а не привык к другим юниксовым системам. До простейшего дошло, что не могу знать что за операционка стоит. Догадался, по наличию некоторых файлов, что это FreeBSD. 🙂 А привычный миднайт командер поставить сразу и не сообразил как. Вот так:

cd /usr/ports/misc/mc
make install

Автоматический вход в PHPMyAdmin

Задача: сделать автоматический вход в PHPMyAdmin для панели пользователя хостинга.

По самому простому пути идти мне было не дано, потому я начал посылать логин pma_username и пароль pma_password методом POST.

А на самом-то деле это и ни к чему.
Направляем пользователя на скрипт, который перенаправляет на PHPMyAdmin методом GET.

http://phpmyadmin.loc/index.php?pma_username=mysql_user&mysql_password=password&db=user_db

Где,

mysql_user – имя пользователя базы,

mysql_password – пароль для пользователя базы,

user_db – пользовательская база данных.

<?php

header(“Location: http://phpmyadmin.loc/index.php?pma_username=mysql_user&pma_password=password”);

?>

Много файлов в директории sessions

Обратил внимание, что место на диске сервера стало уменьшаться. Начал взвешивать директории.
Оказалось, что один из сайтов не удалял файлы сессий вообще.

Добавил в своём config.php строчечку:

ini_set(“session.gc_maxlifetime”, “28800”);

Дал 4 часа жить сессиям, а потом уничтожать.
Надеюсь починилось.

Прибавить к дате интервал времени в MySQL

Для кого-то элементарное знание MySQL, а для меня это было трудностью. Голова уже старая, не держит ничего в себе.

Задача: добавить год к существующей дате. Буквально – продление подписки на год и смещение expiration date на год вперёд.

UPDATE hosts SET exp_date = DATE_ADD(exp_date,INTERVAL 1 YEAR) WHERE hosts_id = 1;

В таблице hosts для поля exp_date в строке с host_id = 1 прибавится 1 год.

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

Перезапуск Apache при помощи PHP

По большому счёту сам перезапуск Apache не был нужен. Моей задачей было перезагрузить конфигурационный файл Apache с виртуальными хостами.

В теории всё было совсем просто (в PHP полно команд запускающих внешние программы), однако, перезапустить Apache без администраторских прав, увы.

Я ошибочно полагал, что перезагрузить конфигурацию Apache из PHP могу таким кодом:

<?php

exec(“apache2ctl graceful”);

?>

или таким:

<?php

exec(“/etc/init.d/apache2 reload”);

?>

Вы получите сообщение вроде:

httpd not running, trying to start

failed!

Рабочее решение

Операционная система Debian/Etch, но на других дистрибутивах оно так же должно работать за исключением некоторых названий (может быть не apache2, а httpd).

Скрипт перезагрузки конфигурации выглядит так:

<?php
exec(‘echo “/usr/bin/sudo /etc/init.d/apache2 reload” | /usr/bin/at now’);
?>

Но не спешите пробовать, для этого в sudo необходимо прописать все эти разрешения.

В файл /etc/sudoers добавьте следующую строчку:

www-data ALL= NOPASSWD: /etc/init.d/apache2 reload

и закомментируйте эту строку:

Defaults requiretty

Сверьтесь, что именно такое имя пользователя (www-data), от которого у вас работает Apache.

Затем в файле /etc/at.deny удалите строчку с этим же пользователем (www-data). И если такого файла нет, то создайте /etc/at.allow и пропишите туда строчку www-data.

Got error 28 from storage engine

Интересный нюанс был сейчас, работодатель попросил посмотреть что с сайтом. Говорит, что развалилась вёрстка вся. Я смотрю внимательно на сайт, весь перекосило. Смотрю источник страницы (html код).
Вижу что футера нет и страница не загрузилась полностью. А внизу красуется сообщение “Got error 28 from storage engine“.

Сайт делал не я, ну думаю наверняка какое-нибудь внутреннее сообщение об ошибке.

Потом ради интереса набираю в консоли сервера df -h и вижу, что на диске свободно 0 мегабайт.

Оказалось что ругался MySQL, а Got error 28 from storage engine бонально означает “не хватает места на диске“.

Удалил файлик пожирнее и вёрстка починилась.