Задать вопрос
Ответы пользователя по тегу PHP
  • Как распознать что сайт пытаются взломать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Так это классическая работа для fail2ban. Настраиваете на повторяющиеся 404 и спите спокойно...
    Ответ написан
    Комментировать
  • Не работает php код?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Логи смотри, ну или включи вывод ошибок.
    echo('Это имя пользователя уже занято.');
    header('Location: register.php'); // Возврат на форму регистрации
    Здесь стопудоф будет лажа, так как хеадер так не отправляется. Почему - учим матчасть. Собсно в логах это будет отражено.
    Ответ написан
  • Как лучше хранить данные при пошаговой регистрации?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Всем привет. Хочу сделать пошаговую регистрацию на сайте. Как бы это сделать правильнее?
    Нет рецепта для общего случая. Всегда есть нюансы, если вы делаете что-то чуть в сторону от классики.

    1. После каждого шага сохранять в БД? Много запросов бессмысленных
    Ого, много это сколько? И почему бессмысленных? Вы же осмысленные данные туда пишете?

    У кого, какое мнение? Где какие подводные камни/нюансы?
    Мнение: С таким описанием нихрена не посоветуешь. По конкретным шагам можно что-то обсуждать.
    В целом же: Если первый шаг позволяет ввести все данные необходимые для входа в аккаунт, то писать надо в бд, ну и соответственно выслать письмо с подтверждением. В бд можно писать так же стадию прохождения. Если остальные пункты не являются критическими для функционала, можно предлагать при следующем логине дозаполнить данные, основываясь на записанном номере стадии. Ну или просот сразу перекидывать на нужную фазу, если она является необходимой.
    Ответ написан
    Комментировать
  • Почему не добавляется в базу данных информация с формы?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $q = "INSERT INTO post(author, date_p, text_p) VALUES ('$author', '$datep', '$text_content')"; 
    //  ";" в одиночных запросах не ставится, а текстовые значения обрамляются кавычками
    var_dump($q); //смотрим глазками, проверяем в консоли
    $q = "INSERT INTO post(author, date_p, text_p) VALUES (?, ?, ?)"; 
    //никогда не лезем в бд без подготовленных выражений!
    $st = $pdo->prepare($q);
    $sth->execute([$author, $datep, $text_content]);
    Ответ написан
    1 комментарий
  • Не работает return PHP. Ничего не выводит на экран, что делать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Мне нужно что-бы функция вернула корни уравнения в виде массива.
    Она возвращает

    Однако я получаю пустоту.
    Однако не получаете

    Почему?
    Скорее всего вы подразумевали не "получение" а "вывод". Но никакого вывода на экран вы не используете.

    Не работает return PHP. Ничего не выводит на экран, что делать?
    Формально ответ - по тому что "получение"/"возвращение" и "вывод" абсолютно разные вещи.
    Ответ написан
    Комментировать
  • Какие вещи нужно изучить чтобы подготовить себя к работе с Highload проектами?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Хайлоад это не какой-то особенный тип проекта, это все обычные проекты, но с объемом "туда-сюдирования" данных выше, чем тянул "прошлый сервер", когда проект был еще не хайлоад. В 90% случаев это выражается в росте количества запросов к бд, которая либо становится слаба по железу, либо вылазят косяки в запросах, написаных абы как, включая отсутствие индексов и кривую архитектуру.

    Что делается для "хайлоадинга"?
    1) Меняются сервера на помощнее, но это больше к админам обычно.
    2) Выявляются узкие места, в подавляющем большинстве случаев это либо обращения к бд, либо работа со сторонними сервисами, а-ля АПИ фейсбука и все такое.

    Как разгонять именно такие затыки 2 варианта - есть 3 пути:
    1) Оптимизация. Все что возможно ускорить - ускоряется, находятся самые тормознутые запросы, прогоняются через explain, переписываются, тюнятся, индексируются до состояния максимальной производительности.
    2) Кэширование. Обычно используют кей-валуе инмемори хранилища а-ля мемкеш и редис, и результаты запросов часто используемых, но не часто обновляемых данных пишутся в кэш. Время жизни настраивается в зависимости от необходимой актуализации. По идее на высоких нагрузках даже кэш с времением жизни 5-10 секунд может в разы снизить нагрузку на сервера.
    3) Иногда стандартных средств и инструментов не достаточно, и нужно искать какие-то новые инструменты, например переходить на сфинкс, так как фултекстсерч не вывозит. Или большие объемы данных идут на запись, и стандартной пропускной способности бд уже не хватает и нужно что-то типа систем хранения логов, или наоборот, аналитические бд по типу кликхауса...

    Короче - все то же самое что и в стандарте, только оттюнено и обмазано кэшами и инструментами чуть сложнее мускуля...
    Ответ написан
    Комментировать
  • Некорректное поведение кэша сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Я тут ради интереса глянул первый файл в гите. Увидел что у вас логин пароль и хэш лежит в куках. Понял что в принципе смысла дальше что-либо смотреть нет.

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

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

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    SELECT m.*, u.login, i.img
        FROM messages m
        LEFT JOIN users u
        ON m.to_user_id = u.id
        LEFT JOIN image i 
        ON m.to_user_id = i.obj_id 
        WHERE m.date > :lastdate # надо выбирать все что позже уже полученных сообщений
        AND image.obj_type = 'user' 
        AND m.from_user_id = :fid  # айди "от юзера"
        AND m.to_user_id = :tid #айди "к юзеру"
        ORDER BY m.date  # по возрастанию все старше последнего полученного
    Ответ написан
    Комментировать
  • Как построить коллекцию на PHP при заданных ниже условиях?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    99% работы с массивами - циклы. Даже под капотом всяких мап тот же цикл, только скомпилированный в функцию. Тут безусловно нужен цикл.
    Ответ написан
    Комментировать
  • Как сделать повтор действия в php если элемент не найден?

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    <input type="file" name="fileFF[]" multiple="multiple" multiple id="fileFF" class="w100" name="files[]" />
    Два раза указан атрибут name, причем теперь он files[], а в коде проверяется fileFF
    Ответ написан
    2 комментария
  • Что будет, если убрать из URL уникальный id у новости в CMS?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    что скажите?
    Во первых "скажете". Во вторых не понятна суть вопроса, вы описали 2 разных механизма, один использует slug, другой id, к чему относится ваше описание механизмов определения уникальности - не понятно. Где вопрос?
    Ответ написан
    6 комментариев
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Проверить что приходит в $_POST
    2) Не использовать стандартную функцию mail(), так как она слишком плохо дебажится, да и в целом не айс.
    3) Поставить нормальный мэйлер, типа пхпмэйлер/свифтмэйлер.
    Ответ написан
    Комментировать
  • Функция move_uploaded_file выдает ошибку 0, что делать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    move_uploaded_file возвращает true или false, никакого нуля она не возвращает. Ищите варнинги в логах, там все написано.
    Ответ написан
    Комментировать
  • Как исправить ошибку PHP curl_error, curl_errno 77?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Ответ написан
    Комментировать
  • Как корректно обработать строку запроса типа catalog/aloe/aaaa, если третий параметр в роутинге не предусмотрен (только /)?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Разбиваю строку на массив, из первого параметра получаю имя контроллера и создаю соответствующий экземпляр. Если нет второго параметра, вызываю действие по умолчанию: на сайте это отобразить каталог, или страницу со сатьями (uri соответственно mysite.com/catalog или mysite.com/articles). Если же есть второй параметр (это название конкретного растения или id статьи), вызываю другое действие и передаю параметр (получается mysite.com/catalog/aloe)
    то что вы реализовали к роутингу имеет такое себе отношение. Роутинг обычно опирается на правила, а увас тупо захардкорен контроллер. Что будете делать если сложность будет чуть выше, и например, добавится язык перед контроллером?

    При запросе вида mysite.com/catalog/aloe/test, т.е. когда через слеш появляется третий параметр, та же страница с уведомлением для пользователя отображается без стилей
    Логично, стили у вас лежат всегда в одной папке, а вы их каждый раз подключаете из разных "путей" в урл, от которых зачем-то высчитываете сколько папок "выше отмотать". Путь должен быть абсолютным.

    Вот логика проверки, буквально, если в массиве получилось больше двух элементов, отобрази страницу ошибки
    Вообще логика должна быть такой, что если больше 2 параметров, то все что дальше помещается в какой-то массив, например $parameters, который можно получить из роутинга, и дальше в зависимости от значений что-то делать. Правильнее все же было бы сделать сопоставление пути с контроллером, экшеном и параметрами, как во взрослых роутерах, но для начала и так сойдет.
    Ответ написан
    1 комментарий
  • Где лучше хранить переводы в мультиязычном сайте?

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    иногда на сайте могут возникать ошибки http(404, 401, 500 и т.д.),
    Это абсолютно разные ошибки, и обрабатываться должны по разному.
    404 должна обрабатываться самим движком сайта, отдавать именно запрошенный урл без перенаправления, и отдавать 404 статус, в том числе для того чтобы поисковые роботы вывели страницу из индекса.
    401 скорее всего вообще ошибка настройки серверной части и прав на папки/файлы, редко когда эта ошибка вываливается просто так...
    500 вообще не является конкретной ошибкой, это скорее общее оповещение что на конкретной странице что-то пошло не так или сайт в целом не работает. Упрощенно это любой фатал ерор, скрытый настройками вывода ошибок, + некоторые ошибки системного характера.

    пробывал в htacces:
    ErrorDocument 500 /error?error=500
    Логично что если сайт не работает, то и любое обращение к нему будет вызывать ту же 500 ошибку. Единственный способ что-то отобразить - статика, просто хтмл страничка оформленная в стиле сайта с нужным статичным контентом...
    Ответ написан
    3 комментария
  • Каким методом можно вернуть переменную из proc_open?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    А как вывести переменную?
    Не очень понятно что вы пытаетесь поучить и куда. Откуда взялся $res?

    Не echo $res; а return $res; и получить её в $stdout?
    stream_get_contents() возвращает строку, что бы вы себе не навоображали...
    Ответ написан
    5 комментариев