Задать вопрос
  • Фреймворк??????????

    p4s8x
    @p4s8x
    ошибся веткой удалено
    Ответ написан
    Комментировать
  • Фреймворк??????????

    p4s8x
    @p4s8x
    Вам понравился именно Doctrine или вообще сама идея ORM?
    Могу вам рекомендавать www.yiiframework.com/ например работа с Бд через Active Record
    Ответ написан
    6 комментариев
  • Странность с session в php

    p4s8x
    @p4s8x
    Если приложение вылетает, т.е. код дальше не выполняется — значит все-таки ошибка есть.
    Попробуйте перед session_start добавить:
    ini_set('display_errors','On');
    error_reporting(E_ALL);
    Это включит отображение ошибок, а дальше варианты:
    1) Скорее всего есть ошибка PHP Warning: Cannot modify header information — headers already sent by (output started at ____ < — вот тут надо посмотреть что за строчка, самое распространенное — пробел в начале какого-то файла до <? или пробел после закрывающегося ?>
    2) Маловероятно, но можно проверить в phpinfo() — session.save_handler, если там files — смотрим права session.save_path, если нет, то разбираемся с хендлером.
    Ответ написан
    2 комментария
  • Использовать ли ActiveRecord в высоконагруженных проектах?

    p4s8x
    @p4s8x
    ActiveRecord это очень удобный и полезный инструмент и его можно и нужно использовать, одна из замечательнейших частей фреймворка, делающих разработку действительно быстрой и легкой.

    Если возникают проблемы с производительностью:

    1) Во всех проектах используем:CProfileLogRoute с настройкой CDbConnection.enableProfiling=true
    Расскажет много полезного.

    2) Если видим lazy Loading — не забываем добавлять в with("") нужных релейшинов, используем together() принудительно где нужно.

    3) Если используем findAll() на большом количестве записей — используйте CDbCriteria.select и перечисляйте только необходимые колонки, это поможет значительно повысить производительность.

    Рекомендую детально изучить изнутри — как работает CActiveRecord, CActiveFinder
    Используйте расширения типа XDebug для детального профайлинга проекта.
    Основные потери производительности происходят внутри метода
    CActiveRecord.populateRecord — посмотрите — что происходит внутри.

    4) Все редкообновляемые данные очень легко кэшировать связкой:
    CTimestampBehavior + CDbCacheDependency('SELECT MAX(update_time) .... where...');
    Если таблица редко обновляется, то и этот запрос будет отрабатывать мгновенно. Mysql тоже сам кэширует результаты таких запросов.

    В результате — мест, где приходится отказываться от ActiveRecord остается очень мало.
    Скорость отдачи страниц держим на уровне не более 0.1 с.

    Если у Вас будут действительно высокие нагрузки, Вас врятли спасет один только отказ от ActiveRecord:
    Посмотрите:
    Yii: устройство ActiveRecord и Шардинг
    Шардинг MySQL на Yii Framework

    Также задумываем для одного проекта попробывать www.yiiframework.com/extension/yiimongodbsuite/ с auto-sharding
    Ответ написан
    Комментировать
  • PHP is new Java?

    p4s8x
    @p4s8x
    5) Посоветуйте хороший объектный кэш в shared RAM. Не сериализацию в мемкашу и редис, не размазывание по жесткому, а именно гарантированно в раму. General purpose, с быстрым доступом из любого пыхоскрипта в общем случае. Хорошо было бы умение вытягивать в раму ветви нескалярных объектов.

    Несовсем, но почти то, что вам нужно: можно использовать связку APC и igbinary,
    Делается настройка apc.serializer=igbinary
    В итоге APC хранит в RAM, а igbinary — сериалайзер без лишних преобразований.
    Ответ написан
    1 комментарий
  • Валидатор 'safe'?

    p4s8x
    @p4s8x
    Если вы попытаетесь присвоить unsafe то всеравно Cmodel->validate() вернет true, в логах будет Warning unsafe и данное свойство не будет присвоено — зачем?
    1) В приложениях на Yii делают то, что называется massive assigment — $model->attributes = $_POST['User']
    У модели есть системные свойства типа isNewRecord, primaryKey, scenario.
    Если злоумышленник присвоит $_POST['User']['scenario'], то неизвестно что может произойти в приложении — это причина по которой вообще разделяют safe\unsafe.
    2) Следующий вариант атаки — передать в пост запросе например $_POST['User']['is_admin']=1

    когда нужно использовать этот тип валидатра.

    Например для полей в mysql типа TEXT/LONGTEXT
    Ответ написан
  • Обновление пароля пользователя в Yii

    p4s8x
    @p4s8x
    В «чистом» yii, нету db-авторизации. Скорее всего вы используете либо какой-то skeleton(сборку), либо экстеншн.
    Смотреть надо UserIdenity, WebUser, но в первую очередь код модели, типа user.
    Ответ написан
  • Как протестировать сайт

    p4s8x
    @p4s8x
    можно через wget -r — «скачать» без скачивания весь сайт по ссылкам и потом посмотреть логи апачи, но это часть вашей задачи.
    Ответ написан
    Комментировать
  • Skype по телевизору - реально?

    p4s8x
    @p4s8x
    У меня приставка Iconbit Toucan W на android, скайп работает замечательно, есть проблемы с некоторыми веб-камерами, нужно читать forum.iconbit.ru Но это может оказаться не совсем бюджетным решением. Не знаю, как бабушку, но мама безпроблем разобралась(только пультом не всегда с первого раза куда надо попадет) да и всякие ништячки, типа погоду посмотреть и т.д.
    Ответ написан
    4 комментария
  • Что вы делали для облагораживания разработки на php?

    p4s8x
    @p4s8x
    1) Тестовый сервер
    Очень часто бывают ситуации, когда разработчик(в частности фрилансер) находится не за своим любимым рабочим местом, а где-то в гостях, в отъезде и т.д.
    Когда появляется необходимость исправить баг или внести какие-либо изменения — разворачивать за чьим-то ноутбуком/стационарником все инструменты, ставить денвер, качать все целиком, разворачивать базу. Значительно проще поставить winscp¬epad++ и внести правки на продакшн. С увеличением частоты таких «правок» код превращается в то, что описано выше.
    Для решения таких проблем в первую очередь введен регламент — запрета вносить правки на продакшн, но! одновременно с этим допускается работа на тестовом сервере! Все правки, мелкие большие с сервера коммитятся в свн(изучить консольные команды svn для разработчика не составляет проблемы… их нужно 2-3 в такой ситуации) и уже только после этого апдейт на продакшене. Для апдейта на продакшене даже сделан www-скрипт, который позволяет делать апдейт без подключения к ssh и т.д.
    Изменения в БД все только через миграции!
    Так что делайте тестовый сервер обязательно! ИМХО необходимая вещь любому проекту.

    2) Трекер! Писать и общаться через трекер воспитывает и клиента и заказчика.
    Мы на томже тестовом развернули редмайн. Позже добавили к нему tikiwiki, в которую пишутся полезные няшечки для других разработчиков и клиента. Трекер также отображает активность разработчиков для клиента. Клиенту приятно посмотреть, что вот была такая ошибка и по её исправлению был сделан такой-то коммит и вон чето поменяли.

    3) Проведение рефакторинга. Очень сложно клиенту объяснить, что это такое и зачем он нужен. Почему он должен платить за «переписывание» кода? Пишите сразу правильно, скажет он. Практика показывает, что всетаки можно доказать клиенту необходимость этого действия.

    4) Автоматические тесты.
    На тестовом сервере далеко не всегда можно увидеть все проблемы- не поломался ли чужой код.
    Использование фреймворков позволяют не разводить тотальную быдлятину и обложить код тестами.
    Ответ написан
    3 комментария
  • Кеширование extjs

    p4s8x
    @p4s8x
    >туева хуча классов
    Вы имеете ввиду, что подгружается много файлов?
    Тогда можно отключить лоадер:
    Ext.Loader.setConfig({
    enabled: false
    });

    И юзать спокойно ext/ext-all-debug.js
    Если напрягает размер файла, то через JSBuilder кажется можно делать кастомные сборки проекта, где будет только те классы, которые требуются вашему проекту.
    Ответ написан
    1 комментарий
  • Как в веб-приложении под одним аккаунтом запретить одновременную работу нескольким пользователям?

    p4s8x
    @p4s8x
    Как вариант — писать постоянно что-то в cookie и при следующем переходе это проверять и писать новое значение и т.д.
    Ответ написан
    4 комментария
  • Samsung Galaxy S II. На что стоит обратить внимание при покупке?

    p4s8x
    @p4s8x Автор вопроса
    Взял таки я себе этот телефончик в одном из выше упомянутых магазинов.
    Аппарат шикарен.
    Тут уже и так попытались развести срач на тему iOs vs Android, скажу лишь, что брал андроид ради того, чтобы иметь возможность «делать телефон под себя, а не себя под телефон».
    Доставка + пленка обошелся почти в 18 000.
    Из замеченных минусов: камера в темное время суток не очень хорошо берет фокус. Но я не рассматривал данный девайс в качестве фотоаппарата. Для этого есть зеркалка.
    Изначально я рассматривал серию Xperia и вот взяв данный аппарат, считаю что он стоит тех денег, что я за него отдал.
    Ответ написан
    Комментировать
  • Какой монитор взять что бы меньше уставали глаза при работе?

    p4s8x
    @p4s8x
    Для «глаз» смотрите матрицы семейства IPS. Я пол года назад озаботился покупкой монитора и выбрал NEC MultiSync LCD2490WUXi2 market.yandex.ru/model.xml?modelid=5062925
    От большого экрана только плюсы. Да… первую неделю глаза разбегались, потом привык.
    До этого был Samsung с TN матрицей и разница колоссальная в плане снижения нагрузки на глаза.
    Ответ написан
    2 комментария
  • На какую тему можно написать статью по Yii?

    p4s8x
    @p4s8x
    Например про реализацию модульного бэкэнда и вообще про написание на нем админки в целом. Можно еще сделать обзор crud решений для yii.
    Ответ написан
    Комментировать
  • Как заставить pfsockopen() в php не плодить соединения?

    p4s8x
    @p4s8x
    Здесь явно присутствует мистика!

    Чтобы узнать какое конкретно соединение используется нужно воспользоваться
    stream_socket_get_name ($fp,false); // или true в зависимости от стороны
    Но мне это ситуацию сильно не спасло)
    ftell должен возвращать что-то типа позиции, но мне всегда выдавал 0 независимо от того, записалось что-то в сокет или нет.
    Опытным путем было выяснено, что если соединение не трогать (примерно) 5 секунд, то используется новое, если соединение переоткрывать слишком быстро, то он либо создает новое, либо использует одно из уже созданных, но если это одно из созданных уже не использовалось в течении 5 секунд, то он следуя «правилу» создает новое. и эти 5 секунд это не значение таймаута.
    Если например писать в сокет один символ, то сниффер покажет, что в одно соединение была произведена запись несколько раз.
    Копаем дальше)
    Ответ написан
  • ExtJS4, Grid при добавлении обращается по неверному url?

    p4s8x
    @p4s8x
    Обратите на параметр «api»

    proxy: {
    type: 'ajax',
    api: {
    create: 'store/newData/model/RulesList',
    read: 'store/getData/model/RulesList',
    update: 'store/setData/model/RulesList',
    destroy: 'store/destroyData/model/RulesList'
    }
    ,
    reader: {
    type: 'json',
    root: 'RulesList',
    successProperty: 'success',
    messageProperty: 'message'

    },
    writer: {
    type: 'json',
    writeAllFields: false
    },
    Ответ написан
  • Нужны ли статьи о Yii?

    p4s8x
    @p4s8x
    Интересуют статьи про реализацию бэкенда
    Ответ написан
    Комментировать
  • Apache/PHP как получить данные, переданные в POST-е?

    p4s8x
    @p4s8x
    php.net/manual/ru/wrappers.php.php
    можно прочитать из php://input
    типа file_get_contents(“php://input”)
    либо еще может быть есть в $HTTP_RAW_POST_DATA
    Ответ написан