Обновить
128K+

PHP *

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

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

Запуск внешних приложений из Notepad++. NppExec: ускоряем поиск в Интернете и не только…

Время на прочтение4 мин
Охват и читатели42K
Поскольку я не очень опытный разработчик — так вышло, что в веб я пришел недавно — по ходу написания кода мне часто приходится обращаться к официальной документации PHP и MySQL, а также искать во время работы с текстами определенную информацию еще на паре сайтов, не связанных с IT, но связанных с другой моей работой.

Notepad++ и поиск в Интернете


Раньше в случае возникновения вопроса мне нужно было выполнить следующие действия:

  1. Выделить фрагмент текста (или кода);
  2. Скопировать его в буфер обмена;
  3. Перейти в браузер;
  4. Вставить текст из буфера обмена в строку поиска (где предварительно должно уже было быть введено site: адрес сайта или открыт требуемый сайт);
  5. Нажать кнопку «искать» (ввод).

С помощью дополнения NppExec это можно сделать в несколько раз быстрее.
Читать дальше →

Весь PHP в двух строчках

Время на прочтение1 мин
Охват и читатели6.9K
Я с гордостью хочу представить вам способ описать весь опыт программирования на PHP двумя строчками.

Двумя объявлениями функций из стандартной библиотеки PHP:

array_filter($input, $callback);
array_map($callback, $input);

Угумс.

Управление GIT-ом через веб-консоль на PHP

Время на прочтение1 мин
Охват и читатели10K
Я люблю git. Я использую его во всех своих проектах. Поэтому я решил сделать веб-консоль для управления git-ом на PHP.

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

Если бы в PHP были выделения списков и генераторы

Время на прочтение3 мин
Охват и читатели8.3K
Несколько недель назад в списке рассылки PHP было интересное предложение с чьим-то хаком, где описаны генераторы, выражения-генераторы и выделения списков. Неудивительно, что некоторые люди не уверены в перспективах этого предложения, как и core разработчики, так и пользователи PHP. Я хотел бы поделиться несколькими идеями и попытаться убедить этих парней.
Читать дальше →

LINQ для PHP. Часть 2. Если гора не идёт к Магомету, Магомет идёт к горе

Время на прочтение9 мин
Охват и читатели5.5K
Как можно было заметить из моей предыдущей статьи со сравнением библиотек LINQ для PHP, библиотек много, а качества мало: ленивые вычисления не реализованы ни в одной библиотеке, тесты есть в половине случаев, типы коллбэков ограничены, а иногда и вовсе незнамо что выдаётся за LINQ. Поэтому я написал свою библиотеку. Встречайте:

YaLinqo — Yet Another LINQ to Objects for PHP

Возможности:

  • Самый полный порт .NET LINQ на PHP, со многими дополнительными методами. Некоторые методы отсутствуют, но работа ведётся. Всего реализовано более 70 методов.
  • Ленивые вычисления, текст исключений и многое другое, как в оригинальном LINQ.
  • Детальная документация PHPDoc к каждому методу. Текст статей адаптирован из MSDN.
  • 100% покрытие юнит-тестами.
  • Коллбэки можно задавать замыканиями, «указателями на функцию» в виде строк и массивов, строковыми «лямбдами» с поддержкой нескольких синтаксисов.
  • Ключам уделяется столько же внимания, сколько значениям: преобразования можно применять и к тем, и к другим; большинство коллбэков принимает на вход и то, и другое; ключи по возможности не теряются при преобразованиях.
  • Минимальное изобретение велосипедов: для итерации используются Iterator, IteratorAggregate и др. (и их можно использовать наравне с Enumerable); исключения по возможности используются родные похапэшные и т.п.

Пример кода:

// Отфильтровать продукты с ненулевым количеством, поместить в соответствующие категории,
// отсортированные по имени. Продукты отсортировать сначала по убыванию количества, потом по имени.

from($categories)
    ->orderBy('$v["name"]')
    ->groupJoin(
        from($products)
            ->where('$v["quantity"] > 0')
            ->orderByDescending('$v["quantity"]')
            ->thenBy('$v["name"]'),
        '$v["id"]', '$v["catId"]', 'array("name" => $v["name"], "products" => $e)'
    );

Детальное описание, обсуждение архитектуры, ссылки

Простой сервер задач с очередью в MySQL (без проблем с блокировками)

Время на прочтение2 мин
Охват и читатели11K
Почти в каждом более менее динамическом проекте бывает возникает необходимость выполнять очереди задач в фоне (отправка email, обновления кеша, реиндексация поиска и т.д.). Job сервера (Gearman и т.п.) хороши, но для большинства простых задач они избыточны. Классическая реализация очередей в MySQL (при помощи SELECT … LOCK FOR UPDATE) при росте нагрузки со временем начинает приводить к проблемам с блокировкой. Потому, как это обычно бывает, пришлось написать свой «велосипед» для работы с фоновыми задачами, который бы «точно работал» и был предельно прост.
Читать дальше →

Wordpress Plugin длиной в одну страницу

Время на прочтение12 мин
Охват и читатели32K
Почему люди любят Wordpress? Потому что с ним просто работать. В нём нет гибкости большущих CMS вроде Joomla и Drupal, — а значит, не запутаешься. И ещё он очень популярен — а значит, можно найти плагины на все случаи жизни.

Неспроста несмотря на осуждение со стороны Lurkmore.ru, Wordpress-ом пользуются и Герб Саттер, и Марк Шаттлворт, и много кто ещё. Например, я.

В своих записях я очень часто ссылаюсь на чужие блоги. И мне пришла идея — а почему бы не показывать рядом с ником человека, на которого я ссылаюсь, ещё и значок его сервиса? Например, птичку из твиттера или букву B из блогспота? Похожий функционал есть, например, в Википедии, да и многие блогохостинги это позволяют (например, Dreamwidth).

Так и родился плагин для Wordpress Rikki's WP Social Icons. Позволяет за один клик мышкой добавить ссылку на эккаунт в каком-нибудь сервисе, от социальной сети до GitHub.
Читать дальше →

Как может выглядеть PHP 5.5

Время на прочтение6 мин
Охват и читатели6.9K
PHP 5.4 был опубликован четыре месяца назад, так что, вероятно, слишком рано смотреть на новую версию PHP. Тем не менее я бы хотел сделать для всех, кто не подписан на внутренний список рассылок, небольшой предварительный обзор того, как может выглядеть PHP 5.5.

Однако необходимо понять: PHP 5.5 еще на ранней стадии развития, поэтому никто не знает, как он будет выглядеть в итоге. Все, о чем здесь написано это только предложения. Я уверен, что не все это будет в PHP 5.5, или будет, но не в таком виде.

Так что не стоит слишком возбуждаться.

Теперь, без лишних церемоний, список фич, над которыми ведется работа в PHP 5.5:
Читать дальше →

Применение замыканий в PHP

Время на прочтение8 мин
Охват и читатели175K
Введение в PHP 5.3 замыканий — одно из главных его новшеств и хотя после релиза прошло уже несколько лет, до сих пор не сложилось стандартной практики использования этой возможности языка. В этой статье я попробовал собрать все наиболее интересные возможности по применению замыканий в PHP.
Читать дальше →

LINQ для PHP. Часть 1. Я его слепила из того, что было, а потом, что было, то и полюбила

Время на прочтение9 мин
Охват и читатели8.4K
Сказ о том, как LINQ на PHP портировали. Сравнение ныне существующих библиотек с табличками, но без графиков — прилагается.

Картинка код для привлечения внимания (картинок не дождётесь!)
echo Phinq::create($people)
  ->groupBy(function($person) { return $person->residence->region; })
  ->select(function($grouping) {
    $obj = new stdClass();
    $obj->people = $grouping;
    $obj->region = $grouping->getKey();
    return $obj;
  })->orderBy(function($obj) { return $obj->people->count(); }, true)
  ->aggregate(function($current, $next) {
    $count = $next->people->count();
    return $current . sprintf(
      "%d %s (%s) live in the %s region\n",
      $count,
      $count === 1 ? 'person' : 'people',
      $next->people->aggregate(function($current, $next) {
        if ($current !== null) {
          $current .= ', ';
        }
        return $current . sprintf('%s [%s]', $next->name, $next->residence->code);
      }),
      $next->region
    );
  });
Кто видел C# или любой функциональный язык — при виде этого шедевра закатит глаза (если они предварительно не вылетят из орбит). И, наверное, будет прав. Но можно ещё вот так:
$lowNums =
	from('$n')->in($numbers)->
	where('$n < 5')->
	store($digits)->into('digits')->
	select('$digits[$n]');
А как ещё можно? Осторожно, много текста!

Google Cloud Messaging: Библиотека для Codeigniter и пара отличий Google Cloud Messaging и Apple Push Notifications

Время на прочтение3 мин
Охват и читатели12K
Добрый день, друзья,

Буквально недавно questman написал статью о новом-старом сервисе от Google под названием Google Cloud Messaging и привел пример приложения под android с его использованием.
Со своей колокольни я бы хотел продолжить тему с точки зрения server-side с оглядкой на опыт использования Apple Push Notifications.

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

Немного о командной работе

Время на прочтение5 мин
Охват и читатели5.2K
В очередной раз, согласившись на фрилансерский заказ (а ведь обещал себе покончить с фрилансом раз и навсегда), я тяжело вздохнул, и при первой же возможности, сел изливать свои мысли на бумагу. Когда мы начинаем новый проект, часто у нас не хватает опыта сделать это правильно, иногда нам просто лень изучать новые технологии, но чаще всего, мы уверенны что и так все прекрасно спрограммируем, без всяких VCS, фрэймворков и миграций. Для тех, кто может найти в себе силы на что то большее, чем связка Denwer -> ftp client -> hosting, я набросал несколько рекомендаций, как можно сделать процесс разработки web-приложения немного более удобным.
Читать дальше →

Используем PHP правильно

Время на прочтение1 мин
Охват и читатели12K
Чуть ли не самая главная проблема в мире PHP — это огромное количество устаревшей и/или не самой лучшей информации, приводящей начинающих разработчиков в заблуждение.
Да что там, даже опытным программистам бывает тяжело выудить крупицу адекватной информации в море интернета.

Именно эту проблему пытается решить автор PHP: The Right Way.
PHP: The Right Way — это набор best practices, принятых стандартов оформления, ссылок на современные библиотеки и источники информации по PHP.

P.S. Если вы опытный программист, то примите участие, помогите начинающим!

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

FuelPHP год после 1.0

Время на прочтение3 мин
Охват и читатели1.4K
Первый релиз FuelPHP, честно говоря, не был особо примечателен и не выделялся из линейки других фреймворков. Даже для меня, человека, который успел освоить к тому времени только CI и Kohana, непримечательность первой версии была очевидна. Но было нечто и то, что в этом молодом проекте завораживало. Этим “нечто”, как ни странно, была надежда. Надежда на то, что Fuel ещё расцветет нужным функционалом, который будет подпитываться свежими идеями.
Первый релиз был сплавом идей CodeIgniter, Kohana, Rails и 9-ти месячного труда, более чем сорока разработчиков. С тех пор минул год, на что потратили его разработчики и каким стал их проект? Об этом делее.
Читать дальше →

Другой взгляд на эволюцию гадкого утёнка или рефакторинг спагетти

Время на прочтение6 мин
Охват и читатели2.7K
Я с большим энтузиазмом отношусь к любым попыткам улучшить общую культуру разработки в таком неоднозначном сообществе, как сообщество PHP-разработчиков. Но видя некоторые инициативы хочется убиться об стену их немного поправить, чтобы не дай бог не пришлось работать с кодом, сильно отличающимся от моих представлений о совершенном коде.

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

Собственно мой вариант

Фотоальбом

Время на прочтение2 мин
Охват и читатели5.6K
Случилось-таки свершение и дошли мои руки до родительского фотоальбома. Фотографий в нём насчитывается не менее 1000 штук. В своё время у моего родителя был такой фотоаппарат:



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

Отсканировать это, конечно, дело долгое и очень важное в процессе оцифровки снимков. А что делать потом?

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

PHPmotion на Debian 6 Squeeze

Время на прочтение2 мин
Охват и читатели3.6K
Появилась потребность разместить свои ролики, которые были бы доступны как бля меня, так для родственников из других городов, для этих целей, решил попробовать использование известного движка для организации видео-хостинга – PHPmotion, в этой заметке приведу процесс установки на OS Debian 6 Squeeze, установка происходила внутри контейнера OpenVZ.

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

Немного опыта по работе с FatFree Framework

Время на прочтение3 мин
Охват и читатели7.1K
Предыстория

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

Изобретение велосипеда

Первые, конвульсивные попытки заставить себя сесть за работу выглядели печально, так как главной целью было (изначально) разработать ту самую «базовую систему», на которой потом уже делать проект. Наверное уже после третьей неудачной попытки, и осознании своей ошибки, я начал поиск простого и понятного фреймворка. Выбор пал на FatFree Framework.
Читать дальше →

PHP гораздо лучше, чем вы думаете

Время на прочтение4 мин
Охват и читатели41K
Последнее время PHP гнобят все, кому не лень, даже довольно-таки разумные люди. Когда Jeff Atwood создал свой очередной пост, направленный против PHP, это заставило меня задуматься о хороших сторонах этого языка.

Самая главная проблема всех этих статей в том, что люди, которые их пишут, застряли в старых временах PHP.
Либо это их не волнует, либо они не хотят признавать, но PHP эволюционирует очень быстрыми темпами, и как язык, и как сообщество.
Более того, PHP развивается гораздо быстрее, чем какой бы то ни было другой язык или платформа. Конечно, так было не всегда, но последние 5 лет были воистину потрясающими для PHP…

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

Первое приложение для Flickr. Авторизация oAuth 2.0, получения списка фотографий

Время на прочтение6 мин
Охват и читатели3.8K
Документация по API на сайте flickr.com устарела. Уже давно появилась возможность авторизироваться через oAuth 2.0, но на сайте нет ни нормального описание, ни примеров работы с API после авторизации.

Авторизация на Flickr происходит в три этапа:

1. Получение oauth_token и oauth_token_secret. На первом шаге oauth_token это request_token.
2. Авторизация приложения в профиле пользователя.
3. Получения oauth_token и oauth_token_secret. На третьем шаге oauth_token это access_token.
Читать дальше →