Портрет 4X_Pro
Был в Сети сегодня, 02:11
Мультиблог
4X_Pro
Записки лишнего человека

Компьютерное

Отладка PHP-скриптов

4X_Pro

Как известно, при возникновении ошибки PHP в лучшем случае выдает номер строки, где она произошла, и ее краткое описание, а в худшем (если в настройках хостинга отключен показ ошибок вообще) — просто пустую страницу. Это не слишком удобно как для отладки, так и для конечного пользователя. Возникает вопрос: как сделать вывод сообщения об ошибке более информативным.

Оказывается, все достаточно просто. В PHP существует специальная функция set_error_handler(), которая позволяет задать свой собственный обработчик ошибок.Единственный ее параметр — это имя функции-обработчика, которая вызывается в случае возникновения ошибки. Функция-обработчик имеет 4 параметра: номер ошибки, текст ошибки, имя файла, в котором ошибка произошла и номер строки в этом файле.


Читать далее…

Правильная выдача заголовка Content-Length

4X_Pro

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

Читать далее…

Безопасная загрузка файлов на сервер

4X_Pro

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

Первая и самая очевидная — это имена файлов. Их обязательно нужно проверять на спецсимволы, так как пользователь может подделать HTTP-запрос, в результате чего загружаемый файл будет иметь имя, например, ../index.php.  и при попытке его сохранения затрет корневой индекс. Кроме того, название может содержать русские буквы в кодировке windows-1251 или koi-8, которые некорректно сохранятся в файловой системе. Вывод: нужно сохранять файл не под тем именем, под которым его загрузил пользователь, а под случайным, например MD5-хешем от имени файла, времени загрузки и IP пользователя. Имя же этого файла где-нибудь в базе, а потом отдавать файл скритом, который предварительно будет выдавать заголовок Content-disposition: attachment; filename="имя_файла".

Читать далее…

Впечатления от Mozilla Firefox 6

4X_Pro

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

Понравилось вот что: Читать далее…

Как определить, запущен ли PHP из командной строки

4X_Pro

Иногда при написании скриптов, предназначенных для выполнения длительных операций, возникает необходимость определить, каким именно способом запущен PHP-интерпретатор: из командной строки или же из Web-сервера. Помочь в этом может функция php_sapi_name(), которая возвращает строку, описывающую SAPI (подсистему сервера), которая использовалась.

Читать далее…

Немного о юзабилити таблиц

4X_Pro

Часто при разработке CMS требуется вывести таблицу с какими-то элементами, которые можно выбирать и редактировать (например, список страниц сайта или список вопросов в FAQ). Казалось бы, что проще: достаточно использовать всего три тега — table, tr, td и все. Однако если список будет длинный, да еще названия элементов могут быть длинными и растягиваться на несколько строчек, то пользоваться такой таблицей будет не очень удобно. Можно дать несколько советов, как сделать такую таблицу более удобной. Читать далее…

Отслеживаем медленные запросы или Отчего тормозит Web-сервер

4X_Pro

Бывают ситуации, когда Web-сервер тормозит, медленно выдает страницы, а что именно является причиной, непонятно. Первое что приходит в голову — поставить в скриптах контрольные точки, в которых фиксировать время выполнения скриптов. Дело это долгое и трудное (а при большой нагрузке еще и способное привести к зависанию). Поэтому сначала лучше попробовать встроенные средства Apache и MySQL: mod_status и лог медленных запросов.

Читать далее…

Рекурсивный chmod только для каталогов

4X_Pro

Часто сталкивался с ситуацией, когда для каталогов нужно выставить права 755, а для файлов — 644. Обычно решал так:

$ chmod -R 644 ./

а далее проставлял 755 вручную для каталогов, но это неудобно, особенно при глубокой вложенности. Сегодня нашел другое решение: можно формировать список файлов с помощью find, а затем вызывать chmod с помощью xargs. Т.е. получаем:

$ chmod -R 755 ./
$ find ./ -type f -print | xargs chmod 644

Если требуется наоборот, выполнить команду только для каталогов, то после -type нужно указать d вместо f. Важно так же помнить про права доступа (т.е. если сначала поставить всем 644, а потом пытаться повысить каталогам до 755, могут начаться ошибки доступа).

Свой сайт: с чего начать?

4X_Pro

Многие люди, впервые задумавшиеся о создании своего сайта, не знают, с чего начать и поэтому начинают работу с самого очевидного: либо с дизайна, либо с доменного имени. Но это не самый удачный подход. Хотя бы потому, что без представления о том, что на сайте должно быть, сколько (хотя бы приблизительно) будет страниц, как между ними будет организована навигация пользователей, трудно продумать одну из основных составляющих дизайна — меню сайта.

Поэтому я решил предолжить небольшой план, которого придерживаюсь сам при работе над сайтами: Читать далее…

Боковые вкладки в Chrome

4X_Pro

Не раз замечал, что когда в броузере открыто более десятка вкладок, у меня резко падает производительность труда. И дело не в компьютере (его возможностей вполне хватает), а в том, что я начинаю в этих вкладках путаться, больше времени уходит на поиск нужной вкладки и нужно точнее целиться мышкой для переключения (приучить себя к Ctrl+Tab в броузере так и не получилось).

Но недавно узнал, что в последних версиях Chrome есть экспериментальная функция: показ вкладок сбоку, а не сверху. Попробовал... Читать далее…


Страницы:
Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.

<