После успешного релиза PHP-фреймворка Phalcon 1.0, команда разработчиков продолжает работать над его развитием. В этой статья я хочу осветить наиболее интересные фичи, представленные в версии 1.1.0 BETA
Метка «PHP» - 35
Phalcon 1.1 beta
2013-04-23 в 10:35, admin, рубрики: framework, phalcon, php, разработка, метки: framework, phalcon, PHPПолучение и подсчет количества репостов VK.COM
2013-04-23 в 7:09, admin, рубрики: api, php, vk api, vk.com, vkonakte, Вконтакте, Вконтакте API, Программирование, метки: api, PHP, vk api, vk.com, vkonakte, vkontakte api, ВконтактеНа днях стояла задача посчитать количество пользователей сайта vk.com, поделившихся определенным постом (т.е. количество репостов). Для этого существует приложение «Вирусоанализатор», но в процессе использования выяснилось, что оно не считает большое количество репостов (от 100 и более). Ползунок доходит почти до конца и на этом останавливается. А т.к. уже был объявлен конкурс на наибольшее количество репостов на определенную запись, то нужна была альтернатива. Которой не оказалось…
Поэтому пришлось обращаться к API Вконтакте и искать как реализовать данную задачу. Сразу скажу, что не пришлось создавать standalone-приложения для этой цели. Все получилось реализовать при помощи методов, не требующих access_token. Ниже представлен список методов API, используемых в данной задаче:
- likes.getList — получение списка пользователей, который нажали «Мне нравится» или «поделились» постом
- users.get — получение информации о пользователях по их uid или коротким именам
- wall.get — получение новостей со страницы пользователя.
Из плюсов данного расчета можно выделить только то, что не нужно создавать приложение для этой цели.
Из минусов (если изучить эти API методы): неудобный поиск нашего репоста у пользователя. Вконтакте разрешает получить методом wall.get максимум 100 новостей. Разумеется данный метод поддерживает параметр offset (смещение по новостям), но все же я ограничился определенным количеством новостей для обработки (500 штук).
Некоторые возникшие проблемы:
Итак, нам нужно было данные о тех пользователях и их постах, которые поделились нашим репостом. Для получения этого списка используется метод API likes.getList, у которого есть параметр filter, принимающий два возможных значения:Читать полностью »
Дайджест интересных новостей и материалов из мира PHP за последние две недели №15 (08.04.2013 — 22.04.2013)
2013-04-22 в 15:17, admin, рубрики: Behat, composer, laravel 4, phalcon, php, phpunit, React, symfony, traits, yii, Блог компании Zfort Group, Веб-разработка, дайджест, Новости, подборка, ссылки, метки: Behat, composer, laravel 4, phalcon, PHP, phpunit, React, symfony, traits, yii, Веб-разработка, дайджест, новости, подборка, ссылки
Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.
Приятного чтения!
Читать полностью »
Работа с датами Doctrine 2. Навигация в Symfony 2. И, надеюсь, прочие полезности
2013-04-19 в 3:39, admin, рубрики: doctrine, Doctrine ORM, mysql, php, symfony, навигация, работа с датами, хлебные крошки, метки: doctrine, mysql, PHP, symfony, навигация, работа с датами, хлебные крошкиПриветствую всех! А давайте сделаем топик-шпаргалку по Symfony и Doctrine.
Введение
Я обычный сибирский разработчик, основная задача в жизни захватить мир и сделать людей счастливее. На Symfony сделал несколько проектов. При разработке иногда встречаются задачи, на которые совсем нет информации в интернете, либо очень мало и не совсем понятная. Поэтому и захотелось создать данное обсуждение, где я покажу как решал некоторые свои задачи, а вы, надеюсь, направите меня на путь истинный или присоединитесь и тоже поделитесь своими хаками. Данный топик предназначен для тех людей, которые используют выше упомянутый фреймворк ну или его компоненты. А так же для тех, кто хочет пообщаться по поводу решения тех или иных проблем, поделиться своим опытом с другими разработчиками.
Ближе к делу
Функции работы с датами и Doctrine
Представим себе небольшой личный блог. Нужно вывести навигацию для постов с группировкой по году и месяцу. Очень простая задача. Вы создаете метод в классе BlogRepository, и Читать полностью »
Использование ActiveRecord от Yii в игре тайм менеджере
2013-04-18 в 9:44, admin, рубрики: activerecord, php, yii, Блог компании «Alawar Entertainment», метки: activerecord, PHP, yiiВсем привет!
Сегодня я хочу вам рассказать, как была реализована работа с кэшем в социальное игре тайм менеджере. Можете считать эту статью продолжением вот этой.
Напомню, что в проекте используется php(Yii), mysql и memcached. В проекте достаточно много сущностей, для каждой из которой есть своя модель, которая наследуется от CActiveRecord.
Хранятся файлы моделей следующим образом. В папке models создаем папку base. Когда генерируем модель через Gii, то указываем, что ее нужно положить в папку models/base и к имени класса добавляем Base. Затем создаем в models аналогичный класс без Base, который наследуется от базового класса и имеет в себе лишь метод model().
Кстати заранее скажу, что базовые модели наследуем не от CActiveRecord, а от ExtActiveRecord — расширяем CActiveRecord под наши нужды. Но об этом позже. Пока что разницы никакой.
Пример:
models/base/BaseUser.php — стандартный класс, который генерируется через Gii
models/User.php — класс, который наследуется от BaseUser и имеет в себе метод model()/** * Returns the static model of the specified AR class. * @param string $className active record class name. * @return User the static model class */ public static function model($className=__CLASS__) { return parent::model($className); }
Данная схема используется для того, чтобы в случае повторной генерации файла модели не потерять свой код и просто не забивать пространство стандартными кодом от Yii.
Не забываем добавить в конфиге 'application.models.base.*'.
Перейдем собственно к теме поста и поставим задачи, которые хотим решить:
- Уменьшить количество запросов в базу на обновление
- Уменьшить количество запросов в базу на выборку
Гормональный holywar Админа и Разраба PHP или REMOTE_ADDR vs HTTP_X_FORWARDED_FOR
2013-04-18 в 6:47, admin, рубрики: fpm, nginx, php, proxy, tcp, настройка сервера, Программирование, хостинг, метки: fpm, nginx, PHP, proxy, tcp, настройка сервера, хостинг Давеча был свидетелем одного интересного спора о том как же действительно нужно определять IP адрес конечного пользователя из скриптов PHP.
Собственно, каждое слово сабжа отображает действительную ситуацию. Это был религиозный спор обострённый весенней замечательной погодой, в котором, я считаю, не оказалось правых и не правых, но который побудил меня к мини-исследованию и к моему счастью поставил точку в понимании этого конфессионального но по факту очень простого вопроса.
Для тех, кто как и я сомневался был уверен, что во всём разобрался, но боялся спросить лень было разбираться в мелочах — под кат.
Читать полностью »
DEV {highload} — конференция о Highload веб-разработке
2013-04-17 в 8:37, admin, рубрики: php, Блог компании web-canape, высокая производительность, метки: PHP, высокая производительность20 апреля в Санкт-Петербурге пройдет конференция о Highload веб-разработке DEV {highload}.
DEV {highload} — это профессиональная конференция, где выступают только выдающиеся спикеры. Они будут рассказывать о том, что хочется знать веб-разработчику сложных высоконагруженных проектов.
Web-canape выступает партнером мероприятия и мы хотим вручить один бесплатный билет самому проактивному Хабра-юзеру. Читайте про это в конце поста.
Предыдущая конференция, посвященная Highload веб-разработке, прошла с успехом и пользой для участников из разных городов и стран. Некоторые ее материалы можно посмотреть здесь. Новая DEV {highload} обещает быть еще интереснее! Только новые темы – так же профессионально и актуально. Читать полностью »
Для справки:
Tokenizer (лексер) предоставляет интерфейс для анализа кода. Таким образом, можно писать утилиты без необходимости работы с языковой спецификацией.
Tokenizer, начиная с версии php >= 4.3 включен в сборку php по-умолчанию.
Какие задачи можно решать с помощью tokenizr'а?
Да самые разные, связанные с анализом и модификацией кода.
Удаление комментариев из кода
Самый простой пример приведен на php.net — по удалению комментариев:
Читать полностью »
DVelum — платформа разработки на PHP + ExtJS4 Выпуск версии 0.9
2013-04-15 в 8:25, admin, рубрики: Designer, dvelum, extjs, IDE, opensource, php, Веб-разработка, метки: dvelum, extjs, IDE, opensource, PHPОсновная цель проекта — создание удобной RAD-платформы разработки web-приложений, интерфейсов управления базами данных, CRM-систем, автоматизированных рабочих мест. Функционал платформы максимально автоматизирует рутинные процессы разработки, освобождая пространство для творческой самореализации.
В прошлом году мы уже знакомили вас с платформой DVelum в публикации «DVelum – платформа разработки на PHP + ExtJS4».
На тот момент платформа была достаточно сырая (beta release), после публикации получили много полезных советов и отзывов. Многое из предложенного внедрено и исправлено, хотелось бы познакомить вас с тем, что было сделано за это время. Проект окреп, приобрел более стройный вид, включил в себя достаточный набор инструментов для повседневной разработки.
Читать полностью »
Время ответа сервера — одна секунда
2013-04-14 в 15:45, admin, рубрики: mysql, php, Веб-разработка, высокая производительность, скорость работы, метки: mysql, PHP, скорость работыВ данном небольшом посте я бы хотел поделиться своими мыслями насчёт скорости работы скриптов/программ, которые мы с вами пишем каждый день и обратить внимание на то, сколько «невидимой» работы совершается при выполнении привычных действий.
Выполнение SQL-запросов
Все знают, что работа с SQL обычно является одной из самых медленных компонентов любого сайта. Есть ли какие-то объективные причины для этого? Действительно ли базы данных такие медленные и срочно нужно переходить на NoSQL :)? Давайте посмотрим.
Создадим тестовую табличку в MySQL и наполним её 1 млн записей:
<?php
mysql_connect(...) or die("Cannot connectn");
mysql_select_db(...) or die("Cannot select DBn");
mysql_query('CREATE TABLE IF NOT EXISTS `one_million` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`one` int(11) NOT NULL,
`two` int(11) NOT NULL,
`three` int(11) NOT NULL,
`four` int(11) NOT NULL,
`five` int(11) NOT NULL,
`six` int(11) NOT NULL,
`seven` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB') or die("Cannot create tablen");
for ($i = 0; $i < 1000000; $i++) {
if ($i % 1000 === 999) echo "Done $in";
mysql_query('INSERT INTO one_million VALUES(NULL, ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ', ' . rand() . ')');
}
// Да, код не использует batch insert, а также использует устаревшее, но до сих пор работающее расширение mysql
Давайте теперь выполним какой-нибудь простенький запрос, который прочитает нам 1 млн записей:
SELECT COUNT(*) FROM one_million WHERE three = 333
На моем компьютере запрос выполнился за 200 мс! Таким образом, можно заключить, что InnoDB в состоянии просмотреть около 5 млн записей за 1 секунду! Давайте подумаем, где же на веб-сайтах может потребоваться просматривать столько записей на одну страницу :)? На моей прошлой работе я принудительно выставил ограничение в 20 000 просмотренных строк на все SQL-запросы, и после вычищения всех «тормозных» мест время открытия страницы упало в 5 раз!
Читать полностью »