Ответы пользователя по тегу PHP
  • ("PHP" == 0) => true, зачем?

    Практическое применение:

    Поле ввода, которое подразумевает числовое значение, например, сумма перевода. Пользователь вводит строку «тыща баксов». Нормальной валидации нет (почему — отдельный вопрос). Перевод уходит только если сумма больше нуля. Строка преобразуется в ноль и перевод не уйдёт. Если бы преобразовалась в 1 (true), то перевод бы ушел с не очевидной для пользователя суммой, минимум багофича. А ещё лучше в -1 (true true :) ) и вообще никакой валидации — перевод бы получился отрицательным — критический баг.

    PHP, имхо, разрабатывался так, чтобы снизить число таких критических багов.
    Ответ написан
    3 комментария
  • PHP-фрейрмворк для браузерных игр?

    Те примеры, что вы приводите никоим образом не являются общими для браузерок (например пишу сейчас RTS с элементами RPG). Общее, максимум, авторизация и прочие инфраструктурные вещи типа ORM, шаблонизации и роутинга, которые есть в любом уважающем себя фреймворке (обеспечиваемые, может быть, с помощью плагинов/расширений/бандлов, а может из коробки).
    Ответ написан
    Комментировать
  • Как вы пришли в PHP ?

    Попросили сделать инет-магазин. После нескольких попыток C++ отпал, выбирал между PHP и Perl — выбрал PHP (тогда ещё PHP3) по причине его большей близости к Си-синтаксису.
    Ответ написан
    Комментировать
  • Правильная реализация ActiveRecord в PHP на манер Rails?

    Если у нас на странице 800 комментариев (или других сущностей), то действительно где-то хранить 800 экземпляров объектов? И ->all где то в цикле создаёт объекты, привязывает к таблице и заполняет их полученными данными?

    Если использовать наследника от ArrayObject, то необязательно хранить все 800 в памяти. Например,

    UserCollection extends ArrayObject {
      private $ids;
    
      function __construct($where) {
         $ids = db::query("SELECT id FROM Users WHERE $where")->getColumnValues('id');
      }
    
      public function offset($index) {
        return new User(db::query("SELECT * FROM users WHERE id={$ids[$index]}"));
      }
    }


    Пример грубый, небезопасный, фактически псевдокод. Но с 800 записями возникет проблема, известная как «1+N» — foreach в шаблоне вызовет 801 запрос к БД. Хранить 800 не хорошо, 801 запрос к БД ещё хуже. Выход — «страничный» кэш. При запросе, например, $users[73] выбираем (если ещё не выбрано) первые сто записей (при [173] вторые сто), инстанцируем 100 объектов в кэше (массив объектов), затирая те, что были раньше (вторая сотня затирает первую) и возвращаем 73-й (в обоих случаях). Особенно эффективен если вся обработка идёт последовательно (foreach и т. п.) — на 800 записей 9 запросов и максимум 100 объектов в памяти (вернее от работы сборщика мусора зависит, можно форсировать его работу при затирании ненужной сотни через gc_collect_cycles()), главное их в другом массиве не сохранять :)
    Ответ написан
    1 комментарий
  • Symfony 2 или YII?

    Для начала изучить паттерны (что такое и для чего), имхо. Тогда будет более глубокое понимание того, что собственно происходит в фреймворках (особенно в симфони) когда будете писать блог на двух разных для выбора. Не знаю как yii, но в Symfony2 паттерны на каждом шагу и без их понимания часть кода может казаться (а для конкретных задач и быть) излишней.
    Ответ написан
    5 комментариев
  • Как отучить стажёра от говнокода?

    Похоже просто плохо знает стандартную библиотеку. Заставьте прочитать php.net или книгу с описанием наиболее часто используемых функций.
    Ответ написан
    Комментировать
  • Вопрос по flock в php?

    Вот потому что не очень ясно и не хочется пользоваться :) А суть там по-моему в том, что flock где-то может работать на уровне процесса, а не ядра/фс, то есть несколько потоков в одном процессе она разрулит, а вот то что другой процесс тоже файл залочил и не узнает. Дедлока не будет, а два процесса в файл писать будут.
    Ответ написан
    Комментировать
  • Вопрос по flock в php?

    У flock() нет в общем случае гарантированного поведения, на *nix лучше, по-моему, использовать семафоры.
    Ответ написан
    4 комментария
  • На чём писать демона

    Если вам точно нужен статический язык, но не си/плюсы, то посмотрите в сторону Java/С#.
    Ответ написан
    1 комментарий
  • ORM для PHP

    Doctrine2 — первая тоже была хороша, но вторая сказка :) Модели обычные объекты, не наследники чего-нибудь — связь с базой задаётся или в конфигах, или в аннотациях (комментарии к классу и свойствам по типу phpdoc) — никакой двойной, а то и тройной ответственности, модель не знает как и где она хранится в принципе, никаких методов объекта save или класса find нет. За хранение (вернее «персистентность») объектов отвечают репозитории. В общем реализованы паттерны DataMapper и UnitOfWork, а не популярный ActiveRecord в разных вариациях.
    Ответ написан
    5 комментариев
  • Борьба с php прокси для хостера

    Какая нибудь из расширений iptables? Например:

    owner

    This module attempts to match various characteristics of the packet creator, for locally-generated packets. It is only valid in the OUTPUT chain, and even this some packets (such as ICMP ping responses) may have no owner, and hence never match.
    --uid-owner userid
    Matches if the packet was created by a process with the given effective user id.
    --gid-owner groupid
    Matches if the packet was created by a process with the given effective group id.
    --pid-owner processid
    Matches if the packet was created by a process with the given process id.
    --sid-owner sessionid
    Matches if the packet was created by a process in the given session group.
    --cmd-owner name
    Matches if the packet was created by a process with the given command name. (this option is present only if iptables was compiled under a kernel supporting this feature)
    Ответ написан
    Комментировать
  • Сравнение Zend Framework vs Symphony vs Codeigniter?

    symfony, Symphony это CMS кажется :)

    А так, мне нравится использовать symfony2 как фреймворк, а ZF2 как библиотеку классов, подключаемую к фреймворку.
    Ответ написан
    Комментировать
  • Как защитить свой код на PHP от стороннего использования?

    От коллег, имеющих доступ хотя бы на чтение к центральному репозиторию ничего не спасёт (если как указали выше не выкладывать туда уже зашифрованный код). От хостера, имеющего физический доступ к дискам, тоже. От праздного любопытства сотрудников хостера может помочь использование шифрованных ФС, от целенаправленного уже нет.

    В общем, имхо, технические средства защиты кода (тем более для интерпретируемых ЯП) могут использоваться лишь для усложнения нелегального использования, от целенаправленной атаки они не спасут. Основная защита должна быть юридическая — для начала Государственная регистрация программы для ЭВМ или базы данных
    Ответ написан
    3 комментария
  • Twig vs Smarty

    Попробовал twig и в новых проектах отказался от «нативного шаблонизатора», хотя всегда был его горячим сторонником. Основная причина — в twig по умолчанию включено экранирование вывода и {{user.name}} куда короче (и понятней верстальщику), чем <?php echo htmlspecialchars($user->name, ENT_QUOTES, 'UTF-8') ?>. Плюс для удобного использования хелперов и переменных (хотя бы замены htmlspecialchars($user.name, ENT_QUOTES, 'UTF-8') на escape($user-name), а в идеале просто $user->name), требует вторжения в глобальную область видимости, что может привести к трудно улавливаемым глюкам.
    Ответ написан
    Комментировать
  • DDoS - как уменьшить нагрузку на php?

    Ещё в прошлом вопросе хотел вам сказать, что раз вызывается php в принципе, то это уже не статика. Но сходу не смог придумать учёта посещаемости каждого топика, кроме как через периодический парсинг логов.
    Ответ написан
  • PHP Web IDE

    emacs/nano/vim/… (в алфавитном порядке :) ) через ssh? Если поднапрячься, то, говорят, полноценную IDE из первого и последнего сделать можно. У меня, правда, из vim не получилось, просто как редактор использую.
    Ответ написан
    3 комментария
  • Подскажите простую CMS на PHP

    SimpleCMS :)
    Ответ написан
    Комментировать
  • Образцовые PHP web приложения с открытым кодом для обучения?

    Добавлю ещё symfony2 и Doctrine 2.
    Ответ написан
    Комментировать
  • Что выбрать: $someVar или $some_var?

    Использую camelCaps для переменных, свойств, методов и функций. Кроме меньшей длины позволяют визуально отделить свои функции от стандартных (не всегда, но часто).
    Ответ написан
    2 комментария
  • PHP - как cоединяться с Mongo по требованию (отложенно)?

    Плотно не работал, не знаю есть ли именно то, что нужно, но обвязка для Монго есть у Doctrine
    Ответ написан
    Комментировать