Ответы пользователя по тегу PHP
  • Связка Nginx+Apache. Странное поведение virtual hosts - почему?

    rumkin
    @rumkin
    Это говорит о том, что apache не видит хоста из-за nginx, видимо, читает его не из HTTP-заголовка, а из значения указанного прокси-сервером.
    Не специалист по nginx, но, судя по всему, эта строка proxy_pass http://127.0.0.1:8080/; должна содержать имя хоста, попробуйте так proxy_pass http://$host:8080/;
    Ответ написан
  • Как организовать файловую структуру как альтернативу MySQL?

    rumkin
    @rumkin
    То что вам нужно — sqlite. Это sql-база данных состоящая из одного файла. В коде загружаете как обычный файл, а работаете как с SQL. Скорее всего вы ищете именно это.
    В противном случае используйте любой другой популярный формат хранения данных: xml или json. Но учтите, что рано или поздно вы столкнетесь со всеми детскими болезнями баз данных. Подобный проект как учебный очень полезен, как рабочее решение — нет.

    UPD. На SQLite можно сделать cms для небольшого сайта или даже магазина, это удобнее, проще и иногда надежнее. Так что в продакшене использовать такое решение можно, оно отвечает стандартам и имеет развитую инфраструктуру. Но под нагрузкой или на bigdata придется мигрировать на полноценную СУБД, так как sqlite целиком размещается в памяти.
    Ответ написан
  • Как сделать такой тест?

    rumkin
    @rumkin
    Во-первых:
    var a = Math.round(Math.random()*99);
    var b = Math.round(Math.random()*(99-a));

    Так вы всегда получите сумму до 100.

    После кнопки добавляем элементы:
    <span id="formula"></span>
    <input type="text" id="answer"/>


    Затем:
    var button=document.getElementById('start'); // Кнопка
    var formula=document.getElementById('formula'); // Формула
    var answer=document.getElementById('answer'); // Тестовое поле
    
    var a,b;
    button.onclick = function () {
         a = Math.round(Math.random()*99);
         b = Math.round(Math.random()*(99-a));
         formula.textContent=a + ' + ' + b + ' = ' ;
    };
    answer.onkeyup=function(){
        if (this.value-0 === a+b) alert('Ok');
    }

    Дальше сами разберетесь.

    Во-вторых, можно обойтись без PHP.
    В-третьих, так обработчики событий никто давно не навешивает.

    Время можете засекать по секундам (до тысячной доли) с помощью Date.now() прямо в браузере.

    jsfiddle.net/z3dyR/2
    Ответ написан
  • Каким алгоритмом можно парсить json на php (критично низкое потребление памяти)?

    rumkin
    @rumkin
    Если решить задачу не меняя условий, тогда нужно читать файл по кускам, резать куски по '},{' и пытаться распарсить до тех пор пока не обнаружится первый наименьший валидный блок, остаток добавлять к следующей итерации. Функция json_decode не выбрасывает никаких исключений или сообщений об ошибках, так что в него можно смело передавать невалидные данные. Это самый простой и эффективный способ решить задачу, без сторонних решений.

    Если немного изменить (в том случае, когда нет гарантии, что файл будет отформатирован, как в примере), то между объектами лога (или достаточно большими блоками) я бы вставлял разделитель, например так:
    },"--delimiter--",{ Затем считывал бы файл по кускам, разбивал по разделителю и парсил родным json_decode. Разделитель нужно сделать более универсальным, но это уже другой вопрос. Это будет наиболее близким к стандартам решением.

    Вообще такой вариант хранения логов объединяет в себе все недостатки используемых технологий, в т.ч. и самого php. Так что советую в дальнейшем избегать таких решений — мало кто из коллег его оценит и захочет поддерживать.
    Ответ написан
  • Modx revolution - как решить проблему с установкой?

    rumkin
    @rumkin
    Первое что бросается в глаза mv * .. Так вы пропускаете скрытые файлы (которые начинаются с точки), поэтому в следующий раз просто переместите всю папку, ну или дополнительно введите команду mv .* ..

    Если есть selinux попробуйте отключить командой `sudo setenforce 0`, если работает, значит нужно выставить нужный контекст, только потом включите обратно `sudo setenforce 1`!
    Ответ написан
  • Из чего должно состоять ядро для многопользовательских браузерных приложений?

    rumkin
    @rumkin
    Ядро многопользовательской системы должно содержать механизмы для взаимодействия пользователей. Вот минимальный набор:
    — Механизм конфигурации
    — Модуль управления пользователями с возможностью добавления активных и удаления неактивных с настраиваемым таймаутом (в зависимости от требований).
    — Очередь событий с моделью синхронизации времени, возможно с компенсацией задержки, если игра предполагает realtime-динамику.
    — Механизм обмена информацией сервер-пользователь например на websocket.
    — Механизм расширения: подключаемые контроллеры для выполнения задач, например генерации мира на лету, просчет взаимодействия, взаимодействие с контактом и т.д и т.п.

    UPD. Так же советую посмотреть на сторонние проекты, например express.io.
    Ответ написан
  • Почему запрос sql с Like выводит пустую строку?

    rumkin
    @rumkin
    Что выдает var_dump($result) ?

    Используйте mysql_fetch_assoc, если используете только ассоциативные массивы. Или переходите на pdo.
    Уберите лишние кавычки в конце примера.
    Проведите запрос без подстановки значения переменной.
    Убедитесь что $b не пустое.
    Ответ написан
  • Как лучше реализовать последовательную обработку ошибок?

    rumkin
    @rumkin
    Лишний try-catch это всегда увеличение нагрузки. Поэтому, там, где обертки ради оберток, то лучше убрать. Некторые проекты обходятся несколькими общими классами для ошибок, не по происхождению (это вы в трейсе увидите), а по назначению: ClientException, AppExcetion и CoreException.

    Если вы обратили внимание, то широкого распространения наследование исключений не получило.

    Сейчас я думаю над моделью схожей с моделью событий в js. В первую очередь классифицирую события по типу, а не по классу-источнику, вместо числового ID (который опять же почти никто не использует), я использую текстовый id, например `user_login_failed` и массив $data c данными. Таким образом, я всегда вижу, что за ошибка пришла, получаю данные в удобном виде: массив $data итерируется и доступен программно, легко перевожу ошибку в сообщение на нужном языке (RU, EN) с подстановкой данных из объекта data, передаю в другие источники, например по сети. Такие данные можно хоть в БД класть :)
    Ответ написан
  • Web[js, php] - cоздание, хранение аннотаций и комментариев к документам, а так же миграция аннотаций между версиями документа. Как лучше?

    rumkin
    @rumkin
    Посмотрите в сторону DOMDocument. Он позволит использовать максимально близкие интерфейсы по работе с dom на сервере и на клиенте.
    На клиенте, выделяем текст, находим ближайшего потомка, высчитываем для него xpath и офсет, передаем на сервер xpath, офсет и комментарий.

    Надеюсь помог.
    Ответ написан
  • Выбор PHP фреймфорка?

    rumkin
    @rumkin
    Посмотрите в сторону Silex — это вообще микрофреймворк, все что нужно можно подключить из Symphony, откуда он (Silex) родом. Либо вообще посмотрите в сторону микрофреймворков, fat-free, например.
    Ответ написан