Мой любимый блог

Моя работа над WordPress, Joomla, LiveStreet, SEO. Мои разработки и многое другое о жизни …

Фев
21

phpMyAdmin и ошибка «Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly»

Posted under CMS, Мысли в слух, работа

Давеча столкнулся с проблемой запуска клиентского/гостевого phpMyAdmin. Залил архив на сервер, распаковал. И первый запуск выдал вот такую ошибку

1
2
3
Cannot start session without errors, please check errors given 
in your PHP and/or webserver log file and configure your PHP 
installation properly

При первом рассмотрении понятно что все дело в отсутствии сессии. Странно что яндекс на вопрос «почему?» вразумительного и исчерпывающего ответа не дал!
Может и совпадение, но именно на этом сайте, где установлен было тоже самое с запуском самого движка. Тогда помнится дело было в переменной

1
session.save_path

не помню точно куда он пытался записать сессию, но то что у него не получалось из-за отсутствия прав — это факт!

Есть несколько способов решения проблемы:

1. Изменить путь к переменной session.save_path в .ini и выставить права 0777 на эту папку. Но при условии что ваш 'виртуальный' сервер дает вам право на редактирование конфигурации php.

2. Если первый способ не доступен. Прописываем в файле . переменную

1
php_value session.save_path /home/мой_сайт.ру/tmp

и так же выставляем права 0777 на заданную папку.

3. Этот способ меня спас. В index.php в самом начале прописываем

1
@ini_set('session.save_path', getenv(DOCUMENT_ROOT)."/tmp");

тем самым мы регулярно при обращении к индексному файлу напрямую указываем где хранятся сессии.
Не забываем что переменная getenv(DOCUMENT_ROOT) указывает на абсолютный путь к вашему сайту, не в ту папку где запущен скрипт.

Мысли в слух. ХЗ но как я понимаю какая то гадость постоянно подменяет путь к сессиям, поэтому в моем случае помог 3-ий способ с объявлением переменной прямо в php коде.

Всем удачи!!!

Popularity: 1% [?]

Фев
06

Боремся с вирусом backdoor.php.agent.sx он же eval(base64_decode(...));

Posted under CMS, joomla

И так. Активизировался троян, Касперский назвал его backdoor..agent.sx, NOD32 обозвал его PHP/Kryptik.AB
Его фишка в том, что он подменяет заголовки для поисковиков на свои сайты. Какие точно не помню, но это не так важно. Предыстория: Делал верстку сразу на хостинге заказчика, обычно я такого не делаю, но заказчик старый волк, доверять можно. Так вот. На третий день после установки 1.5 и сдачи работы, ПС и Касперский стали ругаться, что сайт угрожает безопасности. Захожу в index.php и вижу гадость после каждого открытия php в виде ((...)); Начинаю ругаться на хостера т.к. доступа из вне кроме меня не было. Тот в отрицалово, и кидает инфу типа у вас украли пароли с фтп. так же приводит какой то троян сканирующий пассы Total Commander. Не верю!!!

Ладно поехали дальше. Откуда все это вылазит? в папке images появился файлик post.php который позволяет запустить php код через url. И тот уже сканит все файли и после каждого <?php добавляет eval. Странно в Joomla же предусмотрены фильтры расширений. Захожу в админку -> общие настройки -> система. И в разрешенных расширениях появилось php. Ого! Дистрибутив всегда ставлю с сайта производителя. хм.

Мысли в слух: Я конечно не последний мудак, что бы попасть в подобный просак, но все же факт )).  Обычно во время разработки я ставлю пароль админа типа 123456 что бы и заказчик мог зайти посмотреть как движется работа. Так вот. Я думаю что в нете сидит какой нить бот и сканит IP на появление новых сайтов. Далее дело техники, определить движок, и пробить админку со стандартными паролями )). Гы, не используйте простых паролей!!!

И так как бороться?

Я сделал дамп файловой системы, скачал на локалку, распаковал и с помощью программы Text Replacer заменил во всех файлах зловещий код на пробел. Залил обратно на сервер. Ну как то так!

Всем удачной борьбы с этим паразитом!

Popularity: 4% [?]

Апр
05

Страница приветствия. Joomla 1.5

Posted under joomla, работа

Давненько не писал... Работы валом, да и сложных задач не было, о которых хотелось бы поделиться. Но вот приплыла верстка под 1.5 со страницей приветствия. Начинаю яндексить...

Скажу честно, одно говно. Я даже удивился, что за все время развития Joomla никому не пришло в голову правильного решения. Нет, нашел один сайтик кто мыслил как я, но решения поставленной задачи так и не нашел. После чего он отговорил заказчика от идеи страницы приветствия. А задача проста — при первом входе вывести страницу приветствие. Много пишут про взаимодействие index.html и index.. Т.е. при заходе на http://сайт.ру/ мы попадаем на index.html, а там переходим на index.. Ну что ж, алгоритм прост, но разумность его вызывает сомнения. Во первых прощай ЧПУ. Что не есть гуд. И где гарантия что случайным образом опять не попаду на index.html. Сразу приходит в голову работа с сессиями.

Вот тут оказывается никто не копался, а если и копался то быстро сдался. Я уже и сам начал убеждать заказчика, что это лишнее телодвижение, а тот в никакую. Хацю. Мое желание для себя решить поставленную задачу пересилило. Начинаем PHP кодинг.

Нашел мануальчик Joomla класс JSession. Изучение изложенного ничего не дало. Ползем в БД. Судя по таблице _session данные сессии time, data перезаписываются при каждом обновлении страницы. Понимаю, что придется влазить в ядро и делать хак для добавление еще одного параметра (дата создания сессии) в таблицу. Подобное я когда то проделывал с Joomla 1.0 для вывода счетчика (сессий, посетителей, поисковиков) в админке. Кстати о чем также хотел написать, да времени не было. А сейчас уже и не помню что там делал ))). Ой как не люблю эти вещи, надо писать карту изменений и при каждом обновлении добавлять хаки. Ну что ж выбора нет лезем в ядро.

В процессе изучения библиотеки session.php нарыл что время жизни, т.е. время создания и последнего обновления сессии записывается в md5 параметра date. Это очень хорошо! Будет универсальный скрипт и без хаков. Оказалось все просто, странно, что этого не нашел мне яндекс
Поехали:

1
2
3
4
$session =& JFactory::getSession();
$time_start = $session->get('session.timer.start');
$time_now = $session->get('session.timer.now');
if ( $time_now == $time_start ) { $start = true; } else { $start = false; }

Проще говоря. Если создание и обновление сессии идентичны присваиваем переменной истину иначе ложь. Ну а дальше можно с этим параметром делать все что душе угодно.

Для реализации страницы приветствия, этот скрипт можно поместить в index.php шаблона сайта. Где нибудь после

1
2
...
defined( '_JEXEC' ) or die( 'Restricted access' );

и вызвать проверку условия

1
2
3
4
5
6
7
...
<body>
<?php if ( $start == false ) { ?>
... основной шаблон ...
 <?php } else { include_once('start.php'); } ?>
</body>
...

start.php вкладываем в корень шаблона и прописываем там страницу приветствия.

Ну и еще в заключении расскажу почему я применил несколько проверок условий. Во первых создание переменной $start дает нам возможность использовать его в нескольких местах. Плюс ко всему к этому условию можно добавить еще одно в виде проверки посетителя. Т.е. Если пришел поисковой робот, то ему вообще не стоит показывать страницу приветствия. Или же если вход на сайт осуществляется с поисковой системы. Что то-же по сути логично. В итоге я сделал страницу приветствия только для прямых заходов.

Пользуйтесь на здоровье...

Popularity: 58% [?]

Ноя
04

Как вырезать в URL последний / (слэш) и вернуть с 301 редиректом

Posted under Заработок, работа

На днях постоянные заказчики дали мелкую доработку на 301 редирект. Первое что приходит на ум это .. И правильно, пусть Apache сам справляется. Задача стояла в следующем: Всем ссылкам с окончанием / (слэш) вернуть 301 и перенаправить на страницу без него.

Я в Apache и администрировании веб-серваков не силен, но логику в обработке .htaccess понимаю, но скажу честно, потратил на решение задачи 3 часа. Пробовал два варианта с RedirectPermanent и RewriteRule. С прямым указанием старой и новой ссылки все работает, но извините у меня их несколько сотен, каждую прописывать естественно не будешь. Начал крутить с Метасимволами и Модификаторами, т.е. вырезать все что между символами / и формировать новую ссылку. Не работает. Начал гуглить и яндексить. Конкретных примеров нет. В общем крутился, крутился на своем офисном кресле и плюнул. Сел за редирект с помощью , то что мне ближе по душе.

И так, вот код... Комментарии будут ниже.

1
2
3
4
5
6
7
8
9
10
$uri = $_SERVER[REQUEST_URI];
$host = $_SERVER[HTTP_HOST];
if ($uri!='/'){
	$templ = substr($uri,strlen($uri)-1,1);
	if ($templ=='/'){
		$temp_uri = substr($uri,0,strlen($uri)-1);
		header ('HTTP/1.1 301 Moved Permanently');
		header("Location: http://".$host.$temp_uri);
	}
}

1. Вырезаем имя хоста
2. Вырезаем урл после хоста
3. Делаем проверку. Т.к. хост вырезается до слеша, то урл на главной будет состоять из одного символа /, а обработка на главной нам не нужна. В данном случае мы не хотим выполнять редирект если урл равен /
4. Вырезаем последний символ урла.
5. Делаем проверку. Если последний символ равен / то переходим к редиректу.
6. Для удобства объявил переменную в которой вырезаем последний символ из урла.
7. Объявляем 301.
8. Делаем редирект.

Все это вставляем в самый верх шаблона и вуаля. На всех ссылках с окончанием / будет работать редирект.

На это у меня ушло 10 минут. И то пока вспоминал операторы работы со строками )). В общем спасибо маэстро, то бишь мне, пользуйтесь...

Пару слов, что еще происходит со мной в сфере блогинга между работой. 1) В плотную занялся системой dubli, о которой писал в посте Яндекс метрика растет в моих глазах! 2) Конкурс BestMasterиZация в котором я так же типа участвую, жжет. То есть сижу в пассиве. Все что я сделал для достижения цели — на своих сайтах повесил два сквозняка с PR2 и все )). Сижу в ТОП100, перед чем и ставилась задача. Надеюсь организаторы не обманут и выплатят 500 рублей )).

Popularity: 76% [?]

мая
22

Автоматическое обновление Windows XP — ошибка установки KB928416

Posted under Мысли в слух

Юзал Seven, пока не столкнулся с рядом геморных вопросов в области программирования.

Вернулся на старую проверенную Windows XP + = идеальная платформа для кодинга.

Ближе к телу: Из антивирусников пользуюсь NOD32, а этот гад постоянно ругается, что для полного обеспечения безопасности необходимо установить обновления. Вроде все скачал и установил кроме геморного пакета . Эта падла не ставится на Framework 3.0 SP1 только на чистый 3.0 и постоянно выкидывает неудачу + через определенный промежуток времени снова пытается его поставить. Два дня напрягал он меня, решил бороться методом исключения паразитов.
Добавляем ключи в реестр:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
REGEDIT4
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Servicing\Windows Workflow Foundation\RU]
@=""
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\1049]
"InstallSuccess"=dword:00000001
"Version"="3.0.04506.30"
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Communication Foundation\1049]
"InstallSuccess"=dword:00000001
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Presentation Foundation\ru]
"InstallSuccess"=dword:00000001
"Version"="3.0.6920.0"
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Workflow Foundation\RU]
"InstallSuccess"=dword:00000001

Popularity: 26% [?]