Ответы пользователя по тегу PHP
  • На каком хостинге делать большой проект?

    @MadridianFox
    Web-программист, многостаночник
    Делайте сразу в контейнерах и размещайте там где они могут запускаться. Если проект взлетит, то без проблем перенесёте в облако. Более того, грамотная работа с контейнерами сразу заставит вас организовать масштабируемую архитектуру.
    В случае с быстрым выжиранием диска, лучше сразу идти в облако. Всякие там S3 с одной стороны могут дать вам условно неограниченное, а главное сразу масштабируемое хранилище. Ну и так же заставят вас использовать чуть более грамотный подход, чем "сразу в лоб" класть файлы на диск, а потом мучиться с масштабированием.
    Ответ написан
    Комментировать
  • Как вывести информацию о Raspberry pi на сайт?

    @MadridianFox
    Web-программист, многостаночник
    Надо чтобы малина отправляла телеметрию на сайт.
    Т.е. на сайте есть специальный эндпоинт, который, ну допустим, принимает json/xml/etc... и пишет значения из него в базу.
    Надо просто периодически делать http запрос, и передавать туда температуру полученную с малины.
    Это можно сделать как самой малиной, если с неё есть выход инет, либо можно держать малину подцепленную к ПК, и пусть ПК уже получает данные с малины и делает тот же запрос на сайт.

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

    Ну и да, было бы неплохо хоть какую-нибудь аутентификацию прикрутить, ато любой вася пупкин сможет передать фейковые данные на ваш эндпоинт =)
    Ответ написан
    Комментировать
  • Как реализовать массив подстановок для запроса в MySQL?

    @MadridianFox
    Web-программист, многостаночник
    Используя ...$arr вы не получите ключи в массиве. Поэтому почему бы не сделать третий агрумент обычным агрументом, и не передавать туда массив, который без изменений будет передаваться в execute?
    public function query($sql, $class, $params){ // $params = [":age"=>20]
            $sth = $this->dbh->prepare($sql);
            $res = $sth->execute($params); // <----
            if (false !== $res) {
                return $sth->fetchAll(\PDO::FETCH_CLASS, $class);
            }
            return [];
        }
    Ответ написан
    Комментировать
  • Как получить количество заказов за сегодня?

    @MadridianFox
    Web-программист, многостаночник
    $day_orders = $db->query("SELECT COUNT(*) as cnt FROM 'oc_order' WHERE 'date_add' >= CURDATE() ");
    echo $day_orders['cnt'];
    Ответ написан
    7 комментариев
  • Как подгружать новости не в хронологическом порядке?

    @MadridianFox
    Web-программист, многостаночник
    Просто используйте постраничную навигацию:
    SELECT *, something FROM `news`
    WHERE (некое условие для фильтрации по категориям) AND  date < "time of page hit"
    ORDER BY `something` ASC
    LIMIT 20, 20

    Я добавил в этот запрос всего два маленьких изменения. Первое - задал смещение для LIMIT, его надо высчитывать на PHP и вставлять в запрос. Первая цифра это просто номер страницы минус один, умноженное на количество постов на странице (page_num-1)*page_size. Вторая цифра - как обычно, количество постов на странице.
    Второе измененеие - добавил в where дополнительное условие: выбирать только те новости, которые уже были в базе, пользователь открыл страницу. Это необходимо, т.к. если в процессе подгрузки новостей добавится ещё одна, то страницы поедут (вы могли замечать это, когда листаете хабр и на следующей странице первым виден последний пост с предыдущей) и какая-то новость задублируется в общем списке на клиенте. Time of page hit должно храниться на клиенте и передаваться на сервер при подгрузке каждой следующей порции данных.

    Этот метод не зависит от того как вы сортируете новости - по дате, рейтингу, любому другому полю... главное чтобы первая подргузка и все последующие сортировались одинаково.
    Ответ написан
    5 комментариев
  • Как узнать какие файлы php сейчас исполняются?

    @MadridianFox
    Web-программист, многостаночник
    В списке процессов должно быть видно что выполняется скрипт.
    Кроме того, вы можете добавить в свой скрипт разного рода вывод в консоль (или сразу в файл), а при запуске скрипта через крон перенаправить вывод в файл. Далее уже этот файл открываете с помощью tail с опцией непрерывного чтения (насколько помню tail что-то такое умеет), ну и в реалтайме наблюдать что выводит скрипт запущенный через крон.
    Ответ написан
    Комментировать
  • Вынесение в трэйты работы с API платёжных систем, можно ли?

    @MadridianFox
    Web-программист, многостаночник
    Платёжные системы потому и можно назвать общим понятием "платёжные системы" потому что они предназначены для выполнения каких-то сходных операций. Если вы хотите иметь возможность подменять их или соединять друг с другом в разных комбинациях - вам необходимо привести их к общему интерфейсу, а все отличия инкапсулировать.
    Только так.. и это бигмак)
    Ответ написан
    Комментировать
  • Вызвать функцию класса и других функций(область видмости)?

    @MadridianFox
    Web-программист, многостаночник
    Лучший вариант - иметь одну точку входа, в которой создаётся подключение, и передавать это подключение вглубь только через конструкторы классов и аргументы методов.

    Более реалистичный вариант - выделение какого-нибудь service locator'а, который тоже лучше передавать руками, но часто его делают доступным глобально через static или singleton (который сам строится на static).

    Ваше решение в корне не верно. Класс, всё содержимое которого статическое это уже не класс, а набор функций.
    Ответ написан
    Комментировать
  • Почему не запускается мой код в контейнере docker?

    @MadridianFox
    Web-программист, многостаночник
    А вам точно надо каждый раз делать run с одинаковым именем и без rm, а после этого exec?
    Ответ написан
  • Как передать ошибку пользователю в MVC?

    @MadridianFox
    Web-программист, многостаночник
    передавать через контроллер, но при этом придется совершать в нем множество проверок, типа проверка на уникальность пользователя, пустоту полей, идентичность паролей

    Этим вы делаете толстый контроллер. На самом деле форма - это модель. Это страница на которой есть своя логика, и в зависимости от действий пользователя она меняет своё состояние, которое и отображается пользователю.
    И вот логика формы реализуется в модели формы, которая в свою очередь может дёргать более глубокие слои приложения.
    Таким образом задачей контроллера становится только получение данных из http запроса, засовывание их в модель и вызов у модели одного-двух методов.
    Ответ написан
    Комментировать
  • Структура универсального каталога данных?

    @MadridianFox
    Web-программист, многостаночник
    Вангую - щас понабегут люди с советами типа "юзай mongodb"...
    Вообще можно использовать EAV. Это когда атрибуты сущности хранятся не горизонтально (столбцы в таблице), а вертикально (один атрибут - одна строка). Дополнительно нужны таблицы, которые будут хранить список типов сущностей, список типов атрибутов и связи типов сущностей и типов атрибутов.

    Но предупреждаю - есть ощутимое проседание по быстродействию, да и работать с этим может быть не так удобно.
    В случае, когда необходимо соорудить хранилище для однотипных сущностей с опциональными атрибутами, например каталог товаров, где всё есть товар, но у холодильника есть мощность, а у смартфона - количество мегапикселей это в самый раз.
    Так вот, в таком случае быстродействие по фильтрации достигается через создание отдельного индекса, может даже с использованием отдельного ПО, такого как Sphinx.
    Ответ написан
    7 комментариев
  • Cron не может найти класс из подключаемого файла?

    @MadridianFox
    Web-программист, многостаночник
    Логично, в php запущенном из консоли нет document_root
    Ответ написан
  • Почему не добавляются запись в БД на Denwer?

    @MadridianFox
    Web-программист, многостаночник
    После вызова mysql_query добавьте вызов mysql_error и посмотрите какую строку он вернёт.
    Ответ написан
  • Получить массив в js через ajax?

    @MadridianFox
    Web-программист, многостаночник
    JSON.parser принимает строку и делает из неё объект/массив, в вашем случае это объект.
    Если вы используете jQuery для выполнения ajax запросов то достаточно будет указать dataType:"json" и результат сразу будет в виде объекта.
    Ответ написан
  • Как запустить php скрипт при помощи plink или из bat-файла?

    @MadridianFox
    Web-программист, многостаночник
    Возможно команда иначе называется. Или же на сервере совсем нет php.
    Ответ написан
  • Что почитать о динамическом выводе данных с сервера, без перезагрузки страницы?

    @MadridianFox
    Web-программист, многостаночник
    Если хотите много динамики на странице, то смотрите в сторону SPA (Single Page Application), т.к. jQuery лапша с ростом количества динамических частей на старнице начнёт запутываться.
    Но это отнюдь не "не очень сложное", т.к. мир SPA фреймворков это наверное одна из самых быстро развивающихся областей программирования.
    Ответ написан
    Комментировать
  • Как решить эту проблему?

    @MadridianFox
    Web-программист, многостаночник
    Где-то есть редирект с www на без www, вот оно по кругу и редиректит. Браузер это заметил и выкинул ошибку.
    Ответ написан
    Комментировать
  • Возможно ли сымитировать загрузку файла на сервер, если операция проходит на локальном ПК и установленном на нем Openserver?

    @MadridianFox
    Web-программист, многостаночник
    У вас в запросе на добавление данных в БД используется переменная $screenshot, но нигде выше (в предьявленном куске кода) она не определяется.
    Вам необходимо получить из супеглобального массива $_FILES данные о загруженном файле, там будут название, размер и путь до временного файла. Обычно, при загрузке файлов берут временный файл и копируют туда где он будет лежать, а путь до этого самого "туда" записывают в базу.
    Загружать файл можно даже "на локальном ПК и установленном на нем Openserver".
    Ответ написан
    Комментировать
  • На чём следует писать высоконагруженное API - на "PHP" или "Node.JS"?

    @MadridianFox
    Web-программист, многостаночник
    Высоконагруженный, да и вообще любой серьёзный проект, надо писать не "на чём?", а "как?". Точнее надо писать код так, чтобы он поддерживал горизонтальное масштабирование.
    Это значит что ваш код должен уметь запускаться на нескольких серверах сразу и не так чтобы отдельные части в разных местах, а именно дублироваться. "Перед" копиями должен стоять балансировщик, который на основании того, насколько загружен тот или иной сервер, выбирает на какой сервер адресовать приходящий запрос.
    Тут же стоит продумать бутылочные горлышки, а точнее избавиться от них. Например БД, она может поддерживать запуск своих копий на разных серверах, а может и не поддерживать.
    Сессии пользователей можно хранить централизованно, а можно делать "липкую" сессию, когда все запросы одного пользователя будут всегда идти на один сервер.
    В итоге, highload - это не про то на чём пишется софт, а про то как он пишется.
    Ответ написан
    Комментировать
  • Как загрузить классы без composer?

    @MadridianFox
    Web-программист, многостаночник
    spl_autoload_register() принимает функцию, которая принимает имя класса, который вы попытались использовать.
    Соответственно, вам нужно написать функцию, которая по имени класса делает include соответствующего файла.
    Важно - в функцию передаётся имя класса с пространством имён. Обычно люди располагают классы в пространстве имён точно так же как лежат файлы, т.е. файл в папке значит класс в одноимённом пространстве имён.
    В итоге, в файле test.php должен быть примерно такой код:
    spl_autoload_register(function($classname){
        $filename = // тут вычисляем имя файла из $classname
        include($filename);
    });
    Ответ написан
    1 комментарий