• Подключение к базе данных MySql, как правильно и современно?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос хороший, но неправильно сформулирован.
    Поскольку тут на самом деле два вопроса - какой драйвер использовать и уже потом - как правильно соединяться.
    Ответ на первый вопрос очевиден. Если выбирать из mysql_connect, mysqli и PDO, то достаточно зайти на страницу мануала, посвященную каждому варианту, и посмотреть, что там написано. Ну или попробовать использовать в своем коде и посмотреть что получится.

    А вот вопрос, как правильно подключаться в двух оставшихся вариантах, действительно важный, и ответ на него, как обычно, почти никто не знает, поскольку все друг у друга списывают статьи не 2-х, а 22-х летней давности. К счастью, есть сайты с актуальной информацией.

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

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

    Но правильным ответом, если выбирать из перечисленных трех, будет PDO. Здесь тоже не так просто, поэтому смотрим как правильно соединяться используя PDO - учитывая те же ключевые моменты, которые указаны выше.

    Хорошим вариантом будет использовать высокоуровневую абстракцию типа redbean. Но поскольку нормальной документации по нему нет, а есть только пара хайповых видео, где он используется, причем без каких бы то ни было объяснений и разбора основ, то я бы рекомендовал редбин уже опытному разработчику, а не начинающему. Но в любом случае как в нем соединяться, написано в документации

    Пароль в базе данных не шифруется а хэшируется. Делается это с посощью функции password_hash
    Ответ написан
    3 комментария
  • Как подменить шлюз внутри сетевого моста?

    vadimspriggan
    @vadimspriggan
    Системный администратор по жизни
    Возможно маршрутизация на PC2 настроена на ip 0.0.0.0 в туннель, так что весь трафик улетает в него.
    А нужно прописать только адреса тех сетей, которые находятся по ту сторону тунеля: 192.168.0.0/24
    Так всё, кроме локальных адресов полетит в провайдера минуя туннель.

    И я бы на вашем месте разделил хосты по обе стороны на подсети:
    192.168.0.0/24 -- 192.168.1.0/24 -- 192.168.3.0/24
    Ответ написан
    Комментировать
  • Sudo: command not found на некоторых командах. Как сделать так, что б работало?

    martin74ua
    @martin74ua
    Linux administrator
    sudo su -
    sudo su

    команды выглядят одинаково, но работают нееемного по разному.
    Очень часто набирается команда sudo su, а потом удивляемся - почему по прежнему недоступны команды из sbin
    Дело в том, что по умолчанию каталоги /sbin /usr/sbin добавляются в path рута, а у обычных пользователей их нет.
    sudo su - переход под рута с установкой окружения рута
    sudo su переход под рута с сохранением окружения текущего пользователя
    В первом случае path изменится, и в него попадут /sbin /usr/sbin, а во втором - нет.

    В вашем случае подобное - sudo -s устанавливает окружение из настроек рута, а без -s сохраняется ваше.
    Лечить чтением документации, осознанием разницы и применением правильных команд и ключей в разных ситуациях
    Ответ написан
    Комментировать
  • Как в Revive AdServer/OpenX получть код HTML баннера для сайта?

    @Monty
    Пишу по памяти. В админке создаете вебсайт, у него создаете баннерную зону, получаете баннерный код этой зоны.
    Потом создаете рекламодателя, создаете рекламную компанию, в ней заводите баннеры, настраиваете что эта рекламная компания показывается на созданном вами сайте. Готово. Извините за возможные неточности.
    Ответ написан
    Комментировать
  • Почему не запускается php скрипт из консоли?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Возможно потому что short_open_tag = off
    Ответ написан
    1 комментарий
  • Почему gzip не ускоряет время загрузки сайта?

    Вопрос - почему время загрузки страницы не ускорилось?


    Ну наверно потому, что у Вас неправильно настроено сжатие gzip.
    Например писать gzip_types image/png image/jpeg бессмысленно, т.к. бинарные данные картинок итак сжаты и никакого выигрыша Вы не получите.

    Правильно написать так:

    http {
       ....
       gzip on;
       gzip_http_version 1.0;
       gzip_min_length 512;
       gzip_buffers 64 8k;
       gzip_comp_level 5;
       gzip_proxied any;
       gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
       ...
    }


    В секции server { } можете ничего не писать если не планируете менять параметры.

    Потом берем curl и проверяем:
    curl -H "Accept-Encoding: gzip,deflate" -I http://mysite.ru/index.html


    получаем ответ

    HTTP/1.1 200 OK
    Server: nginx
    Date: Fri, 24 Nov 2017 11:32:00 GMT
    Content-Type: text/html
    Last-Modified: Tue, 12 Apr 2016 06:48:17 GMT
    Connection: keep-alive
    ETag: W/"570c9a31-576"
    Content-Encoding: gzip


    Обращаем внимание на поле Content-Encoding

    Для теста из консоли берем утилиту Apache Benchmark:
    ab -n 1 -H "Accept-Encoding: gzip,deflate" http://mysite.ru/index.html


    Смотрим на поля помеченные жирным, при выключенном gzip они увеличиваются.

    Concurrency Level: 1
    Time taken for tests: 0.128 seconds
    Complete requests: 1
    Failed requests: 0
    Total transferred: 3405 bytes
    HTML transferred: 3025 bytes
    Requests per second: 7.80 [#/sec] (mean)
    Time per request: 128.249 [ms] (mean)
    Time per request: 128.249 [ms] (mean, across all concurrent requests)
    Transfer rate: 25.93 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 90 90 0.0 90 90
    Processing: 38 38 0.0 38 38
    Waiting: 38 38 0.0 38 38
    Total: 128 128 0.0 128 128


    Ну и берем Firefox и смотрим там поля Передано и Размер, если сжатие работает, то Передано должно быть меньше Размер.
    Ответ написан
    1 комментарий