Все помнят как много негодования со стороны сообщества было по поводу нового формата тостера. Мол, повалила куча хомяков, одни вопросы, нуль ответов. Тем не менее, администрация дело свое знала и делала хорошо — полнейший бред выпиливался, вопросы и ответы модерировались. Я проматывал ленту почти каждый день и самые смешные вопросы записывал в блокнотик. В него попадали вопросы авторов разумного объяснения действиям которых я не смог подобрать :) И да, это ни в коем случае не плевок в сторону PHP, просто ему так не повезло, что 90% вопросов именно с этим тегом.
Решил поделиться с сообществом на волне праздничного настроения, чтобы было над чем посмеяться.
Метка «PHP» - 14
Перлы с Тостера
2013-12-27 в 22:50, admin, рубрики: php, КодоБред, хабрахабр, юмор, метки: .тостер, PHP, Хабрахабр, юморБольшое руководство по Yiinitializr
2013-12-26 в 12:57, admin, рубрики: php, yii, yiinitializr, метки: PHP, yii, yiinitializrРебята из Yii Software готовят бомбу. Пока я лишь наблюдаю за новой версией фреймворка из-за угла, но уже вижу улучшения во всём — от использования новых возможностей языка до удобного создания собственных структур для крупных проектов.
Однако в настоящее время дела обстоят таким образом, что поезд только встаёт на рельсы (не ищите аналогий, хотя они тут есть) и стабильную версию ещё придётся подождать, а новые проекты нужно делать уже сегодня. Для счастливой разработки не хватает совсем немного, а именно — удобной структуры приложения, развёртывания без лишних проблем, ну и разных плюшек по желанию. На данный момент наиболее приятным решением является Yiinitializr.
Yiinitializr — библиотека, помогающая упростить и ускорить цикл разработки приложения на основе фреймворка Yii. Из коробки доступны 3 варианта структурных шаблонов:
- Basic — создан для проектов небольших масштабов;
- Intermediate — подойдёт для большинства проектов средней сложности;
- Advanced — будет хорошим выбором для более сложных проектов с необходимостью предоставления собственного API.
Почему стоит ознакомиться с этой статьёй? Отсутствие доходчивой документации вводит ещё неискушённых разработчиков в ступор (проверено на себе), а куча различных сюрпризов (например, в виде багов) замечательно дополняют это ощущение. Я попытался разобрать процесс работы с Yiinitializr до винтиков, чтобы уберечь вас от большинства неприятностей на пути его освоения.
На этом, я думаю, описательных слов достаточно. Если вы читаете эту статью, значит вы уже, скорее всего, знаете, что такое Yiinitializr, и хотите получить ответы на конкретные вопросы по его использованию. А если всё-таки ещё не знаете, то основную суть, я надеюсь, вы уловили, так что не бойтесь читать дальше.
Читать полностью »
Опыт разработки сервис-ориентированной системы
2013-12-26 в 11:42, admin, рубрики: gearman, mongodb, php, RabbitMQ, workers, Анализ и проектирование систем, парсинг, проектирование, метки: gearman, mongodb, PHP, RabbitMQ, workers, парсинг, проектированиеНекоторое время назад мы вместе с небольшой командой программистов начали разработку достаточно интересного с технической точки зрения аналитического проекта. Основной его целью была обработка данных, получаемых с различных веб-страниц. Нужно было обрабатывать эти данные, приводя в удобный вид и после этого анализировать собранную статистику.
До тех пор, пока у нас не было большого количества всевозможных данных, мы не имели каких-то нестандартных проблем и все решения были достаточно прямолинейными. Но проект разрастался, и размер собираемой информации, хотя сначала и не очень быстро, но все же увеличивался. Росла и кодовая база. И через некоторое время мы осознали весьма печальный факт — из-за всяких костылей и быстро-фиксов мы нарушили почти все возможные принципы проектирования. И если сначала организация кода была не столь важна, то со временем стало понятно, что без хорошего рефакторинга далеко мы не уедем.
Читать полностью »
Резервное копирование веб-проектов на Яндекс.Диск без ООП и натурщиц
2013-12-22 в 6:05, admin, рубрики: backup, php, webdav, метки: backup, PHP, webdav, yandex diskПозавчера читатель vasiatka в посте №206752 поделился с читателим, а следовательно и со всем остальным миром, продуманным и весьма развитым классом для работы с Яндекс.Диском. Некоторое время назад я тоже стал использовать этот сервис для хранения там бэкапов. Хочу поделиться значительно более коротким вариантом скрипта на php, который делает архивы базы данных и файлов сайта, и заливает их по WebDAV. Возможно кому-то и он придётся по душе.Читать полностью »
Элегантная форма входа в админку на Laravel и Sentry
2013-12-21 в 23:46, admin, рубрики: laravel, php, метки: laravel, PHPПри создании сайтов приходится некоторое время уделить форме ввода логина и пароля для доступа к панели управления. Для ускорения процесса разработки, хочу поделиться рецептом приготовления простой, удобной и элегантной формы входа в админку.
Статья содержит описание некоторых базовых приемов использования Laravel при разработки сайтов и будет полезна тем, кто начинает осваивать данный фреймворк. Для примера использую Ubuntu 12.04, PostgreSQL 9.3, Nginx 1.1.19, PHP 5.5.7, Composer и свежий проект, созданный с использованием Laravel 4.1. Под управление PostgreSQL крутится база данных examples, к которой имеет доступ пользователь examples c одноименным паролем. Nginx же настроен таким образом, что при обращении по адресу http://examples.loc
в браузере открывается главная страницу-заглушка, которая идет с Laravel в комплекте, с надписью «You have arrived.»
Читать полностью »
Интеграция аутентификации Symfony2 и трекера Jira
2013-12-21 в 17:38, admin, рубрики: php, symfony, symfony2, метки: PHP, symfony2Здравствуйте, Хабросообщество. В этой статье хочу рассказать, как можно подружить известный фреймворк Symfony2 и не менее известный трекер Jira.
Зачем связывать Jira и Symfony2?
В компании, где я работаю, возникла необходимость связать систему саппорта и трекер задач через API, чтобы заявки от клиентов могли быть легко преобразованы в тикеты. Первостепенной проблемой, которая встала на нашем пути, была интеграция аутентификации Jira (использовался механизм “Basic Authentication”) и системы безопасности Symfony2. Для понимания механизмов аутентификации и авторизации фреймворка необходимо ознакомиться с официальной документацией: http://symfony.com/doc/current/book/security.html.
Читать полностью »
Резервное копирование веб-проектов на Яндекс.Диск
2013-12-20 в 9:09, admin, рубрики: php, Яндекс.Диск, метки: PHP, Яндекс.ДискВ далекие детские годы я не понимал важность резервного копирования данных. Но, как говориться, понимание приходит с опытом. Зачастую опыт бывает очень горький. В моем случае хостинг два раза убивал базу сайта MathInfinity, созданного еще в студенческие годы.
Большие проекты могут позволить себе выделить целые сервера для резервного копирования. Однако, существует огромное количество небольших проектов, работающих лишь на вашем энтузиазме. Эти проекты также нуждаются в резервном копировании.
Идея создания архивов на сервисах вроде Dropbox, Ubuntu One, Яндекс Диск, Диск Google и др. уже давно притягивала мое внимание. Десятки гигабайт бесплатного места, которое теоретически можно использовать резервирования данных.
Теперь эта идея получила мое первое воплощение. В качестве сервиса для создания архивов был выбран Яндекс Диск.
Читать полностью »
Как я делал тестовое задание или framework на коленках
2013-12-17 в 22:40, admin, рубрики: php, php-framework, Программирование, метки: PHP, php-framework Привет! В статье хотел поделится то как я сделал свой framework за вечер используя уже готовые библиотеки!
Данная статья будет полезна начинающим php программистам, так как делал все как можно проще без лишних наворотов!
Предыстория
Поздний вечер, от скуки я зашел на почту, с утра приходила рассылка для разработки одного проекта! Ответил, пришло ответное письмо с тестовым заданием!
И комментариями:
Сделайте данную задачу с использованием ООП, возможно какие-нибудь паттерны программирования сможете внедрить, а также данный скрипт должен с легкостью дорабатываться, если потребуется расширить его функционал!
1. Есть агентство, которое поздравляет клиентов с государственными праздниками. При этом клиенты с каждым праздником поздравляются не все, а выборочно. С праздниками по половым признакам поздравляется только клиенты соответствующего пола. О клиентах известны: ФИО, email, адрес, пол. О праздниках известны: дата и название. Предложите структуру БД, где хранится информация о клиентах, информация о праздниках, и информация о том, кто с каким праздником был поздравлен.
2. Напишите пример SQL запроса, отбирающий девушек, не поздравленных в настоящий момент с 8 марта, но поздравленных с новым годом.
3. Теперь Вам нужно скинуть информацию о клиентах дружеской конторе в виде xml. Информацию о том, кто с каким праздником поздравлялся/не поздравлялся, скидывать не надо. Напишите скрипт, который по имеющейся базе данных строит xml-файл с информацией о клиентах фирмы.
4. Ниже приведен код, реализующий во фронтэнде сайта, отправление на сервер данных клиента.
Допишите функции валидации формы, отправления данных формы, а также скрипт добавления клиента в имеющуюся базу данных.
После отправки данных, необходимо отобразить результат добавления.
<?php
if (isset($_POST['do_insert'])) {
//добавление данных клиента в БД, email не должен повторяться
//...
}
?>
<html>
<head>
<title>Форма регистрации клиентов</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
var validateForm = function() {
//валидация формы
//все поля формы являются обязательными для заполнения
//...
};
var sendForm = function() {
if (validateForm()) {
//отправление данных формы, используя AJAX методом POST
//...
} else {
return false;
}
};
</script>
</head>
<body>
<div id="insert_result" style="display:none;"></div>
<form name="user" id="user" action="" method="POST" onsubmit="return sendForm();">
<input type="hidden" name="do_insert" value="">
ФИО: <input type="text" name="fio" id="fio" value="" /><br />
Пол: <input type="radio" name="sex" id="male" value="m" /><label for="male">мужской</label>/<input type="radio" name="sex" id="female" value="f" /><label for="female">женский</label><br />
Email: <input type="text" name="email" id="email" value="" /><br />
Адрес: <textarea name="adress" id="adress"></textarea><br />
<input type="submit" value="Отправить" />
</form>
</body>
</html>
смотрю задание, отвечаю, завтра будет готова!
Читать полностью »
Laravel: Dependency Injection на практике
2013-12-17 в 21:19, admin, рубрики: dependency injection, inversion of control, ioc, laravel, php, метки: dependency injection, inversion of control, ioc, laravel, PHPВ своих двух предыдущих статьях я рассказал о Dependency Injection и IoC контейнере, и о том, как они работают конкретно в Laravel. Данный пост будет посвящен практическому применению DI и IoC на реальном примере. А так же, какие все таки преимущества нам дают эти два прекрасных инструмента и паттерна в приложении.
WebSocket чат на symfony2 в 100 строк
2013-12-13 в 13:37, admin, рубрики: php, symfony2, websockets, метки: PHP, symfony2, websockets Привет!
Недавно я разработал чат на вебсокетах для своего сервиса http://internetsms.org/chat.
При реализации, я столкнулся с тем, что в интернете большинство чатов сделаны с использованием повторяющихся ajax запросов, которые проверяют новые сообщения по заданному промежутку времени. Такой подход для меня был неприемлем, т.к при наплыве пользователей, нагрузка на сервер вырастет экспоненциально. На самом деле, есть более интересные варианты реализации:
Long polling
Клиент отправляет на сервер «долгий» запрос, и при наличии изменений, сервер отправляет ответ. Таким образом, число запросов снижается. Кстати, эта технология используется в Gmail.
Web sockets
В html5 появилась встроенная возможность использовать WebSocket соединения. Парадигма запрос-ответ здесь вообще не используется. Между клиентом и сервером один раз устанавливается канал связи. На сервере работает один демон, который обрабатывает входящие соединения. Таким образом, нагрузки на сервер практически нет даже при большом количестве пользователей онлайн.
Читать полностью »