Замена строк в MySQL

Трагедия, трагедия. 🙂

На doBlox.ru один наш пользователь закачал много фильмов, но не потрудился изменить название на русское и не написал никакого описания.
Заменять в 80-ти сериях заголовок вручную было бы муторно.
Таким запросом это сделалось просто и быстро:
UPDATE `pubs` SET `pub_title` = ( REPLACE ( pub_title, 'Everybody Hates Chris', 'Все ненавидят Криса' ) );

unlink() по маске

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

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

Автоматический вход в 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 часа жить сессиям, а потом уничтожать.
Надеюсь починилось.

Перезапуск 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.