• В чем отличие ngnix от golang?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    На самом деле эта путаница по-человечески очень понятна и объяснима.
    Вы, как фронтендер, воспринимаете "веб-сервер" как такой черный ящик, "то место, откуда фронт запрашивает данные".

    В то время как этот термин может означать несколько разных понятий.
    1. Веб-сервер в вашем, широком понимании. Бэкенд целиком.
    2. Также веб-сервером может называться и сам компьютер, на котором все это крутится.
    3. В более узком смысле - это программа, которая принимает НТТР запросы. Вот это nginx и есть. Но сам по себе, без помощи других программ, он не может полностью представлять услуги веб-сервера. Например, в нем нет базы данных. Это, скорее, как правильно написали в соседнем ответе - такой прокси-сервер, который частично обрабатывает запросы сам (например к статическим файлам), а частично - проксирует запросы на другие программы.

    И вот на Го (или РНР, Питоне, JS, C#) как раз и пишется эта программа, которая, к примеру, обращается в БД, получает нужные данные и отдает их Nginx-у, который уже и возвращает их клиенту
    Ответ написан
    14 комментариев
  • В каких случаях многократный вызов одного скрипта с разными параметрами ускорит выполнение задачи, а в каких - нет?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если у вас задача потребляет CPU по максимуму, то да - распараллеливать её на большее количество процессов, чем имеется в наличии потоков - бессмысленно.
    Но обычно задача по добавлению записи в БД потребляет не слишком много поцессора. А если речь про "парсинг", где процессор 99% времени ждет пакет из сети, распараллеливать можно хоть на десятки процессов.
    Конкретное количество зависит от потребления процессора конкретной задачей.

    Количество потоков не всегда равно количеству ядер, умноженному на два. Надо смотреть на конкретный процессор. Тем более на VPS, где процессор тоже виртуальный.

    Если говорить про конкретный пример, то в идеале конечно надо написать нормальный код, который запишет в БД несчастные 3 тыщи товаров меньше чем за секунду. А заниматься параллелизмом уже когда счет пойдет на сотни тысяч. Тем более что цифра скорее всего взята с потолка. Я много повидал говнокода на своем веку, но такой, чтобы добавление одного товара занимало 30 секунд я даже вообразить себе не могу.

    Единственная загадка - при чем тут "web", если речь идет про CLI. И, если уж говорить про веб, то с какой радости он "однопоточный".
    Ответ написан
    Комментировать
  • Как исправить ошибку авторизации?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Смотрите.
    Вот вы заходите на страницу adminpanel.php без авторизации. Там происходит что?
    Правильно, перенаправление на avt.php.
    Вы попадаете на страницу avt.php, где первой строчкой идет обращение к переменной $_POST['login'].
    И откуда она там возьмется?

    Чтобы этого не было, из adminpanel.php надо направлять куда?

    Кроме того.
    Просто header('Location: '); писать недостаточно. Если я не захочу, то не буду переходить на указанную страницу, а останусь на этой.
    то есть попаду на админпанель без авторизации.
    Это очень дурацкая и очень известная дыра в безопасности.
    После header('Location: '); всегда должно идти die;
    Ответ написан
  • Нужно ли делать условие перед вызовом метода для избежания выделения дополнительной памяти?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если говорить про конкретный пример, то он просто бессмысленный, даже с точки зрения житейской логики.
    Учитывая, что if ($isTestOrder) можно прочитать, как ЕСЛИ переменная не занимает памяти то проверка выглядит просто глупостью. "Если переменная не занимает памяти, то не передавать её. Так мы с экономим память!" Если переменная и так не занимает никакой памяти, то какого еще дополнительно выделения памяти она может потребовать?

    Если говорить про передачу параметров вообще, то оба неправы, но тимлид ближе к истине и надо всегда следовать его рекомендации не экономить на пустом месте. А экономить только адресно, когда экономия очевидна и востребована.

    В общем случае тут не будет никакой экономии, ни на спичках, ни без.

    При передаче параметра внутрь метода под него выделяется дополнительная память

    - это чушь и неправда.

    При передаче в функцию параметра, который в принципе может занимать хоть какую-то осмысленную память (то есть не числа, не булева значения, и не null), память под него НЕ выделяется.
    • Объекты изначально передаются по ссылке
    • Строки и массивы - с использованием механизма copy-on-write. Что означает, что память будет выделяться только если переданное значение будет изменено в процессе обработки. А если оно будет только считываться, то дополнительной памяти занимать не будет

    Для всех остальных типов, как было правильно сказано тимлидом - это будет экономия на спичках.
    Ответ написан
    6 комментариев
  • Как можно, и вообще можно ли хранить фото и видео в базе данных mongo?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если человек ничего не понимает в какой-то теме, он никогда не должен выступать с заявлениями вида "у меня возникла потребность". Потому что такие заявления базируются не на реальных потребностях, а на неграмотности, фантазиях и путанице в голове. И получаются вопросы вида "У меня возникла потребность забивать гвозди микроскопом. Я обыскал весь интернет но ничего понятного не нашел, только понял то что это делается на кухне. "

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

    Хранить фото и видео в БД - это как надевать штаны на голову.
    Хранить фото и видео в монге - как надевать на голову помойное ведро.

    Файлы надо хранить в файловой системе.
    Структурированные данные надо хранить в Базе Данных.
    Монгу не нужно использовать ни для чего. Это вообще не база данных, а просто хранилище по типу "куча мусора", которое используется исключительно в стильных модных молодёжных стартупах, в которых не нашлось ни одного специалиста по базам данных. Это была тупиковая ветвь, поднявшаяся на отсутствовавшей на тот момент поддержке JSON в базах данных и хайпе
    Ответ написан
    2 комментария
  • Как перенести данные из SQL server в MySQL?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Простейшим вариантом будет выгрузить csv и, соответственно, загрузить его в mysql, используя либо запрос LOAD DATA либо какую-нибудь кнопочку в интерфейсе.
    Во всяком случае, на этот вариант вы потратите гораздо меньше времени, чем на поиски "экранирования".

    А так-то SQL сервер вряд ли поддерживает создание дампа в формате Mysql напрямую
    Ответ написан
    3 комментария
  • Хостинги в США даже оплатить из России не возможно. Как создать сайт с расширением .com для аудитории в США?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос, конечно, на редкость неграмотный, у спрашивающего полная каша в голове. Он путает доменные имена, хостинг и коннективити.

    Российский интернет пока ещё не отделен от мирового, то есть сайт, который хостится в России, будет прекрасно виден в США. Есть некоторые нюансы, связанные с географическим расположением хоста, но в целом несущественные.
    Американский хостинг оплачивать совершенно не обязательно. Есть российские провайдеры предоставляющие услуги хостинга в зарубежных датацентрах. Таймвеб например. Не в прямо Америке, но в Европе ДЦ у них есть. Наверняка есть и другие провайдеры, которые разместят хоть у черта лысого.
    Все это не имеет ни малейшего отношения к системе доменных имен и "сайтам с расширением .com". Регистрация домена и его хостинг вообще никак между собой не связаны. Можно зарегистрировать домен в США, а хостить в России. Или наоборот.

    По сути. Купить в России домен .com и VPS в европейском или даже амеркинском ДЦ абсолютно не проблема.
    Ответ написан
    Комментировать
  • Как сделать, чтобы Sphinx выполнял поиск по части слова?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Скажите, что я делаю не так?
    Беру заголовок вашего вопроса, забиваю в гугль как есть, получаю точно такой же вопрос здесь на тостере, в котором ссылка на статью здесь же на Хабре, где в подробностях и с примерами рассказывается про поиск по части слова.
    Ответ написан
  • Как вывести число записей добавленных в БД через PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    С одной стороны мы все когда-то учились и делали глупости.
    С другой - ну очень тяжело поверить, что человек, учивший в школе математику, не в состоянии справиться с задачей "посчитать повторяющиеся события".
    Вот вы же сами говорите, что есть цикл
    Какая проблема завести переменную, и прибавлять к ней для начала хотя бы единичку внутри цикла, а потом вывести получившийся результат?
    Ответ написан
    2 комментария
  • Обязательно ли писать собственную CMS если пишу сайт на фреймворке Yii 1.1?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Самое главное - ничего не писать на Yii 1.1

    Если хотите изучить какой-то фреймворк, то учите ларавель

    Если для сайта пишется своя собственная система управления контентом, то обычно она называется админкой, а не CMS
    Ответ написан
    7 комментариев
  • Как передать параметр объекта класса PHP в js?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. РНР теги пишутся не так
    2. Если вы хотите что-то передать, то передаваемое значение надо вывести, а не просто написать.
    3. Данные из РНР в JS всегда передаются через json_encode
    if(<?= json_encode($boris->step) ?> == true)
    Ответ написан
  • Парсинг Википедия на PHP. Как убрать лишнее?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо попробовать еще раз с Media Wiki API.
    У всех получается - и у вас получится.

    Парсить "в лоб" сайт, у которого есть API - это идиотизм и забивание гвоздей микроскопом.
    Ответ написан
    6 комментариев
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    При решении любых задач необходимо применять логику. Желательно не женскую, а формальную. Булеву.
    Если вам "очень нужна форма", то она у вас уже есть. Задача решена.

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

    Эту задачу тоже надо решать с помощью логики.
    Разбивая её на отдельные элементы, приступая к следующему только после того, как выполнили предыдущий.
    При отправке файлов из формы у вас несколько этапов
    1. Отправка отправка одного файла из формы в РНР скрипт.
    2. Отправка файла, гарантированно имеющегося на сервере, на почту.
    3. Если отправка одного файла работает, а нужно больше, то добавить нужное количество и вернуться к п.1

    Вы проверили первый пункт? Зачем вам вообще сейчас phpmailer, если вы даже не знаете, загружены файлы на сервер, или нет? Вы попробовали отправить хотя бы один файл? Если нет, то зачем пытаетесь прыгать через три ступеньки?
    Некорректно спрашивать, почему не отправляются изображения, если вы даже не знаете, есть ли они у вас.

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

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Так же, как и сайт с базой данных.

    А ошибка 500 к заливке отношения не имеет, она может быть от чего угодно.
    Сам текст ошибки надо посмотреть в логе ошибок веб-сервера, прочитать, что там написано, и исправить
    Ответ написан
    4 комментария
  • Есть ли учебник по PHP в котором после каждой главы задаются задания?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сейчас выходит книга Джона Дакетта, PHP & Mysql.
    Там после многих примеров даются задания. Они, правда, дурацкие, типа "Упражнение. В шаге 5 в переменную $message добавьте название компании."
    Но они позволяют хотя бы не просто смотреть на готовые примеры, а как-то почувствовать их, заставляют зайти в папку с кодом, который прилагается к книге, и поиграться с ним, посмотреть, что будет, если изменить ту или иную команду.
    Но это не такие глобальные задания, типа "написать что-то своё, на основе полученной в главе информации".

    С другой стороны, задание изначально поставлено автором - написать полнофункциональный сайт со всеми прибабахами - админкой, регистрацией, лайками, комментами и прочим - которую он и выполняет на всем протяжении книги.
    Ответ написан
    Комментировать
  • Есть ли XSS уязвимости в самописном санитайзере?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если говорить с практической точки зрения, то лично я бы не стал ковыряться в этом говнокоде, а выкинул его целиком. И сделал нормально:
    1. перед сохранением в базу текст вообще не трогал
    2. (опционально - валидация, которая не трогает текст, а может только выдать ошибку, что он не соответствует требованиям)
    3. перед выводом:
      • сделать ему htmlspecialchars()
      • и отрендерить в маркдаун, чтобы вместо этих пещерных <b> и <br> поддерживалось натуральное форматирование переводов строк, списков, выделения, и прочего.



    Ответ написан
    3 комментария
  • Почему не записываются данные в файл?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как все новички, вы оперируете понятием "может быть".
    "может быть сервер не принимает". "по крайне мере должно отправлять". "насчет РНР не уверен"
    Так делать никогда не надо.
    У вас есть все возможности узнать то, что происходит на самом деле. Факты.
    Вот фактами-то и надо всегда оперировать.
    Какая вам разница, "может ли быть такое, что backend не принимает"? Может. И чем вам это знание поможет?
    Вам не нужно знать абстрактно, вам нужно знать, принял ли ваш конкретный сервер ваши конкретные данные.
    А узнать это очень просто. Если "backend не принимает", то но выдаст ошибку. Все что вам нужно - это посмотреть, что он возвращает. Глазами.
    Плюс на всякий случай проверить, настроен ли backend на вывод ошибок.

    При работе с аякс запросами надо всегда держать открытой вкладку Сеть в инструментах разработчика в браузере.
    И смотреть, во-первых, что ваш фронт отправляет, а во-вторых - что сервер отвечает. Там вообще может быть 404. Поскольку никакого конкретного адреса вы на сервере не указали.
    Плюс если ответ сервера есть, то надо смотреть его содержимое на предмет ошибок.
    Ответ написан
    Комментировать
  • Что быстрее SQL или Javascript?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем, чтобы не издеваться над девушкой, объясним на пальцах.

    Во-первых, заголовок у вопроса чудовищно некорректный. Это все равно что спросить, "что быстрее - пылесос или стиральная машина?"
    Во-вторых, ответ на вопрос "производить ли обработку данных в БД или же запросить все данные в клиентское приложение и обрабатывать там" совершенно очевиден: обработку данных следует производить в общем случае только в БД. Она для этого и придумана. Чтобы обрабатывать значительные объемы данных.

    Да, js тоже "может" обрабатывать большие объемы данных.
    Но чтобы значительный объем данных обработать, его сначала надо передать, полностью забив канал между сайтом и базой
    Чтобы значительный объем данных обработать, его надо сначала проиндексировать. Причем делать это каждый раз, а не использовать уже имеющийся набор индексов
    Чтобы значительный объем данных обработать, надо иметь значительный объем памяти или упасть из-за её недостатка
    Чтобы значительный объем данных обработать в многопоточном режиме (а сайт как раз является многопоточной системой), все вышеперечисленное надо умножить на количество посетителей сайта - при каждом запросе перегонять весь массив данных, выделять память, индексировать, считать. Если же вы оставляете все данные в памяти приложения, то их тогда надо как-то синхронизировать с БД. То есть вы себе собираете кучу проблем на пустом месте.

    Несомненно, из любого правила есть исключения. И бывают ситуации, когда приходится считать в приложении.
    Но на вопрос в общем виде ответ будет совершенно однозначный. Не "может так, может сяк", а только в БД.
    Ответ написан
    9 комментариев
  • Что будет, если убрать из URL уникальный id у новости в CMS?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сто раз уже обсуждалось.
    Заголовок не гарантирует не только уникальность, но и неизменность.
    В реальной жизни заголовки довольно часто редактируются.
    И "если убрать из URL уникальный id", то все ссылки, которые вели на статью, после редактирования превращаются в тыкву.
    Ответ написан
    4 комментария