За месяц Май, 2009

Ошибка PHP Strict Standards: date(), time() или date.timezone

[error] [client IP] PHP Strict Standards:  date() [<a href=’function.date’>function.date</a>]: It is not safe to rely on the system’s timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Europe/Moscow’ for ‘MSK/3.0/n
o DST’ instead in …

Иногда такими строками изобилуют логи ошибок web-сервера (apache тот же). В чем дело? Раньше ведь ошибок не было! Или были?… не помню…

Все дело в том, что в очередной версии php добавили timezone “по умолчанию”, которая используется в функциях даты-времени (date/time functions)

date.timezone “” PHP_INI_ALL Available since PHP 5.1.0.

Решается небольшой поправкой, которая “совместима” (звучит!) с предыдущими версиями php.

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

Выдержка из List of Supported Timezones

Europe/Kiev
Europe/London
Europe/Minsk
Europe/Moscow
Europe/Riga
Europe/Samara
Europe/Simferopol
Europe/Tallinn
Europe/Tiraspol
Europe/Uzhgorod
Europe/Volgograd
Asia/Yekaterinburg
Asia/Novosibirsk
Asia/Krasnoyarsk
Asia/Irkutsk
Asia/Kamchatka
Asia/Magadan
Asia/Sakhalin

upd Для date.timezone в столбце Changeable стоит PHP_INI_ALL. Это означает установить её значение можно не только во время выполнения скрипта, но и в конфигурационных файлах:

- в .htaccess или httpd.conf следует добавить строку вида
php_value date.timezone "Europe/Moscow"

- в php.ini строку вида
date.timezone = Europe/Moscow

Опубликовано Май 28, 2009 | автор: levik  |  Нет комментариев »

Отключаем автозапуск на флэшках и компакт-дисках

Довольно часто вирусы распространяются через сменные носители путем записи в автозапуск на флешку или (реже) при записи компакт диска. Конечно, у многих пользователей установлено антивирусное программное обеспечение, которое позволяет блокировать автозапуск приложений со сменных носителей и удалять зараженные файлы автоматической загрузки. Однако, бывает всякое.. Базы не обновились вовремя, новый, никому неизвестный вирус.. Да и в конце концов, быть может нам не нужен автозапуск, а просто файлик скопировать..

Редактируем автозапуск силами “проводника” Windows

На дисководах компакт дисков настройку автозапуска можно выполнить в проводнике - свойства дисковода (правой кнопкой мыши), вкладка “автозапуск“… Однако опция “отключить” там отсутствует.

Отключаем автозапуск в редакторе групповой политики (проверено лично )

Проверенный вариант - отключить автозапуск редактированием групповой политики. Запускаем (Пуск - выполнить) gpedit.msc.

Далее «политика Локальный компьютер» - «Конфигурация компьютера» - «Административные шаблоны» - «система» - справа выбираем пункт «Отключить автозапуск»; открываем свойства этого пункта и ставим «Включен». Ниже - в меню “Отключить автозапуск” следует выбрать “На всех дисководах”.

Отключаем автозапуск в реестре (кто проверит - отпишитесь в комментариях)

Отключение автозапуска в Windows XP:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion\Explorer\ AutoplayHandlers\CancelAutoplay\Files] “*.*”=”"

В Vista не пробовал. Если у кого получится - сообщите. Заранее благодарен.

После отключения автозапуска на флешках количество вирусов на компьютере заметно сокращается. Конечно, остается основной на сегодня способ распространения - интернет.. Там автозапуск не отключишь :)

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

Опубликовано Май 18, 2009 | автор: levik  |  Нет комментариев »

Импорт csv в virtuemart для больших файлов

Virtuemart + joomla - неплохой и “бесплатный” инструмент для организации интернет-магазина. Для синхронизации, например с 1с (что требуется довольно часто), в virtuemart используется инструмент импорт-экспорт через CSV. Все бы ничего - после определенной настройки данные импортируются, но при солидных объемах магазина - несколько тысяч товаров в csv-файле, даже без описаний, скрипт импорта выполняется несколько минут. Площадки виртуального хостинга же, частенько, имеют ограничение на это самое время выполнения скрипта. Вот и получаем

Попытки прописать в .htaccess  php_value max_execution_time 600 (увеличить максимально разрешенное время скрипта до 600 секунд) не всегда приводят к желаемому результату, потому как довольно часто такая возможность блокируется хостером. Доступ к php.ini предоставляется далеко не всеми хостерами. Вопросы о возможности увеличения этого времени “в частном” или “в общем” порядке, в лучшем случае обычно заканчиваются предложением приобрести VPS..

Как вариант решения проблемы импорта больших файлов - разбиение CSV-файла на части, и загрузка каждой части в отдельности. Естественно, не забываем про служебную информацию (обычно - первая строка csv-файла)Размер частей подбирается опытным путем :) Однако, мягко говоря, вариант далеко не идеальный.

Поиски, как ни странно, показали, что такого рода проблемы не у меня одного, причем возникают они снова и снова. :) И, как ни странно, на многих форумах этот вопрос оставлен без ответа. При том, что решение, довольно изящное, разработано несколько лет назад пользователем tug на joomlaforum.ru

Модификация для нормальной загрузки через CSV - Simple CSV Import

Нормальная заливка это …:

* возможность заливать любые данные через CSV, т.е. товары, типы, параметры, категории, производителей, налоги, хуёги и пр.
* возможность прямо в csv указывать поля, которые нужно обрабатывать.
* когда в админке Вам нужно только указать файл и нажать “Upload”.
* возможность кастомизировать заливку и добавлять новые модули и не только для VirtueMart.

Особое внимание обратил на “только указать файл и нажать…”
Тех, кто торопится “в бой” - “поставить и забыть” - хочу предупредить, что на третьей странице лежит пятая бета-версия. Ставить лучше её. И, несмотря, на многостраничность темы, все же рекомендую ознакомиться.
Расписывать все прелести CSV-импорта от tug-а не буду. Стоит отметить, однако, что от старого доброго экспорта-импорта через csv отказываться не обязательно, они вполне могут существовать параллельно - своеобразный путь к отступлению…

upd.  Полезная информация по Simple CSV - краткая “выжимка” из 10 страниц топика на форуме. Если что упустил - поправляйте.

Опубликовано Май 13, 2009 | автор: levik  |  Комментарии (2) »

Водяные знаки на PHP

Проблема: иногда недобросовестные (или добросовестные, но без злого умысла и задней мысли) представители интернет-индустрии используют эксклюзивные авторские изображения без указания авторства и без всякого на то разрешения. Конечно, нормативные документы, гласящие об авторском праве в настоящее время упоминаются чуть ли не на каждом шагу; множество решений в суде, вынесенных в пользу автора…

Одним из способов указания авторства изображений, который довольно широко используется в Интернет - так называемые Watermark или Водяные знаки - изображения, содержащие информацию об авторе или сайте, для дальнейшего наложения на оригинальные авторские изображения.

В сети можно найти массу реализаций. Наиболее простым мне показался следующий вариант - наложение 8-битного (при желании - прозрачного) png-изображения (идентификатор в переменной $watermark_img_obj) с определенной прозрачностью ($alpha_level от 0 до 100) на основное изображение ($main_img_obj)

function watermark( $main_img_obj, $watermark_img_obj, $alpha_level = 100) {
$watermark_width = imagesx($watermark_img_obj);
$watermark_height = imagesy($watermark_img_obj);
$dest_x = imagesx($main_img_obj) - $watermark_width - 10; // правый
$dest_y = imagesy($main_img_obj) - $watermark_height - 10; // нижний угол изображения
imagecopymerge($main_img_obj, $watermark_img_obj, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $alpha_level);
return $main_img_obj;
}

Конечно, это не “супер-мегакласс” с кучей параметров, но защитить изображения водяным знаком функция позволяет сделать без особых сложностей. Можно написать свою, как, например тут. Можно воспользоваться готовыми классами - watermark от PixelJeck-а, imagemanipulator, который предоставляет гораздо более широкие возможности для работы с изображениями, или же написать свой.

Еще, думаю, есть смысл обратить внимание на ImageMagic, а точнее на его интерфейс в php - IMagick.

Как лучше расположить надпись/водяной знак на изображении, чтобы с одной стороны сохранить информацию об авторе изображения, а с другой - не испортить изображение… Нельзя забывать, что желательно, чтобы посетитель мог сконцентрироваться не на водяном знаке, а на самом изображении.

Для Wordpress существует отдельный плагин wp-watermark, который кстати можно использовать для массового наложения водяных знаков на все файлы из каталога.

Любой класс или функцию можно взять за основу для своих наработок, которые в дальнейшем можно использовать как готовые “кирпичики” в своих проектах. Перерабатывая классы и функции “под себя” не только лучше вникаешь в алгоритм самой функции, но и можешь сделать то, что считаешь нужным. :)

Удачи!

Опубликовано Май 5, 2009 | автор: levik  |  Нет комментариев »