Артём Капитан очевидность, намекает на то чтоб найти файл memcached.so и указать путь до него в php.ini. Если вы думаете что здесь кто-то знает где лежит ваш файл, то это врятли.
Не ясно, что значит "текст в строку")) Текст это не строка?)) Может вы имели в виду картинку в текст? Тогда это OCR. Можно в сторону FineReader посмотреть
Так оно же говорит вам что установило в папку /usr/local/Cellar/memcached/1.5.16_1 а вы его в /usr/lib/php/extensions/no-debug-non-zts-20160303 ищете. Где логика?
Ну и плюс кажется brew создает софтлинк на нужную папку. Может он его не создал. Такое впринципе и руками можно сделать, либо перенести явно в папку с екстеншенами, либо заставить brew работать нормально. Уже не помню что там нужно, может инициализировать переключение версии PHP
Ну чтоб небыло LFI, нужно жесткие правила именования и простенький класс роутинга. Либо посмотреть в сторону какого-то фреймворка, пока наберется знаний, и созреет к самописному)))
Как пример, я с этого начинал https://github.com/nikic/FastRoute
Зависит от того что это за текст) Предположу что он может редактироваться. Тогда оставлять его в коде не стоит. А где вы его будете хранить. В базе, в файле, это уже ваше дело. Я бы предпочёл базу. Так как базы реализуют кэширование и выгрузку в память. Если вашего бота будут интенсивно использовать, то нагрузка на диск будет большая
Avi Shum Это не мелочи, от этого зависит реализация)
Если заменить. То можно использовать str_replace или preg_replace, если нужно регистронезависимую замену произвести. Он принимает два массива на поиск и на замену. Думаю обьяснять, как из словаря, сделять второй список с заменой и так понятно.
Если поиск совпадений, то разбиваем текст на слова, которые становятся ключём массива, для ислючения неуникальных значений, второй массив ключей представляет из себя словарь. Дальше смотрим какой массив меньше, проходимся по нему и проверяем на array_key_exists
Hfnas, Любые изменения в базе, в обход интерфейса идут через миграции. Миграции из себя представляют файлы с запросами к базе и таблицу состояний применённых к базе миграций. Миграции выполняет отдельный скрипт который отвечает за обновление кода, дополнительные сценарии и он же заносит применённые миграции в соответсвующую таблицу. Модели и Doctrine не используем. Есть некоторые сущности отвечающие за валидацию и помогающие сформировать запросы, но они больше похожи на хелперы и формы, чем на полноценный ORM или модели
1. Да
2. Да
3. Нет. Обычно существуют генераторы, которые синхронизируют сами структуру и класс.
Но еще раз повторюсь, что я противник ORM. Если хотите следовать по пути моделей и ORM, то лучше по пути BoShurik следовать.
P.S. В последнее время работаю с большими обьемами данных. И популяризация в обьекты чрезмерно избыточна. Про добавление столбца в живую базу, с миллиардной таблицей я вообще молчу. Поэтому избавляюсь от этих технологий. Хотя для маленького проекта или на его начальном этапе можно использовать, а потом переписывать критические участки)
1. Не только структуру. Миграция может и данные добавлять. Например "создать категории по умолчанию"
2. Да
3. Создать две миграции, а потом создать ORM на базе текущей структуры.
P.S. Я противник того чтоб ORM "создавало" или "модифицировало" структуру само. Структура должна формироваться с помощью миграций, а ORM обновляться в соответсвии с текущей структурой.
Хочу подметить что если в запросе установить % ( "SELECT * FROM `"._TABLE_."` WHERE `login` LIKE '%".$login."%'" ) то значение выводится в консоль
Значит дело в том что попадает в переменную $login, и что делает функция connectTables
Зуб даю, что если вставить явный запрос, то всё будет как нужно. % - подразумевает что у вас может быть что угодно в условии LIKE. Ставлю на то что логин не находит из-за того что вы его ни обрезали от невидимых символов и пытаетесь найти по точному соответсвию
P.S. Кстати переменные можно вставлять внутрь двойных кавычек, не так режет глаз как конкатенация
"`login` LIKE '".$login."'"
так красивей будет "`login` LIKE '{$login}'"
а еще более правильно использовать плейсхолдеры чтоб избежать SQL иньекции "`login` = :login"
Хотя если у вас конкретно кусок экрана тухнет. То это больше похоже на то что чипу скоро прийдет крышка. У меня такое когда-то было, выпадали отдельные пиксели или полосы перед смертью