Задать вопрос
  • Как получить доступ к свойству массива объектов?

    @MadridianFox
    Web-программист, многостаночник
    Можно, конечно, пойти на изврат с фигурными скобками, но лучше просто добавьте alias в запрос и не парьтесь.
    SELECT COUNT(user_id) as `count` ...
    var_dump($results->count);
    Ответ написан
  • Xdebug remote server, phpstorm?

    @MadridianFox
    Web-программист, многостаночник
    Тут надо поиграться с настройками xdebug в php.ini. Надо:
    • Включить постоятнную отладку (не по триггеру)
    • Задать статический ip компьютера разработчика (а не connect_back)

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

    Однако. Это странно, причём вдвойне.
    Во-первых, сайт должен быть в двух экземплярах - один для разработки и один для пользователей. Тот, который для пользователей не должен иметь xdebug, т.к. он серьёзно влияет на производительность.
    Во-вторых, дебажить запросы от пользователей? Что? Зачем?
    Ответ написан
  • Как выучить/понять ООП паттерны?

    @MadridianFox
    Web-программист, многостаночник
    Не надо учить паттерны. Надо понимать ООП. Чтобы понимать ООП, надо знать зачем оно нужно. Методология/парадигма - это подход к решению проблемы.
    Значит ООП (а это парадигма) решает проблему.
    Эту проблему необходимо ощутить на себе. Для этого нужна практика.

    Мэт Задстра - отличный выбор для начала. Сам с него начинал.
    Однако перед этим надо набить шишки. Только тогда, то, что описано в книге, будет воспринято как полезная информация.
    Перед тем, как прочитать эту книгу я два года говнокодил.
    Прочитал - зашло, подумал что всё понял.
    Прочитал Фаулера. Ничего не понял.
    Через полгода снова прочитал Фаулера. Подумал что теперь то уж точно всё понял.
    Ан-нет.
    Сейчас придерживаюсь взглядов на ООП Егора Бугаенко. Думаю что теперь то уж точно всё знаю.
    Посмотрим что будет дальше.
    Ответ написан
    2 комментария
  • Как лучше сделать функцию Запомнить меня?

    @MadridianFox
    Web-программист, многостаночник
    Привязка текущей сессии с браузеру в PHP происходит как раз через куки. Т.е. это механизм, который по умолчанию используется на миллионах сайтов.
    Да, он не идеален. Любой, кто сможет перехватить то что браузер пользователя отправляет серверу, может взять эту куку, вставить себе и зайти на сайт от лица того пользователя.
    Спасает https, который шифрует передаваемые данные.

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

    @MadridianFox
    Web-программист, многостаночник
    Потому что рекурсия получается. Класс D в методе r() вызывает свой метод b() который унаследован от класса B и который в свою очередь вызывает метод r() и так по кругу.
    Ответ написан
    1 комментарий
  • Как задать JsDoc для анонимной функции?

    @MadridianFox
    Web-программист, многостаночник
    Попробуйте повесить док-коммент прямо на переменную
    angular.forEach(textures, function (texture) {
         /** @var texture ImageType */          
         .....
    })
    Ответ написан
    1 комментарий
  • В чем проблема добавления в BD?

    @MadridianFox
    Web-программист, многостаночник
    А вот и буду кидаться палками, ловите сразу 4 =)
    1) Вы хотите отправить ajax запрос, но вы делаете форму и работающую (button type="submit") кнопку отправки. Не надо так. Либо форма, либо ajax.
    2) JS код, который вешает обработчик на кнопку располагается выше самой кнопки и не обёрнут в $(document).ready. Т.е. в тот момент когда исполняется этот код, самой кнопки ещё нет, и обработчик нажатия не вешается.
    3) обработчик отправки формы реагирует на isset($_POST['button-reg']), однако когда вы делаете ajax запрос, вы не передаёте параметр "button-reg".
    4) расширение php, которое позволяет вызывать функции mysql_*** устарело. Используйте mysqli или PDO
    Ответ написан
    8 комментариев
  • Возможно ли автоматически парсить информацию не через cron?

    @MadridianFox
    Web-программист, многостаночник
    Ну если вы можете модифицировать сайт, то надо дописать код, так чтобы при публикации статьи она ещё и публиковалась вконтакте.

    Если не можете изменить код сайта - то никак. Остаётся только периодически обращаться к сайту и если там что-то появляется то парсить.
    Ответ написан
    Комментировать
  • Как реализована лента событий в популярных сервисах?

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

    Однако, и первый способ гиганты вряд-ли используют прямо так. Постов в соцсетях и так миллиарды. Не могут они храниться в одной таблице так чтобы простой
    select * from posts join subscribe sub on(...) where sub.user_id=123
    выдавал результат за адекватное время.
    Скорее всего там какие-то архисложные индексы строятся, какие-то умные кэши используются, база распределена так, чтобы сотня машин одновременно искала, но каждая машина в своём куске таблицы...

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

    @MadridianFox
    Web-программист, многостаночник
    Т.к. вы вызываете команду из консоли, то очевидно что файл уже должен лежать на сервере.
    Вызывая команду мы можем просто передать ей путь до файла, и далее, имея этот путь мы можем открыть файл и что-то с ним делать с помощью стандартных функций (ну или завернуть в какой-нибудь удобный объект).
    public function actionIndex($filepath){
       $filename = end(explode('/',$filepath));
    
       $file_handler = fopen($filepath); // далее используем дескриптор файла для чтения/записи
       // или
       $file_content_string = file_get_contents($filepath); // сразу читаем содержимое в строку
    }

    Вызывать это дело надо так: php yii MyCommand /path/to/file
    Ответ написан
    Комментировать
  • Как сделать регулярку более сторогой?

    @MadridianFox
    Web-программист, многостаночник
    Надо добавить маркеры начала и окончания строки. Вот так:
    preg_match("/^update\/[0-9]+\/[a-z]+$/", $input_line, $output_array);

    Иначе выражение будет срабатывать на любые строки в которых (в середине длинного текста, например) есть искомый шаблон.
    Ну и слэши явно указать надо.
    Ответ написан
    Комментировать
  • Как правильно составить тест для phpunit и json_encode()?

    @MadridianFox
    Web-программист, многостаночник
    Всё просто - не надо в функции проверки прав печатать ответ.
    Более того, функция проверки прав не должна ничего знать про то - под аяксом она запускается или нет. Она должна просто проверять и возвращать результат (bool, текст ошибки, код ошибки, что угодно), а уже где-то в контроллере (это такое место, где вы получаете данные http запроса, решаете что делать и формируете http ответ) вы должны превращать результат в ответ.
    Ответ написан
  • Namespace в php - как использовать?

    @MadridianFox
    Web-программист, многостаночник
    Сами по себе неймспейсы для подключения файлов не предназначены. Это только способ называть классы короткими именами и разрешать конфликты, если два разных класса имеют одинаковое название.
    Но очень распространён (на уровне стандарта языка) подход, когда функция автозагрузки использует неймспейс как путь до файла с классом.
    Так что смотрите в сторону PSR-4 и функции spl_autoload_register.
    Ответ написан
    Комментировать
  • Знакомый говорит что неправильно. Правильно ли?

    @MadridianFox
    Web-программист, многостаночник
    Первое что бросается в глаза - это то как вы работаете с элементами массивов. Мало того, что вы ключи массива пишете не как строки, а как неинициализированные константы, так ещё и полученное значение в кавычки берёте. Зачем?
    А вообще вопрос очень странный. Надо давать некоторое пояснение - что именно в этом коде, для вас или вашего знакомого, является неправильным.
    Ответ написан
    Комментировать
  • Как "активировать" часть php кода, если пользователь видит блок, в котором находится содержимое этого кода?

    @MadridianFox
    Web-программист, многостаночник
    Важно понимать, что сначала отрабатывает PHP, который формирует и отдаёт html, а уже потом. Браузер, приняв этот html, рендерит его, ну и если у чего-то там display:none, то не показывает этого.
    Вам надо сразу не генерировать этот div. Как это сделать зависит от того кода который у вас уже есть.
    Ответ написан
  • Как разбить запись в cvs из mySQL на столбики в Excel'e?

    @MadridianFox
    Web-программист, многостаночник
    Нади использовать не запятые, а точки с запятой.
    Ответ написан
    3 комментария
  • Как реализовать свойства для разных товаров в интернет магазине?

    @MadridianFox
    Web-программист, многостаночник
    Посмотрите в сторону EAV. Это подход, когда у вас в таблице товаров только самые базовые характеристики, такие как наличие, цена, а специфические хранятся в отдельной таблице, где каждая строка это одно свойство. Ну и ещё одна таблица для названий характеристик. Примерно вот так:
    goods{id, name, price}
    attribute{id, name}
    attribute_value{id, id_attr, id_good, value}

    Тут возможны некоторые варианты связанные с типом данных атрибута. Т.е. может быть одна таблица со значениями атрибутов и в ней есть поля как для строкового значения, так и для числового и даты например. А можно иметь по одной таблице на тип.
    Ответ написан
    Комментировать
  • Как правильно сделать заглушку на сайте Codeigniter?

    @MadridianFox
    Web-программист, многостаночник
    Сделайте перенаправление не с любого адреса на coming-soon.php, а только с адресов, заканчивающихся на .php
    Ответ написан
  • На каком хостинге делать большой проект?

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

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

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

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