• Вызвать функцию класса и других функций(область видмости)?

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

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

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

    @MadridianFox
    Web-программист, многостаночник
    1) Go компилируемый, само собой скорость выше, но если вы на маленьком сайте упираетесь в скорость исполнения кода, то проблема скорее в коде, и выбор более быстрого языка избавит вас только от симптома, но не от болезни
    2) на seo влияет только то ЧТО вы отдаёте пауку. Не важно на каком языке пишется программа, которая отдаёт html
    3) Программа написанная на go сама работает как сервер. Более того, это не какой-то сервер приложений, как например tomcat, нет, вы сами будете писать цикл обработки входящих соединений - т.е. вам необходимо этот самый серер реализовать. В отличие от php+apache, где в качестве сервера выступает apache, который при необходимости вызывает php. Ставить ли apache или nginx перед go сервером вы решаете сами.
    4) Поддерживает. На скорость работы СУБД не влияет то, на каком языке написана программа, которая к ней обращается.
    5) Фреймворков уровня Yii2 или Symfony не наблюдается. Ситуация такая же как и с NodeJS - что-то есть, но комбайнов нет.
    6) Если что-то может слушать соккет - на этом можно написать сайт. Любой. Другое дело, что сайты визитки на Go не пишут (только ради забавы), а крупные сайты вообще имеют сложную архитектуру, такую что язык уже не имеет значения.
    7) Для php разработчика - да. Как минимум вы меняете скриптовый язык на компилируемый. Это значит что любое изменение кода требует компиляции, остановки работающего сервера, загрузки бинарника на его место и запуск. Кроме того вы меняете Stateless модель работы кода на полноценно работающую программу. Если на php у вас скрипт запускался заново при каждом http запросе, то программа на go запускается один раз и после этого принимает множество запросов.
    Ответ написан
    10 комментариев
  • Почему не запускается мой код в контейнере docker?

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

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

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

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

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

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

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

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

    @MadridianFox Автор вопроса
    Web-программист, многостаночник
    Как оказалось, mysqlbinlog, без опции -s выводит строки вида BINLOG 'base64_encoded_text', что является служебной командой для mysql. Для того чтобы увидеть запрос, необходимо при вызове mysqlbinlog добавить аргумент -v, но запрос будет выведен в качестве комментария.
    А я то думал что mysqlbinlog выводит запросы так же как mysqldump...
    Ответ написан
    Комментировать
  • Получить массив в js через ajax?

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

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

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

    @MadridianFox
    Web-программист, многостаночник
    Встраивание iframe делается браузером. Это браузер видит что необходимо в этой странице подгрузить ещё одну, и подгружает. Сама же страница, тобишь сервер, не знает что его показывают в iframe, поэтому $_SERVER['SERVER_ADDR'] всегда будет показывать реальный адерс сервера.
    Ответ написан
  • Как решить эту проблему?

    @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 комментарий
  • Как использовать функции другого файла в PHP?

    @MadridianFox
    Web-программист, многостаночник
    Если у вас нет классов, то без include никак.
    Но даже когда у вас функции являются методами классов, и настроена автозагрузка, то include тоже делается, только неявно.
    Поэтому совсем без include никак не получается.
    Ответ написан
    Комментировать
  • Почему выводит только 1 запись?

    @MadridianFox
    Web-программист, многостаночник
    mysqli_fetch_assoc возвращает одну строку результата запроса в виде ассоциативного массива.
    При следующем вызове этой функции она вернёт следующую строку результата запроса.
    В случае если в результате закончились строки, функция вернёт false;
    В итоге надо вызывать эту функцию в цикле.
    $query_result  = mysqli_query($sqlConnect, "select ...");
    while($row = mysqli_fetch_assoc($query_result)){
        //...
    }
    Ответ написан
  • В чем проблема вроде как и php настроил?

    @MadridianFox
    Web-программист, многостаночник
    Сессию стартовать надо до печати любого текста.
    Об этом и текст варнинга - headers alredy send.
    При старте сессии сервер отсылает клиенту куки с идентификатором сессии. Куки передаются в заголовках. Заголовки можно посылать только перед посылкой тела ответа. Любой echo начинает отправлять тело ответа, и заголовки уже отправлять нельзя.

    Ну а самый первый варнинг - устаревший способ обозначения конструктора. Люди, очнитесь, php 5 уже лет десять как вышел! Надо использовать __construct()
    Ответ написан