Pull to refresh

Comments 92

Каждый год где-то появляется пост «PHP устарел» — и каждый раз ловишь дежавю. Язык живет, эволюционирует и питается не твитами, а продакшн-нагрузкой тысяч коммерческих систем.

Скорее унифицируется. Языки становятся похожими друг на друга, фитчи одних перетекают в другие, удачные решения и фреймворки на одних языках копируются в другие.

будет ли когда то один язык на "все"?

Маркетологи LLM говорят что английский.

Уже есть c/c++ на нем можешь писать что угодно веб сервер, приложение десктоп, почтовый сервер, работать с внешними устройствами и так далее

Можно капнуть глубже.. есть схемотехника и паяльник ну или попроще - ассемблер.

Все таки с++ это не совсем ответ на данный вопрос.

Плюсы - это как раз таки про то. Про хорошесть во всем и не в чем конкретно. Вернее как, он может быть даже лучшим в любой задаче с точки зрения конечного продукта, но совершенно не конкурентноспособным по стоимости владения. Это как TLC 200. Идеален во всем. Но жрет как крокодил, в городе неуклюжий и неповоротливый как самосвал и обслуживание стоит конских денег. Но машина - легенда. Способна выполнить практически любые задачи - от автопутешестия вокруг света, до развозки детей по школам и детсадам по утрам.

TLC200 как раз отличный пример того как вообщем то посредственная машина, сделанная для максимального комфорта в гОвнах, и весьма паршивая, если туда не лезть по своим деньгам, возведена адептами тайота головного мозга в ранг легенды. А так какой нито X5, Q7, GLS, RR и тд и тп будет принципиально лучше. По деньгам если что до крузака дорос, даже катал 200й, думал...ну может я что то не понимаю....но нет....да на охоту сгонять по говнам 100км вариант отличный. Но много ли на нем по лесу-корягам-бродам ездит? А вот детей в школу развозить, иной раз жахнуть бодро, на охоту по обычной грунтовке доехать без экстрима 5км....это полная шляпа в этом бюджете

Получается PHP это TLC200 в мире ЯП.

И это хорошо. Потому что споры смещаются с какой язык круче на какой инструмент лучше решает мою задачу

Знаете, когда я первый раз услышал "PHP умер"?

После выхода PHP 3.0, это 27 лет назад.

Да, я очень стар. Уж и не помню кто тогда конкурентами пхп был.

Тогда Perl, разумеется. Четвёрку хоронил Ruby. :)

Не, это уже 5.2 была, Ruby популярность к концу 2006 года начал набирать.

Приемущество PHP - возможность разворачивать приложения на дешевом виртуальном хостинге не требующем особого администрирования.

Преимущество других стеков... Да вообщем то никакого в 99.9 процентах случаев. то есть случаев разработки обычных сайтов и сервисов , владельцам и пользователям которых нет дела на чем там оно написано. На "крутом" стеке или на php/mysql то есть стеке для "старперов"

Для кого это преимущество? Для микробизнесменов, которые сами могут WP развернуть? Или для отчаившихся программистов на дне рынка, которые иначе не умеют? Сейчас дешевый VPS стоит в месяц меньше чашки кофе.

https://bref.sh/ позволяет запускать PHP на AWS Lambda. По данным их телеметрии ежемесячно так обрабатывается, если не путаю, 37 триллионов запросов в месяц (~14K rps).

Не знаю где вы такие дешевые VDS нашли но виртуальный хостинг
в любом случае намного дешевле. И не требует никаколго дминистрирования настройки ПО и прочего в отличие от VDS.
В этом и преимущество для пользователей - зачем человеку который держит сайт для кафе или ИМ
переплачивать если можно поставить WP на гаред хостинг
что может сделать и не особо айтишник?
Конечно с точки зрения разработчика чем дороже и сложнее стек и деплой тем лучше - больше денег. Но для тех кто платит преимущество именнго сайтыв на PHP на виртуальном хостинге тем более кроме жадности разрабов обывчно нет никаких причин использовать что то другое.

Сайт для кафе все чаще вижу как страницы в соцсетях.

Не знаю где вы такие дешевые VDS нашли
виртуальный хостинг в любом случае намного дешевле

Не буду рекламу делать, но могу скинуть прайс:

скриншот

VPS/VDS - это тоже виртуальный хостинг, первая буква обязывает.

не требует никаколго дминистрирования настройки ПО и прочего в отличие от VDS.

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

зачем человеку который держит сайт для кафе или ИМ переплачивать если можно поставить WP на гаред хостинг

Про социалки рядом тоже в кассу заметили - они нынче достаточно могучие и имеют больше возможностей продвижения. Для типового решения не нужен WP. Для кастомного решения - лучше заплатить специалисту, чтобы не огрести проблем для бизнеса из-за дилетантских ошибок и получить качественный продукт. А специалисту это не преимущество.

WP - это как Excel на котором обширное использование макросов - это уже плохая идея.

чем дороже и сложнее стек и деплой тем лучше - больше денег.

Деплой всегда должен сводиться к кнопке с зеленой стрелочкой или запуску одного скрипта. Стеки чаще всего бесплатные, а сложность условного NodeJS не то, чтобы выше того же PHP.

Нет ничего глупее сравниние VPS с шаренным по только по цене.
Гемор по поднятию и администрированию сайта на VPS ни в какое сравнение не лезет с шаренным хостингом.

Куда девается свободное место на SSD?
Какого * от моих 2 гигов остался только 1, а то и 512 свободных RAM при двух десятках посетителей сайта в сутки? (что там в этом убогом пингвине такое работает фоном и съедает мои гигабайты?). Очень увлекательное расследование...
Давайте установим SSL сертификат... Добро пожаловать в увлекательное чтиво про cert bot.
Давайте попробуем добавить удобств в управление VPS и установим какую-нибудь панель... wait a minute... а, напомните, зачем нам VPS?

У меня на виртуалке крутится эта ваша Бубунта c ПХП и прочими Машками. И VPS у меня был, потому что мне нужно было держать постоянно запущенным один скрипт, получающий json-ы и отгружающий их в бд в реальном времени. Я, как бы, в курсе, как все это поднять на дебиановских пингвинах, но не видеть разницы в кол-ве телодвижений и затраченном времени на администрирование сайтов между shared хостингом и VPS может либо тот, кто с чем-то из этого реально НЕ работал, либо "не очень умный человек" (достаточно политкорректно?).

VPS оправдан только тогда, когда нужно запускать что-то, что shared хостингами не поддерживается типа постоянных скриптов, вебсокетов и т.п.

Если что, composer и git на shared хостингах, как правило, присутствует. Хотя можно жить и без этого... когда разработка ведется НЕ по принципу 10 человек красят одну кнопку 8 дней (да, та самая "working in a team" at it's best).

Персонажам с комментами типа "skill isssue": WELCOME! Вас здесь очень не хватает!

Повторю мысли, которые уже звучали выше: дополнительные действия и правда нужны, но они шаблонные и в любом случае must know для профессионала, потратить недельку один раз и потом копипастить применять эти знания из проекта в проект - это не проблема. А любителю с бюджетом в три копейки - путь в социальные сети, это еще проще, еще надежнее, еще бесплатнее.

Честно говоря не ожидал увидеть в 2025 агитацию за shared.

Понимаете.... это.... колхоз. Ну т.е. если вам совершенно пофиг как это всё будет работать использовать можно.

Я съехал лет двадцать назад с шейред, после того как получил в пятницу в 18:00 письмо следующего содержания: "мы тут завтра версию php и mysql пожалуй обновим", а на мой вопрос "вы там что грибов обкурились, а если с ней не будет ничего работать?" получил ответ "мы вас за 24 часа предупредили - имеем право делать всё что хотим, читайте договор". Это был один из крупнейших хостингов...

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

Но да, приходится администрировать.

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

"Не знаю где вы такие дешевые VDS нашли"
Когда VDS дешевые в табличке тарифов, много интересного скрывается в детализации этих тарифов. Я, когда выбирал себе VPS, столкнулся с этим. А мне-то нужен был вообще самый убогий VPS...

Не совсем понял аргумент что у TypeScript "типизация в платформе". В PHP вот strict types там где можно их сделать - приводят к runtime ошибкам в том числе (что, как по мне, хорошо - это на случай, если моя точка зрения не совсем ясна). TypeScript - это типизация на этапе транспиляции только.

Да PHP двигается вперед: он стал таким запутанным что хочется его забросить. И его забрасывают. Красота PHP была в простоте и это работало.И работает сейчас просто по инерции

так скрипт написанный 15 лет назад и сейчас запустится. кто мешает по старому? )

Не факт, перед запуском стоит свериться с изменениями между версий, т.к. некоторые функции меняли типы, порядок аргументов, внутреннее устройство.

Элементарный пример: https://onlinephp.io/c/cdefa и https://onlinephp.io/c/9d3dc наглядно демонстрирует, что через года, некоторые части элементарного скрипта, уже могут расходиться с ожидаемым поведением.

изменения несоменно есть, но мой коммент ответ на "Красота PHP БЫЛА в простоте и это работало" - о том что php почти не изменился, старый код работает (пусть с небольшими изменениями) поэтому так же можно писать по старому. Напротив, видимо поменялось чтото в голове? Или сложным выглядит использованием фреймворка?

Чего-чего? Это где это вы ожидали, что сравнение строки 'string1' с числом 0 даст истину? У вас реально на этом строилась логика? Для всех остальных это не "ожидаемое поведение", а очевидный БАГ. Который и был исправлен.

Впрочем, ваш пример натолкнул меня на другой: многие функции перестали принимать null вместо строки, например htmlspecialchars(). Это да, неприятно, если у вас исходно был кривоватый код

UFO landed and left these words here

Мне кажется, стоит перестать ссылаться на статистику W3Tech. Во-первых, они нигде не приводят количество серверов, для которых "технология неизвестна". А из этой цифры можно было бы вывести реальный процент. Во-вторых, количество хостов - не самая адекватная метрика. Если смотреть по трафику, то РНР сразу скатится вниз. Из 20 топовых сайтов интернета по трафику, только четверть имеет отношение к РНР.
В-третьих, подавляющее большинство этих хостов работают под уордпресс. И слова про прекрасный новый РНР становятся несколько двусмысленными. Но главное - эта пресловутая цифра, 146% 74%, говорит о популярности определённой блог-платформы, а не языка РНР.
И, кстати, о популярности языка. Количество просмотров у статей в этом хабе упало за 8 лет в 10 раз: с 30к в среднем 8 лет назад до 3k сейчас. Возможно, это Хабр уже не торт, но в любом случае отрицать падение интереса к языку глупо.

Звучит красиво. Но как говорится, есть нюанс.

Судя по описанию, PHP героически пытается догнать то что в других языках или из коробки или уже было 10 и более лет назад. Вопрос, почему мне должен быть интересен догоняющий язык больше чем языки которые он догоняет? Чем интересен должен быть язык в который вливаются огромные труды только для того чтобы он мог постоять рядом с языками которые таких проблем и не имели?

Сила и киллер-фича, которая сделала PHP мега популярным, была в его простоте. Вместо того чтобы исправлять проблемы и развивать язык в данной направлении, вкладывается очень много сил просто чтобы сделать another one догоняющий язык.

Есть у нас на рынке две компании которые выпускают продукт. Одна выпускает очень дорогой и качественный а другая не такой качественный но не дорогой и за счет этого имеет огромный спрос. Самое гениальное что может сделать вторая компания так это забросить свою идею и начать пытаться бодаться с первой в области высокого качества и цены.

давайте утрирую: я вам создам новый чистый язык со всеми модными фичами, будете использовать?
нет - потому что у него экосистема нулевая.
у php очень много готовых библиотек, материалов по нему, решений проблем и тд.
низкий порог входа у него по прежнему остался, вы по прежнему можете начать проект с <?php echo "hello world";
но он растет в глубину, добавляя возможностей для продвинутых пользователей... ну и большая часть сложности скрыта в библиотеках и фреймворках.

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

Вопрос то был простой - зачем язык которые героически борется с проблемами которых у существующих решений и языков нет и скорей всего вообще не было?

Вопрос то был простой - зачем язык которые героически борется с проблемами которых у существующих решений и языков нет и скорей всего вообще не было?

Для поддержания и масштабирования легаси. Пока вот на этих беспроблемных языках будет сделан продукт, приносящий доход, легаси уже его приносит. Переписать с нуля? Не факт, что будет дешевле, а самое главное, не будет бесшовности. Мы по сути бросаем клиентов и не выкатываем для них необходимых фич, а говорим: подождите годик-другой, вот мы сейчас всё перепишем на современном ЯП, и потом будет счастье.

PHP работает на более чем 76% серверов

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

они просто живут своей жизнью

И это прекрасно.
Двигание кроватей в каждой новой версии чего-либо порядком надоело.

Ну веб студии во всю пилят магазины на Битриксе, а самостоятельные компании на yii или ларавель. Java как будто в банках только. Python с Джанго еще есть, но раньше я о Джанго слышал чаще чем сейчас.

По лично моим ощущениям, почти вся когорта интерпретируемых языков начинает потихоньку терять популярность на фоне бума Go и Rust (вопрос их реального использования на практике всё ещё стоит, но они явно повлияли на классическую тройку Python/Node/PHP). Вообще сейчас даже как-то C# и Java немного воспряли духом (хотя казалось бы), осталось только подождать, куда эта тенденция реально пойдёт. Ведь для того же Go или Rust-а в вебе реального применения не так уж и много (разве что в бигтехе)

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

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

Сидишь небось дрочишь на свой коммент )

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

Преданные говнокодеры в ожидании очередного патча Zend пациента.
Преданные говнокодеры в ожидании очередного патча Zend пациента.

Вечный двигатель веб разработки на вынужденной остановке перед мощным рывком в пост-пхп эру.

Если WP перейдет на TS/node, что останется от статистики PHP в мире?

Но он не перейдет, т.к. ts node никогда не даст такой же гибкости и ООП функционала, как PHP. Даже в функциональном программировании, он будет куда удобнее.

Больше поверю в то, что wp переедет на Symfony как это сделал Drupal или что ещё более вероятно на Laravel.

PHP не мрёт, потому что миллионы Васей Пупкиных разворачивают свои сайт на Wordpress и прочих CMS. Плюс целая индустрия модов и хаков к этому всему. Смерть ему предвещают, потому что корпоративная разработка ведётся как правило на других языках, и там разработчики получают 300к наносек, и создаётся впечатление что их язык самый тру и самый популярный.

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

Мне PHP нравился за изящество, делала много внутрикорпоративных вещей. Одного не понимfю зачем делать из него очередной C#.

Так лично вас никто не заставляет писать как на C#. Хочете - пишете, не хочете - валяйте как раньше. Из обратно несовместимых изменений - это были выпилены вещи типа $a = ''; $a['key'] = 1;, но это дичь, а не C#. А в остальном старый код будет работать так же, за исключением очевидных deprecations, которые есть везде.

Какие у вас конкретно проблемы c новым РНР? Что именно вы не можете делать, как раньше? Скучаете по register_globals? Magic quotes?

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

Кстати, проблему с двойными кавычками решили или одинарные быстрее? Сейчас ++i быстрее чем i++? В конце пхп файла надо ставить ?> Бррр:)

двойные кавычки компилируются в одинарные с конкатенацией. ++i даже в си быстрее (но jit наверное конвертирует где надо i++ в ++i автоматически), ?> в конце не рекомендуется

А разве миф не иронично основан на том что после каждого запроса он умирает?

die();

Нет, на этом основана игра слов с этим мифом.

Когда я искал работу программиста в 2004-м, подавляющее большинство вакансий было для PHP (не считая 1С). Сегодня это уже не так. Причём немало php'шных вакансий на деле оказываются "у нас легаси на PHP, которое мы переписываем на Go". Так что не умер и вряд ли умрёт, но лидерские позиции сдал и популярность продолжает терять.

Именно, так и есть. Сегодня нет смысла писать новое приложение, жизненный цикл который планируется на много лет вперед, на php. Сейчас как правило это поддержка легаси, рефакторинг легаси, переписывание на что-то.

Нет, ну вы серьезно предлагаете клепать круды на расте? С одной стороны, я согласен с вашим разбором, но с другой предлагаемые альтернативы выглядят довольно странно. На том же Go переписывают обычно критичные участки, а бизнес-логика остатётся на Ларавле. В конце концов, есть что-то подобное Cимфони для Go? Для Rust?

Нет, ну вы серьезно предлагаете клепать круды на расте?

Конечно

На том же Go переписывают обычно критичные участки

Ну здрасте приехали, ТОЛЬКО критичные участки переписывали лет 5-10 назад, когда go только становился мейнстримом, сейчас спокойно пишут круды. Похапе порой даже геморней приготовить.

В конце концов, есть что-то подобное Cимфони для Go

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

В go философия всеже иная, go больше про простоту, тот же di это антипатерн там. Gorm и другие orm многие предпочитают не использовать.

Однако в go полно различных фреймворков для для построения апи, например тот же https://github.com/ent/ent чем-то похожий на симфони

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

Косвенно о снижении популярности пыхи может сказать то что

  • вы не найдете курсов по похапе ни в одной онлайн школе

  • кол-во вакансий на похапе уменьшается из года в год

Я не спорю с падением популярности пыхи, но "всё будет переписано на Go (Расте)" - это такой же закидон, как и 74%.

Ещё как бы есть Питон, Руби, Нода с жсом и АСП с шарпом. Все эти языки/платформы, так же как и пыха, ГОДАМИ нарабатывали навыки работы с веб (правда, на десять лет оставая от пыхи в осознании SQL инъекций, XSS и прочих тонкостей). Обрастали инструментами фреймворками и экосистемами. В 5 минут это не делается. И не везде нужен охрениллиард запросов в наносекунду.

"Полно фреймворков" ещё совсем не означает, что эти фремворки вообще жизнеспособны. А, скорее, наоборот. И к тому же, "полно фреймворков" - это скорее минус, чем плюс, жсники не дадут соврать.

Ваше "go больше про простоту" и "orm многие предпочитают не использовать" за километр кричит про штучную разработку, а не индустрию. Вот когда будет платформа по выпеканию сайтов, как горячих пирожков, сравнимая с ларавлём - тогда и поговорим. И как в этом случае "в Го всё по простоте" аукнется.

Я могу конечно ошибаться, но чисто со стороны, вы в своем прозелитстве не отличаетесь от фанбоев пхп. «Телевидению принадлежит будущее! Не будет ни газет, ни книг, ни кино, ни театров - одно сплошное телевидение!».

Так я вам и не говорил выше что будет переписано ТОЛЬКО на go / rust.

Руби

Что это? Он еще жив? ))

Нода с жсом

В последнее время часто встречаю у коллег по цеху такое решение, фронт и бек на тайпскрипте

АСП с шарпом

Очень узкая специфика и рынок

Питон

Не думаю

ещё совсем не означает, что эти фремворки вообще жизнеспособны

Ахаха, ну да ну да

сравнимая с ларавлём - тогда и поговорим

Видимо пора уже тогда говорить, оглянитесь вокруг сейчас многие маломальски крупные конторы пишут/переписывают проекты на go, софт который вы используете отчасти тоже написан на нем, все это говорит о том что именно он вытеснит в будущем пых, и 76% будет именно про го.

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

вы в своем прозелитстве

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

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

Пых язык узкого назначения

Как будто Go широкого назначения)

На Go, к примеру, пишут системные утилиты (Docker, K8s, из недавнего - портирование tsc), а PHP где-то за границами веб-морд используется?

Вот Kotlin это тема.
А что на Go можно написать кроме системных утилит и бэка?

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

Почему именно десктопные? Может есть какие-то истории успеха? Интересно было бы почитать про любые сколь-либо популярные софтины/применения вне веб-сервера.

Например bosonphp и nativephp

Дык и на Go никто не пишет приложения для смартфонов и десктопные приложения)

Обычно пишут бэк и системные утилиты. А для остального есть более удобные инструменты.

bosonphp и nativephp

А конечные продукты какие-то с их помощью делают или это демо ради самой возможности? Сравнимы ли они по популярности, скажем, с RoadRunner?

Обычно пишут бэк и системные утилиты

Это уже два направления, тащемта.

Из-за этих 2-х направлений Go становиться языком широкого назначения?)

Я же привел пример с Kotlin. Также можно взять Java и C#. Но Go в данный момент не входит в этот список.

Ваши примеры эти два направления не покрывают, как бы)

Обычно Go изучают для бэкенд-разработки. Например, вы на Go какие проблемы решаете? На 110% уверен, что пишите бэк)

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

Таки угадал)

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

Я пытался изучить Go. Но отказался от него по причине того, что там нельзя писать мобильные приложения. Так что Go такой же узкоспециализированный язык как и PHP.

Все эти языки/платформы, так же как и пыха, ГОДАМИ нарабатывали навыки работы с веб

Тут полностью согласен

правда, на десять лет оставая от пыхи в осознании SQL инъекций, XSS и прочих тонкостей

А вот тут можно тут поподробнее?

Мой путь в вебе протекал через php/yii и js, затем python/django плюс эпизодически другие фреймворки для питона, нода (js и ts) и го, теперь снова в основном php, но symfony, плюс эпизодически питон, го и ts.

И мой опыт говорит о прямо противоположном. Львиная доля попадавшихся мне XSS приходится на php-проекты. Это либо напрямую вывод данных от пользователя в представлении yii (там шаблонизатор по умолчанию — сам php), либо код вида:

$url = htmlspecialchars($unsafe);
$link = "<a href='$url'>Link</a>";

в php ниже 8.1 (который вышел в 2021 году). У остальных же, "отстающих в осознании", стандарт де-факто — использование шаблонизаторов, в которых экранирование включено по умолчанию, и для появления XSS нужно делать дополнительные телодвижения.

С SQL инъекциями тоже интересно. Если отойти от мира ORM, то только в php я видел в документации рекомендации пихать внешние данные прямо в строку запроса, "экранировать только не забывай правильно". А кто забудет, получит уязвимость. У остальных стандартная практика — биндинги.

По "прочим тонкостям". Из указанного списка только в php возможна ситуация, когда при кривой настройке сервера пользователь может через форму на сайте залить файл скрипта (shell, adminer и т.п.) в какую-нибудь директорию upload и выполнить его, просто запросив /upload/adminer.php.

В общем, по моим наблюдениям, это именно с пыхой нужно специально сильно пыхтеть для обеспечения мало-мальской безопасности.

$link = "<a href='".htmlspecialchars($unsafe)."'>Link</a>";

Просто интересно, как безопасность этого элемента реализуется в django? Там по умолчанию уродуется строка, путём отрывания у неё javascript: спереди?

только в php я видел в документации рекомендации

Не надо кликушествовать. Нигде там не написано, что это "рекомендация".

Для начала, не надо юлить. Жду ответа на свой вопрос: в чём Питон, Руби, Нода с жсом и АСП с шарпом «на десять лет отставали от пыхи в осознании SQL инъекций, XSS и прочих тонкостей»?

Просто интересно, как безопасность этого элемента реализуется в django? Там по умолчанию уродуется строка, путём отрывания у неё javascript: спереди?

Если говорить именно о href, то в проектах на джанге не припомню, чтобы в подобных случаях туда могли дойти данные с javascript: в начале.

Стандартный способ получения данных подразумевает использование URLValidator. Как правило, не напрямую, а в models.URLField, forms.URLField, serializers.URLField у DRF и т.п. Он по умолчанию пропускает только ссылки со схемами http, https, ftp и ftps.

Вне шаблонов такие ссылки могут формироваться в админке. Например, в последнем проекте на джанге, над которым работал, есть такой код (почистил от лишнего):

models.py

from django.conf import settings
from django.db.models import Model, URLField, SlugField

class RedirectLink(Model):
    slug = SlugField(verbose_name='Слаг', unique=True)
    url = URLField(verbose_name='URL')

    def get_absolute_url(self):
        return f'https://{settings.PUBLIC_HOST}/redirect/{self.slug}'

admin.py

import html
from django.contrib import admin
from django.utils.safestring import mark_safe
from t0links.models import RedirectLink

@admin.register(RedirectLink)
class RedirectLinkAdmin(admin.ModelAdmin):
    list_display = ['id', 'slug', 'url_link', 'copy_link']

    @admin.display(description='URL', ordering='url')
    def url_link(self, obj: RedirectLink):
        if obj.url:
            url = html.escape(obj.url)
            return mark_safe(f'<a href="{url}" target="_blank">🗗 {url}</a>')

    @admin.display(description='Ссылка', ordering='slug')
    def copy_link(self, obj: RedirectLink):
        if obj.slug:
            url = html.escape(obj.get_absolute_url())
            return mark_safe(f'''
                <button type="button" class="button" title="Скопировать с буфер обмена" style="line-height: 14px; width: 24px;" data-text="{url}"
                    onclick="navigator.clipboard.writeText(this.dataset.text);this.innerHTML='&nbsp;✓&nbsp;';setTimeout(() => this.innerHTML='&nbsp;⎘&nbsp;', 500);"
                >&nbsp;⎘&nbsp;</button>&nbsp;&nbsp;<a href="{url}" target="_blank">{url}</a>
            ''')

Тут данные для href формируются двумя способами - получение от пользователя (поле URLField, которое ссылку на javascript: просто не пропустит) и генерация (которая тоже никак не начнёт с неё начинаться). Пробежался по всем проектам, для которых у меня ещё остались исходники, везде только эти 2 случая.

При этом https://site.ru/#"tom's_dinner" спокойно проходит и сохраняется, поэтому перед выводом в html нужно экранировать. В python3 можно использовать html.escape из стандартной библиотеки, либо использовать одну из функций django.

Также в джанге значения из кода как правило по умолчанию экранируются, поэтому строку с html нужно явно обернуть в mark_safe.

Если так триггерит href, могу поменять пример на такой:

$albumNameRaw = "Tom's dinner onload='alert(`XSS!`)";
$albumName = htmlspecialchars($albumNameRaw);
$thumb = "<img src='$thumbURL' alt='Превью альбома $albumName'>"; // в php ниже 8.1: "<img src='/path/to/preview.webp' alt='Превью альбома Tom's dinner onload='alert(`XSS!`)'>"

Не надо кликушествовать

И не собирался.

Нигде там не написано, что это "рекомендация".

Верно, равно как и не написано, что это bad practice. Я просто больше не нашёл, в чём ещё разница в "осознании SQL-инъекций" между php и остальным миром.

Нет, ну вы серьезно предлагаете клепать круды на расте? 

На расте - это конечно оверкилл. Тут имхо идеальным балансом обладает Elixir. По удобству клепания крудов он ничем не уступает Ruby, Python и т.п., но при этом масштабируется на миллионы одновременных пользователей легко и непринужденно. При этом не требователен к ресурсам и нет кучи бойлерплейта как в Go.

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

  • В пыхе очень просто написать плохой код, поэтому большинство php разработчиков "успешно" его пишут. Чтобы писать банально неплохой код и приучить команду к этому, вам нужно обмазаться:

    • линтерами (codesnifer or any),

    • стат анализаторами (phpstan 11 lvl), с

    • трогая типизация (strict_type=1) ВЕЗДЕ в проекте,

    • тот же deptrac для контроля зависимостей


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

  • Готовить и обслуживать php приложение всегда сложнее.

    • Для того чтобы реализовать классическое api, вам нужно 2 контейнера, один с nginx другой с php-fpm, ну либо обьединять их в один, но это уже антипаттерн. При этом у вас все равно 2 технологии которые нужно обслуживать, настраивать, те точек отказа больше, кол-во контейнеров x2. Опятьже нужно немного будет поприседать чтобы обеспечить graceful shutdown в момент релиза, ведь банально с php-fpm и nginx это делается по разному

    • Да и банально, чтобы запустить скприт, вам нужно установить php и набор модулей, а в случае с скомпилированным бинарем вам ненужно ничего, вы можете запускать его в обычном scratch образе

  • Заставить работать php приложение всегда сложнее.

    • Если вам нужна скорость вам нужно включить opcache, ах да, включить его мало, нужно правильно настроить, а также мониторить opcache_get_status чтобы этот кеш действительно работал

    • Shared memory? Представим что у вас современное php приложение которое мониторится всякими прометеусами, графанами и тд. А как вы будете собирать метрики, у вас процесс убивается после его завершения. Выход один apcu поскольку это и есть шареная память между процессами php-fpm но опятьже, об этом нужно думать, конфигурировать, поддерживать.

  • Асинхронность/многопоточность

    • По сути ее нет, а чтобы реализовать ее подобие, нужно опять приседать.

В итоге, имхо: современный пых с кучей линтеров, стат анализаторов, всевозможных инструментов, командных процессов и договоренностей, действительно неплохой инструмент, не сильно хуже аналогичных языков, но чтобы держать планку, нужны постоянные приседания и велосипедирование, о котором я сказал выше, зачем это когда есть: go, rust ?

Говорю это как php разработчик с 15-летним стажем, повидавший разные версии и языка, фреймворки, архитектуры приложений, но искренне любящий лишь symfony.

Мне кажется, вы немного лукавите - да, язык стал лучше, но его главное преимущество это огромное легаси. Миллионы сайтов на Wordpress и Битриксе, которые надо поддерживать.

PHP жив не столько потому, что он хороший, сколько потому, что переписать все это - дороже

Забавно читать комментарии про Wordpress, мол вот только благодаря ему php живёт, т.к. васяны на нём клепают интернет магазины. Только вот, даже разработка на wp, это не просто написание плагинов в одном файле на 1000 строк. Уже давно его используют в связке с бэкенд и фронтенд фреймворками. По сути, wp давно стал админ панелью со своим специфичным функционалом, который уже миллион раз обернули в удобные ООП библиотеки. Уже молчу, что сам wp активно использует react например для своих гутенберг элементов. Это я к чему, даже wp вполне себе развивается, что уже говорить о php. Если вам пришлось работать с wp и вы написали плохой код, то это не wp плохой, это вы некомпетентный разработчик.

Касаемо "смерти" php, то это скорее мем, чем правда. Язык неплохо развивается в последнее время и явно ровняется на C#, Java сохраняя свою философию, что в целом неплохо. Я как раз перешёл с C# на PHP и мне всё нравится, т.к. он не настолько строгий, как C#, но при этом имеет почти такой же функционал, а местами даже даёт больше возможностей из коробки.

Судя по тому же TIOBE даже похорны перла с одним древнегреческим городом, чье имя не буду упоминать в суе, проходят не то, чтобы сильно успешно. А ведь у них нет даже свой WP-шки с армией устанавливающих ее на все шареды мира Васянов.

Delphi до сих пор является наиболее удобной и бустрым инструментом для создания нативных GUI приложений для Винды. В т.ч. FreePascal (Lazarus). Да и не для Винды тоже можно.
Кроме того, софтина скомпилированная 20 лет назад спокойно запускается на Win 10 - это вообще недостижимый уровень для современного мусора.

Так и ныне "покойные" WinForms вполне себе ещё используют из-за их скорости работы и полного контроля над отрисовкой. Во многом по тем же причинам. И да, приложения на Дельфях или Вин Формах работают куда лучше, чем поделки на том же React Native, которые часто нагружают систему и фризят.

Это правда мне и добавить нечего)

Да будет батл остро-конечников и тупо-конечников)

Каждый год где-то появляется пост «PHP устарел» — и каждый раз ловишь дежавю.

Так-то оно так, но лично я с этой статьи ловлю дежавю не меньше. Стабильно раз в полгода на Хабре выстреливает очередная статья про то, что PHP не умер, и каждый (каждый!) раз приводится один и тот же аргумент:

PHP работает на более чем 76% серверов

Окей, встречный вопрос: а jQuery получается тоже не умер? 70% сайтов тоже до сих пор его используют.

Да в общем да, какие вопросы к jquery ? Зачем тащить что-то еще, если достаточно его ?

Старые решения не обязательно плохие. Особенно для старых задач.

Спасибо за cвежий подход к вопросу "PHP устарел". Я лично считаю, что язык совсем не устарел, он продолжает развиваться (хотелось бы быстрее), но тренды задаваемые глобальными корпорациями - это, увы, не так просто преодолеть. По-поводу тех, кто говорит - вот раньше у языка был низкий порог входа и простота - просто не понимает, что и требования к веб-аппликациям были другими 20 лет назад. Сегодня у нас совершенно иное время.

И ещё... я не совсем согласен с подходом к MVP - в том смысле, что его нужно обязательно пилить на NodeJS. Лично я прямо сейчас пишу MVP на основе PHP в связке с Filament (плюс, конечно куча всего другого вокруг этого ядра (куда ж без этого), и... очень доволен результатом, качеством и скоростью разработки) и это после того, как целый месяц мы с моим товарищем потратили на POC на Питоне.

PHP - замечательный инструмент (а я его знаю с версии 3) - просто нужно уметь им пользоваться.

Опять куча говносрача насчет PHP в комментарии (͡°͜ʖ͡°)

Скажите пожалуйста, как вы победили держатель http/https коннектов в PHP в режиме fpm, чтобы не тратить время на handshake и остальную рутину?

Sign up to leave a comment.

Information

Website
o2k.ru
Registered
Founded
Employees
51–100 employees
Location
Россия
Representative
Максим Жуков