Обновить
64K+

PHP *

Скриптовый язык общего назначения

74,74
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Скрипт для быстрого обзора информации о жёстких дисках

Время на прочтение1 мин
Охват и читатели4K
Решил поделится с хабрасообществом небольшим PHP скриптом, который немного экономит моё время.

Суть проблемы


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

Описание скрипта


Скрипт генерирует список всех жёстких дисков и их разделов. Для каждого раздела выделяется точка монтирования, свободное место на диске в процентах и общая ёмкость раздела. В последствии я добавил отображение текущей температуры жёсткого диска используя пакет hddtemp, как оказалось это очень помогает в определении эффективности охлаждения.

Читать дальше →

Установить время выполнения консольной команды

Время на прочтение3 мин
Охват и читатели4.6K
Довелось однажды писать скрипт, который в процессе своей работы пробегал по списку видео файлов и для каждого запускал ffmpeg с ключом, позволяющим получить информацию о файле. Мне собственно требовалось время воспроизведения.

Все бы хорошо, да вот на одном файле ffmpeg подвисал и не думал завершаться, а в момент завершения отваливался и php скрипт без видимых на то причин.

После долгих поисков решения данной проблемы, был найден код, который после небольшой переделки я готов представить на ваш суд :)

подробности

Нехватка памяти на хостинге для обработки картинок

Время на прочтение1 мин
Охват и читатели4.4K
На моём сайте пользователи загружают картинки, которые уменьшаются до необходимого размера (максимальная сторона — 800 точек). И столкнулся с ограничением памятя для работы PHP скриптов, для обработки фотографий 7 мпикс уже не хватало памяти, а сейчас фотоаппараты и поболее будут, не заставлять же пользователей обрезать фотографии до отправки, многие вообще тогда не будут загружать их.

Ошибка была на строке:
$image = imagecreatefromjpeg($filename);
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3072 bytes) in…

Чтобы решить проблему, необходимо уменьшить исходную фотографию. ImageMagick на хостинге не оказалось, поэтому не знаю, можно ли было решить проблему через эту библиотеку.
Зато оказалось что можно выполнить внешнюю команду через exec();

Решение проблемы:
$filename = 'image.jpg';
$maxside = 800;
$size = getimagesize($filename);
if (($size[0] > $maxside) or ($size[1] > $maxside)) {
  exec ('mogrify -resize '.$maxside.'x'.$maxside.' '.$filename);
  $size = getimagesize($filename);
}
$image = imagecreatefromjpeg($filename);

P.S.: Поиск в гугле показал несколько форумов, где проблему предлагали решать в лоб — уменьшением лимита памяти, путём договорённости с админами хостинга.

Переход хостеров на php 5.3, статистика

Время на прочтение2 мин
Охват и читатели6.4K
Поддержка php 5.3 у хостеров, диаграмма
Наверняка многих веб-разработчиков на php мучает вопрос: использовать вкусности php 5.3, или еще рановато.
Особо это актуально для разработчиков CMS/CMF. Ведь так, коллеги? :)
И вот я решил провести маленькое исследование, чтобы немного прояснить ситуацию с поддержкой php 5.3 у популярнх хостеров и разослал на ящики тех. поддержки вопрос по поводу поддержки php 5.3 на их виртуальном хостинге, а также их планов по переходу на эту версию, если в данный момент поддержки нет.
Итак, перейдем сразу к результатам:
а теперь подробнее

XML-шлюз своими руками

Время на прочтение6 мин
Охват и читатели8.4K
Если вам приходилось работать с платежными системами, сервисами регистрации и другими ресурсами, реализующими удаленное взаимодействие с центральным сервером, то наверняка сталкивались с понятием «шлюз». Это сервис, который предназначен для проведения операций на центральном сервере путем обмена электронными сообщениями между центральным сервером (сервером системы, имеющей шлюз) и программным обеспечением некого клиента.

Пожалуй, идеальный шлюз должен уметь принимать и отдавать данные в формате XML, хотя бы потому, что это стандартизированный, самодокументируемый формат, поддержка которого реализована во всех современных языках программирования (и даже на аппаратном уровне). Кроме того, XML поддерживает Юникод-кодировки UTF-8, UTF-16 и даже UTF-32. Вкратце, но с примерами, расскажу о принципах создания простых XML-шлюзов. Отправку запросов, простоты и, одновременно, разнообразия ради рассмотрим на примере POST/GET методов.

Читать полностью

phpFastCGI: настоящий FastCGI для PHP

Время на прочтение2 мин
Охват и читатели11K
— Добрый день. Вы наверняка уже наслышаны о протоколе FastCGI, он связывает Веб-сервер и сервер приложений, его реализации есть во множестве языков. Однако, в PHP реализация FastCGI до недавних пор была представлена лишь патчем PHP-FPM, который фактически не давал прироста производительности перед mod_php, поскольку он, вопреки идеологии FastCGI, перезапускает скрипт каждый раз заново. Идеология FastCGI подразумевает единовременную инициализацию приложения при запуске (подгрузку нужных классов, соединение с базой данных, и т.д.), и выполнение запросов один за другим.
phpFastCGI — правильная реализация FastCGI, которая позволяет добиться немыслимой производительности.
Разработка идёт очень активно, и новые фичи появляются очень быстро.
Страничка проекта — phpfastcgi.googlecode.com
Пример простого приложения — code.google.com/p/phpfastcgi/source/browse/trunk/example.php
В действии пример можно увидеть здесь — ya-tv.ru/phpfastcgid (может переодически лежать, это нормально, идёт тестирование). Страничка-пример легко выдерживает 5,000 запросов в секунду всего на 20-ти воркерах.
Проект пока в стадии тестирования и живёт только в SVN.
Приглашаю всех заинтересовавшихся принять в нем посильное участие!
$ svn checkout phpfastcgi.googlecode.com/svn/trunk phpfastcgi

Читать дальше →

Полноценные коллекции в PHP

Время на прочтение7 мин
Охват и читатели9.7K
Не так давно при разработке своего проекта возникла идея реализовать полноценные коллекции для хранения объектов одинакового типа, по удобству напоминающие List<Type> в C#.
Идея состоит в том, чтобы коллекции, содержащие объекты различных типов сами по себе различались, а не имели, скажем, один унифицированный тип Collection. Другими словами, коллекция объектов типа User это не то же что коллекция объектов Book. Естественно, первой мыслью было создание различных классов для коллекций (UserCollection, BookCollection, …). Но данных подход не обеспечивает нужной гибкости, плюс ко всему, нужно тратить время на объявление каждого подобного класса.
Немного поразмыслив, реализовал динамическое создание классов коллекций. Выглядит это так: пользователь создаёт коллекцию объектов типа Book, а нужный тип BookCollection создаётся (т.е. объявляется) автоматически.
Читать дальше →

Как сделать свой сервис временной почты

Время на прочтение1 мин
Охват и читатели6.9K
Не так давно была у меня необходимость во многих уникальных почтовых ящиках. Регистрировать их вручную было слишком долго и я решил воспользоваться сервисами наподобие tempinbox.com. Но почти сразу возникла проблема, ни один из них не одобрял автоматического использования. После этой попытки я понял что отвертеться мне не получиться и полез в раздел настройки почты своего кривенького VDS. Как оказалось все очень просто.
Читать дальше →

Небольшая программа на PHP-GTK

Время на прочтение3 мин
Охват и читатели6.9K

PHP-GTK — это привязка инструментария для создания графического интерфейса GTK+ к языку программирования PHP. Про неё уже писали на Хабре. Очень многие скептически относятся к этой библиотеке, даже не столько к ней самой, сколько к использованию PHP на десктопе. Но, так или иначе, библиотека существует и, более того, развивается, о чём говорит недавняя новость на официальном сайте. Поэтому предлагаю более детально познакомиться с PHP-GTK и написать небольшую программу.
Читать дальше →

Phemto и Паттерн Dependency Injection. Часть 1

Время на прочтение6 мин
Охват и читатели24K
Я не встречал хорошего описания паттерна Dependency Injection применительно к PHP.

Недавно ребята из Symfony выпустили свой контейнер DI, снабдив его подробной и хорошей книжкой о том как работать с этим паттерном.

Я вспомнил еще об одной библиотеке для DI, Phemto. Ее автор, — Маркус Бэйкер, создатель SimpleTest. К сожалению на сайте содержится краткая и невнятная справка. тем не менее, проект развиавется, а внутри дистрибутива лежит статья с крайне хорошим объяснением про DI, ну и руководством конечно. Phemto, — очень миниатюрный проект, состоящий из трех не очень больших файлов.

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

Читать дальше →

Переход к PHP 5.3

Время на прочтение3 мин
Охват и читатели6.8K
Некоторые из тех, кто разрабатывает приложения на PHP уже скачали и начали тестировать новые возможности самого крупного изменения в языке за последние 7 лет, но большую часть разработчиков интересуют отнюдь не новые фишки, которые можно будет применить в грядущих разработках, а изменения которые повлияют на работу уже написанных приложений.

Обновленно:
  • В конце статьи есть так же некоторая информация о том как можно отметить сие славное событие в Мюнхене.
Читать дальше →

Контроль версий структуры базы данных

Время на прочтение6 мин
Охват и читатели15K
imageЭта статья — How To, которое поможет вам легко обеспечить миграцию между версиями БД ваших PHP приложений с помощью Phing и dbdeploy.
Читать дальше →

Ближайшие события

C#-like cобытия для PHP. Reflection, closures…

Время на прочтение4 мин
Охват и читатели1.3K
Задача — сделать на PHP эвенты а-ля C# т.е. произвольный объект может генерировать события. Другие объекты могут на эти события подписываться непосредственно у экземпляра генерирующего объекта.

Основное отличие от того что видел ранее — строгая проверка навешиваемого хука. Проверяется наличие метода, количество его аргументов, etc…
Читать дальше →

Вышел PDT 2.1

Время на прочтение1 мин
Охват и читатели778
image
Обновился популярный среди PHP-разработчиков плагин для Eclipse — PHP Development Tools

Из основных нововведений:
  • Eclipse 3.5 (Galileo)
  • Поддержка PHP 5.3 (неймспейсы, лямбда-функции, замыкания)

Официальный анонс
Страница загрузки

P.S. Теперь только осталось дождаться релиза PHP 5.3

Делаем скриншоты сайтов

Время на прочтение3 мин
Охват и читатели17K
Бродя по просторам PHP документации случайно наткнулся на две функции: imagegrabwindow и imagegrabscreen. Они умеют делать скриншоты в Microsoft Windows.
Заинтересовало. Кончилось дело тем, что был написан скриптик генерирующий полный скриншот любого сайта.
Итак нам необходимы:

Читать дальше →

GOTO

Время на прочтение1 мин
Охват и читатели9.1K
Оказывается у создателей документации по PHP есть чувство юмора. Случайно наткнулся на иллюстрацию для одного из операторов в PHP 5.3. Оригинал под катом.

image
Читать дальше →

Действительно умные сессии и авторизация

Время на прочтение3 мин
Охват и читатели11K
Добрый день. Увидев статейку на тему «умных сессий», я решил поделиться действительно умной схемой, которая по всем параметрам превосходит предложенную.

Задача
Реализовать оптимальную систему пользовательских сессий и авторизации, с возможностью «Выйти на всех компьютерах». Защитить систему от сбоев (перезагрузки memcached), обеспечить эффективное использование памяти.

Читать дальше →

Визуальный PHP-рефлектор

Время на прочтение1 мин
Охват и читатели1.4K
image
Представляю вниманию общественности визуальный PHP-рефлектор.

Скрипт индексирует все .php-файлы в указанной директории, кэширует информацию о найденных классах. Разбор .php файлов осуществляется с помощью Tokenizer. Кэшируются имена найденных классов, кэшируется сопоставление имя файла — класс для последующего использования в автолоадере.

Список классов представляется в виде дерева. Для каждого класса доступен список методов, свойств. Доступен просмотре базового класса и имплементированных интерфейсов. Данные о «составе» классов получаются на ходу через PHP reflection API. Данные подгружаются через AJAX.

Интерфейс выполнен на ExtJS. Этим обусловлена поддержка браузеров — работает в IE6+, FF1.5+, Safari 3+, Opera 9+ (PC, Mac)


Посмотреть PHPReflector в действии.
UPD: Исходники

В исходниках отсутствует Ext
Теперь Ext с минимальным набором компонентов подгружается из внешних источников через CDN (CacheFly)

Планы на будущее:
  • Причесать исходники;
  • Сделать поиск;
  • Сделать отображение не только базовых классов, но и классов, наследованных от данного;
  • Отображение DocBlock'ов для классов, методов, свойств
  • UPD: Добавить отображение штатных классов PHP