• IDE для СУБД. В чём работать?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    За последние несколько лет перепробовал очень много различных программ для работы с БД, и могу Вам порекомендовать DBeaver - она поддерживает множество различных БД, работает под Linux, Windows, MacOS. Конечно, программа не лишена своих недостатков, довольно спорных особенностей и даже багов, но работать с (в) ней ней вполне себе можно. Для бесплатной программы она вполне хороша.
    Ответ написан
    Комментировать
  • Как узнать высоту окна?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    screen.height - это не высота окна, это высота дисплея, и если её "изменить" то в консоли она тоже изменится, вот Вам пример из моей консоли (изменения рабочей области дисплея с делаю в режиме мобильного просмотра), пример взять отсюда 62d98538a0d85116336587.png

    Если Вас интересуют параметры браузера, а не монитора - рекомендую почитать вот эту статью, там как раз по этой теме пишут.
    Ответ написан
    Комментировать
  • Адаптация сайта под мобильные устройства с помощью php mobile detect и как это повлияет на SEO?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Данное сообщение не претендует на исчерпывающий ответ, но думаю эта информация будет полезной. Лично я - так никогда не делал, т.к. мне в целом не нравится этот подход, прежде всего с точки зрения обслуживания двух версий вёрстки. Но есть ряд сайтов, в т.ч. и довольно серьёзных компаний, например таких как YouTube, ВсеИнструменты и другие, которые перекидывают мобильные устройства на мобильные версии сайта, что на мой взгляд, технически очень мало отличается от описанной Вами схемы (скорее даже наоборот, Ваша схема выглядит более интересно, т.к. всё действо происходит в рамках одного домена, без поддоменов и страниц-дубликатов).

    Но я бы всё же подумал, стоит ли так заморачиваться, мобильную версию сайта всё равно нужно адаптировать и содержать два набора шаблонов одновременно. Если Вам нужно вырезать какой-то контент - это должна быть графика, видео и прочие тяжелые элементы (т.к. вырезать основной текста страницы по моему, смысла нет) - возможно, эти элементы имеет смысл просто скрыть? Если мне не изменяет память, современные браузеры не будут грузить, скажем, изображения которые не отображаются на странице (в принципе Вы всегда можете это проверить самостоятельно, просто скрыв элемент и посмотрев логи HTTP-сервера). Либо же в крайнем случае добавить немножко JS'а, который будет управлять некоторыми частями контента страницы в зависимости от устройства.
    Ответ написан
    Комментировать
  • Как сделать так что бы телеграмм бот при ошибки, запускался заново, python?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Если я правильно понял Ваш вопрос - в Вашей программе возникает какая-то необрабатываемая ошибка, в результате которой она "вылетает" (завершается) и нужно запустить её заново. Если так, то на вскидку есть несколько вариантов:
    • Обернуть весь код который вызывает ошибку в обработчик типа try/except

    Или, если по какой-то причине это невозможно (например, после данной ошибки программа работает со сбоями) можно воспользоваться следующими вариантами:
    • Программа Supervisor - позволяет (пере-)запускать программы и контролировать их работу (если не ошибаюсь, эта штука тоже написана на Python)
    • Создать свой сервис - что на мой взгляд удобнее и с большой вероятностью не потребует установки дополнительного ПО, но потребует прав администратора в системе
    Ответ написан
    Комментировать
  • Какой мощности должен быть сервер для проксирования?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Постараюсь по порядку:

    Какой мощности должен быть сервер для проксирования? Если я правильно Вас понял, задача заключается в том, что бы поднять/настроить реверс (обратный) прокси. Так как это именно прокси, а не "зеркало" по железкам я бы начал с машину уровня: 2 ядра, 2-4Гб ОЗУ. Диск особого значения не имеет, т.к. это прокси. В теории такой машины для прокси должно хватать вполне. Ключевой упор нужно сделать на скорость порта (сети) этого самого прокси-сервера, т.к. 500Гб в сутки свободно прокачивать может далеко не каждый VPS. При очень хорошем качестве связи порт 100Мбит/сек. (а именно такую номинальную скорость порта предоставляют большинство VPS) может прокачивать около 1Тб/сутки. У Вас трафик 0.5Тб в сутки. С учётом того, что трафик на сайте никогда не бывает равномерным (в какой-то период времени трафик выше, в какой-то ниже, есть какие-то пики по трафику и т.д.), а так же с учётом того, что скорость 100Мбит/сек. на VPS - исключительно номинальная - я думаю стоит искать VPS со скоростью порта 1Гбит/сек.

    Может ли снизиться скорость работы сайта при использовании проксирования?Не только может, но и вероятнее всего она снизится. Любой прокси - это дополнительное расстояние которое трафик должен пройти от сервера до клиента (и обратно). Чем дальше прокси будет находится от сервера-источника - тем больше будет просадка по скорости. И опять таки, если у прокси будет недостаточно хорошая пропускная способность (скорость порта) - падение скорости для клиента так же помножится на недостаток пропускной способности.

    Безусловно, бывают и обратные случаи, когда сервер-источник стоит где-то далеко, а прокси-сервер где-то рядом с клиентом и до сервера-источника у клиента какой-то очень плохой маршрут (плохая связь), а с прокси-сервером связь хорошая и между прокси-сервером и сервером источником - тоже хорошая связь... в этом случае связь может даже ускориться, но в современных сетях это скорее исключение из правил, я бы на это особо не рассчитывал. Отдельно можно выделить различные кэширующие прокси и CDN, которые ускоряют загрузку... но это Ваш случай.

    Какие другие подводные камни могут возникнуть в данном случае?
    Ключевой "камень" который в данный момент вижу я - не понятно, зачем оно Вам вообще нужно? На сервере просто изменится IP адрес? - серверу можно добавить сколько угодно IP адресов, можно держать и старый и новый IP на сервере в течение 48-72 часов (цикл обновления DNS), потом старый IP отвязать... Если в какой-то момент у Вас будет 2 копии сайта, старая и новая (с разными соотв. IP) - то тут прокси тоже не нужен, держите просто их две сразу два, потом отключите старый. Или сначала мы делаем прокси на текущий сайт, потом меняем DNS-запись, ждём полного обновления DNS, потом переносим сайт на другой сервер, потом меняем запись DNS ещё раз... - но даже в этом случае, всё равно будет какое-то время простоя на перенос сайта и/или синхронизацию БД (конечно есть способы этого избежать, но это отдельная большая тема).

    P.S. Возможно, в Вашем случае, так как мы говорим про прокси 1-1 - имеет смысл настроить прокси не через Nginx, а полностью завернуть трафик на другой сервер? Через какой-нибудь туннель, например, WireGuard + iptables/nftables - это позволит проксировать вообще всё (весь трафик), а не только HTTP/HTTPS и соответственно избежать казусов при прокси через Nginx, в частности, Nginx-прокси может добавлять какие-то свои заголовки, или наоборот, удалять какие-то (да, это всё настраивается, разумеется, но это нужно настраивать и проверять). Потом HTTPS, я не пробовал проксировать HTTPS-сервер через Nginx, но полагаю с этим могут возникнуть какие-то трудности, соотв. нужно будет поднять HTTP на сервере-источнике (это на уровне моих предположений, я не пробовал проксировать через Nginx именно HTTPS).

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

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    400, 404, 406, 409 - я бы выбрал один из этих в контексте поставленного вопроса.
    Ответ написан
    Комментировать
  • Как уменьшить размер div-a w html?

    Wolfnsex
    @Wolfnsex Куратор тега CSS
    Если не хочешь быть первым - не вставай в очередь!
    Не совсем понятно что Вы хотите.
    1. Есть DIV, в нём есть картинка, вам нужно что бы DIV был размером с картинку? Задайте картинке display: block; а DIV'у display: inline-block;
    2. Нужны конкретные размеры DIV'a? Задайте их, либо точные (в px'ах например), либо относительные (%, vw, vh)
    3. Или задайте DIV'у картинку фоном, укажите нужные размеры DIV'а и background-size.
    4. Воспользуйтесь CSS-Grid'ами и/или FlexBox'ами и различных проблем с размерами станет разительно меньше

    P.S. Для разных разрешений и типов экранов и устройств - есть CSS Media query
    Ответ написан
    Комментировать
  • Как сделать вот такой вот инпут?

    Wolfnsex
    @Wolfnsex Куратор тега CSS
    Если не хочешь быть первым - не вставай в очередь!
    Несколько примеров
    1. Один из самых простых
    2. Библиотека, если настроить её под себя, я думаю Вы получите описанный эффект
    3. Автодополнение (просто пример автодополнения)

    То, что Вы ищите называется либо "ComboBox", либо "Автодополнение" (Autocomplete), библиотек и вариаций на эту тему целая прорва.

    Из личного опыта - если Вы делаете проект не "от делать нечего" - рекомендую не злоупотреблять кол-вом библиотек в проекте. Либо делайте проще и самостоятельно, либо подбирайте какой-нибудь фреймворк который удовлетворит максимальное кол-во потребностей проекта (различных UI-фреймворков благо целый воз и маленькая тележка). Уже через несколько месяцев после их внедрения, при большом кол-ве библиотек, какая из них зачем и что делает - разобраться будет сложно даже автору кода...

    P.S.
    И еще момент, как сделать так что бы в конце подставлялось "руб". Сразу после цифры
    добавить к элементу (например <div>'у) в котором содержится число другой элемент, например :after { content: 'rub'; } Показать "на пальцах" к сожалению сейчас не имею возможности, но готовых примеров подобного - просто масса. Например по ссылке выше #2, когда добавляется тег - у него в конце есть крестик, по такому же принципу можно добавить "руб.", либо же добавить к самому INPUT'у боковое поле (как это например умеет делать Bootstrap) с нужным суффиксом.
    Ответ написан
    Комментировать
  • Как составить регулярку на совпадение?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Может быть так? ^https\:\/\/\S+?\.domain.ru$
    Ответ написан
    1 комментарий
  • Как создать многоуровневое выпадающее меню для сайта?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Всё далее сказанное - исключительно личный опыт и мнение, на истину не претендует.

    Лучше написать верстку с уклоном на статику: на чистом html+css,
    Я бы написал именно так, если это возможно. Это как минимум должно быть быстрее чем то же самое + JS.

    на bootstrap с добавлением css
    Это скорее всего будет быстрее с точки зрения получения результата, но на счёт качества такого решения - есть большие сомнения. Вообще, одно из правил HTML'а/вёрстки - если есть возможность реализовать что-то меньшим кол-вом элементов - нужно делать именно так. То есть, если физически есть возможно сделать что-то с помощью одного <div/>'а, а не двух, трёх и т.д. - нужно делать это одним <div/>'ом (без фанатизма конечно).

    или сделать более динамично: на php, реализовав все через цикл для получения вывода элементов: «Категория», «Товары», «О нас» и т.д.?
    Это напрямую зависит от Ваших задач и потребностей. Если Вам нужно что бы меню формировалось на сервере - то его нужно формировать на сервере. К вёрстке непосредственно это не относится. Лично я в своей практике использую и тот и другой подход, а иногда оба сразу (часть меню - статическая, часть - динамическая), в зависимости от желаемого результата.

    P.S. Про "функциональность" не могу судить в контексте данного вопроса, но по скорости загрузки, - вариант без Bootstrap'ов и JS - должен быть максимально быстрым.
    Ответ написан
    Комментировать
  • Что делать если в класса сущности много свойств?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Какие есть варианты упрощения ? чтобы при создании объекта не передавать кучу параметров в конструкторе.
    На вскидку, вариантов несколько:
    1. Передавать не 20 десятков свойств, а именованный массив, например так:
    __construct($array) { ... }
    
    new MyClass([
        'property1' => 'value1',
        'property2' => 'value2',
        'property2' => 'value3',
    ]);


    А в самом классе соотв. заполнять те поля которые не переданы - значениями по умолчанию (если это допустимо), так будет несколько более читабельно.

    2. Либо же, если проблема конкретно в конструкторе - можно передавать эти значения через другой метод, не конструктор.

    3. Или, можно где-то сохранять эти значения (в конфиге, в БД, в сессии, где-то-ещё) и при создании экземпляра нужного класса - доставать их оттуда (такая практика встречается довольно часто).
    Ответ написан
  • Как обновить данные php с помощью ajax?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    нужно вставить код html в котором есть php
    Если Вы хотите, что бы этот код PHP выполнился - то скорее всего никак, т.к. PHP обычно выполняется на сервере.

    Как альтернативный вариант Вы можете разместить этот самый PHP-код на сервере, скажем по адресу /myphpcode.php, сначала обращаться к нему, примерно так:
    //Код исключительно для примера, на работоспособность не проверял
    var myphpcode = null;
    $.get('/myphpcode.php', function(data) {
        myphpcode = data;
    });


    А потом полученный результат вставлять куда Вам нужно.
    Ответ написан
    Комментировать
  • Как взаимодействовать с другой функцией?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Если речь идёт о контексте класса, то я думаю Вам нужно это.

    P.S. Ну и вот ещё пара ссылок: раз, два по теме "цепочка вызовов PHP".
    Ответ написан
    3 комментария
  • Как выполнить функцию js при нажатии на кнопку/ссылку?

    Wolfnsex
    @Wolfnsex Куратор тега HTML
    Если не хочешь быть первым - не вставай в очередь!
    Мигает он у Вас по тому, что перезагружается страница, а перезагружается она так как у ссылки есть атрибут "href", при href="" - ссылка ведет на ту же страницу, на которой браузер находится сейчас.

    Анимация там пожалуй вообще не нужна, достаточно "transition", выглядеть будет примерно так:


    P.S. Идея я думаю Вам понятна, дальше её можно развить самостоятельно :)
    Ответ написан
    Комментировать
  • Как подключить файлы, лежащий на другом сервере?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Вообще, обычно для задач подобных тем, что Вы описали - используют Git и другие системы контроля версий, который рассылают уведомления о том, что исходный код на источнике обновился, зависимые серверы получив такое уведомление (оно ещё называется "пуш") - они скачивают обновление и развораичвают его локально, подобный процесс так же иногда называется "сборкой".

    Но, насколько я понимаю, у Вас случай несколько проще и не требует "тяжелой артилерии". В этом случае, может быть актуально использовать программы типа sshfs или ftpfs и прочие подобные штуки.

    Почитать можно например тут или тут.

    Если простой вариант Вас не устроит - можете попробовать использовать такие сервисы как например GitHub или BitBucket, там есть такая штука как "Веб-хуки", именно она как раз таки рассылает уведомления о том, что исходный код был изменен, можете попробовать написать простенький скрипт, например на том же PHP, который бы стягивал изменения из удалённого репозитоиря и проводил прочие манипуляции подобного толка.
    Ответ написан
    1 комментарий
  • Как добавить перенос в PHP при записи в базу данных?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Я думаю что как-то примерно так: $summ = $param1 .= "\r\n" .= $param2
    Ответ написан
  • Нужно ли экранировать get-запросы в input?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Не совсем понятно, что Вы имеете в виду под фразой "вставляю GET-запрос"... варианта у меня два на эту тему: либо результата GET-запроса, либо какие-то доп. параметры для GET-запроса. В обоих случаях, если речь идёт о содержимом какого-то поля типа INPUT (или TEXTAREA, что равносильно по сути) - оборачивать его в htmlspecialshars - лично я никакой необходимости не вижу. При отправке запроса - форма сама по себе прекрасно кодируется, без всяких "оборотов", содержимое поле исходно так же обычно не требует никаких дополнительных "оборотов", не зависимо от того, собираетесь ли Вы сохранять это в БД или нет.

    P.S. Вообще, говоря про htmlspecialchars() и БД, логически "оборачивание" делается перед выводом данных на сайте, а не перед вставкой. Делается это например для того, что бы исключить возможность недобросовестным пользователям, которые оставляют скажем комментарии - вставлять в эти комментарии например JavaScript-код и прочие подобные факторы.
    Ответ написан
  • Какой тут сделать ховер на ссылке?

    Wolfnsex
    @Wolfnsex Куратор тега CSS
    Если не хочешь быть первым - не вставай в очередь!
    прозрачность?
    Да.
    Ответ написан
    Комментировать
  • Как выполнить цикл внутри цикла 1 раз?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Как выполнить цикл внутри цикла 1 раз?

    Примерно как-то так:
    $flag = true;
    
    foreach($var1 as $v1) {
        if($flag) {
            foreach($var2 as $v2) { 
                 //2-й цикл
            }
            
            $flag = false;
        }
    }
    Ответ написан
    4 комментария
  • Возможно ли объединять .exe с .txt, используя Python?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Сразу уточню, что возможно я не до конца понимаю о чём речь и не понимаю вообще что такое ".dat" и зачем он в данном случае нужен. Но, суть вашего вопроса напомнила мне мои потуги ~15-летней давности написать собственный архиватор, который мог бы создавать само-распаковывающиеся архивы. В те времена, я достаточно дотошно изучал структуру .EXE-файлов... и в какой-то момент обнаружил, что Вы можете дописывать в конец практически любого (исключения в основном составляют программы проверяющие собственную целостность при запуске) .EXE-файла любые другие данные. Более того, все само-распаковывающиеся архивы работают именно по такому же принципу - в конец .EXE-файла - просто дописывается архив, после чего, при запуске, файл (SFX-архив) читает сам себя, смещая указатель на длину (размер) исходного .EXE-файла (за которым соотв. идёт уже архив).

    Иными словами, Вы можете дописывать что угодно в конец EXE-файла не нарушая его работоспособность, хоть TXT-файлы, хоть картинки, хоть BluRay фильм туда добавьте... Делается это максимально просто на любом (ну или почти любом) языке, просто открываете .EXE-файл, в бинарном режиме, на запись, открываете другой файл (текстовый или любой другой), так же в бинарном режиме, смещаете указатель в первом файле в самый конец, пишите данные из 2-го файла. Собственно... и всё. Причём тут конкретно Python - я понятия не имею.

    P.S. Кстати да, можете эксперимента ради найти "башку" от любого самораспаковывающегося архива (это которая .EXE) и дописать ей в конец архив, в результате чего обычный архив превратится в SFX/EXE...
    Ответ написан