• PHP скрипт палит базу при неверном подключении?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    А теперь правильный ответ.

    PDO - не единственная библиотека в составе РНР. И не она одна выдает ошибки.
    Поэтому искать решение, специфическое для PDO просто глупо. Ошибка при отправке емейла откроет данные для соединения с почтовым сервером - и т.д.

    Отключать показ ошибок надо для всего РНР целиком.

    И делается это очень просто. Добавляешь всего одну строчку в начало файла:

    ini_set('display_errors', 0);

    и всё - ни одна ошибка не появляется на экране! Причем это будут любые ошибки, а не одна конкретная.

    Но тебе всё равно нужно знать, в чем проблема. Чтобы её исправить. Поэтому сам текст ошибки надо писать в лог на сервере. Это тоже делается одной командой:

    ini_set('log_errors', 1);

    Всего две команды, и больше ничего менять в коде не надо.
    Они скроют текст ошибки от пользователя. но сохранят для того чтобы ты мог понять, в чем проблема.
    Ответ написан
    24 комментария
  • В каких случаях при разработке сайта на PHP лучше использовать не MVC (и его подобия), а какой-нибудь другой подход?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    сайт с одной формой и 3 статичными страничками вполне может обойтись без какой-либо архитектуры вообще. А так - любой подход оправдан только если удовлетворяет требованиям проекта, например практичнее разбить его на микросервисы, что впрочем не исключает MVC.
    Ответ написан
    Комментировать
  • Как получить теоретические знания, чтобы иметь возможность описывать то, что я реализую на практике?

    @EvgeniiR
    https://github.com/EvgeniiR
    Итак,
    какие конкретно стоит почитать

    1. Макконнелл, "Совершенный код". Объемная но не особо сложная книжка, можно прочитать не особо то за большее время чем такую-же книжку из художественной лит-ры.
    2. Роберт Мартин, Идеальный программист. Есть ещё "Программист прагматик", вроде тоже о чем то подобном. Книжка небольшая, в принципе можно за пару тройку недель прочитать рассуждения Дяди Боба о работе программиста.
    3 Роберт Мартин, Чистый Код. Весьма хорошая книжка, очень широко затрагивает тему написания поддерживаемого кода. Важно - особенно в этой книге, но так же и в любой другой - не зацикливайтесь на догмах аля "3 строчки на функцию", не обожествляйте SOLID, а рассматривайте, какие проблемы решают предложенные решения. Советую в каждом случае рассуждать о том, как описываемые вещи влияют на качество кода и архитектуры программы.
    4. Роберт Мартин, Чистая Архитектура - относительно новая книжка о том, что всё новое это хорошо забытое старое. Возможно вещи описываются немножко поверхностно, впрочем, углубляться в любом случае нужно самому. Книжка годная, получше объясняет SOLID, затрагивает другие принципы, затрагивает парадигмы, принципы дизайна, архитектуру, объясняет почему то, что многие горе-разработчики нынче зовут ООП им не является. Думаю эту книжку можно даже перенести на первое место.
    Дальше уж по ситуации - паттерны GoF, PoEAA, Рефакторинг Фаулера, Кента Бека про тестирование etc.

    подсознательно я продолжаю выбирать именно "правильные" подходы,

    Боюсь, что вы просто используете те подходы что знаете, а не выбираете исходя из требований и ситуации.
    Хотя бы потому что "правильных" подходов не бывает, есть подходящие в данной ситуации, и плохо подходящие, компромиссные и откровенно вредные.

    наследование — это реализовывается само собой.

    Вот эта фраза явно даёт понять что у вас есть проблемы в дизайне. Наследование это весьма опасная штука, и делать его просто потому что показалось удобным, не задумываясь об LSP, контрактах и инвариантах.. Кхм.. Плохо.

    Упомяну один момент: статейки в интернете и даже(о боги) на всеми нами любимом хабре или тостере, как и любые другие источники информации, книги и доклады любимых нами авторов представляют исключительно субъективное мнение автора, и лишь его понимание описываемой темы, сформировавшееся в силу, обычно, неизвестных нам обстоятельств. Они могут нести за собой скрытую сложность, абсолютно не подходить в ситуациях отличных от ситуации автора, и никогда не стоит принимать из за единственно-верную истину. Скорее, за пищу для размышлений и альтернативные подходы к какому-либо делу.
    Ответ написан
    Комментировать
  • В каких случаях при разработке сайта на PHP лучше использовать не MVC (и его подобия), а какой-нибудь другой подход?

    @EvgeniiR
    https://github.com/EvgeniiR
    В каких случаях при разработке сайта на PHP лучше использовать не MVC (и его подобия), а какой-нибудь другой подход?

    В случаях когда разработчики проекта разбираются в разных подходах и знают какой лучше использовать.
    Во всех остальных случаях лучше этого не делать.

    Большинство даже в MVC никогда не пыталось разобраться, и думает что это когда в проекте 3 папочки есть(model/ view/ controller/).
    Или что MVC было придумано для веб приложений (а это не так :) ).
    Ответ написан
    8 комментариев
  • Как увидеть реализацию методов SplObjectStorage?

    DevMan
    @DevMan
    в стабах и не нужна реализация, только сигнатуры.
    реализацию можно увидеть в исходниках пыха, но там будет уже не пых.
    Ответ написан
    Комментировать
  • Что должен знать junior Node.js программист?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    открой Headhunter и там пробегись по вакансиям. Это постоянно меняющийся рынок, в котором столько влияющих факторов, что бесполезно ждать ответа, хорошо если, десятка человек.
    Ответ написан
    Комментировать
  • Как научиться делать роботов?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    устроится на работу в компанию, производящюю роботов
    .. к Илону Маску? ))
    хотя и нас что то найдется ))
    побочный эффект - нужен диплом по рбототехнике, или хотя бы прикладной математике.. и с дипломной работой по теме
    это верхняя планка
    нижняя - лего роботы
    в промежутке - микро контроллеры.. но изучать придется много чего, без собственного рвения не осилить..
    и вопросы тут - не помогут. вот только когда будете конкретику спрашивать, тогда может кто че полезное и скажет
    Ответ написан
    Комментировать
  • Как сделать масштабирование и обрезку картинки средствами PHP?

    ssenj
    @ssenj
    HTML, CSS, PHP, WordPress, Bitrix
    Не проще использовать расширение PHP типа GD2, который для этого и предназначен?
    Ответ написан
    Комментировать
  • Стоит ли читать эту книгу?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    для
    большего понимания языка
    нужна практика. про книги - тот кто хочет узнать нечто, читает все что под руку попадется*. тот кто не хочет ни читать, ни кодить, (upd даже гуглить сам не хочет ;) тот и задает вопросы "а как мне ни чего не делая, сразу в сеньеры попасть"?

    ps * - если какую то книгу хвалят, это хорошо. в данном случае, вы упоминаете книги, у которых заведомо разная цель (по крайней мере по названиям). даже при возможном сходстве оглавления, "CLR via C#" больше ориентирована на раскрытие подкапотного устройства дотнет (CLR же). "Справочник по С# 7.0 полное описание" - вы не сообщаете автора, а мне тоже в лом гуглить.. в общем случае справочник, все таки не обучающее пособие для новичков, а подручная книга для того кто уже начал кодить самостоятельно, и постоянно этим занимается
    но как я попытался намекнуть выше, если вы хотите изучать (а если еще и смекалкой не обделены) - читайте все что под руку попадется, и тут же пробуйте. и сравнивайте. сравнение очень крутой опыт. в этом случае не важно, лучшая ли у вас книга. да и вообще - книги катастрофически отстают от реальности. возмитете любую доступную книгу, но добавтьте просмотр хабра по тематическим тегам, и не ленитесь нажимать кнопку F1 в визуал студии (будете знакомиться с МСДН**). так и формируется собственный опыт

    ** частенько МСДН, это истина в конечной инстанции. хотя не всегда легокопереваримая

    pps только на ютуб не ведитесь. там конечно есть и записи с конференций профи (чумовые) но до них дорасти надо. а по запросам вылезает море пены от школоты. имхо
    Ответ написан
    2 комментария
  • Кто-нибудь знает хорошую и достаточно современную литературу по вебу на Java?

    @aol-nnov
    google://spring pet clinic, например или google://thymeleaf good thymes virtual grocery
    ответ слишком легко гуглится поисковиком, чтобы его развертывать дальше
    Ответ написан
    Комментировать
  • Как использовать proxy для рассылки в telegram с помощью RabbitMQ?

    @imsha
    RabbitMQ - это сервер сообщений между "вашими кусками кода". С помощью какого-то кода вы туда шлете данные в какой-то структуре. "Каким-то куском кода" вы слушаете RabbitMQ, получаете эти данные. Вот там где получаете - там и смотрите, что там за софт, который отправляет сообщения в телеграм. Там и смотрите как настроить прокси, и нужно ли его каждый раз отправлять в данных для очереди RabbitMQ.
    Ответ написан
    Комментировать
  • Статические классы и синглтоны?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Но вопрос в том что все это по сути не имеет смысла потому что при каждом запросе к серверу будет заново создаваться синглтон

    Вы не понимаете, как работает умирающая модель в php. Все верно, на каждый запрос создается окружение для его выполнения и после выполнения процесс уничтожается, язык заточен именно под такой режим работы.

    Возможно ли как то изменить это поведение или хотя бы закэшировать данные?

    memcache, redis, xcache, apcu,... выбирайте

    У меня в xml файле хранятся какие-то настройки.

    Как минимум можете перевести xml в php код, который в свою очередь закешируется через opcache. При следующем запросе этот код будет браться из пямяти.

    Самый логичный способ использовать для такой цели статический класс или синглтон.

    Для неумирающей модели выполнения - вполне возможно. В php-шном мире это не так. Закроем глаза на то, что синглтон - антипаттерн, а статика очень близка к этому.
    Ответ написан
    Комментировать
  • Можно ли в PHP удалить из автозагрузчика (spl_autoload_register) анонимную функцию?

    DevMan
    @DevMan
    spl_autoload_unregister(spl_autoload_functions()[0]);
    Ответ написан
    Комментировать
  • Wordpress. Медиа файлы, ошибка HTTP. Как исправить?

    OtshelnikFm
    @OtshelnikFm
    Обо мне расскажет yawncato.com
    Погуглив, вы найдете 10500 предположений почему ошибка.

    От вас только факт ошибки и никаких подробностей - поэтому пробуйте все варианты из гугла и разбирайтесь.
    Ответ написан
    Комментировать
  • Подключение css в MVC системе на PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Используйте нормальный шаблонизатор, Twig.

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

    Таким образом не получится столь привычного быдлокодерам винегрета.
    Любые стили будет лежать только в шаблонах, и не будут засорять другие элементы MVC.
    При этом главный шаблон не будет засоряться. ненужными ссылками.

    Я понимаю что без примера сложно.
    Вот простейший пример того, о чем я писал выше:

    main.twig.html
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
    {% block stylesheets %}
        <link href="/css/main.css" rel="stylesheet">
    {% endblock %}
            <title>{% block title %}Twig Example{% endblock %}</title>
        </head>
        <body>
            {% block content %}{% endblock %}
        </body>
    </html>

    index.twig.html
    {% extends "main.twig.html" %}
    
    {% block content %}
    <h1> index page </h1>
    <li><a href=/page1.php>Page 1</a>
    <li><a href=/page2.php>Page 2</a>
    {% endblock %}

    page1.twig.html
    {% extends "main.twig.html" %}
    
    {% block stylesheets %}
        {{ parent() }}
        <link href="/css/page1.css" rel="stylesheet">
    {% endblock %}
    
    {% block title %}Page 1{% endblock %}
    
    {% block content %}
    <h1> page 1</h1>
    <li><a href=index.php>index</a>
    {% endblock %}
    Ответ написан
    Комментировать
  • Почему git меняет весь код даже тогда, когда меняешь только часть?

    DevMan
    @DevMan
    основные причины:
    – смена символа переноса строки
    – смена пробелов на табы или наоборот

    en | ru
    Ответ написан
    1 комментарий
  • Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Подскажите, пожалуйста, в чём проблема?

    В ДНК. Шутка.

    Проблема в чудовищном пещерном коде, который до сих пор преподают во всяких хтмлакадемиях и прочих видео с ютуба.
    Ну то есть основная причина - это неверное имя поля, как правильно заметили в соседнем ответе, но при правильно настроенном пхп не пришлось бы гадать. при соединении надо сказать mysqli чтобы сообщала обо всех ошибках. Ну и сам запрос надо исполняьт не так как у тебя, а правильно

    Сначала делаем отдельный файл mysqli.php и пишем в него код соединения. И это не одна строчка.
    Код берем отсюда, подставляем свои значения.

    if (isset($_POST['search'])) {
        require 'mysqli.php';
        $stmt= $mysqli->prepare("SELECT * FROM `persons` WHERE firstname=?");
        $stmt->bind_param("s", $_POST['fname']);
        $stmt->execute();
        $result = $stmt->get_result();
        while($r = mysqli_fetch_assoc($result)){ ?>
                        <tr>
                              <td><?= $r['id']; ?></td>
                              <td><?= $r['firstname']; ?></td>
                              <td><?= $r['lastname']; ?></td>
                              <td><?= $r['age']; ?></td>
                              <td><?= $r['gender']; ?></td>
                              <td><?= $r['city']; ?></td>
                          </tr>
                	<?php
       		}
           	} ?>
    Ответ написан
    Комментировать
  • Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, bool given in?

    @green_goo
    Проблема в неспособности произвести отладку и недостаточном знании php
    "SELECT * FROM `persons` WHERE fname='".$fname."'"

    <?= $r['firstname']; ?>

    Так fname или firstname?

    PS. sql инъекций не существует, подготовленные запросы придумали масоны чтоб усложнить жизнь разработчикам. Извините, накипело
    Ответ написан
    Комментировать