Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос

isrofilov

  • 17
    вклад
  • 0
    вопросов
  • 33
    ответа
  • 33%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Подключение к базе данных MySql, как правильно и современно?

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

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

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

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

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

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

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

    SilenceOfWinter
    Антон Шаманов @SilenceOfWinter
    та еще зажигалка...
    seo
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • PHP: Почему Class not found если use в другом файле?

    dubr
    Илья Мясин @dubr
    пыхарь
    Почитайте доку для разнообразия.
    Неймспейсы и директивы use работают на уровне файлов. То есть use связывает полное имя с кратким/алиасом только в том файле, где его написали.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как переименовать файл, если такой файл есть при загрузке?

    RomaZveR
    Roman Terekhin @RomaZveR
    CEO AlertMoney, PHP/Golang Developer
    Это совершенно небезопасный и непонятно зачем нужный велосипед. Генерируйте наименования загружаемых файлов сами, строго следите за расширением.

    $valid_formats = [
        'jpg',
        'jpeg',
        'png',
        'gif',
        'bmp'
    ];
    
    $ext = pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION);
    if (!isset($valid_formats[$ext])) {
       return 'error';
    }
    
    $filename = md5($_FILES['filename']['name'].uniqid()). '.' .$ext;
    
    if (!is_file('upload/'.$filename)) {
       move_uploaded_file($_FILES['filename']['tmp_name'], 'upload/'.$filename);
    }
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как ограничить максимальное кол-во символов в input?

    zkelo
    Александр @zkelo
    #^[A-Za-z0-9._-]{4,}+$#i --> #^[A-Za-z0-9._-]{4,25}+$#i
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Чипсет материнской платы не поддерживает RAID. Будет ли работать через RAID-контроллер PC-Ix16?

    nidalee
    nidalee @nidalee
    Зачем вам вообще RAID и почему не устраивает софтварный? Ему вообще ничего, кроме поддержки со стороны ОС, не нужно.
    От железного RAID одни проблемы, по-крайней мере того уровня, который вы сможете себе позволить.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как сделать проверку на Уникальность логина и почты?

    Yan-s @Yan-s
    Во первых, разберитесь с форматированием кода. С таким форматированием вообще никогда не разберетесь.

    Традиционная ссылка для начинающих в PHP https://www.phptherightway.com/

    $password = md5($password);

    Традиционная ссылка по хешированию паролей php.net/manual/ru/faq.passwords.php
    Так же гуглим готовые решения по аутентификации/авторизации. Пример https://cartalyst.com/manual/sentinel/2.0

    $sql ="INSERT INTO log (login,password,email)
    VALUES ('$login','$password','$email')";

    Традиционная ссылка на документацию по PDO php.net/manual/ru/book.pdo.php
    Не подставляйте переменные в запрос, гуглим "SQL-иньекции".

    Никогда не используйте подавление ошибок ("@"). Никогда не включайте необработанный пользовательский ввод в HTML и вообще в любой ответ сервера. Гуглим "XSS-иньекции".

    ?>

    Не ставьте ?> в конце PHP файла так как:
    Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавления случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.

    php.net/manual/ru/language.basic-syntax.phptags.php

    Проверку на уникальность делается обычным SQL запросом на получение пользователя с введенным логином. Уникальность пользователя с определенным логином гарантируется уникальным индексом на уровне БД.

    Основной принцип такой: сперва изучаем, узнаем как правильно, потом уже пытаемся реализовать, а не мучаемся 3 дня с двумя строчками кода.

    А прежде чем задать вопрос указываем что конкретно не получилось и какая ошибка.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Не выводит список комментариев VK API PHP, как сделать?

    Максим Алекссев @MaxGoody
    foreach ($wall['response']['items'] as => $item) {...}
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Вывод данных из MySql?

    kimono
    Дмитрий Ким @kimono
    Web developer
    Запрос должен быть примерно таким:
    SELECT LEFT(`name`, 1) `abc`, `id`, `name` FROM `persons` ORDER BY `name` ASC;

    На выходе вы получите такой массив:
    $data = [
      ['abc' => 'а', 'id' => 1, 'name' => 'Абрамов Михаил Фёдорович'],
      ['abc' => 'а', 'id' => 2, 'name' => 'Агутин Юрий Николаевич'],
      ['abc' => 'б', 'id' => 4, 'name' => 'Баринов Олег Юрьевич'],
    ];

    Далее проходим по всему массиву и складываем по начальным буквам:
    $alphabet = [];
    foreach ($data as $row){
      $alphabet[$row['abc']][$row['id']] = $row['name'];
    }

    Получается что-то подобное:
    $alphabet = [
      'а' => [
        1 => 'Абрамов Михаил Фёдорович',
        2 => 'Агутин Юрий Николаевич',
      ],
      'б' => [
        4 => 'Баринов Олег Юрьевич',
      ],
    ];

    Дальше, я думаю, вы уже сами догадались:
    foreach($alphabet as $alpha => $rows){
      echo '<h2>'.$alpha.'</h2>';
      echo '<ul>';
      foreach ($rows as $id => $name){
        echo '<li><a href="/person?id='.$id.'">'.$name.'</a></li>';
      }
      echo '</ul>';
    }
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Сайт на домашнем сервере и VPS одновременно. Как настроить такую связку?

    leahch
    Алексей Черемисин @leahch Куратор тега Linux
    Я мастер на все руки, я козлик Элек Мэк :-)
    Да, можно. На хостинге настраиваете nginx, который все запросы посылает на домашний сервер, а в случае проблем, редиректит на локальный на VPS.

    В примере ниже, все запросы будут уходить на my_home_ip_address, после трех ошибок будет перенаправление на 127.0.0.1:8080 в течении 30 сек. Далее опять будет попытка достучаться до my_home_ip_address.
    upstream backend {
        server    my_home_ip_address    max_fails=3 fail_timeout=30s;
        server 127.0.0.1:8080  backup;
    }
    
    server {
        ...
    
        location /http/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            ...
        }
    }
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Почему поиск на wp ищет не все?

    PavelK
    Pavel K @PavelK
    Потому что WP не знает, как по кастомным типам искать.
    Если без плагинов, то ставьте хуки в functions.php и ищите как нужно:
    add_filter('posts_join', ...);
    add_filter('posts_where', ...);
    add_filter('posts_groupby', ...);
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Как запретить запуск скрипта с папки?

    GavriKos
    GavriKos @GavriKos
    Ну порежьте права папке. Заодно посмотрите кто владелец скрипта и от чьего имени он запущен - может пора менять пароли.
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
  • Как Google генерирует такие 3д модели?

    p00h
    Dmitry Tallmange @p00h
    Фехтовальщик-стропальщик
    Пожалуй, лучшее разъяснение
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Опасны ли ссылки на букмекерские конторы?

    NichitencoEvgh @NichitencoEvgh
    Могу рассказать на своем опыте.
    Сайту десять лет, ТИЦ 240, в поиске Яндекса 15 тыс. страниц. В 2016 году в течении года поставил 6 ссылок с Ротапоста на онлайн-казино. В феврале этого года получил за них фильтр от Яндекса - обнулили тиц и выкинули все страницы из индекса. Вылазил потом полгода из-под фильтра, тиц вернули только до 170, но рассчитываю что со временем вернется на прежний рубеж. Количество страниц в индексе вернулось полностью.
    Вот такая история.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как принять JSON ответ на PHP?

    mashletov
    Anton Mashletov @mashletov
    Math.random()
    JSON.stringify не нужен

    $data = ['success' => false; 'message' => 'Тест', 'phone' => $_POST['phone']];
    header('Content-Type: application/json');
    echo json_encode($data);


    $.ajax({
        type: 'post',
        url: '/script.php'. // без http:// и домена
        dataType: 'json',
        data: {id: 5555, phone: 4444},
        success: function(data) {
             if (!data.success) {
                   $("#error").html(data.message);	
                   console.log(data.phone); // 4444
             } 
        }
    });
    Ответ написан более трёх лет назад
    7 комментариев
    7 комментариев
  • Не считается ли это нарушением правил Google Maps API?

    ThunderCat
    ThunderCat @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    нет, его сервис к вам никак не относится, вся кухня выполняется на клиенте, что вы там мутите гугл не в курсе. Если координаты вы берете из своего источника, для гугла вы просто программно передвигаете маркер(хотя это тоже на стороне клиента и не запрашивает/отдает в гугл какие-либо данные).
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как в кастомном файле Wordpres в теме использовать функции PHP?

    AXP-dev
    Alexander Pushkarev @AXP-dev
    Первой строкой пишите это -
    require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Вес сайта существенно растет, как корректно освободится от мусора?

    Punkie
    Mr Crabbz @Punkie
    В дополнение к ответу ADvi :

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

    define( 'WP_POST_REVISIONS', 1 );
    define('AUTOSAVE_INTERVAL', 180 );  // seconds (default is 60)
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Почему главная сайта в Chrome, Firefox, Opera отображается нормально, а в Яндекс браузере нет?

    romanu418 @romanu418
    У тебя adBlock включен в яндексе =)

    5a12159b696f4ff7b879cc1c84f725c8.png
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Сборка спрайта из иконок на странице?

    iiiBird
    iBird Rose @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    https://www.npmjs.com/package/gulp-spritesmith
    но картинки тебе самому показывать придется
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
Оценили как «Нравится»
  • 1
  • 2
  • Следующие →
Самые активные сегодня
  • Drno
    • 15 ответов
    • 1 вопрос
  • mayton2019
    • 7 ответов
    • 0 вопросов
  • sergiks
    Сергей Соколов
    • 5 ответов
    • 0 вопросов
  • ThunderCat
    ThunderCat
    • 5 ответов
    • 0 вопросов
  • Zerg89
    • 4 ответа
    • 0 вопросов
  • CityCat4
    CityCat4
    • 4 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации