С Днем Победы!
Blog. Just Blog

Web-мастеру и не только

Полезные решения для Web-мастеров
Web-мастеру и не только - RSS-канал Web-мастеру и не только - Карта сайта

Проверка доступности функции PHP

23.09.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
Ковырялся как-то в очередном сплойте, которым скрипткиддисы пытались проломить блог. Среди всякого говна нашел там интересную идею о проверке доступности функций PHP перед их вызовом. Реализация была такая же кривая, как и весь остальной код этих быдлохакеров, поэтому я переписал функцию проверки по-своему. Проверка выполняется тремя способами: анализом значения параметра disable_functions в файле php.ini, а также через функции PHP function_exists и is_callable. Использование всех трех способов проверки дает абсолютно точный результат.
  1. //--------------------------------------------------------------------------
  2. // Функция проверки существования и доступности другой функции PHP
  3. //--------------------------------------------------------------------------
  4. // Параметры: $func - строка имени функции
  5. // На выходе: true - функция есть и доступна для вызова,
  6. //            false - функция недоступна по какой-либо причине
  7. //--------------------------------------------------------------------------
  8. function is_function_enabled($func) {
  9.     $func=strtolower(trim($func));
  10.     if ($func=='') return false;
  11.     // Получить список функций, отключенных в php.ini
  12.     $disabled=explode(",",@ini_get("disable_functions"));
  13.     if (empty($disabled)) {
  14.         $disabled=array();
  15.     }
  16.     else {
  17.         // Убрать пробелы и привести названия к нижнему регистру
  18.         $disabled=array_map('trim',array_map('strtolower',$disabled));
  19.     }
  20.     // Проверить доступность функции разными способами
  21.     return (function_exists($func) && is_callable($func) &&
  22.             !in_array($func,$disabled)
  23.     );
  24. }
Пример использования:
  1. // Проверка доступности функции shell_exec
  2. if (is_function_enabled('shell_exec')) {
  3.     echo shell_exec('ping yandex.ru');
  4. }
Функцию можно использовать, например, для проверки доступности нужных вам функций на различных бесплатных хостингах с ограничениями, или для выбора функции взаимодействия с операционной системой, типа shell_exec, если часть из них по какой-то причине запрещены.

Просмотров: 6776 | Комментариев: 5

Стилизация checkbox с использованием CSS и JavaScript

11.08.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
В некоторых случаях при верстке макетов сайтов возникает необходимость нестандартной стилизации различных полей ввода HTML-форм. Например, дизайнер в фотошопе слепил красивый шаблон с вычурными графическими элементами, макет утвержден и заказчик слышать ничего не хочет про "стандартные элементы управления". Оформить поля ввода и всякие кнопочки еще не проблема, а вот с элементом checkbox уже сложнее. Мало того, что каждый браузер его отрисовывает по-своему, так еще визуально у него поменять ничего нельзя. Для решения проблемы можно воспользоваться следующим хитрым трюком: checkbox помещается внутрь контейнера, например div, после этого сам checkbox визуально скрывается путем установки ему 100% прозрачности, а у контейнера меняется стиль в зависимости от состояния "галочки" в checkbox.
  1. <style type="text/css">
  2. /* Стиль для обертки отмеченного checkbox'а */
  3. div.boxChecked {
  4.     backgroundurl("checkbox.gif"no-repeat 0 3px;
  5. }
  6. /* Стиль для обертки неотмеченного checkbox'а */
  7. div.boxUnchecked {
  8.     backgroundurl("checkbox.gif"no-repeat 0 -18px;
  9. }
  10. /* Прозрачный стиль для checkbox'а */
  11. div.boxChecked inputdiv.boxUnchecked input {
  12.     cursorpointer;
  13.     margin0px;
  14.     padding0px;
  15.     width16px;
  16.     opacity0;
  17.     -moz-opacity0;
  18.     -khtml-opacity0;
  19.     filterprogid:DXImageTransform.Microsoft.Alpha(opacity=0);
  20. }
  21. </style>
Для фона отмеченного и неотмеченного checkbox'а используется одно и то же цельное изображение, только оно сдвинуто по вертикали для различных положений. Это позволяет менять фон без дополнительной загрузки новых изображений и связанного с этим неприятного моргания. Кроссбраузерный стиль checkbox'а устанавливает для него полную прозрачность. К сожалению, специфические определения стиля типа -moz-opacity, -khtml-opacity и filter не соответствуют спецификации CSS, поэтому, если вы хотите добиться полного прохождения валидатора, то придется извернуться с JavaScript.

Читать статью целиком »
Просмотров: 19564 | Комментариев: 14

Определение MIME-type файла по его расширению

03.07.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
MIME - Multipurpose Internet Mail Extension - стандарт для определения типа передаваемой информации и механизмов ее обработки. Он сообщает браузерам о том, как им надо обращаться с запрошенными файлами, имеющими то или иное расширение. Так, например, если сервер отдает браузеру в заголовках тип MIME "text/html" для файлов с расширениями htm, html и shtml, то браузер интерпретирует все файлы с этими расширениями как файлы HTML. Также очень желательно передавать корректный MIME-type при отдаче файлов скриптом в антилич-системах.

Недавно я ковырялся в одной коммерческой CMS с закрытым кодом и нашел там одну полезную функцию с большим списком MIME-типов для различных расширений файлов (всего около 400). Реализация самой функции была сделана ужасно, поэтому я ее тут даже приводить не буду. Список я немного почистил и сохранил в удобном для работы виде. Функцию тоже переписал:
  1. //----------------------------------------------------------
  2. // Функция определения MIME-типа файла по его расширению
  3. //----------------------------------------------------------
  4. function get_mime_type($ext) {
  5.     // Массив с MIME-типами
  6.     global $mimetypes;
  7.     // Расширение в нижний регистр
  8.     $ext=trim(strtolower($ext));
  9.     if ($ext!='' && isset($mimetypes[$ext])) {
  10.         // Если есть такой MIME-тип, то вернуть его
  11.         return $mimetypes[$ext];
  12.     }
  13.     else {
  14.         // Иначе вернуть дефолтный MIME-тип
  15.         return "application/force-download";
  16.     }    
  17. }
На входе функция получает расширение файла без точки, например, "zip", "MP3", и возвращает его MIME-тип, если его можно определить, или дефолтный, если расширение не содержится в списке. Расширение файла удобнее всего получить функцией pathinfo.

Читать статью целиком »
Просмотров: 14136 | Комментариев: 9

Динамическое добавление скриптов на web-страницу

16.06.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
Современные динамические интерфейсы web-страниц подразумевают не только изменение содержимого различных тегов, но и динамическую подгрузку скриптов JavaScript с их последующим выполнением. Например, получение скриптов или данных для них через AJAX. Способы передачи данных я тут рассматривать не буду, а расскажу о том, как динамически добавить скрипт на сформированную web-страницу и затем выполнить его. Это можно сделать как минимум двумя способами. Первый способ - добавление скрипта средствами JavaScript с использованием стандартной функции eval. Она получает в качестве аргумента строку и, рассматривая ее содержимое как код JavaScript, пытается выполнить. Например:
  1. <script type="text/javascript">
  2. eval('function do_my_job(txt) { alert(txt); }');
  3. do_my_job('ok');
  4. </script>
Второй способ, более корректный, - это добавление скриптов через DOM. При этом создается новый объект script, заполняется его тип и текст, а затем созданный объект добавляется в качестве дочернего элемента к элементу head. В этом случае добавленный скрипт будет сразу же выполнен. Для удобства я написал небольшую функцию, получающую в качестве аргумента текст скрипта, и добавляющую его на страницу.
  1. <script type="text/javascript">
  2. function add_script(txt) {
  3.     var newScript document.createElement("script");
  4.     newScript.type "text/javascript";
  5.     newScript.text txt;
  6.     document.getElementsByTagName('head')[0].appendChild(newScript);
  7. }
  8. </script>
Во всех тестовых браузерах (IE 5.5-8, Opera 7-10, Firefox 2-3, Chrome, Safari и т.д.) скрипт выполнялся также при добавлении его к элементу body. Опытным путем установлено, что скрипт срабатывает при добавлении и к другим элементам страницы, но лучше, наверное, так не делать для сохранения кроссбраузерности и совместимости.

Читать статью целиком »
Просмотров: 14244 | Комментариев: 15

Обработка недоступных картинок на сайте

30.05.2010 | Категория: Web-мастеру и не только | Автор: ManHunter

Обработка недоступных картинок на сайте

Одно из неприятных явлений в Интернете - это "битые" ссылки, в частности ссылки на картинки. Сайты могут закрываться, переезжать, менять свою структуру, это естественный процесс. Хуже, когда от этого страдает ваш сайт. Если на сайте всего несколько страниц, то "битые" картинки вы сможете легко отследить самостоятельно, а о некоторых могут сообщить ваши посетители. Но если страниц много, то в большинстве случаев "битые" картинки могут висеть незамеченными достаточно долго. На своем хостинге их, в принципе, можно отследить по появлению ссылок в логе ошибок 404 (страница не найдена), а если изображения находятся на другом сервере?

Читать статью целиком »
Просмотров: 7647 | Комментариев: 11

prev 01 ... 24 25 26 27 28 29 30 ... 35 next
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.09 сек. / MySQL: 2 (0.0021 сек.) / Память: 4.75 Mb
Наверх