Заметки программиста

Каждый будний день, ровно в 9, я пишу о себе, о своей работе и о технологиях web программирования123

Posts Tagged ‘ php ’

В разделе проектов маленькое обновление, добавилась php-функция для перевода с русского языка на английский с помощью Google Translate.

Многие для генерации Excel файлов на PHP используют Excel Writer, я давно еще писал о нем. Проблем нет и все хорошо работает до тех пор пока нам не нужно записать текст на родном языке, здесь то все и ломается. Хотя MS Office откроет сгенерированный файл корректно, а вот OpenOffice уже нет и покажет полное уныние неведомой кодировки. На самом деле в этой прекрасной библиотеке есть небольшой баг, и убив кучу времени, я нашел патч это исправляющий, итак:

В файле class.writeexcel_workbook.inc.php исправляем

$this->_codepage          = 0x04E4;

на

$this->_codepage          = 0x04E3;

И в class.writeexcel_format.inc.php

$this->_font_charset   = 0;

на

$this->_font_charset   = 0xCC;

Ща покажу как легко определять слова во множественном числе, вроде: 4 слона, 111 попугаев, 2 удава.

Было дело писал целую функцию, вот здесь можно посмотреть, там куча строк. Но это уже не трендово, теперь надо делать так:

$plural = $n%10==1&&$n%100!=11?'комментарий':($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?'комментария':'комментариев');

$plural — результат, $n — число/количество

Вся логика в одну строку, максимально просто, нужно только заменить «комментарий,комментария,комментариев» на свои значения, чтоб не путаться запомните как писать: 1 комментарий, 2 комментария, 0 комментариев. Заметка написана специально для веб-мастеров и программистов кому лениво или трудно описать подобную логику, но тем не менее сделать красиво нужно.

Спасибо ArtyV за ссылку на супер материал по множественным числам на всех языках. Мой пример уже адаптирован на php, т.к. только в php тренарный оператор имеет левую ассоциативность, а не правую как другие языки, поэтому для php пришлось явно указывать скобками нужную логику.

PHP не «объектно ориентированный», он «объектно способный».

Да, есть возможность объявлять классы, а в них методы и свойства, казалось бы, объектен, но какие мы видим встроенные объекты? В большинстве ОО языков даже типы данных — объекты, но в PHP этого нет и не будет. Вот Ruby можно так назвать, там чего не коснись — объект, даже числа. Java с некоторыми исключениями является ОО языком.

Даже 6 версия PHP не тянет на это звание. Есть лишь поддержка стиля такого программирования, но называться таким языком PHP не может.

На самом деле я просто разместил объяву, но ход мысли мне понравился, идем кланяться автору сюда.

Три маленьких Tips&Tricks на PHP чтоб сделать ваши скрипты более компактными и короткими.

Условия

Это, наверное, все знают, но увлекаться такой штукой много не стоит, это лишь для супер простых операций

Было:

$show = true;
if($show) echo 'Да';
else echo 'Нет';

Стало:

$show = true;
echo $show?'Да':'Нет';

По-моему очень неплохо, идем дальше.

Короткие вставки php вывода

Очень удобно если у вас шаблоны реализованы обычным PHP без шаблонизатора

Было:

<h1><?php echo $title; ?></h1>

Стало:

<h1><?=$title?></h1>

Да, для шаблонов красота.

Вставка переменных в строку

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

Было:

$str = "Мама ".$this->MotherAction." ".$subject."!";
$inp = "value='".$_POST['some']."'";

Стало:

$str = "Мама {$this->MotherAction} $subject!";
$inp = "value='{$_POST['some']}'";

Этот синтаксис работает только для двойных кавычек, кстати с этим связана скорость обработки двойных и одинарных кавычек.

Вот такие простенькие советы облегчающие жизнь вашей клавиатуре и способствующие снижению ряби в глазах :)

Если ваш сайт насыщен контентом, то пожалуй первое что нужно сделать после оптимизации изображений и скриптов это сжать html код.

Со статикой (картинки, javascript, css) все понятно: картинки ужать по отображаемому размеру и оптимизировать качество, javascript упаковать в gzip (об этом отдельно), css файлы (хотя гораздо лучше когда файл один) можно просто почистить от лишних пробелов и мусора.

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

Для PHP есть специальное расширение zlib, которое уже установлено на большинстве хостингов, ничего сложного в его использовании нет, нужно просто дописать одну строку в начало вашего скрипта до того как будут выведены какие-либо данные. Если говорить максимально приближено: все что нужно сделать, это дописать ваш файл index.php подобным образом:

<?php
ob_start("ob_gzhandler");
...

И в случае если клиент скажет о том что он может принять данные в сжатом виде сервер сам отправит ему заголовки что данные будут в Gzip и сожмет весь поток вывода.

Из личного опыта. Документ, для редактирования большого количества записей, без сжатия имел размер 300Кб и загружался очень не быстро, так как по ходу загрузки браузер пытался частично построить документ, по времени на это уходило от 5 до 10 секунд. После сжатия размер документа стал 15Кб и открывался менее чем за пол секунды.

На free-lance.ru в честь нового года подарили CMS S.Builder, забавная иллюстрация прилагается

Очень не простая установка, хотя она описана простейшей и везде запускающейся, но это не так, нужен во-первых Zend Optimizer (т.к. CMS не бесплатная и секретни код зашифрован), во-вторых у меня не заработал htaccess файл при установке и сервер отдал 500 ошибку.

Допустим что установку победили, и попали в админку, там все тоже не просто: вверху пиктограммы, но они постоянно меняются местами хаотичным образом, зато есть меню, там все всегда на месте, а вот работа с каким либо разделом админки довольно затруднительна, огромное количество всплывающих окон, на простые операции иногда одновременно открывается 3-4 таких окна.

А САМОЕ ГЛАВНОЕ там есть подсказка по типу скрепки из 97 Word’а! Правда в ее роли как раз этот мужичок в каске, но надоедает он точно так же как та скрепка и передает всю полноту ощущений :)

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

В общем я не в восторге, но за подарок в 5900 рублей спасибо CBS-Group, в следующий раз лучше деньгами. Демо можно скачать тут — http://www.sbuilder.ru/demonstration/local_distribution_kit/

Забавная статья — как один чувак со скриптом боролся. До чего техника дошла! В двух словах о чем статья:

Имеется хакерский скрипт, но его исходный код (на PHP), как бы зашифрован! Это не стандартный способ шифрования типа Zend Guard и не требует дополнительных серверных расширений. Вот как выглядит скрипт:

eval(gzinflate(base64_decode(‘FJ3HcqPsFkUf......

Ну тут, казалось бы, все просто: запакован base64, затем сжат gz. Попробуем вывести результат, не выполняя сам код:

$script =  base64_decode($script);
$script = gzinflate($script);
echo $script;

Результат был самым неожиданным:

eval(gzinflate(base64_decode(‘FJ3HcqPsFkUf......

Как же, так же? Тот же самый код! Но не совсем, там есть небольшие изменения. На самом деле чтоб распаковать код и посмотреть на него таким какой он должен быть, нужно повторить операции base64_decode и gzinflate 11 раз!

За вчерашний день я видел потсов 5 в блогах о том как же загружать файлы так чтоб отслеживался ход загрузки. И вот виновник торжества — некий Berkut с sql.ru, он видимо просто перевел или где-то взял очень старую буржуйскую статью. Никто не посмотрел, но его потс датирован 2006м годом… друзья не верьте шарлатанам, этот код не работает. Есть еще реализации подобного рода скриптов (еще один дружищще), все используют одну и ту же методику, работающую видимо только на Windows серверах или еще каких-то особенных, идея заключается в измерении размера temp-файла загужаемого файла, практически все сервера дают либо 0 либо ошибку при таком измерении.

Реально работают только те что используют специальные расширения для php, хороший пример. И в документации php верно подметил кто-то.

Такая вот наклеечка на машину :)