• Почему date('Y-m-d') возвращает не текущее время?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Настройте время. Скорее всего установлен не верный часовой пояс (UTC)
    Ответ написан
    2 комментария
  • Есть ли Express Card для хранения данных?

    @lonelymyp
    Хочу вылезти из минуса по карме.
    Если я правильно понял, то гуглить по словам expresscard 34 ssd. Помнится что узкие карточки можно воткнуть в разъём который для карт буквой L
    Разве что купить их щас можно на барахолке разве что и объём будет соответствующий, гигов на 8. На ибее вон есть за полторы тыщи https://www.ebay.com/itm/233684787224
    Но можно взять переходник expresscard на USB и воткнуть в переходник обычную мелкую USB флешку =)
    Ответ написан
    Комментировать
  • Как подключить вторую базу данных к сайту?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вторую базу подключить несложно.
    Собственно, точно так же, как и первую.

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

    А после этого узнать про такую штуку как сессии, и научиться использовать их вместо кук для хранения секретной для пользователя информации.
    Ответ написан
    Комментировать
  • Какая программа под WINDOWS Умеет создавать архив по SFTP на Сервере и выгружать?

    По SFTP ты не сможешь ничего заархивировать, тк протокол просто не позволяет такого.
    Используй ssh и bash скрипты, чтобы заархивировать, а потом что угодно, чтобы скачать получившийся архив.
    Ответ написан
    Комментировать
  • Как решить проблему с местом на сервере?

    Я, я знаю! Когда на разделе диска заканчивается место, а хочется что-то ещё туда записать, то нужно удалить что-то лишнее, чтобы место появилось. Альтернативное решение - переехать на раздел побольше. Альтернативное альтернативное решение - с криком убежать в лес, больше никогда из него не выходить.
    Ответ написан
  • Экранирование символов при отправке формы POST php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это какая-то чушь. Сам РНР ничего не экранирует.
    И никаких "универсальных" способов экранирования нет. Про 7.3 и минус тоже какая-то глупость.

    Давать пользователю самому вводить регулярку - это стрелять себе в ногу, ошибки буду сыпаться валом.
    Ответ написан
    Комментировать
  • Как добавить данные в БД через HTML-форму?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сначала учимся правильно соединяться.
    В случае mysqli это
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect($host, $user, $pass, $db_name);
    $link->set_charset("utf8mb4");

    И никаких ужасов с "Соединение не установлено" тут быть не должно.

    После этого выполняем запрос INSERT. Причем запросы мы всегда пишем так, чтобы данные в БД попадали отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

    bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

    И тогда никаких ошибок запроса уже никогда не будет. Не говоря уже о том что при любых других вариантах твой сайт поломает любой пятиклассник.

    Весь код, который добавляет запись в БД, должен быть расположен ДО любого вывода.
    После обработки запроса методом POST необходимо перенаправить клиента куда-нибудь методом GET и завершить работу скрипта. Делается это функцией header с заголовком location: . после которой написать exit;
    Соответственно, никаких ужасов с "Запись добавлена".

    Кстати, немного удобнее с БД работать не через mysqli, а чрез PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute

    Подключение
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $port = "3306";
    $charset = 'utf8mb4';
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
    $pdo = new \PDO($dsn, $user, $pass, $options);


    Выполнение запроса
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);
    Ответ написан
    1 комментарий
  • Как добавить значение из одной коллекции в другую если выполняется условие?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В цикле. В данном случае - вложенном.
    А если бы основная коллекция индексировалась через id, а не цыферками, то можно было бы обойтись одним.
    Ответ написан
    Комментировать
  • Как подписать и проверить строку с помощью приватного ключа в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Подписать - вычисляете некий хэш от строки, шифруете его приватным ключом через openssl_private_encrypt и прикладываете к строке.
    Проверить - снова вычисляете тот же хэш от строки и сверяете его с расшифрованным через openssl_public_decrypt исходным хэшем.
    Ответ написан
    Комментировать
  • Возможно ли как-то оптимизировать json_decode?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нет, "оптимизировать json_decode" нельзя.

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

    Распарсить, положить в базу, при изменении данных менять их в базе, искать по-человечески, через SQL.
    А редис тут вообще никаким боком не упёрся.
    Ответ написан
    8 комментариев
  • Практические книги по компьютерным сетям?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    теория закрепляется на практике, а не на книгах
    Ответ написан
    4 комментария
  • Как выучить javaScript для бекенда?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    Яваскрипт нужен только для яваскрипт бэкенда.
    На вакансию РНР разработчика нужно знание РНР.

    Путь дальше очень простй - перестать создавать под этим и другими аккаунтами однообразные топики на тему "Страдания юного Вертера" и продолжать грызть РНР, раз уж начали.
    Ответ написан
    2 комментария
  • Как при входе на сайт (загрузка страницы) записать единичку в файл?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Учите функцию file_put_contents()

    file_put_contents("я_лентяй.txt", "1", FILE_APPEND);
    Ответ написан
    Комментировать
  • Iframe как альтернатива ajax и отправка POST запросов?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer

    С точки зрения практичности и безопасности данный способ оправдывает себя?
    С точки зрения практичности - нет, так как это полная шляпа, мы такое писали в 2005, когда аякс как явление еще не существовал, а уже в 2012 появился нормальный XMLHttpRequest здорового человека, на который все быстренько переползли.

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

    Задавшись вопросом безопасности отправки запросов через ajax
    Если возникают вопросы безопасности при отправке данных через пост - значит вы что-то не то передаете...
    Ответ написан
    Комментировать
  • Как получить строки при совпадении?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Всё что вам нужно было - это сначала получить строку в переменную, а потом производить над ней любые действия

    $f = fopen('/var/www/site.ru/data/logs/site.ru.error.log','r');
    while (!feof($f))
    {
      $line = fgets($f);
      $st_strpos = "Nemesida";
      $pos = strpos($line, $st_strpos);
    
            if ($pos !== false) {		
        // тут как раз строка унас уже ЕСТЬ! в переменной $line
      }
    }
    Ответ написан
    Комментировать
  • Какой Линукс пойдет на слабый ноутбук?

    Adamos
    @Adamos
    Ставь Семерочку и не лезь в то, в чем не разбираешься, пока не соберешься разобраться.
    Ответ написан
    4 комментария
  • В чем суть такой записи в reset.css?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Это разные по сути объявления.
    content: ""; - задаёт содержимое псевдоэлемента (пустую строку)
    content: none; - говорит, что псевдоэлемент вообще не генерируется
    Ответ написан
    2 комментария
  • В чем суть такой записи в reset.css?

    nowm
    @nowm
    Это специфичное для blockquote определение, которое Eric Meyer (автор reset.css) позаимствовал у Paul Chaplin. Первая строка content: "" делает так, чтобы у blockquote исчезли кавычки — на случай, если вторая строка content: none не поддерживается браузером, потому что первая строка — это CSS 2, а вторая — это CSS 2.1. В одну строку их записать нельзя, потому что по стандарту для свойства «content» нельзя комбинировать ключевые слова «normal» и «none» с другими значениями.

    Вообще, когда встречается перечисление одного и того же свойства с разными значениями, это делается для того, чтобы обеспечить совместимость с разными браузерами. То есть, если, например, браузер не поддерживает «content: none», он применит «content: ""», а другую запись проигнорирует.

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

    .some-class {
        background: #e66465;
        background: linear-gradient(#e66465, #9198e5);
    }


    В этом коде, если браузер поддерживает градиентный фон, он сначала прочитает, что нужно использовать цвет «#e66465», а потом это перезапишется записью «linear-gradient», и итоговое значение будет «linear-gradient(#e66465, #9198e5);». Если же браузер не поддерживает градиент, он сначала прочитает, что нужно использовать «#e66465», а потом увидит неподдерживаемое определение «linear-gradient», проигнорирует его, и итоговое значение будет «#e66465».
    Ответ написан
    Комментировать
  • Как отключить подсветку кулера процессора. Мат. плата: ASRock B450M Pro4-F?

    Zoominger
    @Zoominger Куратор тега Железо
    System Integrator
    В BIOS могут быть переключатели.
    А лучше просто взять и выдернуть RGB-шнур из материнской платы, тогда туда не будет подаваться ни сигнал, ни питание.
    spoiler
    И да, сетевой трансвестизм в 2k21-ом выглядит максимально глупо.
    Ответ написан
    2 комментария