Архив рубрики «php»

Хакерство

14.07.2011

Логотип PHPЧто вы можете сказать про код «$_q and die($_q);» ? Когда я прочитал эту строку, я подумал «Что за идиот это написал!!» Но это писал я два года назад, и при том еще полчаса гордился какой я умный.

Код следующий:

$_q = $Test->GetNextQuestion();
$_q and die($_q);

После часа копания в коде, оказалось, что есть объект $_q класса Model_Question. В классе есть метод $_q ->__toString(), который выдает HTML код из шаблонизатора.

Еще раз получил пример, чтобы не писать выкрутасы, а нормальный-рабочий ход:

$Question = = $Test->GetNextQuestion();

if ($Question)

{

print $Question->__toString();

}

Delphi4PHP

02.05.2009

Начинаю немножко писать.

Когда я услышал про Delphi4PHP, я решил что это шутка. Delphi уже был давно мертв, хотя он мне нравился. Во времена господства творения Borland, С/C++ кодеры люто ненавидели «дельфятников» и Delphi в общем, за низкий порог входа. Программы можно было просто рисовать, немного зная Pascal.

Я же с самого начала стал изучать ObjectPascal, WinAPI, VLC – поэтому представлял, что происходит, если нажата вот эта кнопочка. Хотя я так ничего и не написал на нем, кроме простенькой оболочки для CD, знания у меня были нормальными.

Любители «полноценных языков» за то-же ненавидели PHP. Обосновано ненавидели. Люди, которые считали себя «HTML/PHP программистами» заполонили все. Они не знают, что такое HTML, HTTP, OSI, как передать переменную из PHP в Javascript, пишут копи-пастом, и т.д.

И теперь силы двух языков объединились!

CodeGear сделал такой шедевр. Не так давно у меня дошли руки и я решил посмотреть, что же такое Delphi for PHP. Ужас! Все объекты, огромное количество файлов. Создатели решили перенести фреймворк VLC, который работал в обычном Delphi на PHP. Получилось ужасно.

Delphi for PHP интересен как пародия на полностью ОО фреймворки. Писать что-то на нем такое же извращение, как таксовать на бульдозере.

По теме: Я думал хуже не бывает – Delphi for PHP 2

И..ция

11.12.2008

Интернационализация (тьфу, написал без ошибок) – не только перевод всего контента на другой язык. Перевести один раз не составляет труда, сложнее потом поддерживать в нужном виде. Поделюсь своим опытом перевода на английский сайта giduv.com

Данные. Нужно как-то хранить русский и английский контент в базе данных. Для базы я принял решение в лоб – создал такие же таблицы, с другим префиксом. Некоторые таблицы, которые одинаковы в обоих версиях (пользователи, и т.д.) заменил на views. Новые статьи из русской части автоматически добавляются в английскую.
Шаблоны. Изначально была мысль использовать два каталога для шаблонов, но потом я посмотрел в сторону gettext. Очень понравилась его идеология, но к сожалению он никак не вставал на хостинге. Поэтому пришлось написать его аналог, который парсит ini файл и добавляет данные в массив. Кроме этого $I18N['новости'] == ‘news’, а $I18N['НОВОСТИ'] == ‘NEWS’. Да, в некоторых местах сайта тексты пишутся большими буквами. Шаблон обрабатывается с помощью префильтра Smarty, поэтому данные подставляются один раз при компиляции. Это гораздо быстрее, зато приходится очищать кеш при каждом изменении языкового файла. Обработку шаблона я делал по статье Gettext and Smarty
Адрес. Особо не ломал голову над адресом английской версии сайта, сделал домены en/ru.site.com. Такой подход позволяет очень просто переходить от языка к языку, просто заменяя хост. Например, если нет такой страницы на английском, страница 404 может предложить русскую версию или перевести страницу в Google Translate.
Определение языка. Очень удобно, когда заходишь на сайт, а он сам определяет твой язык. В голове крутилось несколько способов:

  1. Разбор Accept-Language. В php можно прочитать значение переменной $_SERVER['HTTP_ACCEPT_LANGUAGE']. У Firefox3/Win это «ru,en-us;q=0.7,en;q=0.3″, в IE7/XP «ru», Opera дает «ru-RU,ru;q=0.9,en;q=0.8″. Все круто, осталось только распарсить и пользоваться. А не так то было. Что делать с людьми, которые сидят в английсков ОС, или под английски браузерами? Таких не так и мало. К тому-же региональные языки, вроде чувашского или татарского не будут в списке.
  2. Определение по IP. В сети есть открытые базы, по IP адресу можно сказать страну. Пришел человек с России и СНГ, получи русскую версию. Откуда-то с запада – английскую. Но базы адресов со временем устаревают, что приведет к неверным срабатываниям. Например MSN и Google уже пару месяцев считрают, что я живу в Харькове. Соответсвенно выдача идет по украинским сайтам, а Live.com вообще на украинском. Это серьезно раздражает, т.к. кроме фамилии на -ко общего с Украиной у меня мало.
  3. Выбрать вручную. Пользователь сам выбирает язык, ему нужно сделать лишнее действие. А дальше начинаются только плюсы: человек спокойно ходит по любой языковой версии. Такой вариант мне больше по душе.

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

Буду очень рад услышать ваши способы интернационализации сайта.

P.S. На первое время можно сделать версию, переведенную с помощью Google Translate. Например перевод моего блога на английский

Email 2 PHP

20.08.2008

По одной работе раз в неделю присылают файл, который нужно залить POST’ом в одну форму – и порядок. Давно хотел это оптимизировать. Но гемороиться с POP3, IMAP4 не очень хотелось.
Теперь в блоге «AbavaNet technical corner» нашел решение – Сервис smtp2web, передающий почту в виде POST запроса. Жалко то, что он не извлекает вложения и не отправляет их как файлы – придется парсить письмо.

Framework vs Велосипед

02.07.2008

Долгое время я изобретал «велосипед», поддерживая свою самобытную «CMS». Сначала было все ужасно, потом начал все чаще пользоваться сторонними библиотеками, и все пошло по лучше. Конечно нет никакой модульности, сайт собирается по частям из других сайтов + полируется напильником.

фото: veloton.ru

Зачем нужно переходить на Framework:

  1. Перекладывание работы по поддержке кода на чужие плечи. Теперь не нужно париться, что в классе вывода постраничной разбивки есть глюк, и страницы больше 150 не отображаются; заливать свои изменение на сайты
  2. Лучшая читаемость кода. Недавно пришлось модернизировать сайт, сделаный в далеком 2001-2002. Ужас! WTF!!!! Что и навело меня на мысль, что мой код для стороннего программиста будет не лучше. Код подчиняется правилам фреймворка, поэтому лучше понимаем
  3. Больше свободы, по сравнению с CMS.
  4. Использование готовых решений. Снимает много головной боли и умственных усилий, которые я лучше потрачу на другое
  5. Ускорение работы. Помню, раньше я всегда писал модули заного. Хочу новости – посижу денек и напишу. В условиях, когда сайты все сложнее и сложнее, а сделать нужно было вчера, фреймворк дает реальное ускорение

Уже полгода я ломаю голову, как отойти от этого пути, рассматривал ROR, Django, CodeIgniter, CakePHP.
ROR и Django: это всё круто, но довести мое знания Ruby/Python до знаний PHP – долго. А работать нужно сейчас. В будущем буду по-тихоньку учить Python, неплохо развивает мозги.
Zend Framework напоминает сумоиста, такого количества классов давно не видел.
Symfony для меня сейчас сложновата.
CodeIgniter показался очень простым. Поигрался с ним, и решил попробовать
CakePHP понравился, даже не знаю чем. Может быть удобным сайтом и простым туториалом.

Попробую сделать маленькую визитку на CakePHP, потом поиграюсь с CI и Symfony

Нашел на Хабре пару тем:


Root of evil

03.04.2008

В последнее время все чаще стали слышны разговоры про оптимизацию PHP. Сегодня на на Хабре появилась статья «40 советов по оптимизации вашего PHP-кода«, в которой есть советы вроде «Вместо strlen($string) > 5 использовать !isset($string{5})». Из-за сомнительного прироста в пару процентов (дай бог), который может нивелировать выход новой минорной версии PHP, терять читабельность когда и переносимость (конструкция $string{pos} не будет в PHP6) – сомнительное удовольствие.
Вместо того, чтобы заниматься такой оптимизацией, гораздо проще добавить индексы в таблицу, использовать кешировние или тупо добавить больше ОЗУ на сервере.

Premature optimization is the root of all evil

P.S. Это мой первый пост про PHP, хотя с самого начала я хотел только про него и писать

Мини рецензия на книги

02.01.2008

Поздравляю всех читателей с Новым Годом! Этот пост лежал в черновике уже месяц, сегодня решил его дописать до конца.

В последнее время заказал немного книг, решил поделиться впечатлениями про них.
Сейчас понимаю, что больше не буду заказывать книги через интернет, когда можно проехать 20 минут до магазина и выбрать интересующую (перед этим пролистав ее) или заказать гораздо дешевле, чем в интернет магазинах.
Основное разочарование было в том, что много книг опускаются до простого перепечатывания мануала.

MySQL учебное пособие (Люк Веллинг, Лора Томсон)
Первая книга, которую купил через Интернет. Кроме этого, ничем не интересна. Читать можно тем, кто хочет немного подучиться в знании MySQL. Часто дублирует мануал.
Резюме: не брал бы.

MySQL 5. В подлиннике (Максим Кузнецов, Игорь Симдянов)
Большая книжка про MySQL. Вроде бы много написано, но большинство материала дублирует мануал по MySQL, много места занимает детальное описание функций MySQL, данные по типам БД и т.д. Пока мне из нее мало что пригодилось.
Резюме: Стоит полистать перед покупкой.

Профессиональное PHP программирование, 2-е издание (Аргерих, Чой, Коггсхол, Эгервари, Сколло)

Жалею, что не прочитал книгу раньше. Издание 2007 года, но оригинал писался гораздо раньше, когда еще не знали про register globals off и magic quotes gpc. Есть глава про MVC, подробно описано про LDAP, POP3/IMAP4, PHP-GTK.
Резюме: прочитать стоит

PHP. Сборник рецептов (Д. Скляр, А. Трахтенберг)

Готовые рецепты для PHP. Хороший формат текста – задача, решение, обсуждение. Над многими рецептами я ломал голову раньше, но даже сейчас есть что-то новенькое. Много дельной информации.
Резюме: Обязательна

PHP 5 в подлиннике (Котеров Д. В.)
Автор Дмитрий Котеров – ведущий разработчик сервиса «Мой Круг», который недавно был куплен Яндексом. Также он сделал проект «Денвер», и нескольких PHP библиотек, которые колоссально облегчили мне работу. Книга написана живым языком, будет понятна как новичку, так и закаленному в боях профессионалу, который может узнать из нее много мелких деталей.
Резюме: Обезательно!

В скором времени хочу заказать книги «MySQL», «MySQL сборник рецептов» Поля Дюбуа. Что можете сказать про эти книги? Да и вообще, что можете посоветовать почитать по теме MySQL, JavaScript ?

В следующих постах постараюсь написать про библиотеку HTML_FormPersister, помогающую работать с формами.

Denwer-3

01.12.2007

Недавно вышла альфа версия 3-й версии Денвера – небольшого набора дистрибутивов Apache+PHP+MySQL.
Apache подрос до 2.х, PHP5, MySQL5.
Сложно представить, как я жил без этого пакета: тестировать проекты на удаленном сервере – слишком долго, каждый раз настраивать виртуальные хосты Apache – муторно.

Буду тестировать.

P.S. что-то долго я не писал, буду исправляться. На следующей неделе напишу миниобзор книг, которые удалось прочитать не так давно

PHP тестирование на Мамбе

05.11.2007

В блоге отчаяного PHP-ника нашел ссылку на PHP тест на Мамбе.
Тест странноватый, там достаточно вопросов про Linux, SVN, но вопросов по MySQL мало. А пока это самый интересный тест, который я видел.

Еще одна пузомерка

Грузите апельсины бочками

24.10.2007

9 Способов загрузить файлы на сервер

Перед любым web разработчиком рано или поздно становится проблема загрузки файлов на сервер. Заказчикам нужно размещать прайслист или поделиться фотографиями с конференции или …

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

1) По одному файлу

Самый простой способ – разместить поле для загрузки файла (<input type=’file’ />) и мучить пользователей загрузкой нескольких файлов по одному.

2) Несколько полей

Вместо одного поля размещаются несколько. Часто количество полей неограниченно и их можно добавлять и удалять через JavaScript. Гораздо удобнее, чем 1-й способ, но приходится выбирать загружаемый файл несколько раз. Занятие, я вам скажу, не из приятных. Когда приходится загружать файлы с именами IMG_XXXX.jpg, можно легко по ошибке выбрать один файл два раза или пропустить нужный.

3) Загрузка архива

Пользователь архивирует нужные файлы, а потом загружает архив через форму. Чуть-чуть экономим трафик пользователя, зато приходится делать лишние действия.
Кроме этого есть проблемы с распаковкой больших проблем, т.к. у PHP может просто
не хватить памяти для извлечения нескольких 5-7 мегапиксельных фотографий (стандартное ограничение на память – 8 МБ), у хостера может не быть нужного расширения и т.д.

4) Загрузка по FTP

FTP специально разработан для передачи файлов что понятно из его названия (File Transfer Protocol). Удобен, если файлы нужно загружать определенному кругу лиц.
Неудобств много:

1) Разделение пользователей. Создать FTP аккаунт не так просто, как добавить запись в базу. А на shared хостинге это почти невозможно
2) Настройка. Обычному пользователю не очень удобно устанавливать FTP клиент, разбираться с активным/пассивным режимом и т.д.

5) Отправка по почте

Такая возможность загрузки фотографий есть на Flickr и Picasa Web от Google. Человек отправляет на e-mail vasya.pupkin@photo.example.com письмо с приложениями, которые извлекаются и добавляются в фотоальбом.
Удобен только тогда, когда есть встроенный почтовый клиент. В Windows XP есть удобный мастер (Отправить -> Адресат), который позволяет маштабировать фотографии перед отправкой.
Но если вы пользуетесь web почтой, то получаете все неудобства 1-3 способов.
Кроме этого средствами PHP не очень просто принимать почту и извлекать из нее вложения.

6) Java апплет

Сейчас очень редкий способ. Можно загружать множество фотографий и показывать статус загрузки, только очень мало пользователей разрешают Java.

7) Мастер публикации файлов в Web

Удобный мастер Проводника (Windows Explorer), позволяет публиковать файлы на веб узлах сайтах. Показывает статус загрузки, миниатюры загруженных изображений, в общем рай для обычного пользователя.
Недостатки:

1) Привязан к Windows XP (не знаю, есть ли такая возможность в Vista)

2) Необходимо запускать ключ реестра, что не каждый здравомыслящий пользователь сделает

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

8) Сторонняя программа

Скачиваете программу, выбираете файлы и загружаете. Простор для фантазии огромен, можно сделать все что угодно. Только программу придется разрабатывать и поддерживать, объяснять пользователям как ее настроить для работы через прокси и т.д.

9) FancyUpload

Спасибо Жеке за интересную ссылку. Удобная штука, использующая Flash для выбора файлов и загрузки, HTML+Javascript для всего остального. Решение сложно в настройке, не передает cookies и http авторизацию. Для загрузки файлов из Firefox под Windows Flash часть использует движек IE. Зато есть очень красочное отображение прогресса загрузки файлов, в первый раз завораживает.

Средство более массовое, чем Мастер Публикации, но все равно лучше сделать обычную форму, на случай, если у пользователя запрещен Flash.

Пока еще не до конца протестировал FancyUpload, но скорее всего именно его буду использовать для загрузки фотоотчетов на свой сайт.

А какой способ загрузки используете вы?