Blog. Just Blog

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

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

Как удалить BOM из файлов

24.12.2017 | Категория: Web-мастеру и не только | Автор: ManHunter
Маркер последовательности байтов, он же BOM - специальный символ Юникода, который вставляется в начало текстового файла для обозначения того, что в этом файле используется Юникод. Согласно спецификации, использование этого символа не является обязательным, однако оно широко распространено, что иногда приводит к проблемам при обработке данных.

Так, к примеру, однажды я столкнулся с ситуацией, когда от сторонней системы передавался файл в формате JSON, а я у себя должен был извлечь поступившие данные при помощи стандартной функции PHP json_decode. Файл передается и принимается успешно, на первый взгляд имеет абсолютно корректную структуру, правильно открывается в браузере и блокноте, но функция декодирования все равно возвращает ошибку, что данные некорректные. Сейчас я не смогу сказать, сколько времени потратил на выяснение причины ошибки, пока, наконец, не решил открыть файл при помощи HEX-редактора. Оказалось, что всему виной был маркер BOM, из-за которого функция json_decode не могла корректно раскодировать файл.

Для решения проблемы я быстренько нарисовал вот такую функцию в несколько строчек:
  1. // Функция удаления BOM из потока данных
  2. function remove_BOM($data) {
  3.     // Маркер UTF-8
  4.     if (substr($data,0,3)=="\xEF\xBB\xBF") {
  5.         return substr($data,3);
  6.     }
  7.     // Маркер UTF-16
  8.     elseif (substr($data,0,2)=="\xFF\xFE") {
  9.         return substr($data,2);
  10.     }
  11.     else {
  12.         return $data;
  13.     }
  14. }
При получении файла данные сперва обрабатывались при помощи этой функции и только после этого отправлялись на декодирование в json_decode.

Просмотров: 923 | Комментариев: 1

Установка ImageMagic для PHP5 под Windows

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

Установка ImageMagic для PHP5 под Windows

По умолчанию PHP идет с библиотекой для обработки изображений GD. Удобная и мощная штука, которой хватает для большинства задач. Но иногда ее функций становится недостаточно. В этом случае надо установить дополнительную библиотеку ImageMagic. Вот и у меня на рабочем проекте возникла необходимость работать с графическими файлами в формате SVG. Продакшен крутится на CentOS, а рабочая машина под Windows. Везде пришлось устанавливать ImageMagic. Под CentOS все делается парой команд, а вот под Windows пришлось повозиться.

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

Символ рубля без использования шрифтов

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

Символ рубля без использования шрифтов

Небольшой трюк, как можно нарисовать символ рубля без использования юникода и внешних шрифтов, средствами одного только CSS. Кроме того, даже с отключенными стилями цена будет отображаться просто с буквой "Р", что тоже, в принципе, допустимо.
  1. <div class="price">Цена20,100,999 <span class="rub">Р</span></div>
Блок с ценой обернут в элемент DIV, а символ рубля находится внутри строчного элемента SPAN. Обратите внимание, что в тексте страницы символ записан обычной буквой "Р", а горизонтальная палочка выполнена в виде символа "узкое тире" и добавляется к нему в CSS при помощи псевдоэлемента ::before.
  1. <style type="text/css">
  2. .price {
  3.     font-familyVerdana;
  4.     font-size24px;
  5. }
  6.  
  7. .rub {
  8.     positionrelative;
  9.     color#FF0000;
  10. }
  11. .rub::before {
  12.     content'–';
  13.     positionabsolute;
  14.     bottom: -4px;
  15.     left: -2px;
  16. }
  17. </style>
Способ кроссбраузерный, работает как на стационарных, так и на мобильных платформах. При использовании разных размеров шрифтов скорее всего понадобятся корректировки смещений палочки по горизонтали и вертикали, это вы можете легко сделать самостоятельно. Готовый результат можно посмотреть на демонстрационной страничке.

Просмотров: 671 | Комментариев: 2

Асинхронный запуск PHP-скриптов

13.10.2017 | Категория: Web-мастеру и не только | Автор: ManHunter
Для сбора и обработки различной информации на сервере приходится запускать некоторое количество скриптов-автоматов. Работа некоторых из них может занимать достаточно продолжительное время, поэтому приходится использовать параллельный запуск сразу нескольких процессов. В PHP нет штатных функций для асинхронного запуска процессов, для этого я применяю вот такой нехитрый трюк с использованием cURL.
  1. // Адрес вызываемого скрипта и параметры его запуска
  2. $url='http://example.com/process.php';
  3. $param1='dummy';
  4. $param2='foobar';
  5.  
  6. $ch=curl_init();
  7. curl_setopt($chCURLOPT_URL$url);
  8. curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
  9. curl_setopt($chCURLOPT_HEADERFALSE);
  10. curl_setopt($chCURLOPT_POSTTRUE);
  11. curl_setopt($chCURLOPT_POSTFIELDS'param1='.$param1.'&param2='.$param2);
  12. // Не ждем результат выполнения запускаемого скрипта, выполнение
  13. // основного процесса прекращается по таймауту
  14. curl_setopt($chCURLOPT_TIMEOUT3);
  15. curl_exec($ch);
  16. curl_close($ch);
  17. // Обработчик запущен, можно переходить к запуску следующего процесса
В приведенном примере вызываемому скрипту передаются параметры в двух переменных POST param1 и param2.

При таком режиме запуска возникает небольшая проблема с получением обратной связи от запущенных скриптов. Я решил ее просто: результаты записываются в лог-файл и в специальную таблицу базы данных. Анализом результатов занимаются следующие обработчики, но это уже совсем другая история.

Просмотров: 910 | Комментариев: 0

Скрипт быстрого выбора для элемента SELECT

22.09.2017 | Категория: Web-мастеру и не только | Автор: ManHunter
Небольшой вспомогательный скрипт на JavaScript, который облегчает работу с выпадающими списками. Суть его в том, что рядом с элементом select создается текстовое поле. При вводе фрагмента строки в это поле, выпадающий список автоматически устанавливается на строку, в которой этот фрагмент найден. Это заметно упрощает работу с формами, где есть длинные выпадающие списки. Форма остается прежней, никаких кастомных модификаций не требуется:
  1. <div>
  2.     <select>
  3.         <option value="">---</option>
  4.         <option value="1">Yellow Banana</option>
  5.         <option value="2">Red Apple</option>
  6.         <option value="3">Green Leaf</option>
  7.         <option value="4">Some strange</option>
  8.     </select>
  9.  
  10.     <input type="text" onkeyup="selecthelper(event);">
  11. </div>
Важно, чтобы вспомогательное поле ввода находилось после выпадающего списка, но обязательно на одном уровне иерархии с ним в DOM-структуре. Вы можете, в случае необходимости, доработать скрипт-обработчик под ваши нужды. Верстка остается валидная, количество выпадающих списков и полей ввода в форме может быть любым.

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

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2019
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0016 сек.) / Память: 4.75 Mb
Наверх