Программирование

Ответить в тред Ответить в тред
Check this out!
PHP Thread #125 /php/ /php/ Аноним # OP 08/08/21 Вск 11:58:17 21208041
PHP.png 2Кб, 460x460
460x460
Предыдущий тред: >>2062494 (OP)
Оформляйте код аккуратно.

Учебник - https://codedokode.github.io/phpbook
ОП-паста - https://pastebin.com/gzQ8bGm0

Если рассчитываешь получить дельный ответ, сформулируй правильно вопрос: «что я хочу получить, что я для этого делаю, что я вместо этого получаю». Если когда самостоятельно найдёшь решение — поделись в треде, мы за тебя переживаем.

PHP developer roadmap - https://miro.com/app/board/o9J_lbUUBBQ=
Карта знаний - https://docs.google.com/spreadsheets/d/1KvoibcMHrRxck9mV6UPGHZ9ysnAFEIGddo3OuJTrx1k
Аноним 08/08/21 Вск 13:23:51 21209072
16242126383200.png 94Кб, 245x246
245x246
Пиздец конечно не каноничный перекат
оп хуй
Аноним 08/08/21 Вск 13:33:07 21209153
Что у вас за мода в утонувших тредах сидеть, кстати?
Или из всех похапешников только один умеет перекатывать треды?
Аноним 08/08/21 Вск 14:42:47 21209834
На всякий случай продублирую вопрос в новом треде:
Подскажите, зачем использовать reverse proxy в связке Nginx + Apache, почему одного Nginx не достаточно, он же может обрабатывать и статику и работать с php-fpm? Скорость работы с динамическим контентом у Nginx и Apache сопоставимая, в чем преимущества одновременного использования обоих серверов?
Аноним 08/08/21 Вск 15:51:32 21210545
Плохой перекат. Как было в старом треде: заходишь в тред и в ОП-посте видишь ответы на часто задаваемые вопросы.

А сейчас: заходишь в тред и надо делать лишний клик, идти на какой-то сторонний сайт, на котором текст написан плохо читаемым моноширинным большим шрифтом.

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

В чем смысл? Ты сделал неудобно читателям треда. Это глупость - выносить шапку треда с часто задаваемыми вопросами на посторонний сайт.

Объясните, какой смысл выносить шапку на посторонний сайт. Чем это удобнее?
Аноним 08/08/21 Вск 16:04:04 21210676
>>2121054
Но там все устаревшее и обновлялось, в лучшем случае, в 2018-ом последний раз. Зачем оно вообще нужно? Пусть хотя бы в виде пасты на пастбине будет.
Аноним 08/08/21 Вск 16:50:15 21210987
>>2121067
Большая часть пыхи - легаси.
Аноним 08/08/21 Вск 18:27:14 21211708
>>2121098
Этот факт не отменяет того что в РФ он очень популярен.
Аноним 08/08/21 Вск 20:28:08 21212909
>>2120804 (OP)
Осваиваю mvc, добавляю роутинг по гайду и на любом кастомном путе отличном от '/' получаю 403
Заклонил чужой пример, запустил и там тоже самое
Пользуюсь опенсервером, на xampp тоже самое
Я так понимаю нужно хтацесс писать для апача? Без него никак? в хостс смотрел, там мой домен стоит возле локального айпи как и должно быть
Аноним 08/08/21 Вск 20:29:51 212129110
image.png 14Кб, 844x336
844x336
Аноним 08/08/21 Вск 22:58:08 212139911
собираюсь вкатиться в 28. работаю контент-менеджером. в основном 1с битрикс. размещаю статьи. зп 60. джун в нашей конторе получает 80. думаю за 3 месяца обучиться и перекатиться внутри компании.
как думаете, есть шансы? или в 28 лет уже не особо пойму что-то?
Аноним 08/08/21 Вск 23:28:02 212142212
>>2121399
Я хуею как вы так планируете за один месяц, за два, за три, если ты нихуя понятия не имеешь, что там и сколько учить?
Аноним 09/08/21 Пнд 00:11:43 212147413
>>2121422
ну я так-то базу знаю. круд приложуху на голой пыхе могу написать и mysql, да и в вебе я уже давно шароёблюсь. думаю, 3 месяца на изучение голой пыхи и 1-2 месяца битрикса/ларавельки хватит (у нас как и битриксоиды требуются, так и ларавельщики)
Аноним 09/08/21 Пнд 12:42:36 212185014
>>2120915
>Что у вас за мода в утонувших тредах сидеть, кстати?
Это профессиональная потребность сидеть на легаси
Аноним 09/08/21 Пнд 12:44:33 212185115
>>2121474
Надеюсь, ты не будешь портить себе и коллегам жизнь и выберешь из двух зол меньшее лару
Аноним 09/08/21 Пнд 14:23:36 212204716
>>2121851
на битриксе в рашке больше работы в разы. думал как-нибудь вообще в будущем перекатиться чекбоксы новые пилить в админке, да свистоперделки всякие за 120к в месяц. такой суммы мне хватит
Аноним 09/08/21 Пнд 15:34:15 212214317
>>2122047
Где ты у битрикса такие зп видел?
120к - зп мидла, который умеет в симфе или ларе работать
Аноним 09/08/21 Пнд 18:47:20 212242218
>>2122143
бля, ну давай не будем обсуждать зп.
есть компании, которые готовы платить бабки, есть те, кто нихуя не платит.
я ГОД НАЗАД работал тестером в компании, где джун получал 65-85к. Спустя полгода работы ВСЕХ джунов повышали до +50р в час. Через полгода ещё так.
На текущем месте у нас обычный разраб получает от 60 до 120. Миддлы от 120к.
Причём джун должен уметь:
- брать верстку и насаживать на битрикс;
- уметь в битрикс или лару, или вп (что угодно);

а дальше кто насколько продаст себя. Приходят челы, которые думают, что со старта им никто 80к платить не будит и просят 50к. Им и платят 50к. А приходят челы, которые по сути слабо прогают, но они просят 85-90к и знаешь, им платят.
Дело всё в том, насколько ты наглый, изъебистый и насколько можешь подлизать лиду или миддлу хотя бы в случае чего.
Молчунов. жестких ебаторов битры у нас нет. Все чего-то знают, а чего-то не знают и мы все обмениваемся опытом.
Просто кто-то попросил n рублей, а кто-то попросил n+30k рублей. Вот и вся разница на рынке труда.
Аноним 09/08/21 Пнд 20:11:06 212252619
>>2122047
Поверь человеку который нырнул в это говно, ты будешь невостребованным нигде специалистом, PHP разработчик и Битрикс разработчик это такая же разница как автослесарь и слесарь сантехник. Я 6 месяцев работал в такой параше и перекатился на рельсы, то что у нас делал тимлид и помидоры 5ти летнем стажем и всем остальным это казалось мега сложным, то я делал в первые дни своей работы. Весь твой опыт будет нерелевантный, а с опытом ты будешь все глубже утопать в этой хуйне, ты не будешь уметь базовых вещей (работать с БД, докеры, хуекеры, всякие редисы, рабиты), не знать всяких паттернов, тот же MVC в Битриксе извращённый, это реально была пропасть у меня. Из плюсов скажу что я научился быстро верстать и накидывать на коленке лапшу на жиквери. хотя сейчас пилю микросервисы и фронт не вижу А в остальном у меня голова была занята особенностями работы с этой какашкой и полный инфоблок головного мозга. А сколько часов ты проведешь в поиске нужного файла, это не передать на словах, особенно шаблонов, кстати в одном из этих шаблонов в резалт_модифаер.пхп может оказаться вызов какой-нибудь ЦАйблокЭлемент::ГетПроперти в цикле который генерирует десятки запросов с джойнами при каждом вызове, вот и ебись ищи чего там тормозит и почему страница с товарами делает пару тысяч запросов при выключенном кэше, потому что спустя пару часов после его очистки там снова хуйзнает сколько гигов и место кончается. А если тебе достанется проект после говно студии, да и ещё на "готовом" решении, ещё и со свистелками, то это будет полный пиздец и какая нибудь задача поменяй картинку и передвинь этот блок может превратиться в недельную еблю. Когда я уволился, то удалил со своего ноута 300 гигов и там были проекты с которым я работал ежедневно.
Аноним 09/08/21 Пнд 20:13:25 212252820
>>2122526
Да забей на битриксошизика, пусть в своем болоте тонет
Аноним 09/08/21 Пнд 22:14:58 212273021
>>2122526

Справедливости ради, проблема с функцией, делающей тяжелые запросы из шаблона, легко отлавливается профайлером - там на графике потребления памяти, потребления CPU или графике числа запросов будет явно видный пик.
Аноним 09/08/21 Пнд 23:02:36 212280922
Используя C# я написал парсер изображений с одного сайта и хочу его перетащить в веб. У меня есть сайт на WordPress.
Как можно реализовать функционал, чтобы пользователь заходил на сайт, вбивал ссылку с изображением, эта ссылка поступала бы в мой парсер и затем изображение из парсера отправлялось бы пользователю? Парсер работает под виндой
Аноним 09/08/21 Пнд 23:27:24 212285123
>>2122526
Я знал, что в битриксе пиздец, но не знал, что настолько. Спасибо, прислушаюсь. В любом случае хотел пойти по такому пути:
голая пыха + sql, mysql и postgre. Потом yii2/symphony/laravel. Выбрал лару, потому что большинство говорят, что она лучше. Потом уже хотел изучить битрикс и работать в нем, но видимо, всё-таки прислушаюсь к тебе
Аноним 10/08/21 Втр 00:23:42 212290724
>>2122809
Пили апишку на стороне Шарпа, пользователь заходит на сайт, сайт случиться к апи на C# там запускается парсер и отдает результат сайту, сайт отдает результат пользователю
Аноним 10/08/21 Втр 04:19:23 212295925
Аноним 10/08/21 Втр 15:02:14 212347526
Почему в ларавеле чтобы подключится к базе надо менять данные одновременно и в конфиге и в env? Это же тупо, ни?

Как в ларавеле добавить элементы в вьуху через контролер?
Ну и вообще динамично добавлять.
Аноним 10/08/21 Втр 20:35:48 212383827
Как сделать хороший ГСЧ ?
Аноним 11/08/21 Срд 00:10:04 212403628
>>2123838

Что ты подразумеваешь под "хорошим"? Какие известные генераторы ты уже рассмотрел и почему отверг?

Генераторы случайных чисел это математика, и довольно хардкорная. Например, простой генератор на основе сдвигов и XOR опирается на поля Галуа, где можно голову сломать, пытаясь разобраться. И это относительно простой генератор.
Аноним 11/08/21 Срд 00:15:40 212404129
>>2123475

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

То есть, конфиг у всех общий. И ты не можешь туда прописать пароль от своей базы, так как у твоего коллеги будет другой пароль.

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

Аноним 11/08/21 Срд 03:44:08 212411730
Аноним 11/08/21 Срд 08:46:05 212414531
Аноним 12/08/21 Чтв 16:43:14 212573232
>>2124041
Хороший ответ, чаю.

Аноним 12/08/21 Чтв 19:07:35 212588833
А какое там правильно решение в задачке на кредит айпада? Просто там даже ответы не даны.

https://ideone.com/rlxbLa
Аноним 12/08/21 Чтв 19:15:45 212589634
>>2125888
Ой, по идее в paymentTotal надо же ещё и взносы/комиссии включать.
Аноним 13/08/21 Птн 12:53:27 212654035
Как пыхыпы знает в какой части получать ответ?
Вот ты создаешь запрос, отправляешь, скрип останавливается и ждет ответа(ограниченное кол-во времени)
В ответ возвращается заголовок, типа от того-то, туда-то.
Вот что есть этот туда-то? То бишь в заголовке написано отправить на рут(url) MyController. А как этот контролер знает что данные заголовка надо кидануть в определенную часть скрипта, а не начать обрабатывать запрос с самого начала скрипта?
Аноним 13/08/21 Птн 15:27:36 212677936
>>2126540

Извини, но я не очень понял, о какой ситуации идет речь: браузер отправляет HTTP-запрос на сервер, где работает PHP-скрипт, или PHP-скрипт отправляет запрос на другой сервер? Или речь (судя по слову контроллер) о каком-то фреймворке? Опиши подробнее, что за ситуация. Используется ли фреймворк или самописный код и кто кому отправляет запрос.

Если ты из скрипта отправляешь HTTP-запрос на другой сервер, то никакие контроллеры не вызываются. Ты просто отправляешь запрос и скрипт останавливается до получения ответа. После получения ответа он продолжает свою работу с того места, где остановился:

// эта строчка отправляет HTTP-запрос и скрипт останавливается до получения ответа
$result = curl_exec($ch);
Аноним 13/08/21 Птн 16:53:40 212684437
Привет, аноны-знатоки. Подскажите пожалуйста, может быть кто сталкивался: гугл требует все изображения хранить в современных форматах. То-есть надо их преобразовывать либо в webp, либо в jp2. А то и в оба сразу. Так вот, сам вопрос: стандартная php библиотека GD может эти форматы создавать/преобразовывать из jpeg? Я нашел команды типа imageWebp, то-есть создавать вебп она вроде как может. Но не могу найти аналогичную команду для формата jpg2000. Есть что-то вроде imagejp2? Гугл предлагает только сторонние программы для конвертирования. А нужно именно кодовое решение. Спасибо.
Аноним 13/08/21 Птн 17:29:04 212687538
можно ли сделать передачу данных из одного куска кода в другие в зависимости от ситуации?
Аноним 13/08/21 Птн 17:43:47 212688439
>>2126875
Как это? Передачу переменной в пределах одного php файла? Да, если переменная условно-глобальная, то ее будут видеть все функции. Просто суй ее в них.
Использовать переменную, созданную в одном файле, в другом файле? Зачем так делать? Это не очень правильно. Она должна использоваться там, где создалась.
Передавать данные из, например, формы отправки сообщения, и передавать их в скрипт обработки этих данных? Да, можно. В форме указываешь урл скрипта/сам скрипт. И через массиве $_GET или $_POST передаешь.
Обращаться к определенным глобальным переменным/сущностям в современных движках? Да, можно. В yii2 или laravel для вот этой страницы уже есть некий набор стандартных переменных с полезной информацией. Например, текущий урл, имя сервера и прочие штуки. Тебе их не надо самому создавать, они есть.
Аноним 13/08/21 Птн 18:00:38 212689840
>>2126884
>Использовать переменную, созданную в одном файле, в другом файле?
Аноним 13/08/21 Птн 18:21:08 212691241
>>2126898
Если у тебя два голых файла, то тебе надо указать в одном ссылку на другой через require_once или require

То-есть в одном файле создаешь переменную.
Затем в другом файле пишешь require_once("первый файл")
И теперь все переменные из первого файла доступны во втором после строчки с require_once

Но в движках используют use с namespace обычно, плюс автолоады с композерами
Аноним 13/08/21 Птн 18:36:38 212692142
>>2126912
намспейс это описание пути к файлу с классом?
Аноним 13/08/21 Птн 18:43:52 212692343
Аноним 13/08/21 Птн 18:45:13 212692544
Аноним 13/08/21 Птн 18:47:14 212692745
Аноним 13/08/21 Птн 18:50:06 212693046
Аноним 13/08/21 Птн 18:51:26 212693147
>>2126930
я даже не знаю что это
Аноним 13/08/21 Птн 19:14:45 212696148
>>2126898

Обычно код пишут в функциях. И ты вызываешь функцию и передаешь ей нужные переменные. А не пишешь стены кода без разделения на функции.
Аноним 13/08/21 Птн 19:18:31 212696649
>>2126921

Нет, неправильно. Это не путь (хотя он может частично с ним совпадать). Неймспейс это начальная часть длинного имени класса.

То есть, если полное имя класса \Zend\Db\Error, то короткое имя класса это Error, а неймспейс это \Zend\Db.

Зачем это нужно, можно прочитать в уроке про неймспейсы: https://github.com/codedokode/pasta/blob/master/php/autoload.md

>>2126927

Зачем ты сбиваешь человека? Неймспейс это не путь к классу, а префикс длинного имени класса, который может совпадать с путем к классу. А может и не совпадать.
Аноним 13/08/21 Птн 19:25:34 212697350
>>2126779
PHP отправляет через curl, в процессе исполнения скрипта, ждет ответа.

Фреймворк пусть будет ларавел\симфони, но это не особо важно, у них под капотом таже пыха с адресом скрипта.

>останавливает
И как это происходит? Изнутри если? Как он знает с какого места продолжить исполнение?
Аноним 13/08/21 Птн 19:30:55 212698051
>>2126966
>Неймспейс это не путь к классу, а префикс длинного имени класса, который может совпадать с путем к классу. А может и не совпадать.
Да, ты прав. Но по правилам хорошего тона неймспейс должен совпадать с путем к классу. Зачем изначально прививать человеку "неприличные" практики?
Аноним 13/08/21 Птн 19:36:35 212698852
>>2126980
Так его же попускать будут на таких вопросах. Пусть знает, как оно внутри устроено
Аноним 13/08/21 Птн 19:42:35 212699553
>>2126966
так это типа организация файлов,когда их много?
Аноним 13/08/21 Птн 19:51:23 212699854
>>2126988
>Так его же попускать будут на таких вопросах.
Современные среды разработки сами за тебя пишут неймспейсы. Программисту об этом не надо думать. Ему за "а я знаю как оно внутри устроено" не доплатят. Ну разве что перед друзьями похвалиться.
Аноним 13/08/21 Птн 19:59:57 212701255
>>2126998
Только собеседующий задаст вопрос и не получив ответ, сделает отметку, что перед ними макака, которую можно попустить по зп
Аноним 13/08/21 Птн 20:17:43 212703556
>>2127012
>перед ними макака, которую можно попустить по зп
Новичку в любом случае не дадут высокую зарплату. Если есть шанс попасть в хорошую контору, где работают профессионалы, за еду - это уже праздник. Кроме того от конторы зависит. Да, ты прав, есть такие, что будут и метод пузырька спрашивать, и неймспейсы каноничные, менять две переменные без помощи третьей и прочие олимпийские задачи - то есть все, что в реальности не очень-то и используется/автоматизировано. А потом будут зарплату урезать за то, что скобочку у класса переносишь/не переносишь. Но это скорее неадекваты, и оттуда надо убегать.
А есть конторы, которые не дадут большую зарплату, но где нужны люди чтобы работать вот прямо сейчас. Им как-то не до мелочных придирок.
Аноним 14/08/21 Суб 14:01:39 212758657
Жесть аноны помохите плиз, а то я кукохой поеду.
Я всегда был не в ладах с реактом сам по себе, а тут понадобилось в ларавел запихнуть.
И это ппц, чтобы я не читал и не пробовал у меня ничего не работает.
А сегодня я вообще потерял важный файл с жс скриптом потому что laravel.mix, ебучий вебпак(ссука как же я ненавижу вебпак и еблю с зависимостями фронетнда) просто потер его.

Я делал:
Установил ларавел/ui. Установил реакт, нпм, все зависимости разрешились. перегрузились, ошибок нет. Делаю npx mix watch.

В блейде у меня <script src="/js/app.js"></script>. //реакт
Также <script src="/js/main.js"></script> //мой кастомный скрипт

Делаю import ReactDOM from 'react-dom', затем ReactDOM.render() в main.js - пишет не может использовать вне модуля

Я и в package.json type='module' делал, и в блейде script type='module' делал, и в webpack.mix.js писал mix.js(...main.js) . Когда делаешь все это то это походу костыли и появляется следующая ошибка типа пропишите путь, хотя
предполагаю такого не должно быть вообще когда делаешь импорт реакта
Я просто не понимаю как эта херовина должна работать, может кто объяснить.

А то что файл потерял это в 10 раз обиднее, сука ненавижу вебпак.
Аноним 14/08/21 Суб 14:26:22 212761058
>>2127035
Ну да, тут еще зависит от того, на какой грейд мы собеседуемся.
Для джуна ценнее получить оффер на любую сумму и достаточно набрать какой-то минимум по очкам, чтобы получить оффер.
К мидл+ критерии жестче
Аноним 14/08/21 Суб 14:29:24 212761259
>>2127586
Ты херней занимаешься, пытаясь совместить блейд с реактом.
От ларавеля реакту нужна только апишка, из которой он будет фетчить данные.
Никакие ларавел миксы не нужны, т.к. они жестко привязывают фронт к беку.
В идеале у тебя два отдельных приложения, живущих своей жизнью: апи на ларавел и спа на реакте
Аноним 14/08/21 Суб 14:44:30 212763360
1623838200a2928[...].jpg 41Кб, 640x778
640x778
Аноны, есть ли внятный гайд по настройке рабочего окружения для вкатуна? Уже четвертый день ковыряюсь, сегодня виртуалбокс отказался монтировать общую с виндой папку в убунту, хз что дальше делать.
Аноним 14/08/21 Суб 15:03:23 212765261
>>2127633
>хз что дальше делать.
Накатить убунту в дуалбут и не ебаться с виртуалками
Аноним 14/08/21 Суб 15:10:48 212765862
>>2127612
1)Не раз уже слышу абреввиатуру СПА. Что она значит? Как расшифровывается?
S - service, A-apllication, по логике

2)Спасибо, я понял конечно, но у меня бомбит что все гайды и официальные документации заставляют тебя использовать определенные технологии, а они на самом деле не работают и не нужны, а ты сидишь и ковыряешь в этом гумне часами. Класс.
Я бы все таки хотел понять, просто понять как оно на самом деле должно было работать. Микс контролирует сборку, вебпак и прочая. Все зависимости докачиваются, пакетики встроенные.
Сказано просто добавить script src. Больше ничего не сказано.
Очевидно по логике js-а ты кидаешь import-ы. И раз написано что микс добавил, и все смотрит - какого лешего мой срипт не видит реакт?
Что я делаю не так?

ПС фронтенд приложения куда принято кидать в проекте, в /public?
Аноним 14/08/21 Суб 15:18:27 212766763
>>2127658
сингл пейдж апликейшн, загружается эта сингл пейдж и работает на клиенте, на бэке только апи для отправки-приема данных.
Аноним 14/08/21 Суб 15:24:13 212767764
>>2127658
single page application

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

>ПС фронтенд приложения куда принято кидать в проекте, в /public?
В идеале это отдельная репа, которая находится вне репы твоего бекенда.
Как это примерно работает:
Ты вбиваешь урл spa.hui, тебе грузится само spa, которое представляет собой грубо говоря хтмл, жс, цсс, т.е. статика.
Где-то отдельно крутиться бекенд апи, урл которого знает твой спа.
Если спа нужно получить/сохранить данные, он будет обращаться к бекенду. Роутинг происходит на уровне спа.

Наглядный пример - приложение погоды.
Есть некий внешний апи (не твой) weather.com, у которого ты можешь запросить текущую погоду, температуру, влажность, осадки и т.д.
Ты пишешь жс приложение, которое получает от апи погоду и выводит юзеру в браузер.
Аноним 14/08/21 Суб 15:34:08 212769165
>>2127677

Классическое приложение: отправляешь запрос на сервер, получаешь страницу с ответом.

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

Хотя SPA не обязаны быть медленными, на практике почему-то SPA долго грузятся. То есть, я бы хотел увидеть сразу данные, а не смотреть на заглушку.

Примеры: Сбербанк-онлайн - есть заглушка, загрузка медленная. Твиттер - есть заглушка, загрузка медленная. Ютуб - есть заглушка, загрузка медленная. В твиттере с ютубом работают разработчики мирового класса и все равно тормозит. А у обычного разработчика результат будет в 10 раз хуже.
Аноним 14/08/21 Суб 15:45:18 212771066
>>2127677
Да я и спрашиваю поэтому как это работает под капотом, никто не знает.
В свое время, года назад, пытался во фронт, задание тестовое на работку я конечно сделал, но все равно не понял нафига оно нужно(это другой вопрос и тема, срачи вечные, достаточно осказано). Сам факт что я задавал на 3 разных форумах(двач в том числе) про зависимости, пакетирование, ведь это гумно просто так не работает.
В итоге люди сами ничего не знают, просто говорят использовать установщик из коробки - он у меня в общем-то и заработал. А вебпак и лярд других завсимостей я проклинаю по сей день, но люди говорят это норма, щито поделать.

Да, я понял, спасибо, обычное апи, я с такими работаю. Просто у меня проблема с бест практис, я каждый чих выдрочился спрашивать. Типа папка, там фронт, там бек. Я просто не отразил сразу что я не буду прописывать руты вручную. Короче, посмотрю.

>>2127691
Лярд зависимостей. Не нравится мне все это.
Аноним 14/08/21 Суб 15:50:41 212772067
>>2127710
>Да я и спрашиваю поэтому как это работает под капотом, никто не знает.
За всех то не говори

>Просто у меня проблема с бест практис, я каждый чих выдрочился спрашивать. Типа папка, там фронт, там бек
Так ты должен сам на эти вопросы себе отвечать.
Как работает моё приложение?
Как связаны бекенд с фронтендом?
Как запрос идет через бек?
и т.д.

>Лярд зависимостей. Не нравится мне все это.
У тебя и на беке будет лярд зависимостей. Загляни в composer.json (ларавеля к примеру) на досуге. У него свои зависимости, у тех зависимостей - свои т.д.

Без зависимостей мы не получим достаточно большую скорость выкатки фич на прод
Аноним 14/08/21 Суб 15:54:52 212772768
>>2126973

Программа это последовательность команд, которые идут друг за другом и выполняются строго по очереди. Когда ты запускаешь PHP-скрипт, то PHP компилирует (преобразует) его в последовательность команд и затем выполняет эти команды. То есть у тебя в программе могут быть сложные циклы, if, функции, но в итоге все это превращается в последовательность простых команд идущих друг за другом.

У каждой команды есть адрес (номер). И есть счетчик команд, он хранит номер текущей выполняющейся команды. Счетчик увеличивается после выполнения каждой команды.

Команды выполняются строго по очереди. Допустим, программа выглядит так:

1) отправить запрос на http://example.com/page.html
2) сохранить ответ в переменную $x
3) вывести $x на экран

В этом случае сначала выполняется команда 1. Она отправляет запрос и ждет ответа. Пока она ждет, ничего не происходит и никакие другие команды не выполняются. Когда ответ приходит, начинает выполняться команда 2.

Как это работает на более низком уровне. Программа сама не может пересылать данные по сети. Этим занимается только операционная система (ОС). Программа, используя "системные вызовы", просит операционную систему сделать ту или иную сетевую операцию. При этом, пока операция выполняется, программа "стоит на месте" и ничего не делает.

Вот, например, как выглядит отправка запроса к http://example.com на более низком уровне:

1) сформировать HTTP-запрос, собрав вместе все нужные заголовки
2) попросить ОС установить соединение с сервером example.com
3) попросить ОС передать HTTP-запрос на сервер example.com
4) попросить ОС принять данные от сервера
5) разобрать пришедший ответ и извлечь из него нужные данные (заголовки, тело ответа и тд)

Операции 2, 3 и 4 "блокирующие" - то есть, пока они выполняются, программа ничего не делает. Как только операция выполнится, программа продолжает работу.

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

> Как он знает с какого места продолжить исполнение?

Номер команды, на которой остановилось выполнение, записан в счетчике команд.
Аноним 14/08/21 Суб 15:57:40 212773369
>>2127720
>за всех
Ну я говорю за всех кто мне встречался, очевидно.

>сам отвечать
Я бы рад)))) Но как только я делаю самодеятельность какую-ту, мне начинают вонять что ну тип у нас не совсем так, не сяк. Мне уже похуй что-то там думать, я просто напрямую спрашиваю - как это у вас делается.
Еще я понял что если ты сделаешь как тебе виднеется лучше или как люди говорят в интернете - то потом придется переделывать, а я понял что это лютый треш и лучше до такого не доводить.

>беке
Так на беке зависимости остаются на беке, юзеру только определенная инфа приходит. А фронт приложухи полноценные кидает для разверстки.
Аноним 14/08/21 Суб 16:19:28 212776470
>>2126980

Я хочу сконцентрировать внимание на том, что неймспейс это не путь к файлу. А лишь часть полного имени класса. Неправильно думать, что use это аналог require из древних скриптов.

>>2126995

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

Zend_Db_Table_Row

Почему имена классов длинные?

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

То есть, длинные имена неизбежны. Неймспейсы позволяют упростить код. До неймспейсов ты писал:

$x = new Zend_Db_Table_Row();

С неймспейсами ты пишешь:

use Zend\Db\Table\Row;
$x = new Row();

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

Аноним 14/08/21 Суб 16:24:58 212776971
>>2127586

Тебе правильно написали - надо сначала изучить, как работает laravel.mix и вебпак. И тогда не придется с ним бороться.

Также, тебе надо изучить, как работает импорт модулей в JS.

Ну например, если ты пишешь import ... from 'react-dom', то это значит, что у тебя рядом с main.js должен лежать react-dom.js. Потому что react-dom это имя файла. А у тебя его нет, потому и не работает.

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

Ты не хочешь изучать технологии, а хочешь тыкаться наугад. Вот и результат, что ничего не работает.
Аноним 14/08/21 Суб 16:34:41 212777872
>>2127612

Вообще, идея с "фетчить данные" плохая. Если ты взялся за SPA, то логично сразу в страницу заложить все нужные ему данные, чтобы он не делал кучу аякс-запросов при запуске.

>>2126998

> Программисту об этом не надо думать

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

Программист должен понимать каждый символ в коде, который он пишет.

>>2127710

> В итоге люди сами ничего не знают
Либо ты плохо сформулировал вопрос, либо ты его спрашивал в треде, где сидят одни неучи, которые считают, что "программисту не надо думать".

Даже если никто не может ответить на твой вопрос, что тебе мешает прочесть целиком документацию по вебпаку? Если ответа в документации нет, можно прочесть целиком исходный код вебпака и найти ответ там. Было бы желание.


Аноним 14/08/21 Суб 16:48:33 212778473
>>2127733
Ценность разраба в том, что он делал 1 вариант, понял его плюсы/минусы, делал 2 вариант, там свои плюсы минусы. Из этого складывается умение разраба для задачи Х подобрать оптимальное решение Y учитывая все трейдоффы.
Не бойся делать и ошибаться, так ты получишь опыт и вырастешь как спец.
Только не надо участвовать в холиварах и поисках единственно верного решения - таких просто не существует. Пусть холиварщики холиварят, а нам надо фичи выкатывать.

>А фронт приложухи полноценные кидает для разверстки.
Оно приходит юзеру в виде единого сжатого жс файлика, который кладется в кеш.
Аноним 14/08/21 Суб 16:53:14 212778874
>>2127769
Так я и пытаюсь. Прыгаю по докам микса вверх-вниз ничего кстати по теме, все что написано там работает, а по факту реакта ета . И по вопросам.

>содержимое
Так я про это и говорю, микс не видит. И если говорить о том как оно все работает, то скрипт приложения идет до моего скрипта.

>Хочешься тыкаться
Я не хочу. Я прочитал, не сработало, я сделал предположения на основе того как это может работать изнутри, тоже не работает. Че я еще могу сделать-то.
Мне вот сказали просто забить и делать проще\практичнее. Ну ты мне сейчас сказал что знаешь что импорты относятся к файлам.
В общем, пока что ни на йоту не приблизился к еще большему понимаю чем уже есть. Даже сейчас опять попробовал пару фишек и понял что я уже это все делал. Когда не работают самые логичные варианты ты переходишь к менее логичным. Боль.
Аноним 14/08/21 Суб 16:59:48 212779475
>>2127788
>Че я еще могу сделать-то.
1. Залезть под капот той технологии, в которой не разбираешься
2. Задать вопрос на стаковерфлоу
Аноним 14/08/21 Суб 17:10:42 212780376
>>2127778
>фетчить данные плохо
Блин, а я так надеялся что это топовый вариант. Говоришь, костылик?

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

Аноним 14/08/21 Суб 17:15:18 212780777
>>2127794
Я наверное совсем пропащий и обдвачевался, но мне казалось на дваче лучше получить ответ, и быстрее и качественней получится, все таки обитель 3000ккк наносек.
Типа если на стаке не гуглится в первых двух запросах вопросик, то как бы все совсем плохо и нет смысла даже пытаться самому задавать.
Аноним 14/08/21 Суб 17:46:36 212783578
>>2127633
>>2127652
Короче, накатил вагрант - там спокойно прокинулась общая папка, хз как это работает.
Аноним 14/08/21 Суб 17:51:24 212783979
Vagrant-это виртуалка с линуксом,но в этот линукс можно залазить из винды?
Аноним 14/08/21 Суб 18:52:51 212787080
А че вагрант сам качает юбунту?
Аноним 14/08/21 Суб 19:11:26 212788381
>>2127839
>>2127870
Это хуйня для легкого управления виртуалбоксом или другой вм, всё это можно сделать и вручную.
Но сейчас не особо актуально, потому что докер намного пижже.
Аноним 14/08/21 Суб 19:22:15 212789382
>>2127883
а в докере я тоже могу работать с линуксом,апачем,пхп,но допустим смотреть что натворил в мозилле из винды,прост из виртуалки у меня все тупит
Аноним 14/08/21 Суб 19:40:57 212791083
Аноним 14/08/21 Суб 19:49:04 212792784
Как писать в ООП стиле?
Допустим регистрация на сайте
Аноним 14/08/21 Суб 20:40:00 212800185
>>2127927
Используй классы и функции
Аноним 14/08/21 Суб 20:43:36 212801186
>>2128001
те в файле будет класс sign_up а в нем метод с пдо и конструктором с входящими данными?
Аноним 14/08/21 Суб 20:56:57 212803087
>>2128001
Как классы и функции помогут писать ООП код?
Что помешает обернуть процедурную лапшу в класс и назвать это ООП?
Аноним 14/08/21 Суб 22:20:19 212810688
Аноним 14/08/21 Суб 22:22:38 212810989
>>2127764
>Я хочу сконцентрировать внимание на том, что неймспейс это не путь к файлу
Твое объяснение только запутает новичка. По правилам хорошего тона там пишется путь. Если новичок будет писать вместо пути набор рандомных символов/папок - это ему не поможет. Поэтому не совсем корректная фраза "там пишется путь" полезней для него, чем твоя пространная демагогия, которая в конечном счете все равно сведется к "там желательно писать путь".
Сейчас ты находишься в довольно затруднительном положении. У тебя достаточно знаний, чтобы помогать новичкам, но все свои силы ты тратишь на то, чтобы придираться к словам и указывать на чужие несущественные ошибки. Это вполне обычно для программистской среды, потому что каждый хороший программист - токсичный самовлюбленный ребенок, который пытается самоутвердиться за чужой счет. Поэтому не забывай, зачем ты здесь. Самолюбование останавливает твое развитие и не помогает другим.
Аноним 15/08/21 Вск 16:22:36 212863690
Какие примерно вопросы ожидать на собесе на мидла? Смотрю видосы про собесы - там либо задачи уровня обойди массив/напиши сортировку пузырьком либо уберабстрактные сеньорские попизделки.
Аноним 15/08/21 Вск 16:35:10 212864291
>>2128636
Пройди собеседование да посмотри.
Аноним 15/08/21 Вск 16:47:02 212864792
>>2128636
Любые. Даже стажеру могут задать сеньорскую хуиту, это нормально.
Про это будет означать что либо смотрят на твою эрудицию и реакцию, либо сама фирма ебанашки. Одно из двух.
Гадать нет смысла.

>>2128642
Двачую. Нахуй на дваче еще спрашивать. Пришел, поговорили, узнали, приняли-отложили-забили. Тебя поход на собес ничему не обязывает.
Аноним 16/08/21 Пнд 17:53:08 212976593
Что обычно подразумевают в вакансиях под "опытом интеграции сторонних сервисов"? Уметь запросик газзлом послать или че?
Аноним 17/08/21 Втр 14:54:54 213059794
screen.jpg 161Кб, 616x712
616x712
Кликал на все подряд но не запустился терминал sql, что я делаю не так?
Аноним 17/08/21 Втр 15:02:19 213060595
Аноним 17/08/21 Втр 15:28:05 213063896
Как отправить сообщение юзеру?
Укаазать его ади и имя в БД?
Аноним 17/08/21 Втр 16:34:17 213072997
Аноним 17/08/21 Втр 16:36:55 213073598
>>2130729
Откуда вы лезете такие беспомощные?
mysql -u hui -p
и вводишь пароль свой.
Аноним 17/08/21 Втр 16:47:33 213074399
1629208049353.jpg 426Кб, 900x900
900x900
>>2130735
Он сейчас спросит, куда это вводить.
Аноним 17/08/21 Втр 19:58:30 2130993100
Аноним 17/08/21 Втр 20:32:12 2131049101
»2130597
»2130729
>Ampps

Перейди на localhost/phpmyadmin и не еби мозги
Аноним 17/08/21 Втр 22:00:36 2131115102
Как кликом кнопки на фронте запустить процесс на сервере?
Аноним 18/08/21 Срд 03:10:13 2131285103
>>2131115
Отправить запрос, который запустит процесс.
Аноним 18/08/21 Срд 08:12:30 2131328104
Аноним 18/08/21 Срд 13:50:01 2131690105
>>2130993
зачем ты сюда лезешь, если настолько не ориентируешься даже просто в использовании компьютера?
Аноним 18/08/21 Срд 13:58:45 2131705106
image.png 379Кб, 387x394
387x394
Норм курс или хуйня?
Аноним 18/08/21 Срд 14:07:16 2131716107
>>2131705
Если делают ебучие картинки с коробочками то сразу хуйня.
Аноним 18/08/21 Срд 15:39:54 2131836108
>>2131705
Смотря для чего.
Если учиться писать веб приложения, то хуйня
Аноним 18/08/21 Срд 15:53:40 2131870109
>>2131836
Как будто пыха нужна еще для чего-то лол
Аноним 18/08/21 Срд 15:57:34 2131876110
>>2131870
Может ему нужно, чтобы дядя-инфцыган пересказал содержимое php.net
Аноним 18/08/21 Срд 17:29:38 2131978111
>>2130597

Клиент mysql - это консольная программа. У нее нет окошек или кнопок. Его надо запускать не кликом мышкой, а из консоли.

Консоль это такое черное окно куда ты вводишь команды и компьютер их выполняет. Чтобы узнать, как ей пользоваться, прочти короткий урок https://github.com/codedokode/pasta/blob/master/soft/cli.md

Сначала тебе надо открыть консоль. Это удобнее всего сделать, если открыть папку на твоем скриншоте и ввести в адресную строку cmd и нажать Enter. Тогда консоль откроется с уже выбранной папкой. Если запускать ее другим способом, то тогда придется вручную перейти в папку с mysql.

Появится черное окно с мелкими буквами. Настрой более удобный размер шрифта. Затем набери mysql и должен либо запустится клиент mysql, либо вывестись сообщение об ошибке. Если все ок, то ты можешь набирать запрос к базе данных и тебе будет выведен его результат.
Аноним 18/08/21 Срд 17:37:11 2131989112
>>2131115

Тебе надо добавить на страницу яваскрипт-код. Этот код должен ждать события нажатия кнопки, и при нажатии кнопки отправлять аякс-запрос, например на URL /start-process.php

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

Если ты ориентируешься только на самые современные браузеры, то для отправки запроса можно использовать функцию fetch(). Если хочешь поддерживать любой браузер за последние лет 15, то используй объект XMLHttpRequest.

Тогда при нажатии кнопки отправится запрос на сервер и сервер запустит скрипт start-process.php. А этот скрипт уже может делать что угодно.
Аноним 18/08/21 Срд 17:39:16 2131994113
>>2129765

Думаю, требуется именно опыт интеграции какого-то сервиса. Например: сервис приема платежей, сервис геокодирования, служба доставки итд.

>>2128109

Я думаю, что это не придирка к словам. Если неймспейс не является путем к файлу, то надо так и писать, а не пытаться "упрощать", скрывая важные детали. Люди не такие глупые и прекрасно все поймут, если им объяснять и если они хотят понять.
Аноним 18/08/21 Срд 17:39:19 2131996114
>>2131978
> ввести в адресную строку cmd и нажать Enter
Хуя лойфхок. Я всегда делол через шифт+правая кнопка.
Аноним 18/08/21 Срд 17:58:59 2132017115
>>2127927

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

Для удобной работы с такими сущностями и придуманы объекты. Ты сначала создаешь класс, описывая, какие есть у сущности свойства (поля) и действия (методы). А потом создаешь объекты этого класса.

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

А когда тебе надо вывести информацию о товаре, ты с помощью СохранятеляТоваров загружаешь объект товара из БД, и вызывая его методы вроде узнатьЦену, узнатьНазвание выводишь информацию о нем на странице.

Но классы годятся не только для представления сущностей. Можно создавать объекты, у которых нет каких-то особых свойства, а есть только действия. Например: РегистраторПользователей. У него нет свойств, а есть только метод "создать нового пользователя".

Думаю, ты уже видишь, как ООП можно использовать для регистрации пользователей. Мы можем создать такие классы:

- Пользователь (User) со свойствами: email, хеш пароля, дата регистрации, имя итд. И методами: задать Email, узнать Email, задать пароль, проверить пароль итд.
- СохранятельПользователей (UserTableGateway) - это класс, который умеет сохранять объекты пользователя в БД или извлекать из нее. У него будут методы вроде вставитьПользователяВБазу, обновитьПользователяВБазе, найтиПользователяПоEmail.
- ВалидаторПользователя (UserValidator) - это класс, который получает данные из формы регистрации пользователя и проверяет их на правильность: что все поля заполнены, что email похож на настоящий email итд.

Заметь, что мы не пихаем все в один класс, а для каждой задачи используем отдельный класс. У каждого класса своя зона ответственности.

В принципе, это достаточный минимум, но можно при желании добавить еще другие классы. Например, класс ДанныеФормыРегистрации, объект которого хранит данные, которые введены в форму. В некоторых фреймворках Форма и ПолеФормы тоже сделаны в виде объектов (то есть, форма регистрации это объект и каждое поле в ней тоже объект).

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

Далее я тебе советую посмотреть задачу про студентов из шапки. К ней есть подробные комментарии, и она научит тебя, как использовать ООП для работы с формами регистрации, базой данных: https://github.com/codedokode/pasta/blob/master/student-list.md

Если тебе лень делать задачу, и ты все схватываешь на лету, то может быть тебе достаточно будет прочесть комментарии к задаче. И пользуясь ими, ты можешь попробовать сделать ООП-регистрацию самостоятельно. Можешь выложить код на гитхаб, я как-нибудь гляну и дам замечания.

Аноним 18/08/21 Срд 18:10:34 2132032116
>>2127788

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

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

Тебе надо разобраться и с вебпаком, и с миксом. И писать код так, как они требуют, и располагать его там, где требуется.
Аноним 18/08/21 Срд 18:12:22 2132034117
>>2125888

Решение верное. Там в одном из банков как раз должно получаться 61268.
Аноним 18/08/21 Срд 18:18:55 2132041118
>>2131876
Да я его спиздить хотел с торрента, не считай меня совсем за дауна.
Аноним 18/08/21 Срд 18:55:09 2132079119
> Schema::create('flights', function (Blueprint $table) {
что такое блюпринт?
Аноним 18/08/21 Срд 19:53:38 2132123120
Аноним 18/08/21 Срд 20:08:18 2132134121
700[1].jpg 121Кб, 700x700
700x700
Есть какая-нибудь книга с паттернами проектирования на пыхе?
Аноним 18/08/21 Срд 20:16:38 2132137122
Аноним 18/08/21 Срд 20:48:20 2132160123
Как адекватно работать с MySQL через JS? Я имею в виду, как получать данные из базы в JS и обратно (без Node.js)? Совсем запутался нахуй, помогите устаканить в голове.

Есть данные в БД, как до них достучаться и, скажем, засунуть их в квиз? Квиз написан на JS, и я хочу при вводе данных в поля в WordPress передавать вопросы в вопросник JS. Я сделал так - непосредственно на странице сайта, которую я натягиваю на WP, объявил переменную в JS и засунул в нее переменную php, которая содержит массив данных полей. Получилась строка. Строку я превратил в массив и далее вычленил элементы уже в вопросник. Но сука, я чувствую, что так не должно быть. То, как я это сделал, это блять неправильно и вообще неадекватно.

Думаю что есть вариант через fetch, но как через него достучаться до БД?

Подскажите плз нормальный человеческий способ, как в реальной практике происходит взаимодействие JS с базой данных (скажем, на WP).

Аноним 18/08/21 Срд 21:04:52 2132168124
>>2132017
>>2132017
>Пользователь (User) со свойствами: email, хеш пароля, дата регистрации, имя итд. И методами: задать Email, узнать Email, задать пароль, проверить пароль итд.
- СохранятельПользователей (UserTableGateway) - это класс, который умеет сохранять объекты пользователя в БД или извлекать из нее. У него будут методы вроде вставитьПользователяВБазу, обновитьПользователяВБазе, найтиПользователяПоEmail.
Я так понимаю класс Save это отдельный файл и тут нужны будут намспейсы и use ?
Аноним 18/08/21 Срд 21:31:44 2132203125
>>2132032
>без вебпака подключть реакт
Почему без вебпака? У меня микс должен работать вместо вебпака, микс автоматически использует вебпак, он создан для упрощения работы с вебпаком, подразумевается там ручками ничего не надо настраивать - надо делать все через микс.
Аноним 18/08/21 Срд 22:14:07 2132239126
>>2132160

Давай разобьем вопрос на несколько частей:

1) как передать в JS начальные данные при загрузке страницы. Тут правильным способом будет получить эти данные в PHP при загрузке страницы, преобразовать их в JSON и явно передать в нужную функцию:

<script>
initQuiz(<?= json_encode($data); ?>);
</script>

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

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

Иногда этот подход не подходит, так как у нас скрипт загружается асинхронно и функцию initQuiz мы вызвать не можем (так как скрипт еще не загрузился). В таком случае мы можем создать внутри страницы "остров" с JSON-данными. Скрипт при загрузке находит в теле страницы этот остров и берет данные из него:

<script id="quizData" type="application/json">
<?= json_encode($data); ?>
</script>

Обрати внимание на атрибут type: он говорит, что это не яваскрипт, а JSON и браузер не будет пытаться его выполнить.

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

2) Как в процессе работы скрипта получать или отправлять данные без перезагрузки страницы? Тут нужны аякс-запросы. Ты отправляешь запрос на сервер, а там PHP-скрипт его обрабатывает как нужно. Логично отправлять данные на сервер как данные формы, а принимать с сервера ответ в формате JSON.

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

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

Аноним 18/08/21 Срд 22:17:46 2132243127
>>2132168

Почитай рекомендации оформления кода PSR-1 и PSR-12 (PSR-1 есть на русском языке). В них записано, что каждый класс помещается в отдельный файл, и кроме класса в этом файле не должно быть ничего постороннего. Имя файла должно соответствовать имени класса с точностью до регистра букв.

Почитай рекомендации и следуй им.

Что касается неймспейсов - выбор за тобой. Если у тебя весь проект состоит из 5 файлов, ты можешь просто сложить их в одну папку и не использовать неймспейсы. Если проект больше, то стоит добавлять подпапки и неймспейсы.
Аноним 19/08/21 Чтв 03:17:45 2132388128
>>2131978
>>2131989
>>2132017
>>2132239
>>2132243

Анончик, я хоть и мимо проходил, но хочу сказать тебе спасибо за такие развёрнутые ответы, они очень контрастируют с ответами-смехуёчками других ананасов. Множество тебе чаёв!
Аноним 19/08/21 Чтв 04:45:25 2132409129
Аноним 19/08/21 Чтв 12:10:28 2132756130
>>2132041
Ну попробуй, скачай, посмотри пару лекций. Скажешь потом, насколько информативно.
Аноним 19/08/21 Чтв 15:40:15 2132961131
>>2132409
Да, но посмотрев на го я понял что пхп возможно и не такое говно
Аноним 19/08/21 Чтв 15:42:50 2132967132
>>2132409

Да, но попробовав Перл, понял что пхп ниче так.
Аноним 19/08/21 Чтв 15:43:31 2132968133
>>2132239

Спасибо. Да, фетчи когда я изучал, то создавал php файл, который как бы выступает мостом между JS и базой данных.

По поводу варианта получать данные сначала в PHP и потом их преобразовывать я тоже понял, но не понял только вот чего: что значит "php скрипт на стороне сервера"? Вот у меня есть на локалхосте условный php-файл. А на реальном сервере при переносе он точно так же и хранится? То есть мне нужен тупо php-файл обработчик?
Аноним 19/08/21 Чтв 15:47:08 2132974134
>>2132967
Изначально пхп это перл для даунов, но потом его покусала жаба и понеслось.
Аноним 19/08/21 Чтв 16:38:23 2133042135
Аноним 19/08/21 Чтв 20:12:18 2133308136
>>2132160
А чем нода тебе не угодила?
Ставь пакет и вуаля
Аноним 19/08/21 Чтв 23:51:24 2133566137
Аноним 20/08/21 Птн 02:26:32 2133643138
>>2132968

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

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

"Код на стороне сервера" значит php-скрипт или, например, приложение на Node.JS.

Я написал, что в MySQL нельзя залезть JS-скриптом из браузера. Но есть базы данных, в которые залезть можно из браузера без использования PHP-кода. Это severless базы данных вроде FireBase. Но она может быть платной, и документация к ней на английском и разобраться в ней может быть непросто.
Аноним 20/08/21 Птн 12:57:06 2133917139
>>2133643
Как обеспечивается безопасность при работе с субд из браузера пользователя? Что мешает считать всю базу, или стереть её?
Аноним 20/08/21 Птн 13:47:18 2133997140
>>2133643

Немного другой вопрос был. Код на стороне сервера - в смысле, это просто php_файл? То есть вот на сервере у меня файлы сайта, и среди них есть файл обработчик.php, который занимается обработкой запросов из JS. Правильно понял?
Аноним 20/08/21 Птн 13:47:24 2133998141
>>2133917
Работа с данными осуществляется не на уровне браузера, а через серверный слой приложения (в нашем случае это РНР), в котором реализована логика всех запросов, доступных пользователю.
Аноним 20/08/21 Птн 15:00:22 2134103142
>>2133997
>Код на стороне сервера - в смысле, это просто php_файл?
В простейшем случае это может быть 1 пхп файл + сервер, который обрабатывает поступающие запросы и перенаправляет к пхп файлу
Аноним 20/08/21 Птн 15:41:54 2134146143
Как вам 8.1 версия?
Итс революшн,Джонни!?
Аноним 20/08/21 Птн 17:56:41 2134314144
>>2133998
>>2133643
> Но есть базы данных, в которые залезть можно из браузера без использования PHP-кода.
Аноним 20/08/21 Птн 19:56:32 2134447145
>>2133566
Повторяю, что не говно?!
Почему Почему 20/08/21 Птн 20:39:56 2134484146
Почему (int)(float)PHP_INT_MAX; минусуется в --9223372036854775808 ?
Аноним 20/08/21 Птн 21:25:22 2134546147
Аноним 21/08/21 Суб 02:33:53 2134831148
>>2133997

Да, это файл-обработчик.

>>2133917

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

>>2134484

Это сочетание особенности float с особенностью представления отрицательных чисел в int.

float - это приблизительный тип. В 64-битном PHP float сохраняет только 15-16 значащих цифр числа и порядок. То есть, он хранит число в виде M * 2 N (где M и N целые). Ты можешь убедиться, попробовав сделать var_dump(1000000000000000000000123.0) - "123" на конце потеряется, так как PHP сохраняет только первые 15-16 цифр. И PHP выведет 1e24 - то есть, 1 * 1024. Последние цифры потерялись.

Если хочешь узнать подробнее, погугли IEEE754. Этот стандарт описывает, как числа с плавающей запятой преобразуются в двоичный вид.

Когда ты преобразуешь PHP_INT_MAX в float, точности не хватает, чтобы сохранить все цифры числа и последние цифры округляются в большую сторону. Попробуй сдампить var_dump(PHP_INT_MAX) и var_dump((float)PHP_INT_MAX); и сравнить числа. Ты увидишь различие из-за округления.

Округление происходит в большую сторону и число становится больше PHP_INT_MAX.

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

Ты можешь сдампить var_dump((int)1e19); и увидеть отрицательное число.

Но почему при переполнении int получается отрицательное число? Это особенность хранения int в компьютере. Рассмотрим ячейку памяти размером в 1 байт. В ней можно сохранить число от 0 до 255. Если мы хотим хранить в ней еще и отрицательные числа, то мы должны придумать какой-то способ, как их закодировать. Можно, например, договориться так: числа от 0 до 127 обозначают сами себя, а числа от 128 до 255 обозначают -128 ... -1 соответственно. Это называется "дополнительный код" (дополнение до 2).

Почему придумали именно такую систему? Потому что с ней компьютеру просто и удобно складывать и вычитать положительные и отрицательные числа. Человеку такое представление не очень удобно, но он потерпит.

Теперь если мы в такую ячейку попытаемся записать слишком большое число, например число 129, то при чтении оно будет воспринято как -127, так как мы ранее договорились, что числа > 128 обозначают отрицательные числа.

Вот примерно то же самое происходит при преобразовании в int. Число слишком большое и оно попадает в область, которая представляет отрицательные значения.

Почитать подробнее про дополнительный код: https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4


Аноним 21/08/21 Суб 12:22:27 2135003149
Swoole стабильная либа?
Аноним 21/08/21 Суб 12:25:15 2135009150
Аноним 21/08/21 Суб 12:28:16 2135011151
Аноним 21/08/21 Суб 12:30:12 2135014152
>>2135011
За ноду миску лиса не дают и кошачий жена нет.
Аноним 21/08/21 Суб 12:31:45 2135016153
Аноним 21/08/21 Суб 12:35:55 2135019154
>>2135014
А если серьезно то бери и совмещай голанг с пхп если потребность есть. А не рассматривай всякие ультрамаргинальные говны типа свуле или реакт пхп. Нода для фулстеков обслуживающих экономных кабанчиков с малыми или средними проектами.
Аноним 21/08/21 Суб 14:51:36 2135174155
image.png 22Кб, 1057x123
1057x123
image.png 27Кб, 1058x169
1058x169
Умоляю, расшифруйте что это значит. То что нужно опускать закрывающие теги если в файле только пхп это понятно. Но о каких http-загаловках после подключения к ответу сервера идет речь? Что за буферизацию и "конце частей ответа, сгенерированного подключаемыми файлами. "
Аноним 21/08/21 Суб 14:55:20 2135177156
>>2135174
Если у тебя начался вывод, то уже нельзя делать header, потому что пошло тело ответа.
Про буферизацию хуй знает.
Аноним 21/08/21 Суб 22:10:20 2135679157
image.png 1641Кб, 1024x1313
1024x1313
Норм книга для вката в пыху?
Аноним 22/08/21 Вск 00:35:45 2135792158
>>2135174

Если ты не знаешь, что такое HTTP-заголовки, то тебе надо подучить протокол HTTP и лучше понимать, как браузер взаимодействует с сервером, на котором запускается PHP скрипт. Прочти, например, этот урок: https://github.com/codedokode/pasta/blob/master/network/http.md

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

Когда твой PHP-скрипт генерирует ответ, то он сначала должен выдать HTTP-заголовки, если они нужны, а только потом выводить HTML-код страницы. Если ты вывел хоть один символ, то заголовки выдавать уже поздно.

Допустим, ты инклюдишь файл с таким содержанием:

<?php код ?> тут несколько пробелов

Все, что находится за пределами тегов, PHP выводит как есть.

При подключении такого файла PHP выведет эти несколько пробелов. И значит ты не можешь уже отдавать заголовки.

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

----

Буферизация - это режим в PHP, когда выводимые через echo или другим способом данные не отправляются в браузер, а перехватываются и сохраняются в переменную. И ты с ними можешь делать что угодно. Например, ты можешь таким образом вырезать из HTML-кода лишние пробелы, чтобы уменьшить размер страницы.


В примечании написано, что если ты используешь буферизацию то эти лишние пробелы попадут в захваченный контент и могут как-то помешать тебе.
Аноним 22/08/21 Вск 00:38:20 2135794159
>>2135679

Такие книги пышут устаревшим процедурным кодом без ООП, полным уязвимостей. Там тебя не научат ни ООП, ни современным фреймворкам.

Если ты хочешь, то учи по книге, но потом возьми нашу задачу про студентов из ОП-поста и по ней научись современным подходам.
Аноним 22/08/21 Вск 00:58:05 2135799160
>>2135794
понял, спасибо за совет
Аноним 22/08/21 Вск 18:12:38 2136705161
6.jpg 15Кб, 760x70
760x70
Аноним 22/08/21 Вск 18:39:38 2136744162
>>2136705
Ты откуда такой вылез?
Аноним 22/08/21 Вск 18:45:46 2136748163
Аноним 22/08/21 Вск 18:54:41 2136753164
>>2136748
Это какая-то дохуя передовая фича, на этом сайте видимо напиздели, что там 8.
Но я бы лучше не делал ничего по этому видосу, там всё очень плохо.
Аноним 22/08/21 Вск 18:55:18 2136754165
>>2136748
Именованные аргументы только с 8 версии
Аноним 22/08/21 Вск 19:17:53 2136775166
>>2135794
А откуда он научится современным подходам?
Аноним 22/08/21 Вск 20:23:52 2136853167
Аноним 22/08/21 Вск 20:25:28 2136855168
>>2136853
Ив каком месте в мануале 2010 года современные подходы?
Аноним 22/08/21 Вск 22:51:06 2136996169
как учить пыху? дохуя книг и видосов. щас уже 8 версия есть, а книги только 7, если русские брать.
англ пока что подтягиваю, не пойму многого из ен книги.
можете что-нибудь из ру сегмента покидать, уважьте, пожалуйста
Аноним 22/08/21 Вск 22:59:25 2137002170
>>2136855
хрен его знает, ООП оъесняют, паттерны показывают, что да как. ДУмаю тут более менее современные данные
Аноним 22/08/21 Вск 23:01:23 2137003171
>>2136996
шапка есть, а там паста. Можешь еще и http://phpbook.ga/ сюда зайти
Там и книги рекомендуют
Аноним 22/08/21 Вск 23:05:34 2137009172
>>2137003
да, по шапке уже взял инфу. больше хочется, наверно, сделать упор на какой-то пет-проект на голой пыхе и мускл.
Через полгодика в ларавельку сунуться и там уже развиваться.
Не подскажешь ещё, в 25 лет не поздно это делать? Сейчас как вообще смотрят на возраст у вкатунов на пыхе?
Аноним 22/08/21 Вск 23:08:37 2137013173
>>2137009
Поздно. Делай подтяжку лица, фейковый паспорт, может тогда повезет прорваться.
Аноним 23/08/21 Пнд 00:37:00 2137060174
>>2137009
должно быть пофиг на этой
Аноним 23/08/21 Пнд 00:41:03 2137062175
>>2137009
Максимум на голом пхп с мускулом можешь сделать примитивную гостевую книгу чтобы тупо посмотреть как Коннект к бд сделать и примитивные инсерты / селекты / делиты запилить + немного хтмл и формочки ну ещё можешь ажакс на том же джейквери посмотреть - для начала его за глаза хватит. Это задача на пару вечеров / неделю.
Ты заебешься орм и mvc велосипедить. Запутаешься через пару недель в своем же коде и просто потеряешь время.
Пхп без фреймворков нахуй не всрался если это конечно не консольный скрипт.
Так что сразу учи ларавель.
Аноним 23/08/21 Пнд 00:46:18 2137064176
>>2137062
Спасибо за совет. Я просто не до конца правильно выразился. Я хочу для начала голую пыху нормально знать. Циклы, условия, ооп базово. (я это итак знаю, просто надо вспомнить именно синтаксис пхп, в вузе всё-таки пилил круд-приложения на пыхе и мускл).
Просто привык делать всё от самого начала. Это как смотреть сериал. Смотрел 5 лет назад сериал 4 сезона. А сейчас уже их 10. Я не буду продолжать с пятого. Я буду с первого смотреть заново, т.к. всё забыл.
Также и тут. Базовый синтаксис знаю, но без углублений. Думаю месяц хотя бы на пхп и мускл потратить и дальше наверно в ларавельку.
Аноним 23/08/21 Пнд 00:49:11 2137066177
N
Аноним 23/08/21 Пнд 02:29:53 2137092178
>>2136748

По твоей ссылке человек подставляет переменные прямо в SQL-запрос и создает SQL-инъекцию. Чтобы не совершать таких ошибок, прочти наш урок про SQL-инъекции: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md

При выводе он не экранирует данные, что создает угрозу XSS. Прочти еще и этот урок: https://github.com/codedokode/pasta/blob/master/security/xss.md

SQL-код он пишет прямо в шаблоне.

Если тебя интересует создание CRUD без фреймворков, используя ООП и современные подходы, прочти комментарии к задаче про студентов: https://github.com/codedokode/pasta/blob/master/student-list.md Это тот же самый CRUD по сути.

У нас, конечно, не веселые видео, а скучный текстовый формат, но он поможет тебе вправить мозги на место после таких уроков.
Аноним 23/08/21 Пнд 02:31:26 2137093179
>>2136855

В нашей задаче про студентов объясняются и правила работы с формами, и ООП-модели, и паттерны вроде DI или TableDataGateway. Вполне современно, знакомит человека с паттернами, которые используются во фреймворках, или чего-то еще не хватает?
Аноним 23/08/21 Пнд 02:34:16 2137095180
>>2137064

Ты правильно рассуждаешь. Если ты с нулевыми знаниями возьмешься за фреймворк, ты просто утонешь в его сложности. Фреймворк это абстракция на абстракции. Для изучения основ ООП я тебе советую учебник из шапки, в нем глава ООП, в ней задача Вектор. Для освоения CRUD я тебе советую задачу про студентов из шапки, к ней идут подробные комментарии. При этом ты можешь параллельно читать любые другие уроки и учебники.

После студентов можно браться за фреймворки.
Аноним 23/08/21 Пнд 10:44:11 2137236181
>>2137095
Спасибо большое за советы.
Аноним 23/08/21 Пнд 11:47:03 2137306182
>>2120804 (OP)
Мне кажется, или карта знаний для джуна в шапке сильно раздута?
Аноним 23/08/21 Пнд 15:08:00 2137570183
Есть кто без опыта, но уже выучил верстку, JS и пыху? Есть задания для вас. Плачу немного, но зато будет для вас на чем потренироваться и подзаработать во время обучения. Тг @phpjswork
Аноним 23/08/21 Пнд 19:41:35 2138002184
Аноны, как в ларавеле css подрубить? href="/resources/css/app.css" нихуя не работает. Запущено через пхп артизан серв как http://127.0.0.1:8000/
Аноним 23/08/21 Пнд 19:54:21 2138012185
>>2138002

В ларавеле публичная папка называется public и файлы за ее пределами недоступны. Так что твой CSS надо класть туда.

Ты также можешь использовать https://laravel.com/docs/8.x/mix который скомпилирует и опубликует файлы из других папок в public.
Аноним 23/08/21 Пнд 19:59:03 2138017186
>>2138012
Понял, спасибо. Я просто увидел, когда вьюшки создавал, что в папке resources есть папка css, и с какого-то хрена решил, что оно должно там храниться лол.
Аноним 23/08/21 Пнд 22:35:26 2138152187
>>2137093
Как делать пост и гет с точки зрения безопасности и для продакшана
Аноним 24/08/21 Втр 12:24:34 2138535188
>>2138152
Для гета делаешь гет, для поста делаешь пост. Ochen продакшенно, very безопасно
Аноним 24/08/21 Втр 12:46:36 2138570189
Screenshot 2021[...].png 7Кб, 893x50
893x50
>>2138535
И таких комментарий почти под каждым видео на тему авторизации и отправки форм
Аноним 24/08/21 Втр 12:54:30 2138583190
>>2138570

На мой взгляд, это неправильный подход. Я такое видел не только в видео на Ютубе, но и в книгах: автор ради упрощения не объясняет про безопасность, и выкладывает код с уязвимостями. И между строк где-нибудь добавляет "не забудьте проверять данные в реальном коде". Понятно, что человек просто пропустит это замечание и приучиться писать неправильный код.

Я не обхожу тему безопасности. Например, в нашей задаче про студентов даются ссылки на уроки про XSS/CSRF/SQl-инъекции. В примерах кода работы с БД я использую плейсхолдеры. В уроке про шаблонизаторы я использую экранирование.

Потому я вам советую после уроков с ютуба делать нашу задачу про студентов и внимательно прочесть все замечания к ней. Тогда вы научитесь писать нормально.
Аноним 24/08/21 Втр 12:56:51 2138586191
>>2138570
Обычно так показывают веб часть core php, которым на практике никто не пользуется, а сидят на фреймворках, в которых это учтено.
Нахуя это делать и смотреть - другой вопрос.
Аноним 24/08/21 Втр 12:57:39 2138587192
>>2138152

У меня есть уроки по самым распространенным уязвимостям. Там объясняется, как от них можно защититься. Прочти их все:

Как хранить пароли: https://github.com/codedokode/pasta/blob/master/security/password-hashing.md
SQL-инъекция: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
Уязвимость XSRF: https://github.com/codedokode/pasta/blob/master/security/xsrf.md
Уязвимость XSS: https://github.com/codedokode/pasta/blob/master/security/xss.md

Если после прочтения будут вопросы, спрашивай.
Аноним 24/08/21 Втр 12:58:34 2138589193
>>2138586

Это неправильный подход. Нельзя в качестве примера давать код с уязвимостями.
Аноним 24/08/21 Втр 13:01:11 2138593194
>>2138589
Возможно. В прниципе, для тех же иньекций это просто решается.
А обвешивать какой-то учебный пример обработкой ошибок и прочей хуйней в десять раз больше самого примера тоже как-то уныло.
Аноним 24/08/21 Втр 19:09:04 2138974195
Аноны, сейчас вот модно на крупных сайтах всякие страницы редиректы типа https://youtube.com/redirect или https://vk.com/away.php

Хочу сделать такую же типа site.ru/redirect.php и с помощью гет параметров передавать в него ссылку куда направлять человека, и у меня ВСТАЛ вопрос, а что должно быть в файле redirect.php чтобы всё по красоте, я так понимаю это заголовки типа
header('X-Robots-Tag: noindex, nofollow');
header('Location: http://2ch.hk');
И всё? Мне надо чтобы поисковики на это шишкой не встали и чтобы чего лишнего наружу не передать, по хорошему бы ещё рефер удалить, помню раньше были такие сайты типа удаляют рефер и прочую хуйню когда переходишь по ссылке через их редирект, подскажите а как правильно собрать redirect.php, чё туда необходимо
Аноним 24/08/21 Втр 20:41:40 2139076196
А зачем нужны CSP заголовки? Ну то есть понятно, что они не дадут злоумышленнику эксплойтить xss, если он на сайте есть. Но не логичнее же бороться с причной, а не последствием? Использовать их против кликджекинга тоже как-то сомнительно, ведь для этого есть X-Frame-Options
Аноним 25/08/21 Срд 00:08:17 2139274197
аноны, есть длинная ссылка которая прячется за bit точка ly, как заставить php перейти по сокращённой ссылке, получить длинную и получить из неё домен?
Аноним 25/08/21 Срд 00:19:18 2139279198
>>2139274
Берешь курл, делаешь гет или хед, а потом извлекаешь заголовок location.
Аноним 25/08/21 Срд 01:41:46 2139298199
>>2139279
курл сам по 10050 редиректов перейдёт до конечного домена?
Аноним 25/08/21 Срд 01:59:03 2139300200
>>2139298
Там обычно один редирект. Но можно включить followlocation, тогда пойдет сколько угодно.
Аноним 25/08/21 Срд 10:22:11 2139445201
>>2131705
смотри Игоря Борисова, он есть на нонейме вроде. Там курс по 5.6 пыхе, но базу вроде не плохо подает да и шутейки есть.
Аноним 25/08/21 Срд 10:40:41 2139470202
>>2138974
Бамп

Суть: хочу чтобы ссылки на внешние сайты были вида site.ru/redirect.php?to=2ch.hk

Что должно быть в файле redirect.php помимо кода редиректа header Location аноны?

Чтобы всё было как положено и не было подозрительно или плохо для поисковиков
Аноним 25/08/21 Срд 14:36:12 2139716203
>>2139076

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

Правда, если на сайте есть инлайновые скрипты, нам придется разрешить unsafe-eval, что ослабляет защиту.

CSP повышает стоимость нахождения уязвимости. Условно, без CSP уязвимость можно найти за X времени, а с CSP ее найти труднее и надо 10X времени. Соответственно, поиск уязвимости становится менее привлекательным для хакера и он пойдет лучше атаковать сайт без CSP.
Аноним 26/08/21 Чтв 16:27:50 2140882204
Приобрел домен phpclub.tech и настроил SSL, теперь регистратором является не безымянная компания, а domains.google;
Аноним 26/08/21 Чтв 20:44:26 2141196205
PDd7BwSdPo8.jpg 111Кб, 630x878
630x878
>>2138587
Хорошо, спасибочки
Аноним 27/08/21 Птн 14:58:13 2141715206
>>2139445
Надеюсь хотя бы он не говорит в конце что так делать нельзя как он показал?
Аноним 27/08/21 Птн 21:05:39 2142092207
PHP может быть и не самый плохой язык (Перл на порядки хуже, поверьте мне, работавшему с легаси на нем), но он явно не предназначен как ЯП общего назначения. Ибо он задизайнен для разработки веб-страниц (о чем говорит его template like синтаксис, суперглобальные переменные $_GET, $_POST, функции для изменения глобального состояния http-ответа и пр.) и по-канону работать должен как cgi-скрипты, вызываемые веб-сервером. То что его пытаются натянуть на классические приложения и сервисы - ето не более чем попытка кабанов сдешевить на разработке (в ту же топку другие веб-технологии а-ля JavaScript фреймворки для разработки GUI). Ведь гораздо дешевле обойдется пхп-шник который на Нотепад++ что-то рабочее наваяет за месяц, чем C++ Qt, Java Spring разработчики какие-нибудь за 4 месяца. И пофиг что сайты по продаже носков и GUI приложения типа CRM, сервисы по обработке платежей - совершенно разные по архитектурной сложности, нагрузке. В итоге получаем зачастую кривой кусок г..на, который в цикле делает по 100 запросов в SQL базу, из-за чего юзер ждет отклика от формы отправки заявки какой-нибудь 5 секунд при недиалапном интернете. А потом и вовсе 502-ая всплывает по нескольку раз. Щас правда часть бизнес-логики, не критичную к сесурити, переносят на фронтенд, но и там зачастую тот же не айс со 100 запросами к сервисам в секунду и пр.

А всё зачастую потому, что не очень шаристые в IT кабаны думают что веб каким-то магическим образом ускорит разработку программы в несколько раз ("ты вон какой форум за месяц можешь заебенить, давай также заебенишь CRM нам?"). Платформы разные да но архитектура системы остается одной и той же (если не разносить ее части по эмбеду, конечно).

Отсюда и дроч на всякие MVC, роутинги внутри приложения, монструозные фреймворки в мире PHP.
Аноним 27/08/21 Птн 21:17:18 2142100208
>>2142092
Что хотел сказать - нихуя не ясно.
Фреймворки используют, потому что искаробочный веб сразу превращает всё в легаси, каковым он и является. Это хуйня из 90-х, подходы изменились за прошедшее время.
Аноним 27/08/21 Птн 22:00:48 2142165209
>>2142092
Да да да. Пхп говно. Все в этом треде это хорошо знают.
Аноним 28/08/21 Суб 01:48:31 2142369210
Аноним 29/08/21 Вск 15:09:59 2143774211
>>2140882

О, отлично, что архив заработал.
Аноним 29/08/21 Вск 15:17:14 2143788212
Как грамотно исп связку пхп и хтмл?
Допустим простая админ панель
Через реквер вставляем внешний код который читает БД или пилим функцию чтения и там как то прикручиваем хтмл,но опять же в хтмл как то надо вывести данные
Аноним 29/08/21 Вск 16:00:01 2143836213
>>2142092

Не, ну если нужно чтобы приложение было доступно со многих устройств (а пилить одно и то же под разные платформы дорого) то веб хороша как платформа. А вот приложение которое заточено только под десктоп, но работающее под вебом- это тупо попытка сэкономить на разработке, не понимая в чем именно экономия по времени у веба.
Аноним 29/08/21 Вск 21:31:58 2144122214
Аноним 30/08/21 Пнд 15:21:44 2144715215
Здрасте, я тут ньюфаг, с вопросом. Сколько времени вам потребовалось чтобы вкатиться?
Аноним 30/08/21 Пнд 15:22:53 2144719216
>>2144715
Вопрос отменяется, я прочитал оп-пасту
Аноним 31/08/21 Втр 01:59:04 2145343217
>>2142092
>не очень шаристые в IT кабаны думают что веб каким-то магическим образом ускорит разработку программы в несколько раз ("ты вон какой форум за месяц можешь заебенить, давай также заебенишь CRM нам?"). Платформы разные да но архитектура системы

Бизнес думает проектом: его надо сделать и вписаться в ресурсы. Плохое качество может получаться из-за низкой квалификации веб-макак. В то же время, множество проектов на РНР успели выросли до глобальных, финансово успешны и устойчивы, понемногу оптимизируют код.
Аноним 31/08/21 Втр 23:05:34 2146174218
>>2145343
>В то же время, множество проектов на РНР успели выросли до глобальных, финансово успешны и устойчивы, понемногу оптимизируют код.
Привет, а можно пару примеров таких проектов (и на чем именно они написаны)?
Аноним 01/09/21 Срд 03:07:22 2146320219
Plxs9j3Fpg.jpg 249Кб, 1080x1188
1080x1188
>>2146174
Привет, не буду заморачиваться и отбирать, отвечу тем что на ум пришло (на чем именно -- ты в треде РНР):
facebook
wikipedia
vkontakte
badoo
tumblr
dostavista.global
tilda.cc

в РФ это (помимо прочего) все крупные e-commerce: Lenta, Magnit, Leroy Merlen, MTS, etc.

Да нет смысла даже перечислять, до сих пор 80% веба это PHP

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

пикрандом.
Аноним 01/09/21 Срд 15:07:04 2146875220
Объясните, плиз, почему ларавель не читает регулярное выражение в роуте:

Route::get('#/[a-z]+-to-[a-z]+#', function () {
return view('welcome');
});


Вроде на сайтах по проверке регурярок все правильно, но не работает. Где я проебался?(
Аноним 01/09/21 Срд 22:14:44 2147401221
>>2146320
Бро. Нет смысла отвечать на такие посты, ибо некоторые не понимают что пхп это всего лишь инструмент, у которого свои минусы и плюсы.
01/09/21 Срд 22:53:05 2147467222
>>2146320
>facebook
>vkontakte
Там под капотом уже далеко не простой пхп, свои интерпритаторы, ВК даже в опенсорс его выкладывали там была штука которая компилировала пхп в код C++ и тот уже компилировали для прода осталось прихуярить монитор
>badoo
Эти затейники ещё те, мало того что хайлоад, так ещё на пхп написали нейронку, которую блюрит дикпики в личных сообщениях сколько же они хуев увидели при разработке
>Magnit, Leroy Merlen, MTS
Смотри вакансии, там пыхи давно уже нет, более того МТС давно уже отказался от магазинов на битриксе, у них раньше много чего на нём крутолось. А у магнита вроде всегда питоноджависты были.
Аноним 02/09/21 Чтв 10:58:18 2147744223
Почему блядский блейд не вставляет нормально переменную в титул через @section('title', '{{$variable}}.')? Выводит <?php echo... итд.
Аноним 02/09/21 Чтв 18:22:26 2148164224
Аноним 02/09/21 Чтв 18:23:15 2148165225
Аноним 02/09/21 Чтв 20:04:36 2148234226
>>2146320
>на чем именно

Я имел в виду фреймворк. Не все ведь эти проекты написаны на чистом пхп.

Аноним 02/09/21 Чтв 20:05:51 2148235227
>>2147401
Я спрашивал абсолютно без сарказма.
Аноним 02/09/21 Чтв 21:20:59 2148305228
>>2145343
>Плохое качество может получаться из-за низкой квалификации веб-макак.

А зачем их тогда бизнес нанимает? Правильно, чтобы сдешевить. Те же джава-разработчики выйдут дороже.
Аноним 02/09/21 Чтв 21:25:23 2148313229
>>2148305

Главная проблема не в "веб-макаках" а в жадности кабанчиков, которые целятся не на те технологии, когда хотят запилить "сурьезный софт", для чего пхп плохо подходит изначально, ибо заточен под сайты.
Аноним 03/09/21 Птн 15:44:36 2149039230
А можно ещё сил[...].jpg 104Кб, 576x994
576x994
Что не так с этой IDE ?
Аноним 03/09/21 Птн 15:58:46 2149052231
>>2149039
Это не Notepad++ и даже не VSCode, че ты хотел, эклипса?
Аноним 03/09/21 Птн 15:59:26 2149054232
>>2149039
Ты её недооцениваешь, она за милую душу все 4+ гига оперативы сожрёт.
03/09/21 Птн 17:50:59 2149174233
>>2149039
Она на жабе крутиться и жрет всю оперативку, я пока 16 гигов не воткнул такая же хуйня была
04/09/21 Суб 09:50:50 2149660234
15099532413180.webm 6427Кб, 1280x720, 00:00:28
1280x720
>>2147467
>Смотри вакансии
чо мне там смотреть, все эти компании сейчас сами звонят мне и коллегам и хотят PHP-разрабов

>более того МТС давно уже
https://shop.mts.ru/bitrix/admin/

Короче, цена твоей экспертизы для меня оказалась крайне невысока.
04/09/21 Суб 09:55:18 2149662235
>>2148234
Все эти проекты были написаны на чистом пхп.
04/09/21 Суб 09:56:24 2149663236
Аноним 04/09/21 Суб 17:39:21 2150083237
Как вообще в ларавеле в роутере разбираются параметры url, те что после знака вопросика и равны чему-то "/div1/div2?param1=10&param2=20"? Гугл молчит, или оно не предусмотрено вообще ларавелем и нужно все сделать так чтобы все через слеши было в виде опциональных параметров? "/div1/div2/{param1?}/{val1?}/{param2?}/{val2?}"
Аноним 04/09/21 Суб 17:47:53 2150087238
>>2150083
Это query string, он кладется в объект Request, не считай квери стринг частью адреса полноценной, роутеру чисто похуй на нее. Достать из реквеста надо конкретный нужный параметр в контроллере через $request->get('param'), $request->query(тут самое правильное), Input::get и т.д
04/09/21 Суб 18:09:23 2150100239
>>2149660
Там от магазина вэбморда только осталась, остальное все что у них было переписали давно, где-то на Хабре комментировали. Похожая ситуация у Эльдорадо.
Аноним 04/09/21 Суб 18:16:57 2150107240
>>2150087
От души душевно в душу. И почему в гугле это не выдается, наверное потому что я искал типа "laravel route url parameters", а не query string.
Аноним 04/09/21 Суб 18:18:24 2150108241
t
Аноним 05/09/21 Вск 00:34:14 2150372242
>>2149662
Серьёзно, все на чистом пхп?
Или ты имеешь в виду это: фреймворки написаны на чистом пхп, а значит и проекты, написанные на фреймворке, тоже написаны на чистом пхп?
Аноним 05/09/21 Вск 13:12:36 2150607243
Аноны, такой вопрос. Есть таблица данных, в ней два столбца. Для примера пусть будет название растения и описание растения. Но в эту таблицу пользователи приложения ничего не будут добавлять, только извлекать. То есть админ сайта что добивит, то и будет. Будет ли зашкваром, если вместо таблицы в СУБД я сделаю просто пхп/жс объект?
Аноним 05/09/21 Вск 14:27:56 2150644244
>>2150607
Сто записей тебе в память влезут, а вот 10к - уже не влезут, че делать будешь?
05/09/21 Вск 16:11:54 2150709245
>>2150372
Серьёзно, на чистом PHP.

И это удивительно только для пориджей, а в то время было так: открываешь редактор и начинаешь писать, с первой строки до последней.
Аноним 05/09/21 Вск 16:26:05 2150720246
>>2150709
>И это удивительно только для пориджей

Да что сразу поридж-то, уже и спросить нельзя, чего ругаешься
Аноним 05/09/21 Вск 22:52:51 2151106247
16174184305511.png 1462Кб, 1280x1004
1280x1004
>>2150720
Ну а откуда у тебя в голове предположение, что в приложении всенепременно должен быть некий фреймворк?

Фреймворки тащат с собой overhead, фактор black box, уязвимости и необходимость отслеживания зависимостей и обновлений.

В то время как приложения без них работают годами вообще без вмешательства человека. Но вот "фактор автобуса" в них зашкаливает, основная проблема в этом.
Аноним 05/09/21 Вск 23:01:36 2151108248
>>2151106
Во фреймворках уязвимости детектируются толпой лемингов. В самописной хуйне их вообще никто не учитывает. Это где блекбокс то? В самописной хуйне для новичка. Обновление в самописной хуйне вообще непосильная задача, а во фреймворках даже гайды есть как обновиться.
Аноним 05/09/21 Вск 23:06:23 2151109249
>>2151108
>толпой
Вот именно, поэтому как только в паблик выходит новая уязвимость, боты-сканеры тут же массово хакают все вордпрессы и прочие ларавелы, пиздят данные и расставляют майнеры. Первый день в интернете, что ли?

>никто не учитывает
не суди по себе

Аноним 05/09/21 Вск 23:06:35 2151110250
>>2151108
И во фреймворка компоненты отточены временем и вниманием многих участников, багрепортами, а в самописной системе все существует по принципу и так сойдет.
Аноним 05/09/21 Вск 23:09:19 2151113251
>>2151108
А, ты чел который никогда не ошибается?
Аноним 05/09/21 Вск 23:09:57 2151115252
Аноним 05/09/21 Вск 23:13:11 2151119253
>>2151115
Нет, конечно, таких не существует. Только при чём здесь это?
Аноним 05/09/21 Вск 23:34:06 2151131254
16229621218091.mp4 485Кб, 640x640, 00:00:10
640x640
Учу пхп уже 2 недели с целью вката.

Это ошибка или хороший выбор? По сравнению с жс тем же. Реальный вопрос, я не тролль.
Аноним 05/09/21 Вск 23:41:26 2151134255
>>2151131
Хуево то что для вкатуна чисто пхпэшную работу найти очень трудно. Поэтому совет: если тебя заставляют одновременно несколько обязанностей разных профессий выполнять, делай одно очень хорошо, а на другое забей и делай плохо. Так победим!
Аноним 05/09/21 Вск 23:43:25 2151135256
>>2151131
Смотря сколько у тебя времени и какая цель.

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

Для работы на веб-фрилансе -- хороший, позволяет делать вещи очень быстро, и вакансий полно.
Аноним 05/09/21 Вск 23:49:31 2151142257
>>2151134
Я так понимаю, помимо пхп нужно обязательно знать html, css, js (хотя бы на начальном уровне), sql?
Аноним 05/09/21 Вск 23:59:00 2151147258
>>2151142
Учи пхп и sql И не только запросы. А вообще грамотное представление о СУБД нужно иметь. Чтоб прямо на собесе молодцом. А на всякие вопросы знаешь ксс хтмл, говори да немного знаю, делал... И в первую очередь ищи работу где нет намека на фулстачество. Это, конечно, советы, если ты программист, а не мамкин фрилансер.
Аноним 06/09/21 Пнд 00:09:02 2151150259
>>2150607

Если данных немного и если тебя устраивает необходимость их вручную обновлять, то можно хранить в виде массива или массива объектов.
Аноним 06/09/21 Пнд 12:21:51 2151416260
>>2151135
>Смотря сколько у тебя времени и какая цель.
Проект есть в планах. Для сайтов с большим функционалом и посещением пхп подойдёт или лучше выбрать другой язык?

мимо другой тоже вкатывающийся анон
Аноним 06/09/21 Пнд 17:14:39 2151691261
Аноним 06/09/21 Пнд 17:28:50 2151709262
Добрый день ребята. У меня наметился один вопрос. В общем волею судьбы меня занесло на госпредприятие, где я два года разгребал легаси на пхп и допиливал функционал. Так получилось, что в гос. шаражках не очень много платят, а пошуршав hh в своем городе я нашел какие-то оверзадротские галлеры, которые при устройстве требуют дохера и много и ПХП не в каждой из этих айтишных галер есть. Так вот сам вопрос: как поступать, чтобы не умереть с голоду и не сгнить в госпараше? Есть ли тут аноны, которые совершили переход с пхп в какие-нибудь другие стэки? Трудно ли было?
Аноним 06/09/21 Пнд 18:09:25 2151757263
>>2151416
>>2146320
Тебе этих примеров недостаточно?

Я бы ещё добавил в список почти все таксопарки типа Ситимобил. Всё начиналось с монолита на РНР, и это хорошо.
Аноним 06/09/21 Пнд 18:10:31 2151758264
>>2151709
слуш, ну если ты у себя в деревне вакансии на РНР не нашёл, то земля тебе пухом, братишка
Аноним 06/09/21 Пнд 19:09:54 2151822265
>>2151709
>Есть ли тут аноны, которые совершили переход с пхп в какие-нибудь другие стэки?
Я на рельсы съебал после ларавеля и битрикса по сути тот же MVC фреймворк, всё +/- одинаково, только в рельсах много чего автоматом делается, кроме пары моментов разобрался почти сходу. А вот сам Руби дофига чего умеет и обладает более сахарным синтаксисом, с ним сложнее, как увидел в проекте так и охуел, но потихоньку через месяц освоился. На собеседник никто не дрочил, так за жизнь попиздели, вообще в рельсах рабочих рук не хватает в отличии от пхп и питона тут нет очереди из вкатунов.
Аноним 06/09/21 Пнд 19:11:47 2151825266
>>2151709
Если ты шаришь за PHP и SQL, то вкатывайся в веб-уязвимости и зарабатывай на Bug Bounty.
Аноним 06/09/21 Пнд 19:28:11 2151839267
>>2151822
Рельсы заинтересовали кстати. Коллега по работе получила оффер из ДС на удаленку как раз с Руби связанном. Почитал что ей написали, по сути расписали как тестовое сделать, около недели делать если прикинуть. А ты, анон, как вышел на такую работку? ХХ?
Аноним 06/09/21 Пнд 19:29:03 2151840268
>>2151758
В деревне вакансий много, денег мало дают за это.
Аноним 06/09/21 Пнд 19:33:33 2151844269
>>2151825
Какая-то хардкорная тема, плюс нестабильная в плане дохода.
Аноним 06/09/21 Пнд 21:07:34 2151872270
Зачем усложняют пхп?
Аноним 06/09/21 Пнд 21:21:29 2151877271
Аноним 06/09/21 Пнд 22:27:42 2151923272
>>2151839
В телеге вакансию нашел и постучался хрюше
Аноним 06/09/21 Пнд 22:40:51 2151928273
>>2151872
Его исправляют от даунского изначального состояния, оставляя совместимость с даунизмом.
Аноним 06/09/21 Пнд 22:46:30 2151932274
Как побороть ощущение неполноценности по сравнению со всякими c#-боярами? Ничего не могу поделать с чем-то вроде эффекта самозванца, который вызван постоянной критикой php, снисходительным отношением к нему.
Аноним 06/09/21 Пнд 22:53:37 2151934275
>>2151932
Это примерно одного уровня языки, обслуживающие разные направления.
Шаурмячники снисходительно относятся к нашей шашлычной.
Аноним 06/09/21 Пнд 23:23:36 2151953276
>>2151934

Как им это объяснить? Они ведь так не думают.
Аноним 06/09/21 Пнд 23:24:58 2151954277
>>2151953
Расстегиваешь ширинку ...
Аноним 06/09/21 Пнд 23:27:23 2151958278
Аноним 06/09/21 Пнд 23:39:21 2151964279
16257603377760.png 767Кб, 680x769
680x769
>>2151932
Относительно языков -- по сути, так и есть, C# гораздо быстрее и подходит для широкого круга задач. Единственный плюс РНР -- адовая скорость разработки в вебе (да и то, фреймворки рано или поздно всех уравняют).

Но, справедливости ради, вкатывальщики сосут за копейки на любых языках, и в итоге всех рассудит только рыночек и итоговые банковские счета.
Аноним 07/09/21 Втр 14:53:21 2152293280
Объясните в двух словах, зачем нужны такие фреймворки как Laravel и Symfony
Аноним 07/09/21 Втр 15:06:51 2152310281
>>2152293
> в двух словах
Нахуй
Идешь
Аноним 07/09/21 Втр 15:11:12 2152319282
Аноним 07/09/21 Втр 15:31:31 2152348283
>>2151822
>вообще в рельсах рабочих рук не хватает
Так это ж везде так, разве нет?
Аноним 07/09/21 Втр 16:36:30 2152421284
>>2152348
Есть места где особенно рук не особенно не хватает
Аноним 07/09/21 Втр 16:37:03 2152422285
>>2152421
> не особенно не хватает
особенно не хватает быстрофикс
Аноним 07/09/21 Втр 16:38:46 2152426286
>>2152293
> в двух словах
Чтобы меньше руками писать, плюс фреймворк дает порядок все лежит на своем месте и вокруг фреймворков обычно есть целая инфраструктура с кучей полезных библиотек
Аноним 07/09/21 Втр 16:45:44 2152433287
>>2152421
А в чем это выражается?
Аноним 07/09/21 Втр 22:27:15 2152683288
>>2151822
Ларавель вдохновлён рельсами
Аноним 08/09/21 Срд 00:43:14 2152742289
>>2134146
>Как вам 8.1 версия?
>Итс революшн,Джонни!?

Пока что больновато - многие пакеты еще не поддерживают его, в частности, ramsey/uuid и prophecy, прибитый пока что к phpunit.

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

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

Время покажет.
Аноним 08/09/21 Срд 11:10:34 2152893290
>>2152742
>Он уже не совершит ошибок джавы, он впитывает лучшее из современных языков.
Впитывает из джавы?
Аноним 08/09/21 Срд 11:21:16 2152895291
04.jpg 54Кб, 800x450
800x450
>>2152742
PHP становится мировой валютой ...
Аноним 08/09/21 Срд 20:29:17 2153293292
>>2152893
>Впитывает из джавы?
Вот синтаксис атрибутов из раста впитал, кек. У джавы основной дефект дизайна - это nullable-типы, причем, насколько я помню, сделать тип non-nullable нельзя. Похапе от этого свободен изначально.
Аноним 09/09/21 Чтв 00:40:49 2153410293
>>2152742
>Он уже не совершит ошибок джавы
>Добавлены атрибуты
Литерали жуем трижды пережеванное говно
Аноним 09/09/21 Чтв 02:05:02 2153439294
Изучая MVC встал вопрос, как реализовывать классы для роботы с БД и роутером? Видел разные реализации, в одних объекты таких классов не создаются и просто вызываются статические методы, в других же создается объект и вызывают его методы. Разница не так велика, однако что лучше в данных случаях? И в подобных ситуациях, когда у какого-то объекта есть всего один экземпляр(типо того же роутера или бд), как поступать?
Аноним 09/09/21 Чтв 21:14:49 2154092295
Как вам cakephp,оно вообще живое на про де?
Аноним 09/09/21 Чтв 21:42:05 2154107296
>>2154092
В 2021 есть три php фреймворка: симфони, ларавель и в рашке немного легаси Yii2. В 99% случаев эти три. Нахуя при таких раскладах что-то еще непонятно.
Аноним 10/09/21 Птн 01:06:28 2154190297
>>2153439

Статические методы в таких случаях это плохо, почему, я объясняю в уроке по DI: https://github.com/codedokode/pasta/blob/master/arch/di.md

Если кратко:

- статические свойства "отравляют" код и вынуждают делать его весь в таком стиле. Например, ты сделал класс для работы с БД на статических методах. А ему нужно где-то брать конфиг, получается придется и класс конфига сделать на статических методах
- при использовании статических методов нельзя создать 2 объекта с немного разными настройками. Например, нельзя создать 2 объекта для работы с двумя БД. Или два соединения с одной БД. Это мешает при тестировании. В тестах мы хотим создать объект, попользоваться им и выкинуть, чтобы после этого не осталось никаких следов. У тебя же после теста в классе остается состояние в статических полях и оно может повлиять на другие тесты.
- при использовании статических методов нельзя заменять зависимости. Например, нельзя сделать второй класс работы с БД и подсунуть его вместо основного, так как в коде жестко прописано его имя. Это мешает делать подмену в тестах, а также при использовании сторонних библиотек. Нельзя заменить роутер на другой (например, с функциями отладки).
- вместо того, чтобы получать настройки через конструктор, класс со статическими методами сам их откуда-то берет. Это делает код менее логичным и понятным.

То, что в твоем случае тебе нужен лишь один экземпляр класса - это не повод использовать статические методы или синглтоны. Нужен один экземпляр - создай его с помощью new и используй.
Аноним 10/09/21 Птн 01:29:19 2154195298
123.jpg 9Кб, 600x114
600x114
Когда уже в этом ебаном пиэйчпи сделают установщик, третий раз прописываю его в patch, и отдельно пробовал и точки с запятыми ставил а это говно вне не найдено. Хоть на линукс перекатывайся ради авто установки из терминала
Аноним 10/09/21 Птн 01:59:29 2154199299
Вы меня извините, но я Вас не читал. Это Ваш язык нормальный вариант для того, чтобы свалить с завода? Заебался, ни с какими физтеховскими и вышкинскими программистами конкурировать не хочу. Так хочу без особых амбиций получать чуть больше чем на заводике. У меня сейчас на заводике, в зависимости от выработки зп от 40 до 60 штук.

Я так понимаю этот ваш пхп это именно для разработки внешнего вида сайта. Макака короче. Я так понял все рекламируют питон, но он для крутейших парней которые внутренности разрабатывают, там машинным обучением занимаются и всякой другой мутной темой.
Аноним 10/09/21 Птн 05:54:37 2154217300
>>2154199
Нет, неправильно понимаешь
10/09/21 Птн 06:28:14 2154219301
ларавел.jpeg 52Кб, 849x290
849x290
>>2154199
В двух словах - работы на PHP много, но она почти вся низкооплачиваемая. Бывают редкие исключения. Очень много индусов. Ниша ларавела и фреймворков вусмерть забита индусами. На релокейт в Европу с PHP тоже рассчитывать особо не стоит.
Аноним 10/09/21 Птн 08:51:47 2154242302
>>2154190
>Нужен один экземпляр - создай его с помощью new и используй.

Все это конечно заебись на бумаге. Но в случае конекшена к базе именно что НЕЛЬЗЯ давать возможность создать несколько коннекшенов. И это именно что повод использовать синглтоны и статические методы.
Аноним 10/09/21 Птн 09:10:22 2154250303
>>2154242
>И это именно что повод использовать синглтоны и статические методы.
Всегда спрашиваю про область применимости синглтонов на собесах и как только слышу подобное - собес провален.
Аноним 10/09/21 Птн 09:34:57 2154260304
>>2154250
Нихуя ты жесткий. Ну такому жесткому в самый раз бегать с порванной сракой и считать инстансы коннекшенов к базе когда они закончились. Попутно еще вытирать с лица струю мочи от дба, которому ты сказал что тебе нужно только 50.
Аноним 10/09/21 Птн 14:35:15 2154419305
>>2154195
Ну попробуй в path прописать
Аноним 10/09/21 Птн 15:39:32 2154451306
>>2154195

Во-первых, изменение PATH через настройки компьютера требует перезагрузки, чтобы настройки применились.

Во-вторых, проверь, действительно ли PATH поменялся, командой

echo % %PATH% % (без пробелов между процентами)

>>2154242

Иногда нужен отдельный коннект. Бывает, что баз несколько, например slave/master.

Чтобы не было возможности сделать несколько коннектов, используют DI контейнер и берут соединение из него, а не создают каждый раз вручную с помощью new.

Аноним 10/09/21 Птн 18:13:41 2154583307
Магазины на пыхе чаще в облако закидывают или на хостинг?
Аноним 10/09/21 Птн 19:00:19 2154611308
>>2154451
>используют DI контейнер и берут соединение из него, а не создают каждый раз вручную с помощью new
>Нужен один экземпляр - создай его с помощью new и используй.

Мне поебать че там кто берет или не берет. Какие-то гарантии можно получить только если физически невозможно проебать в никуда коннект. Вас кукаретиков за километр видать. Вы просто не понимаете насколько "некрасивый код" мелкая хуйня в сравнении с отвалом базы.
Аноним 10/09/21 Птн 22:28:18 2154762309
Когда уже офиц документацию перепилят и сделают как в 2021 а не середины 00?
Аноним 10/09/21 Птн 22:33:08 2154768310
>>2154762
Это легаси-защита от смузихлебов.
Заходит такой на сайт и падает в корчах.
Аноним 10/09/21 Птн 22:42:12 2154771311
>>2154768
Причем тут смузихлеб,доки реально надо переделать
Аноним 10/09/21 Птн 23:34:17 2154787312
govno.jpg 31Кб, 614x172
614x172
Через сколько десятилетий завезут поддержку кириллицы?
Аноним 10/09/21 Птн 23:36:51 2154789313
>>2154787
Давно уж завезли в пхп6, перекатывайся.
Аноним 10/09/21 Птн 23:54:00 2154795314
>>2154789
У меня восьмерка, пробовал и через mb_substr b utf-8 прописывать, и через регулярки
Аноним 11/09/21 Суб 01:10:26 2154822315
>>2154260
>бегать с порванной сракой и считать инстансы коннекшенов к базе когда они закончились
Сразу видно дурачка, не умеющего в инъекцию зависимостей. Бегать с порванной сракой будешь ты, когда у тебя случится шардинг, кек.
Аноним 11/09/21 Суб 01:13:21 2154826316
>>2154787
>Через сколько десятилетий завезут поддержку кириллицы?
А что не так с юникодом? Не помню, когда в последний раз испыьывал с ним проблемы.
Аноним 11/09/21 Суб 01:29:14 2154830317
>>2154826
Он у меня не работает
Аноним 11/09/21 Суб 02:10:38 2154834318
Аноним 11/09/21 Суб 02:17:38 2154837319
Аноним 11/09/21 Суб 02:18:58 2154838320
>>2154830
>Он у меня не работает
Ну что тут сказать, видимо, ты уникум. Чему там работать-то, епта? Показывай код.
Аноним 11/09/21 Суб 02:23:08 2154839321
>>2154837
И что ты тут нап показывпешь, отсутствие $_POST при запуске кода в песочнице? Минималистичный пример покажи, чтоб скармливаешь строку mb_* функции, а она плюется.
Аноним 11/09/21 Суб 03:37:13 2154845322
Аноним 11/09/21 Суб 04:04:44 2154850323
>>2154845
Ну всё, смирись значит. Не положено тебе.
Оставь многобайтные кодировки людям, а сам иди дальше.
Ты даже документацию на русском языке осилить не можешь.
Не твоё это.
Аноним 11/09/21 Суб 09:02:28 2154863324
>>2150644
Возьму пики точены...
Аноним 11/09/21 Суб 16:36:15 2155161325
>>2154850
Да понял уже что надо было просто включить расширение php_mbstring.dll в ini, вообще у меня следующий вопрос - какого хуя нужна ручками править расширение у ini файла а потом так же ручками все туда писать? Нельзя сразу сделать все юзерфрендли?
Аноним 12/09/21 Вск 06:28:23 2155631326
2021-09-1209-35[...].png 18Кб, 747x485
747x485
2021-09-1210-27[...].png 293Кб, 476x428
476x428
Выше кто-то писал что будешь не востребованным на пыхе и т.д.. Вот пожалуйста, пример из жизни, знакомого: 1-й скрин его стек технлоогий, второй чем и как он шел к тому, что ща зарабатывает миллионы рублей в месяц.. Так что вот вам мотивации шоль немного.
Аноним 12/09/21 Вск 14:42:15 2155861327
>>2155631
>Лэндинги на пыхе
>Андроид разработка
>Блабла стратап бигдада
>Разработка it инфраструктуры

Я не спорю он может быть охуенным программистом. Пробился и добился, респект.
Только причем тут пхп ебаный? Какая нахуй связь между пхп и миллионами в месяц?
Там у него еще CSS написано. Хули не рассказываешь как доверстаться до миллионов в месяц? Пиздец просто, выбирай кароч норм язык с перспективами, вместо пхп параши, и вперед. Охуенно замотивировал.
Аноним 12/09/21 Вск 16:24:25 2155924328
Что думаете насчёт актуальности php? Сейчас на этом языке стоит большинство сайтов, но будет ли так дальше? Есть ли у php сильные конкуренты?
Аноним 12/09/21 Вск 16:51:41 2155948329
>>2155631
Очередной Славик-затычка в каждой производственной дырке? Таких в пхп много, ибо пхп выбирают для экономии на штате
Аноним 12/09/21 Вск 18:02:32 2155986330
>>2154219
upwork помойка уже как 10 лет не актуальный ресурс поиска работы , для старту переезда в Восточную европу вполне хватит фуллстека (Польша, Чехия ,Германия etc )
Аноним 12/09/21 Вск 18:21:12 2155993331
>>2155924
Присоединяюсь к вопросу анона! Для каких задач нужна пыха? Я понимаю в каких случаях стоит выбрать джаву/котлин, в каких питон, а в каких, допустим, раст.
Руководствуясь чем можно выбрать пыху, кроме аргумента хорошего аргумента, который очень часто решает что мы тут, бля, знаем пыху, поэтому будем на пыхе. Ммм?
не вброс, реально задался этим вопросом, а тут анончик в треде уже его озвучил
Аноним 12/09/21 Вск 23:34:05 2156212332
>>2155924
>Есть ли у php сильные конкуренты?

Питон не смог. Успех голанга в основном держится на хайпе по микросервисам, а он уже проходит потихоньку; у голанга большие проблемы с выразительностью, бизнес-логику на нем писать трудновато. Но и сам похапе меняется быстро, сложно скащать, успеет ли удержать трон. Его проблема - в немодности; общественное мнение все еще вспоминает вордпрессы и битриксы при слове похапе.
Аноним 13/09/21 Пнд 12:16:59 2156434333
>>2156212
>на хайпе по микросервисам, а он уже проходит потихоньку
В твоих фантазиях разве что. Вообще микросервисы конкуренты не пыхе, а крупным проектам на джаве/шарпе. Пыха находится в нише быстрых однопоточных решений не нацеленных на хайлоад. Вместе с джангой, рельсами и нодойжс.
Аноним 13/09/21 Пнд 12:37:09 2156451334
>>2156434
Хуйлоадом хвастаться - это все равно как хвастаться что ты байтоеб на заводе, а не ленивая веб макака 300kk/sec. Просто узкая специфика.
Аноним 13/09/21 Пнд 14:38:37 2156496335
В каком редакторе вы пишете код? inb4 блокнот. Мне бы что-то простенькое, но с подсветкой и всеми необходимыми фичами.
Алсо я через openserver создал папку домена, чтобы открывался именно сайт, а не содержимое типа как в ftp, нужно именно index.php иметь всегда в корневике, верно?
>>2156212
Я слышал про битрикс вроде как дополнение к php, что с ним не так? Вордпресс это вроде совсем другая вещь.
Аноним 13/09/21 Пнд 18:54:27 2156774336
>>2156496
Битрикс - кривая отечественная разработка, состряпанная студентами нулевых.
Аноним 13/09/21 Пнд 19:41:44 2156814337
>>2156774
Я кстати ошибся, это аналогичные продукты, а ты даже не поправил. Вроде как 2/3 сайтов используют КМС, а вы как, разработчики здешние?
Аноним 13/09/21 Пнд 20:50:01 2156886338
>>2156496
>но с подсветкой и всеми необходимыми фичами
Поробуй vscode
Аноним 13/09/21 Пнд 21:57:41 2156986339
>>2155924
>Есть ли у php сильные конкуренты?
В плане говномакакинга в стиле взял mega_govno_cms_beta_2.1.14.zip и любой васян распаковал эту хуйню на хостинге, за пару тысяч натянул верстку и ты уже можешь публиковать новости на официальном сайте ООО "Кирпичнозаводский металлургический комбинат" с формой обратной связи и схемой проезда в ебеня промзоны. И подобные простые сайты визитколендосы на дешевых хостингах, тут конкурентов нет.
Есть чуть посерьезнее всякие магазины на битриксах и подобных цмс, тут тоже конкуренции особо нет, есть всякие cms на других языках, на тех же рельсах и джанге куча cms, но они не взлетели поскольку требуют большей квалификации и уже не разместить на говнохостинге.

А вот то что уже уровнем выше, то там во всю подпирают с разных сторон, MVC фреймворки Yii, Laravel подпирают Django, Rails и куча всякой хуйни на Node.js. Взять Symphony то там те же конкуренты, в некоторых тырпрайзных случаях уже .net и spring.

Микросервисы тоже много на чем пишут go для быстродействия , js для асинхронности, на рельсах удобно общаться между сервисам есть гемы spyke и her, да и крудить удобно, на джанге удобно круды писать есть djangorestframework, плюс у питона куча библиотек на все случаи жизни, на flask и sinatra можно быстро на коленке накидать апишку и будет быстрее чем в ларавелевском люмене. Некоторые умудряются сервисы на спринге это делать, но там отдельная история.
Аноним 13/09/21 Пнд 22:37:35 2157048340
>>2156986
Что значит накидать апишку?
Аноним 13/09/21 Пнд 22:42:32 2157057341
>>2157048
Значит грязно, не задумываясь об архитектуре наделать post get эндпоинтов.
Аноним 13/09/21 Пнд 22:51:24 2157068342
>>2157048
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
nvm install --lts
mkdir mycoolapp
cd mycoolapp
npm install express
vim app.js

let express = require('express');
let app = express();

app.get('/hello', function(req, res) {
res.json({hello: "world"});
});

app.listen(3000, () => {
console.log(`App started listening on a port 3000`)
})

node app.js
Аноним 13/09/21 Пнд 22:53:27 2157071343
>>2157048
Допустим нужно быстро сделать примитивный микросервис с парой эндпоинтов и крудом, где не нужна архитектура или какое нибудь временное решение чтобы проверить гипотезу. Вместо того чтобы поднимать рельсы или джангу берешь микрофреймворки хуяк хуяк, на фронте тоже хуяк хуяк и готово, получили прототип.
Аноним 13/09/21 Пнд 22:57:43 2157075344
>>2157068
>vim app.js
Ой, тут новичок зайдет в капкан, лучше nano советовать)
Аноним 14/09/21 Втр 05:57:11 2157218345
>>2155948
ну и? лучше быть затычкой за пару миллионов в месяц
Аноним 14/09/21 Втр 05:58:57 2157219346
>>2156212
проблема в отсутствии асинхронности и многопоточности из коробки, и довольно низкими показателями скорости
Аноним 14/09/21 Втр 10:49:50 2157287347
>>2157219
>проблема в отсутствии асинхронности и многопоточности из коробки
Ох, это прям боль была на одном проекте надо было постучать к 5 разным партнерам и получить цены, немного математики и отдать пользователю, из-за того что нет асинхронных запросов то нужно либо ждать и отваливаться по таймауту, либо что-то делать. В итоге на фронте наколхозили выкрутились. уже хотели микросервис на ноде делать
Аноним 14/09/21 Втр 11:01:37 2157290348
>>2157287
В guzzle же есть асинхронщина.
Да и тот же multicurl довольно просто нахуевертить.
Аноним 14/09/21 Втр 13:59:05 2157410349
>>2156886
Спасибо. У меня правда php не установлен как таковой, он в составе open server портативной, можно ли как-то их "подружить" с vscode?
Аноним 14/09/21 Втр 14:02:59 2157415350
>>2157410
У вскода поддержка пхп как у блокнота - там нечего интегрировать.
Аноним 14/09/21 Втр 14:07:35 2157421351
>>2157415
А, ладно. Но выглядит клево все равно.
Аноним 14/09/21 Втр 15:21:52 2157469352
>>2157415
Я как-то дебагер подключал, уже забыл как делал, сейчас продуктами жидбрейнса пользуюсь
Аноним 15/09/21 Срд 00:54:26 2158011353
>>2157219
>проблема в отсутствии асинхронности
Тут поможет Amp.

> и многопоточности из коробки
С этим хуже, но в целом мультипроцессные сервисы неплохо работают на том же Amp.

> и довольно низкими показателями скорости
Похапе - один из самых быстрых интерпретируемых языков, если не самый. Я не так давно для одной задачки писал прототипы простенькой числодробилки на пыхе, голанге и расте. Голанг оказался шустрее всех, но однопоточный пых отставал от него всего на один порядок (а ведь можно было еще и многопоточность наколдовать, но было некогда).
Аноним 15/09/21 Срд 20:51:55 2158636354
Аноним 17/09/21 Птн 13:58:34 2159811355
Страница генерится от входящих данных.
Отправляю с этой страницы ажаксом реквест с пост информацией.
Пыхыпы должен вернуть новосгенерированную страницу такого же типа с новыми данными.

Но она не возвращается. точнее не обновляется в браузере!
Логами проверил - генерация данных идет вполне себе корректно.
Создаю new \DOMDocument("1.0", "ISO-8859-15"), навешиваю на него измененные данные, возвращаю назад, но остается старая страница. Не понимаю почему, все же логично делаю.
Аноним 17/09/21 Птн 14:38:01 2159836356
>>2159811
Хмм эта проблема со всеми редиректами, не важно какие данные.
Упрощу вопрос - отправляешь ажас запрос, пыхыпы возвращает страницу, как ее получить и отобразить? location.reload() перезагружает только текущую страницу
Аноним 17/09/21 Птн 19:32:42 2160111357
>>2159836
>Создаю new \DOMDocument("1.0", "ISO-8859-15")
Тут непонятно, что ты нахуевертил.

А в plain PHP, просто:
<?php
if ($_POST) {
echo 'blablabla <pre>' . print_r($_POST, true) . '</pre>';
// ну и тут делаешь что хочешь
}
Аноним 17/09/21 Птн 20:13:17 2160157358
Аноним 17/09/21 Птн 20:15:16 2160161359
>>2160157
У меня вопросов нет, программирую на РНР с 2004 и работаю на США-штую корпу.

Так что, потрудись сформулировать, иначе мне просто неинтересно.
Аноним 17/09/21 Птн 20:17:41 2160162360
>>2159836
>AJAX
Значение знаешь?
>пыхыпы возвращает страницу, как ее получить и отобразить
Ну например, просто прихуячь результат через element.innerHTML
Аноним 17/09/21 Птн 20:41:52 2160179361
>>2160161
>я я я да я вы говно
Классека.
Работай дальше, нах пишешь раз неинтересно

>>2160162
>значение
Намек на то. что я возвращаю целую страницу, а не кусок? Да, просто я тестирую сейчас как это все работает вообще, потом поменяю как именно надо.

>просто прихуячь
Через document.documentElement получилось! Спасибо.
Однако у меня вопрос остался.
Нормальная ли это практика и почему у меня просто возвраты страниц, редиректы, из обработчика реквеста ажакса, не работают?
Аноним 17/09/21 Птн 21:16:31 2160198362
>>2160179
я же показал тебе путь, неблагодарная скотина
Аноним 17/09/21 Птн 21:27:51 2160208363
>>2160198
Представил как ты вскидываешь голову с запястьем на лбу.
Аноним 17/09/21 Птн 21:41:57 2160236364
>>2160179
>Нормальная ли это практика и почему у меня просто возвраты страниц, редиректы, из обработчика реквеста ажакса, не работают?
Ты какое-то говно делаешь. Если ты редиректишь аякс запрос, то именно он и будет редиректится (чекни в девтулз, у тебя по итогу будет два запроса), если хочешь через жс это делать то можешь попробовать window.location.href = URL, а сам юрл хоть плейн текстом отправлять. Через innerHTML менять всю страницу такая себе идея, потому что у тебя все обработчики в жсе отвалятся, и нужно будет заново их биндить, у тебя ломается история в браузере, нужно руками обновлять урл, делать обработку back, хранить где-то предыдущую страницу, вешать на неё обработчики если юзер нажал на back, короче делать всё то, что браузер делает за тебя, идея говно по дефолту.
Аноним 17/09/21 Птн 22:25:18 2160293365
>>2160236
Я не хочу это делать через жс, жс просто отправляет данные на серв что нужна страница с такими-то данными.
Страница у меня собирается скриптово, по кускам.
Мне нужно после запроса ажакса получить эту страницу.

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



Аноним 17/09/21 Птн 22:44:38 2160307366
>>2160293
>почему именно этот способ не работает?
А чего ты решил что он должен работать? Браузер должен магическим способом понять что хтмл в аяксе это новая разметка страницы? Это уже твоя задача обрабатывать эти кейсы.

>Страница у меня собирается скриптово, по кускам.
У тебя куски хтмла приходят? Нужно брать строку ответа из аякса и руками маунтить (можно просто через innerHTML у элементов контейнеров для этого хмтла).

>Я же отправляю запрос ажаксом - запрос в обработчик - обрабочик отправляет вьюху - вот последний пункт тут у меня не работает.
Если у тебя в обработчике страница приходит полностью (с <html></html> и этим всем), то сделай просто ссылку на эту страницу, зачем это через жс делать я не сильно понял, и как я уже говорил у тебя это просто не получится.
Аноним 17/09/21 Птн 22:49:02 2160311367
Сам js'ер, но бэк будет на пыхе помогать друг делать.
Не будет ли проблем в однопоточном режиме, если страница сразу 2 гет-запроса со скриптов отправит?
Какие вообще подводные связываться с вами?
До этого только запускал тестовые серваки на ноде всякие.
Аноним 17/09/21 Птн 22:52:13 2160313368
>>2160311
PHP ничем не отличается от любого другого серверного языка.

Ваша цель -- договориться о понятном и однозначном протоколе передачи данных. Хотите потратить время -- GraphQL; хотите быстро и чтоб работало -- как можно более простой REST API.
Аноним 17/09/21 Птн 22:54:31 2160314369
16273244431140.jpg 57Кб, 720x960
720x960
>>2160313
>>2160311
Тут непонятно, что вы напердолите.

Ваша задача -- либо объединить два запроса в один, либо запрограммировать их нужную последовательность и обработку.
Аноним 17/09/21 Птн 23:03:06 2160323370
>>2160314
Хм, ну наверняка тогда придется делать один запрос.
Задача стоит в, прежде всего, чтобы работало.
Сначала вообще передачу не осилили, надеюсь, из-за CORS.
Когда в последний раз заглянул в гит то увидел вместо страниц кучу php-файлов и вообще не понял что происходит.
Аноним 17/09/21 Птн 23:06:27 2160326371
>>2160311
>Не будет ли проблем в однопоточном режиме, если страница сразу 2 гет-запроса со скриптов отправит?
Не будет, самих процессов может быть много, не парься
Аноним 17/09/21 Птн 23:09:01 2160328372
TGuSjRBS6E.jpg 64Кб, 494x662
494x662
>>2160323
Ну а причём тут git.
Вам нужен некое общее тестовое окружение, на котором ты будешь отрабатывать свои запросы.

Например, бекенд предоставляет тебе инструкцию по развёртыванию его приложения (например, в docker-контейнерах), вы договариваетесь о способе обработки статики (например, твои скрипты должны собираться в public-папке в его ФС), и так продвигаетесь от релиза к релизу.

Или проще, по-олдскульному -- он деплоит на некую тестовую площадку, а ты работаешь со своими скриптами там же.
Аноним 17/09/21 Птн 23:15:07 2160335373
>куски приходят
Не-не, я просто упоминаю кастомность страницы чтобы объяснить что
это не просто левая страничка на которую можно было бы легко перенаправить в руте. И мало ли, я даже думал, что из-за кастомного создания страницы я мог бы теоретически что-то делать не так с тонкими настройками, метатегами, и браузер просто не читал бы страницу, потому что считал бы что описание у нее одно, хоть содержание разное, поэтому можно и не обновлять - вы бы такое тоже могли бы упомянуть, но сейчас я знаю что не в этом точно причина.
Ну и я думал что вообще отправляю что-то сломанное - тоже отмел этот вариант сразу же.
Просто вот пытался сказать что есть html страница, ее надо вернуть.

>страница полностю
Нет, приходят данные разные просто, потом это все доминошкой обрабатывается и создается новое.

>с чего решил
Я просто видел примеры как люди возвращали страницы(не пыхыпы, но логика таже), я и подумал что реквесты делаются не с ожиданием конкретных данных, типа я отправляю тебе строку, а ты мне число и не смей больше ничего отправлять кроме числа, то бишь запрос от клиента идет, а что обратно будет это серв решает.
И вот серв решил вернуть страницу, какая проблема ее скушать, ведь с рутами же все работает нормально? Ты видишь тот же штмл формат, видишь теги, в чем проблема?

ПС спасибо
Аноним 17/09/21 Птн 23:15:25 2160337374
Аноним 17/09/21 Птн 23:24:50 2160345375
photo2020-02-15[...].jpg 111Кб, 1123x1280
1123x1280
>>2160335
У тебя шиза (это нормально).

Постарайся сделать раза в 3 более простые и работающие приложения.

А уже потом, когда поймёшь принцип, начинай внедрять более сложные уровни абстракции.
Аноним 17/09/21 Птн 23:31:20 2160349376
Аноним 18/09/21 Суб 02:32:07 2160420377
>>2160345
>двач у меня не растет бицуха, тягаю 3-12 8кг гантелями, может на гриф перейти?
>старайся делать зарядку, разминать мышцы, спорт полезен
>???
Аноним 18/09/21 Суб 02:36:52 2160421378
>>2160420
сделай хоть что-нибудь работающее, потом выёбывайся
Аноним 18/09/21 Суб 02:50:34 2160423379
>>2160421
Работаю над твоей мамкой на данный момент.
Аноним 18/09/21 Суб 09:03:58 2160458380
А не устарел учебник из шапки?
Аноним 18/09/21 Суб 09:19:34 2160463381
>>2160458
Устарел, как и сам пи эйч пи.
Аноним 18/09/21 Суб 09:50:18 2160480382
16309052783170.jpg 62Кб, 450x335
450x335
>>2160463
Устарел, зато работает в джва раза быстрее, всякого новомодного говна, вроде питона и имеет понятный и вменяемый синтаксис
Аноним 18/09/21 Суб 10:03:21 2160484383
image.png 36Кб, 409x409
409x409
image.png 44Кб, 504x434
504x434
>>2160480
> новомодного говна, вроде питона
Съеби, новомодное говно.
Аноним 18/09/21 Суб 10:07:16 2160487384
16308972308870s.jpg 6Кб, 200x132
200x132
>>2160484
сыночка-корзиночка нашел к чему докопаться, по другим вопросам возражений нет?
Аноним 18/09/21 Суб 10:12:48 2160490385
>>2160487
Проще искать до чего не докопаться, вся стандартная либа это говно говна, которое тащат для совместимости.
https://www.php.net/manual/en/ref.strings.php
https://www.php.net/manual/en/ref.array.php
В итого залезут в капсулу фреймворка и сидят в этом болоте.
С жс было что-то подобное, но это важный язык и за него серьезно взялись большие дядьки и пилят.
Аноним 18/09/21 Суб 11:12:35 2160527386
>>2160463
А что тогда для backend учить?
Аноним 18/09/21 Суб 11:27:22 2160533387
Аноним 18/09/21 Суб 11:55:40 2160545388
>>2160533
Заявок на фрилансе больше именно по ним?
Аноним 18/09/21 Суб 12:09:50 2160549389
>>2160545
Это не для фриланса, но самые популярные языки для бэкенда.
Аноним 18/09/21 Суб 12:17:21 2160550390
>>2160549
Я искал как раз для фриланса, а не постоянной работы.
Аноним 18/09/21 Суб 12:22:12 2160552391
>>2160550
Хрен его тогда знает. Пыху учи. Правда не знаю, сможешь ли ты попасть на фриланс, миновав опыт в офисе.
Аноним 18/09/21 Суб 13:27:23 2160586392
image.png 549Кб, 600x600
600x600
>>2120804 (OP)
В моей мухосрани появилась вакансия "PHP Программист", платят 30к на руки:

"Младший программист.Базовые знания HTML CSS Javascript.Базовые знания PHP.Базовые знания SQL и построение простых запросов (Select,Update,Delete, Insert). "

Все знаю, кроме пыхи. Так вот, что подразумевают под "Базовые знания PHP" в такой вакансии? Какой проект по быстренькому заделать чтоб хотя бы позвали на собесед и заскочить уже кабанчиком в АЙТИ? Времени вагон. Заранее спасибо за ответы


Аноним 18/09/21 Суб 14:07:13 2160603393
>>2160586
> PHP Программист
> требуют только базовые знания PHP
Лол.
Аноним 18/09/21 Суб 14:19:36 2160613394
>>2160586
Это для галочки пишут, на самом деле всем похуй, на собесе спросят не дебил ли ты и посмотрят на реакцию, не более.
Проблемы начнутся на самой работе, когда ты всем напиздишь что шаришь, а по факту не сможешь вывезти базу.
Я лично через это проходил, теперь вообще смотрю на требования сквозь пальцы, так как надо смотреть между букв.
Аноним 18/09/21 Суб 14:42:40 2160631395
>>2160613
Сколько обычно дают время на освоение этой самой базы?
Аноним 18/09/21 Суб 15:04:52 2160643396
>>2160631
От тебя зависит. Если фирма большая то пизды могут дать в первые недели так как им надо чтобы шестерни работали и сдавали таски. Если фирма очень большая, то могут забить хуй и позволить тебе считать точки на потолке(только ты еще устройся кык). Ну и в студийках как договоришься, тут тет-а-тет решать надо.
Короче, ты как и большинство вкатунов, задаете одни и теже тупые вопросы, но как бы вам не отвечали это вам все равно никак не поможет. Ты либо овощ, либо нет.
Аноним 18/09/21 Суб 15:05:15 2160644397
>>2160631
От тебя зависит. Если фирма большая то пизды могут дать в первые недели так как им надо чтобы шестерни работали и сдавали таски. Если фирма очень большая, то могут забить хуй и позволить тебе считать точки на потолке(только ты еще устройся кык). Ну и в студийках как договоришься, тут тет-а-тет решать надо.
Короче, ты как и большинство вкатунов, задаете одни и теже тупые вопросы, но как бы вам не отвечали это вам все равно никак не поможет. Ты либо овощ, либо нет.
Аноним 18/09/21 Суб 15:40:55 2160664398
>>2160643
Да я знаю, что я овощ и так, пытаюсь еще до собеса по-максимуму изучить процесс создания сайтов с пхп.
Аноним 18/09/21 Суб 16:29:42 2160683399
>>2160664
Перед смертью не надышишься. Вероятно ты учишь левую хрень, а тебя могут спрашивать за другое. Просто иди и устраивайся.
Аноним 18/09/21 Суб 17:17:19 2160708400
Кто-то хочет вместе вкатиться в лару? @pupupipuu пишите аноны
Аноним 18/09/21 Суб 18:19:22 2160744401
>>2160708
Ты уже 3 года вкатываешься.
телега нерабочая, может ты имелл ввиду пупупипуПу ?
Аноним 18/09/21 Суб 18:38:59 2160750402
>>2160744
Какие 3 года?
Юзернейм чет не поставился с первого раза, фиксанул
Аноним 18/09/21 Суб 20:52:58 2160779403
>>2160586
>Какой проект по быстренькому заделать чтоб хотя бы позвали на собесед и заскочить уже кабанчиком в АЙТИ?
Проект по нажатию на кнопку "Откликнуться", осилишь?

Если серьёзно, в пхп нет ничего, что нужно прям "учить", если ты знаешь вообще хоть какой угодно язык программирования. Просто прям на работе вводишь в гугл "php how to do (хуйнянейм)", и копируешь что найдёшь на стековерфлоу. Я таким образом уже несколько месяцев как вкатился.
Аноним 19/09/21 Вск 06:33:39 2160988404
>>2160586
Смущает что там жс ещё, как обычно нужен бэкендер которому не надо будет платить за работу фронтенда
Аноним 19/09/21 Вск 09:04:57 2161010405
>>2160779
Спасибо, попробую. Результатами поделюсь в треде, если местечко уже не займут к этому времени
Аноним 19/09/21 Вск 11:42:16 2161058406
>>2160988
>нужен бэкендер которому не надо будет платить за работу фронтенда
Так-то похуй - рабочее время 8 часов. Какая разница что ковырять вилкой - ПХП или ЖС? Если они думают, что ты в 2 раза быстрее работать будешь на двух языках, то быстро разочаруются.
Аноним 19/09/21 Вск 11:45:07 2161064407
>>2161058
Хотя 30к это очень-очень мало для человека, который умеет в пхп и жс. Там не задрищенская шароёбская веб-студия какая? Смотри чтоб не посадили тебя различные CMSки ковырять от заказчиков - охуеешь за эти деньги.
Аноним 19/09/21 Вск 11:50:53 2161066408
>>2161064
Обычная зп для мухосранска.
Кмски разве не созданы для облегчения создания сайта?
Аноним 19/09/21 Вск 13:33:45 2161161409
>>2161064
Это очень похоже на студию, обычно стек более подробно пишут, а тут походу придется со всем по чуть-чуть работать и в основном битриксы с вордпрессами, еще на гуслях играть и ебаться вприсядку, трекая каждые 10 минут рабочего времени
Аноним 19/09/21 Вск 14:00:52 2161177410
>>2161066
>Обычная зп для мухосранска
У меня кореш на автомойке столько же зарабатывает без всякой ебли с кодом. В том и дело, что это обычная зарплата в мухосрани для человека без навыков, а тут какие-то требования требуют ещё.

>Кмски разве не созданы для облегчения создания сайта?
Как бы да, но каждая свои костыли костылит и их надо знать. Т.е. помимо того же пхп, жс, вёрстки, тебе ещё придётся и внутрянку CMS понимать. За 30килорублей это нихуйственные требования уже.

>>2161161
Чёто тоже кажется, что так и будет. Не удивлюсь ещё и серой зарплате задним числом.


Аноним 19/09/21 Вск 19:44:53 2161470411
Вы прыгаете блоками из php в html или делаете все через php и с помощью echo <<< выводите форму?
Аноним 19/09/21 Вск 19:51:55 2161480412
>>2161470
Я делаю так

return $this->render('edit.html.twig', [ 'form' => $form->createView() ]);
Аноним 19/09/21 Вск 19:56:08 2161485413
>>2161480
Нихуя не понял, буду дальше читать.
Аноним 19/09/21 Вск 20:13:15 2161496414
Посоны, учу пыху и такой вопрос - можно ли заработать на парсинге сайтов (для себя)? Т.е писать парсеры и размещать у себя на хостинге/впс?
Аноним 20/09/21 Пнд 02:55:16 2161655415
>>2161470
>с помощью echo <<< выводите форму?
Так никто не делает нынче. Обычно уже есть свёрстанный шаблон формы, куда подставляются уже подгтовленные в пхп или любом другом ЯП данные. Напрямую в шаблоне присутствует только логика для отображения, но не работы с данными.

>>2161496
>можно ли заработать на парсинге сайтов (для себя)?
Ну если ты сам себе платить будешь, то ради бога.

>писать парсеры и размещать у себя на хостинге/впс?
Не всё так просто - каждая страница имеет свою структуру и под неё придётся писатб свой набор запросов. К этому добавь разные наборы полей и тот факт, что далеко не всем это нравится = что их парсят.
В целом готовься тратиться на толстого VPS и канал. От 50$ в месяц, в самом нищебродском варике. К этому добавь обязательные прокси + логику по их проверке. Некоторые сервисы надо парсить не через html, а через запуск полноценного хедлесс браузера с отработкой жаваскрипта, что тоже требует мощностей, делать всё надо многопоточно - сколько по железу потянешь. Ещё часто будет слетать парсинг - изменения в страницах, добавление проверок на стороне источника и тд - это всё на тебе.
В общем попробуй канешно, но будет непросто.
Аноним 20/09/21 Пнд 10:20:10 2161763416
Через час иду на собеседование junior php.
Первое собеседование. Очково что-то.
Аноним 20/09/21 Пнд 10:45:58 2161780417
>>2161763
Удачи, потом расскажи как было.
Аноним 20/09/21 Пнд 10:52:02 2161785418
>>2161780
Спасибо!
Позже напишу отчёт как всё пройдёт.
Аноним 20/09/21 Пнд 12:33:55 2161857419
Аноним 20/09/21 Пнд 12:36:38 2161860420
>>2161857
Ты че бля, в такую рань толко на завод работяг собеседуют, а не господ макакенов.
Аноним 20/09/21 Пнд 13:14:04 2161891421
Нужен ли REST одностраничнику, где все в модальных окнах?
Аноним 20/09/21 Пнд 13:20:55 2161900422
>>2161763
>>2161780
>>2161857

Анончик, репортую:

Пришёл я значит в намеченое время (на 11) к ним в офис. Встретила HR-ка. Встретила тёпло. Предложила кофе. Я культурно отказался. Обстановка в целом в офисе - уютно, тихо и спокойно. Без никакого кипиша. Половина народу с кружками ходит, попивают кофе. Посадили в отдельною комнату, я так понял для митингов.
Блять, как же я нервничал в это время, это пиздос. Не педать словами. Первый раз такое в жизни. Думал что сейчас будет глобальный разъёб во все щели....

Короче, ближе к делу. На собеседовании было 5 человек + я: hr, бэк лид, фронт лид, директор конторы (не наш человек, я так понял с сша) и переводчик для него. Начали спрашивать по очереди, сначала бэк: база даных, что такое индексы и для чего нужно, какие есть связи. По php спросил что такое контроллер, потом спрашивал по ларке: спросил о посредниках (middleware), request, response, как использовать form request, eloquent, как сделать дополнительное условие (orWhere), как сделать связи (relations). Потом почал спрашивать фронт: в основном о Vue.js (я о нем написал в резюме, что сталкивался с ним). Спросил о vuex, state, getters, setters, mutation, как получить данные из стора в дочерних компонентах, хуки и жизненный цикл, чем отличается data компонента и глобальный (экземпляра), далее спросил о SSR (серверный рендеринг, для чего нужен и как лучше) и кое что ещё. Всё не запомнил.

Все это время переводчик переводил мои ответы и говорил с главным. Он ничего не спрашивал, только в конце сказал типа "Okey, я вас понял".

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

Я собрался и ушёл.
Через час позвонили, сказали что я им подхожу. Согласовали зп (сказали что будут мне платить ту сумму которою я указал в резюме. я указал комфортную для меня на данный момент, как джуну Первый пересмотр зп будет через 4 месяца. Назначили день и время, когда мне прийти и согласовать режим роботы, "адаптацию" к команде и ещё некоторые вопросы.

В общем всё прошло, на удивление, отлично. Когда вопросы закончились - я просто выдохнул и начал дышать. Серьёзно. Я не ожидал что будет так просто. Всё это время я готовился по примерах собеседований в интернете. А там было всё: паттерны, принципы, psr и ещё кучи-кучи вопросов. А тут такое.

Вот так, анон у меня прошёл сегодняшний день.
Аноним 20/09/21 Пнд 13:33:47 2161912423
>>2161900
классно, удачи на новой работе!
Аноним 20/09/21 Пнд 13:41:23 2161918424
Аноним 20/09/21 Пнд 14:37:23 2161973425
>>2161900
Это ДС?
Нихуя, да ты уже чуть ли не мидл там.
Аноним 20/09/21 Пнд 14:39:45 2161979426
Есть ли в php возможнсоть запустить скрипт и чтобы он продолжил работать после закрытия страницы в браузере?
Аноним 20/09/21 Пнд 14:39:54 2161980427
>>2161973
Мухосрань, 200к
До мидла ещё далеко
Аноним 20/09/21 Пнд 14:48:47 2161995428
>>2161979
Запусти через консоль
Аноним 20/09/21 Пнд 14:54:48 2162002429
>>2161979
Нужен отдельный воркер, а ты со своего скрипта можешь отправлять ему задачи.
Аноним 20/09/21 Пнд 16:27:32 2162053430
Аноним 20/09/21 Пнд 17:38:40 2162130431
>>2161900
Сколько тебе лет, анон
Аноним 20/09/21 Пнд 17:56:53 2162141432
Аноним 20/09/21 Пнд 18:31:36 2162167433
>>2161900
Заебумба. Поздравляю.

>директор конторы (не наш человек, я так понял с сша)
Бтв, а что муриканец забыл в пердях?

Профильная вышка есть?
Аноним 20/09/21 Пнд 18:50:57 2162175434
>>2162167
> Бтв, а что муриканец забыл в пердях?
Честно - вообще не понял. Может он в своих западах в основное время пребывает, решил проведать, а я просто случайно на него попал.
> Профильная вышка есть?
Профильной - нет. Есть техническая.
Аноним 20/09/21 Пнд 19:06:04 2162180435
>>2162167
>Профильная вышка есть?
Это плюс?
Аноним 20/09/21 Пнд 19:08:48 2162183436
Аноним 20/09/21 Пнд 21:50:56 2162318437
Есть один SPA.
Как в php выделять отдельные запросы с клиента, по кастомным заголовкам?
Аноним 21/09/21 Втр 00:03:14 2162386438
>>2161979
Вообще, чтобы ты понимал, он перестаёт работать не после закрытия, а немного перед открытием. Если страница пришла, значит скрипт полностью выполнился. (В основном). Поэтому задача в принципе некорректно поставлена.
Аноним 21/09/21 Втр 08:01:37 2162538439
>>2161900
Скок зп? Долго учился? Что молодым-шутливым посоветуешь?
Аноним 21/09/21 Втр 09:41:01 2162590440
>>2162538
>А че есть?
>А покажи!
>А дай!
Аноним 21/09/21 Втр 19:25:52 2163207441
>>2162318
Хуй тебя проссышь, анон, о чём ты глаголешь. С какого клиента, какие запросы, почему ты обычные токены не используешь?
Аноним 21/09/21 Втр 19:27:02 2163210442
>>2163207
Со SPA в целом ебли всегда в 2 раза больше чем с классическими шаблонами. Так-то бы просто сессию поставил пользовательскую и нет проблем.
Аноним 21/09/21 Втр 20:28:00 2163287443
Есть поле char в бд, пытаюсь добавить в бд из поля формы туда цифры через real_escape_string, приходит пустая строка. php вроде должен динамически привести тип, верно?
Аноним 21/09/21 Втр 20:35:47 2163297444
1.png 105Кб, 633x850
633x850
>>2163287
Мне особенно доставило, что у автора книжки видимо тоже нихуя не работало и он решил просто добавлять это значение без экранирования, но забыл полностью поменять функцию для этого случая просто на соответствующее значение из массива $_POST.
Я понимаю опечатки бывают, но это вообще ни в какие ворота. Хотя может это я туплю, не исключено.
Аноним 21/09/21 Втр 20:58:00 2163316445
>>2163297
>Экранируемые символы NUL (ASCII 0)
Это и есть char 0, верно? Но почему тогда вообще пустая строка была добавлена, а не цифры оставшиеся кроме нулей?
Аноним 21/09/21 Втр 21:00:45 2163320446
>>2163297
>анон взял книжку для изучения пхп
>код не по PSR
>автор хуй забил на проверку своего же кода
>get_post берёт данные из post это как вправолево и повернуть налево
Книжку выкинь.
Аноним 21/09/21 Втр 21:03:42 2163324447
>>2163320
>get_post берёт данные из post
Дай угадаю: а функция получения данных из get он назовёт get_get кек. А если будет в запросе параметр get, то вообще охуеешь $get = get_get('get'); словно масляное масло масляно маслит.
Аноним 21/09/21 Втр 21:05:12 2163327448
Поигравшись с DOMDocument ко мне стали приходить новые мысли.
Лучше создавать элементы для страницы на фронте, а запросами отправлять чистые данные?
Потому что на данный момент процесс выглядит так:
Создаю документ на пыхе, через него элемент. Отправляю весь документ в HTML в запросе, на фронте создаю новый документ, даю ему данные HTML что скинул, и только после этого получаю свой элемент через getElement.
Выглядит максимально костыльно.
Аноним 21/09/21 Втр 21:11:06 2163331449
>>2163327
>Создаю документ на пыхе, через него элемент
Это как? Покаж код.
Аноним 21/09/21 Втр 21:29:23 2163343450
>>2163331
Примерно так:

$doc = new \DOMDocument("1.0", "ISO-8859-15");
$ele = $doc->createElement("lol");
$doc->saveHTML();

Аноним 21/09/21 Втр 21:33:11 2163347451
>>2163343
Отправляй чистые данные, а на фронтенде уже формируй их представление. По простому если: бекенд - для данных, фронтед - для их отображения. К тому же сервер у тебя один, а клиентов, в теории, может быть много и каждому из них страничку рисовать это дополнительная нагрузка - пускай они сами себе рисуют.
Аноним 21/09/21 Втр 21:36:28 2163354452
>>2163347
То есть это таки хорошая практика. Спасибо.
Аноним 21/09/21 Втр 21:40:04 2163355453
>>2163354
От задачи зависит - если ожидается, что будут высокие нагрузки, то нужно выносить часть логики на клиент, а если у тебя там простой сайтик и ты ему SPA начал пилить, то это так себе идея с оверхедом под 100%
Аноним 21/09/21 Втр 21:42:29 2163358454
>>2163355
Да-да, я так и представляю себе.
Аноним 21/09/21 Втр 22:11:34 2163379455
>>2163210
Что вообще такое "сессия"? Где она хранится? Что ты туда ставишь? У тебя аутентификация(логин) имеет место или нет? Мне кажется, что сессия -- это какой-то наебательский термин.
Аноним 21/09/21 Втр 22:14:56 2163382456
>>2163287
real_escape_string уже никто не юзает больше 10 лет, уже наверное лет 15. Используй php pdo вместо mysqli и вместо экранирования строк подставляй их отедльными параметрами.
Аноним 21/09/21 Втр 22:22:17 2163391457
>>2163354
Это один из вариантов, ныне более трендовый. Оба варианта рабочие. Я бы не сказал, что если высокие нагрузки, то якобы рендер HTML отъест много нагрузки. Это ещё предстоит доказывать. Во-первых начнём с того, что раз ты такие вопросы задаёшь, то ты новичёк, и тебе по-настоящему высокие нагрузки не светят в ближайшие 2-3 года или больше. Во-вторых SPA такого типа часто отдают дохрена js, который может есть кучу трафика. Вообще полностью готовых гарантированных рецептов как готовить высокие нагрузки, нет. Ты должен всё измерять и сопоставлять. Некоторые вещи на SPA делать очень сложно.
Аноним 21/09/21 Втр 22:30:59 2163397458
3428597.jpg 31Кб, 300x423
300x423
>>2163382
Спасибо, почитаю про это отдельно тогда.
Не думал, что так устарел материал, книжка 16го года (4е издание).
Аноним 21/09/21 Втр 22:38:40 2163405459
>>2163397
Старье тоже надо знать, если в легаси попадешь, которого в пыхе дохуя.
Аноним 21/09/21 Втр 22:53:14 2163412460
>>2163405
Старья с mysqli уже очень мало. Я ни разу не видел. Это невыгодно и бессмысленно. Если попадёшь, что вряд ли уже, то проще послать их нахуй и пойти на другую работу. Не трать время анона зря.
Аноним 21/09/21 Втр 23:28:31 2163428461
Аноним 21/09/21 Втр 23:36:05 2163433462
>>2163391
Почему все упоминают спа спа спа спа?

>не светит 2-3
Лол, меня брали джуном в фирму среднего размера, своим продуктом и соответственно приличными нагрузками.
Хз чем там считаются большие нагрузки, 5-10кк запросов?
Аноним 21/09/21 Втр 23:45:17 2163442463
>>2163433
>Хз чем там считаются большие нагрузки, 5-10кк запросов?
Конкретных цифр не и быть не может - это зависит от реализации бекенда и бюджета на него. Хайлоад начинается где-то там, когда выгодней и проще потратить неделю работа бекенд-разработчика ок 150 тыс руб на оптимизацию работы приложения, чем просто купить ещё мощностей.
Аноним 22/09/21 Срд 01:06:14 2163493464
>>2163433
>Почему все упоминают спа спа спа спа?
Потому что это похоже на то, что ты описал. И это трендово, плохо это или хорошо.
>5-10кк запросов
В какую еденицу времени? Это в секунду?

Если тебя взяли джуном, то там над тобой есть куча старших кодеров, которые тебя пасут. Решение, где генерировать HTML, на беке или фронте, -- будет не за тобой.
>>2163428
Если честно, никогда до конца не понимал, зачем это было реализовано в самом PHP. Мне кажется, в этом есть какая-то странность.
Аноним 22/09/21 Срд 08:45:43 2163592465
>>2163207
Да бекендер говорит что с одной страницы сложна реализовать принятие запросов, лучше разбить на страницы, вот и думаю что ему подсказать, что направить гуглить и не переделывать макет.
Аноним 22/09/21 Срд 12:05:46 2163729466
>>2163592
Это аутентификация или что? Там есть логин? Если у него уже есть аутентификация полностью готовая, то подстройся под неё. Он тебе должен сам сказать, что он считывает. Только скорее всего аутентификация работает через кукисы. Их можно так и оставить, но это угроза CSRF. Надо перекладывать из куки в localStorage и отправлять через хедер. Или ебаться с csrf-токенами.
Аноним 22/09/21 Срд 14:24:16 2163908467
15766038606290.jpg 78Кб, 588x766
588x766
>>2163729
В тч аутентификация. Куки все будут http, по идее. Он просто привык делать по ssr сайты в стиле 2007, а я еще фронт не прикручивал к чему-то отличному от ноды, поэтому у нас всплывают проблемы интеграции всякие вот сейчас.
Спасибо, в общем. Насчет localStorage нужно будет обсудить, но если хоть запросы по ajax осилим, то уже будет хорошо.
Аноним 22/09/21 Срд 15:02:43 2163938468
>>2163908
HTTP -- это и есть HTTP. На пхп можно сделать практически всё, что и на Ноде. В волшебной переменной $_SERVER есть все хедеры. Скорее всего пхп-шнику придётся наматывать на сессию хедеры через специальную либу/фреймворк какую-то.
Аноним 23/09/21 Чтв 16:08:10 2165055469
>>2163908
>делать по ssr сайты в стиле 2007
Ждун, твой любимый SPA в 2010 появился - не сильно моложе. И нечасто нужен.
Аноним 23/09/21 Чтв 20:23:24 2165247470
>>2163729
>Их можно так и оставить, но это угроза CSRF. Надо перекладывать из куки в localStorage и отправлять через хедер.
И чем это безопасности поможет? Я считал локалсторедж менее секюрной хуйней, куку можно сделать секюронли, хттп онли и т.д., а локалсторедж - решето
Аноним 23/09/21 Чтв 21:31:59 2165289471
>>2165247
Потому что у разных техник есть внезапно преимущества и недостатки. localStorage и куки без httpOnly уязвимы к XSS, при условии, что XSS-атака была успешно совершена. А куки любые в принципе потенциально уязвимы к CSRF-атаке. Теоретически, если одновременно установлены оба флага httpOnly и SameSite=strict, то кука будет полностью защищена от CSRF. Наверное. Для вида атаки SameSite=strict обязателен. Но без него у тебя может перестать работать CORS, так что учитывай. С другой стороны, если у тебя XSS произошёл, то и без воровства кук злоумышленник всё равно устроит на сайте катастрофические проблемы, и потенциально всё равно легко украдёт акаунты другими способами.
Аноним 23/09/21 Чтв 21:34:26 2165291472
Аноним 25/09/21 Суб 06:09:12 2166419473
scr.png 62Кб, 288x161
288x161
Задачу про студентов нужно на фреймфорке каком-то делать? Просто посмотрел решения и у многих через ларку
Аноним 25/09/21 Суб 11:36:00 2166586474
>>2166419
Голая пыха никому в хуй не уперлась, на ней делать только чтобы базу языка подтянуть. Намного быстрее и эффективней на фреймворках.
Аноним 25/09/21 Суб 11:38:03 2166587475
>>2166586
А я пишу пет проект на чистом
Аноним 25/09/21 Суб 11:41:07 2166589476
>>2166587
А смысл? Не хочешь тяжёлую ларку - возьми куски от symphony, собери что тебе нужно и пиши на них, все равно же придётся роутинг и реквесты/респонсы велосипедить. К чему страдания?
Аноним 25/09/21 Суб 11:42:26 2166590477
Аноним 25/09/21 Суб 11:43:15 2166591478
>>2166589
Так симфони сложнее
Аноним 25/09/21 Суб 12:09:38 2166615479
>>2166589
>все равно же придётся роутинг и реквесты/респонсы велосипедить. К чему страдания?
Какие страдания? Это за день даже за половину делается если чистый пхп знаешь.
Аноним 25/09/21 Суб 12:43:08 2166672480
>>2166615
Ну так а велосипед-то писать зачем?
Аноним 25/09/21 Суб 14:53:00 2166787481
>>2166672
Новичку это нужно для понимания как оно работает на низком уровне. Те, кто начинает сразу с изучения фреймворков потом хуже понимают что делают.
Аноним 25/09/21 Суб 15:27:55 2166800482
1.png 25Кб, 781x405
781x405
Это вообще используется? У меня даже не работает пример, видимо в open server по-умолчанию нет http-аутентификации.
Аноним 25/09/21 Суб 17:03:04 2166871483
>>2166590
Не поймёшь всё равно. Во-первых меня бесит, что говорит "чистая пыха". Пыха с фреймворком -- это не "изменённая модифицированная пыха." Либы не могут менять синтаксис. Пыха всегда "чистая". Ты должен учиться создавать функции и классы, дробить код на файлы и т.п. А ты хочешь просто сделать один файл и позырить на все суперглобальные переменные. Плюс ты не сможешь определить, какие паттерны подходят под задачу, и какие функции считаются устаревшими и плохими. Ты должен изучать хорошие практики программирования. И ты должен изучать особенности веб-приложений. Если не занимался веб-программирование раньше, то лучше начать всё-таки с фремворка и потом просто залесть внутрь него и там покапаться. И http и протоколы изучай.
>>2166615
Аутентификацию самостоятельно сделать без уязвимостей почти нереально, например, если ты уже не опытный спец.

В принцппе я думаю, что скорее всего надо учиться и так, и так. В принципе не настолько важно, в каком порядке. Мне в своё время больше всего понравился подход Майкла Хартла. Это была книга не пхп, а по Руби, но пофиг. Вот он сразу пошёл по фреймворку, но он расписывал все хорошие практики программирования.
Аноним 25/09/21 Суб 17:48:55 2166942484
Как правильно классы используются? По канонам
Аноним 25/09/21 Суб 18:48:21 2166979485
>>2166942
Каноны меняются от года к году. Мнения разных программистов противоречивы. Реализации ООП и задачи различаются. Вопрос слишком сложный. Хороший ответ на Дваче ты не сможешь найти. Посмотри как внутрене используются фреймворке. Они частично навязывают тебе, как использовать классы. Потом начни читать Макконела Совершенный код и Мейера "Объекто-ориентированное конструирование ПО" или что-то типа.
Аноним 26/09/21 Вск 11:39:03 2167332486
>>2166942
На основе класса создаётся объект. Объект это такая удобная переменная, которая не просто хранит какие-то данные, но и умеет с ними делать всякие полезные штуки.
По канонам как-то так.
Аноним 26/09/21 Вск 14:08:13 2167427487
>>2166800
Пиздец, я без задней мысли просто переименовывал txt файлы блокнота в php, а там оказывается какие-то невидимые пробелы добавлялись(BOM), из-за которых header'ы не обновлялись, а я думал модуля не было http-аутентификации.
Только где эти переменные сервера устанавливать?
Аноним 26/09/21 Вск 15:00:20 2167487488
Аноним 26/09/21 Вск 15:44:08 2167532489
>>2167487
Нашел ошибку, слеши нужны прямые в пути к файлу пароля, а не обратные. А знаки переноса виндосовские все же.
Аноним 26/09/21 Вск 16:09:20 2167563490
>>2167427
Установи xdebug и настрой его. И научись юзать дев-панель браузера и curl. Ты должен отлаживать всё сам.
Аноним 26/09/21 Вск 16:20:12 2167565491
>>2167563
>Ты должен отлаживать всё сам.
Начинающим это трудно понимается - что дебажить их писанину никому не интересно и в целом трудозатратно.
Аноним 26/09/21 Вск 17:51:15 2167675492
Аноны, вопрос вам наверняка покажется максимально тупым, но все же
Есть, например, у меня сервер с виртуал хостом типа testurl.test
я хочу, чтобы у меня по адресам page1.testurl.test и testurl.test/page2 открывались определенные страницы
Как это вообще делается? Как это называется? Подскажите хотя бы, что загуглить дебилу
Аноним 26/09/21 Вск 19:03:36 2167763493
>>2167565
Да. Самое главное -- отладка должна в первую очередь сокращать объем кода, в котором точно есть проблема. Локализация ошибки должна происходить. Начинающий фактически даёт слишком много информации о своей ошибке. Тут же и вёрстка, и клиентский код, и серверный, и база. Надо отследить, какие этапы отработали норм, а какие сломались. И искать ошибку уже в одном маленьком месте.
Аноним 26/09/21 Вск 21:14:48 2167874494
>>2167763
>Надо отследить, какие этапы отработали норм, а какие сломались.
Ага, по выложенному коду найти где там он обкакался. Т.е. никакой динамики и тестовых запусков - посмотри на картинку и скажи где я тут был не прав.
Аноним 26/09/21 Вск 22:25:40 2167938495
>>2167874
Нет, я говорю, что ему надо. Самому, вместо того, чтобы нам выкладывать.
Аноним 26/09/21 Вск 23:38:10 2168005496
>>2167938
Ну да - щас бы чужой код дебажить. За спасибо.
Вообще так по мне это самое нудное в программировании - дебаг.
Аноним 26/09/21 Вск 23:53:07 2168015497
>>2168005
Самое нудное в программировании -- это перестать пиздеть и начать разрабатывать работающие программы.
Аноним 27/09/21 Пнд 00:15:01 2168028498
1420760494903.jpg 43Кб, 640x640
640x640
Ну что вы всполошились, анонасики, тред вроде для подобных вопросов и существует.
>Если рассчитываешь получить дельный ответ, сформулируй правильно вопрос: «что я хочу получить, что я для этого делаю, что я вместо этого получаю». Если когда самостоятельно найдёшь решение — поделись в треде, мы за тебя переживаем.
Я и не делаю пока еще ничего чтобы это дебажить и искать ошибки логики, просто небольшие примеры где пока вон синтаксис/настройки сервера неправильные.
Аноним 27/09/21 Пнд 00:47:08 2168051499
>>2168015
>начать разрабатывать работающие программы
Анус себе разработай, пёс.
Аноним 27/09/21 Пнд 00:48:12 2168052500
>>2168028
Сразу и синтаксис, и настройки сервера -- это сликшом большая область в каком-то смысле. Ты мог бы отдельно исследовать эти оба вопроса более минималистичными примерами.
Я знаю, что ты это не делаешь. Пора начинать. Тебе самому проще будет.
Аноним 27/09/21 Пнд 00:49:04 2168054501
>>2168015
>перестать пиздеть
>двач
Тогда на твои тупые вопросы совсем некому будет отвечать.
Постскриптум, такскать.
Аноним 27/09/21 Пнд 00:58:01 2168065502
>>2168028
>синтаксис/настройки сервера неправильные
>переименовывал txt файлы блокнота в php
Тут ничего даже не посоветуешь толком. Рано ещё тебе вопросы задавать мне думается.
Попробуй себе окружение нормальное поднять что ли. Погугли как люди работают и что используют. Какой, в задницу, блокнот, алё?
Аноним 27/09/21 Пнд 01:37:08 2168090503
>>2168054
Я говорю к тому, что многие программисты много выдвигают всяких теорий, а потом многри из них не могут доказать на практике их работоспособность. И зачастую ещё и даже не хотят. Потому что баги фиксить не кайф, потому что отлаживать не интересно, потому что кодинг вообще не так интересен. Концепции на концепциях. Если менеджер приходит с задачей, которая не вписалась в концепцию, то концепция не виновата, а вот задача то сука плохая. Если медленно работает, то юзеры виноваты, нагрузили сервис, не могли сука потерпеть. Если баги, то ну и хуй с ними, концепкция есть, а баги не кайф фиксить, ну их нахуй. Если что-то не работает, то, значит, не не свезло, потомк ак-нить заработает. Но знать концепцию, даже не рабочую, всё равно сука надо. А писать работающий корректный код, нарушая при этом концепцию, -- ну это вообще удел быдла как бы. Если кто-то говорит, что концепция неудачно, то её просто не умеют готовить.
Аноним 27/09/21 Пнд 10:58:15 2168236504
>>2168090
Вот тот случай когда пиздеть лучше не стоило. Что ты несёшь, пчел?
Аноним 28/09/21 Втр 00:14:16 2168772505
>>2168090
>>2168236
А в принципе он зачастую прав: неопытным разработчикам это свойственно.

Не надо всех под одну гребёнку, конечно
Аноним 28/09/21 Втр 00:15:57 2168775506
>>2167675
тебе нужна функция роутера, которая будет принимать адрес, разбирать его, и на основе запрограммированных правил отдавать нужный контент
Аноним 28/09/21 Втр 00:18:10 2168778507
>>2166586
это неправда, есть определённый слой байтоёбских контор (типа VK)
Аноним 28/09/21 Втр 00:27:52 2168784508
>>2168778
Туда же всевозможные биллинги, и многие сервисы в телеком-компаниях и финтехе.

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

Их немного, но платят, кстати, отлично.
Аноним 28/09/21 Втр 00:36:34 2168786509
1.mp4 783Кб, 332x480, 00:00:22
332x480
>>2168784
Инсайд: во многих (далеко не всех) банках, кстати, фреймворки вообще запрещены из-за уязвимостей и зависимостей от постоянно компрометируемых компонентов.

Такие банки предпочитают нести затраты на разработчиков своих, но более безопасных "велосипедов", в которых не возникают 0-day уязвимости в рандомные моменты по всему интернету.
Аноним 28/09/21 Втр 00:38:50 2168788510
>>2168786
Разве пхп используется в банках?
Аноним 28/09/21 Втр 00:39:34 2168790511
>>2168788
а куда деваться

конечно
Аноним 28/09/21 Втр 00:40:05 2168791512
Аноним 28/09/21 Втр 00:40:29 2168792513
>>2168790
А Java для чего тогда и прочие сишарпы?
Аноним 28/09/21 Втр 00:42:03 2168793514
>>2168791
>>2168790
Без шуток? Есть случаи, когда пхп используется банками не только для заглавных страниц сайтов, но и для разных ответственных внутренних операций?
Аноним 28/09/21 Втр 00:45:07 2168796515
>>2168792
>>2168793
>>2168791
>>2168792
Как сказать... Java на своём месте.

А PHP проекты зачастую возникают как быстрые решения (в этом PHP нет равных) и постепенно прорастают в инфраструктуру

Например, написали 10-15-20 лет назад CRM или биллинг или телефонию на PHP -- что делать с такими программами? Работают отлично, новые функции оперативно впиливаются. Так и "едут" такие проги вместе с банком десятилетиями.

Да и что плохого, кроме, может, быть моды?
Аноним 28/09/21 Втр 00:48:34 2168797516
>>2168796
К каким книжкам (или не книжкам) можно приобщиться, чтобы быть способным ковырять такие серьёзные прожекты?
Аноним 28/09/21 Втр 00:56:50 2168802517
cyberkisa.mp4 657Кб, 320x400, 00:00:13
320x400
>>2168796
Я недавно работал в финтех-корпорации на проекте РНР.

Нас было 5 человек в команде, у нас было 2 проекта (платёжный биллинг и программа внутреннего учёта) и "ехал" этот отдел примерно за 1.5M₽/месяц ФОТ.

За неплохую зарплату меня выжимали как тряпочку, при помощи всех современных практик отчётности.

>>2168797
ИМХО, чтобы приобщиться к таким прожектам, надо в первую очередь культурно соответствовать запросам корпораций. Как и везде, негласно и неявно работает система свой-чужой.

А по книгам -- меня сейчас тут забросают камнями -- но https://fktpm.ru/file/84-soversennyi-kod.pdf , например.
Аноним 28/09/21 Втр 01:02:29 2168806518
>>2168802
Моё почтение, дяденька, вы похоже понимаете, о чём говорите.
Аноним 28/09/21 Втр 01:09:39 2168809519
>>2168806
Благодарю, сэр. Про "дяденьку" вы правильно угадали.
Аноним 28/09/21 Втр 01:19:58 2168812520
>>2168809
А это правда, что опыт в какай-то момент приобретает ту критическую массу, при которой конкретный язык отходит на второй план?
То есть в голове полностью сформирована картина того, что и как в итоге должно получиться, и сделать это можно на чём угодно, хоть на пхп, хоть на ноде, хоть на джаве, хоть на голанге?
Аноним 28/09/21 Втр 01:20:53 2168813521
Аноним 28/09/21 Втр 01:34:16 2168816522
large.jpg 161Кб, 500x299
500x299
>>2168812
>>2168813
И да, и нет. Я бы уточнил вопрос.

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

Практически -- почти однозначно нет, т.к. за каждым языком тянется инфраструктура, некоторые тонкости (окружение, менеджер пакетов, быстродействия, область эффективного применения, специфические ограничения) -- и у хорошего исполнителя всё это должно быстро "отскакивать от кончиков пальцев".
Аноним 28/09/21 Втр 10:58:39 2168908523
16285246415270.jpg 44Кб, 604x513
604x513
>>2120804 (OP)
Аноны, из тех кто РАБотает, поясните какое у вас рабочее окружение на локальной машине? Я правильно понимаю, что все на линуксах сидят? Или есть те, кто на винде? Используете ли xampp, openserver или через вагрант, или docker? Как с mysql взаимодействуете - через phpmyadmin, workbench или еще как-то?
Аноним 28/09/21 Втр 11:12:50 2168920524
>>2168908
Очевидная макось, докер. С майскл - через любой клиент бля, какой пхпмайадмин?
Аноним 28/09/21 Втр 13:21:00 2169009525
>>2168908
Линукс, убунту, KDE. Хочу попробовать уйти на Дебиан на xfce, потому что кеды достали багами. Иногда docker, иногда просто. С базой через Phpstorm.
Аноним 28/09/21 Втр 14:59:58 2169091526
>>2168908
Да у кого как.

Я долгое время просидел под виндой на XAMPP, потом на WSL/Debian.

Потом понадобился докер, но под виндой он сильно тормозит, и придётся снова ставить линукс.
Аноним 28/09/21 Втр 19:15:38 2169389527
Анончик, как освоить ебучий Laravel? Вот все ок с функциональным стилем и ООП. Но сколько же говна напридумывали в этом фреймворке: фасады-хуяды, посредники-хуедники, миграции-эмиграции... голова лопается от этого дерьма. с чего начать, чтобы не задемотивироваться этим дерьмом? :(
Аноним 28/09/21 Втр 19:24:33 2169403528
>>2169389
>с чего начать, чтобы не задемотивироваться этим дерьмом
Начни с документации. На самом деле Лара снаружи довольно простая и удобная. Почти CMS, но только для программиста, а не хуятора типовых сайтиков на шаблоне.
Всегда начинай с документации - сперва бегло ознакомься, а потом начинай свои пет-проекты хеллоуворлдить согласно туториалам.
Я вот люблю простой блог делать, с админкой и комментариями. Для ознакомления с новым фреймворком это хороший проект.
Аноним 28/09/21 Втр 19:39:14 2169426529
4BB5161B-CDC2-4[...].jpeg 75Кб, 1280x1256
1280x1256
! Кто работал с Drupal?
Как оно? Какие основные отличия от Symfony?
Аноним 28/09/21 Втр 20:00:48 2169440530
>>2169389
Просто пойми, что в других технологиях и фреймворках тебя ждёт то же самое. Без миграций веб-приложения никто не делает за пределами CMS. А фасады были описаны для С++ в начале 00-х. Так что осваивать Ларавель надо точно так же, как и всё остальное.
Аноним 28/09/21 Втр 20:01:43 2169441531
>>2169426
Drupal -- это CMS. Это абсолютно другое. Это больше для типа просто сайтов. Меньше кодинга и больше конфигурации.
Аноним 28/09/21 Втр 20:15:28 2169452532
Каково применение статических методов?
Аноним 28/09/21 Втр 20:36:00 2169459533
Двоч при работе с базой данных mysql и каким-нибудь объектом. Допустим класс человек, его имя, рост, вес, пол. Как правильнее - в геттерах и сеттерах получать и отправлять данные в бд или делать отдельной функцией получение данных из бд и внесение, а уж из функции запускать геттеры и сеттеры?
Аноним 28/09/21 Втр 20:51:33 2169465534
>>2169459
>в геттерах и сеттерах получать и отправлять данные в бд
Получается запрос к бд на каждый пук и кек над моделью? А если у тебя этих моделей пару десятков тысяч крутится в рантайме?

>делать отдельной функцией получение данных из бд и внесение
Это.
Аноним 28/09/21 Втр 20:59:14 2169471535
>>2169459
Как я понимаю ты с ActiveRecord сразу начал. Попробуй сперва TableDataGateway паттерн использовать - хотя бы поймёшь как с базой надо общаться.
Аноним 28/09/21 Втр 21:08:53 2169481536
Аноним 28/09/21 Втр 21:50:20 2169510537
Аноним 28/09/21 Втр 22:45:30 2169559538
>>2169459
Везде по-разному. Есть паттерны ActiveRecord и DataMapper. Почитай, как сделано в существующих фреймворках в их собственных доках. Вот честно, я думаю, что без опыта ты не сможешь сделать всё идеально. Ну возможно сделаешь неплохо или нормально. На самом деле даже в этих фреймворках хоть это и работает для многих примеров, но иногда ООП в базах данных работает плохо, и приходится его покидать. В высоконагруженных проектах минимум часть взаимодействия с дб написано на голом или почти голом SQL, ну естественно с соответствующей защитой от SQL-инъекций. Есть такое понятие как "объектно-реляционное несоответствие". Реляционные таблицы плохо ложатся на объекты. Там всегда сложности. Есть вроде у Фаулера обзор обоих этих паттернов. ActiveRecord неплохо реализован Yii2, а DataMapper вроде реализован в Doctrine ORM.

У Роберта Мартина в clean code кое-где высказывается мнение, что объекты со своим поведением и объекты как структуры данных с полями -- это всё-таки разные вещи. Мне нравится эта идея и исходя из неё объектам, которы представляют таблицы дб, геттеры и сеттеры нафиг не нужны. Нужны только методы для работы с дб, типа сохранить или найти. Либо в самом объекте(ActiveRecord), либо в дополнительных объектах(DataMapper). Слои абстракции с логикой уже анкидываются где-то сверху, возможно в других объектах на уровень выше. Если это обосновано и удобно в целом.
Аноним 29/09/21 Срд 13:08:38 2169931539
Надо ли реализовывать csrf защиту, если у меня уже указан Access-Control-Allow-Origin: https://мойсайт?
Сайт обрабатывает только POST запросы
Аноним 29/09/21 Срд 15:40:34 2170058540
>>2169510
Нет Только читал по нему доку когда-то.
Аноним 29/09/21 Срд 20:32:59 2170266541
>>2169389
Laravel то фреймворк для даунов. В том смысле, что он очень простой и своей простотой поощряет писать говно. Пишу на нём год, нечеловеческие усилия прилагаю, чтобы писать всё нормально. Второй параллельно проект на Симфони и вроде всё очень похоже, вроде нет проблем с пониманием как что-то и там и там сделать, но переходы всегда такие тяжёлые, я ебу. На Лару как раз вкатывался, было тяжело с пониманием всей хуйни, благо дока охуенная была и ответов в тырнете много. А вот через полгода столкнулся с Симфони и тут говна поел знатно, порог вхождения блять на порядки выше, даже с учётом, что в Ларе половина компонентов оттуда, дока говна ебаного, нихуя не понятно. Если знаешь ООП, то может Симфони больше подойдёт, там написано без говняка(в плане кода) хотя бы. В плане видосов есть канал Дмитрия Афанасьева, в своё время очень нравилось, прямо заебумба. И самый очевидный совет: забей хуй на фасады. Просто забудь, что они существуют, пока ты не понимаешь почему на них срут в интеренет, но в момент осознания может быть уже поздно. Поставь Brave браузер и удали этот кусок css'а со страницы документации.
Аноним 29/09/21 Срд 21:55:19 2170315542
Аноним 29/09/21 Срд 21:56:09 2170317543
>>2121098
Полно новых проектов на симфони/ларе
Аноним 29/09/21 Срд 22:14:18 2170335544
>>2121098
А новые на чем пилят то? Вообще такое ошчушчение, что так говорят про все языки возвраста Пыхи и старше. Но по факту более новые языки растут разочаровывающе вяло. Иногда попадаешь на работу, а там оказывается, что тимлиды и CTO косонько смотрят на все твои типа "новые" Го, Ноды и Свифты. Многие программисты продолжают считать новыми и пугающе непонятными все языки и технологии новее 2003 года. И такие челы зачастую принимают много решений, реально влияющих на рынок. Часто вообще попадаются пыхеры, которые, как будто с 2007 с места не сдвинулись.
,
Аноним 30/09/21 Чтв 00:47:50 2170418545
>>2170335
>тимлиды и CTO косонько смотрят на все твои типа "новые" Го, Ноды и Свифты
Ну так никто не хочет превращать проект в зоопарк языков и технологий. Где потом людей на него искать? Если есть возможность сделать на основном языке, то нафиг не нужны Го, Ноды и Свифты, а с этим у ПХП вполне норм - у него очень много библиотек.
Аноним 30/09/21 Чтв 03:16:39 2170444546
>>2170418
Товарищ говорит, что большая часть пыхи -- легаси. Я спрашваю -- если это так, то на чём НЕ легаси тогда?
Аноним 30/09/21 Чтв 10:57:53 2170559547
>>2170444
На том, чему меньше двух часов
Аноним 30/09/21 Чтв 11:01:44 2170560548
16302405498290.png 263Кб, 432x477
432x477
Запилите уже в шапке как пыху устанавливать, заебало каждый раз лезть в гугол и искать инфу где и как его прописывать
Аноним 30/09/21 Чтв 12:01:47 2170593549
>>2170560
Шапку читай - там есть всё нужное, вкатун.
Аноним 30/09/21 Чтв 19:38:59 2170965550
>>2170560

Описание, правда немного устаревшее, есть тут: https://github.com/codedokode/pasta/blob/master/soft/php-install.md

Скачать версию для WIndows можно тут: https://windows.php.net/download#php-8.0

Там ты заметишь что есть несколько разных сборок с загадочными названиями вроде "VS16 x64 Non Thread Safe". Вот как они расшифровываются:

VS16 = Visual Studio 16 - это версия компилятора, которым была собрана сборка. Ее надо запомнить. Если ты будешь позже скачивать расширения к PHP, а также Апача, то надо использовать собранную таким же компилятором (VS16) версию. Иначе может не заработать. Если ты не планируешь ставить расширения и Апач, то можно не запоминать.

x64 = 64-битная версия, x86 - 32-битная. Если у тебя 64-битная ОС, выбирай 64-битную версию. Расширения PHP и Апач должны быть такой же битности, так что запомни, какую версию выбрал.

Non Thread Safe/Threas Safe - поддержка многопоточности. Надо выбирать версию с поддержкой многопоточности (Thread Safe), иначе могут быть проблемы при запуске PHP из-под Апача.

Далее, папку с PHP хорошо бы прописать в PATH и перезагрузить компьютер. Это описано тут: https://apache-windows.ru/%D0%BA%D0%B0%D0%BA-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%BF%D1%83%D1%82%D1%8C-%D0%B4%D0%BE-php-%D0%B2-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%83%D1%8E-%D0%BE%D0%BA%D1%80/

Далее, у тебя могут возникнуть сложности при работе с командной строкой. Прочти этот урок, чтобы их решить: https://github.com/codedokode/pasta/blob/master/soft/cli.md


Аноним 30/09/21 Чтв 19:52:39 2170978551
>>2170335

Разные языки предназначены для разных задач и у них свои плюсы и минусы. Ну, например, Свифт придуман для написания GUI программ под iOS, и вряд ли кто-то будет на нем делать веб-сервис.

Что касается сравнения Ноды и Го, я не вижу тут особых плюсов у Ноды. Разве что, возможно, у нее больше пакетов для разных целей в экосистеме. Нода вообще, по моему, плохо подходит для написания бизнес-логики, так как в ней все асинхронное и у тебя код будет наполовину состоять из async/await.

Можешь посмотреть Го и попробовать на нем что-нибудь написать. Потом можешь отписаться тут, чем он лучше или хуже PHP.

Приведу пару моментов, где PHP удобнее. Ну например, в PHP добавление в массив числа пишется короче:

$array = [];
$array[] = 10;

А в Го длиннее:

var array []int
array = append(array, 10)

Или в PHP ты можешь легко создавать массивы на ходу:

$city = ['name' => "Москва", population => 10_000_000];

А в Го ты в такой ситуации должен будешь сначала объявить тип. Это можно считать как плюсом, так и минусом, смотря с какой стороны смотреть.

Если ты хочешь язык, где надо меньше писать кода, то лучше подойдет не Го, а Питон. Но он медленный в работе, зато быстрый в написании кода.
Аноним 30/09/21 Чтв 20:08:40 2170984552
>>2169931

Надо. Access-Control-Allow-Origin говорит, можно ли отдавать ответ с твоего сайта скрипту на другом сайте. Но он не запрещает отправлять запросы с другого сайта на твой. То есть, ты можешь запретить только показывать результат запроса, но не можешь предотвратить его отправку. Этот заголовок введен не для включения защиты от CSRF, а наоборот, для отключения защиты.

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

Например, можно сделать страницу с формой с method='POST' и яваскриптом отправить эту форму на твой сайт и она успешно отправится.

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

Если ты хочешь радикальное решение проблемы CSRF, то откажись от авторизации через куки. Вместо кук отправляй авторизационный токен с каждым POST-запросом либо в теле запроса либо в заголовках. Тогда CSRF будет тебе не страшен.

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

Еще один вариант решения - проверять заголовок Origin ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin ). Если вдруг запрос пришел без Origin, надо отвергать такой запрос. Это значит, старые браузеры без Origin не будут поддерживаться.

Еще один вариант борьбы - это атрибут SameSite=strict у кук ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite ). Он говорит, что куки не надо отправлять, если запрос к тебе отправлен с другого сайта. Минус - при переходе на твой сайт с другого пользователь оказывается разлогиненным, так как куки не отправляются и только при следующем переходе куки будут отправлены. Это не очень удобно на практике.
Аноним 30/09/21 Чтв 20:34:16 2171006553
>>2169459

Ты можешь почитать в уроке обзор подходов для работы с БД с помощью ООП: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

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

>>2169452

1) Их применяют там, где не нужна привязка к объекту. То есть это функции, которым не нужен экземпляр объекта. Например: функция, считающая число дней между двумя датами. Ей не нужен $this, она не привязана ни к каким объектам, потому она статическая.

Паттерн Utility Class - это сборник таких статических функций. Например, класс TimeUtility может содержать функции для работы с датой/временем, ArrayUtility - для работы с массивами.

Тут можно заметить, что такую функцию логичнее вообще было бы не помещать в класс, а сделать обычной функцией. Да, логичнее. Но в Яве нельзя писать функции вне классов, потому там придумали такой паттерн. А в PHP можно, но нет автозагрузки для функций, потому мы используем такой паттерн. Но ты все равно можешь сделать файл functions.php, подключить его в композере и класть функции туда.

2) Для статических конструкторов. Иногда есть несколько способов создать объект с указанием разных параметров. И мы хотим иметь несколько конструкторов для объекта. Тогда мы можем реализовать их в виде статических методов.

Аноним 30/09/21 Чтв 20:40:30 2171011554
>>2169426

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

>>2169389

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

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

Аноним 30/09/21 Чтв 20:43:00 2171015555
Laravel это тот же самый PHP (+ небольшая надстройка над ним) или нечто фундаментально другое?
Аноним 30/09/21 Чтв 20:52:07 2171024556
>>2167675

Что ты хочешь сделать? И какой сервер ты используешь?

Если два независимых виртуальных хоста, на каждом из которых свой независимый код, то тебе надо сделать в Апаче 2 виртуальных хоста и 2 папки для них, а в случае с nginx/php-fpm - надо сделать 2 конфигурации и опять же, 2 папки для PHP кода.

Если же ты хочешь, чтобы у тебя был единый PHP код, и к нему поступали запросы для обоих хостов, то тебе нужно сделать один виртуальный хост в Апаче с Servername testurl.test, но прописать к нему Serveralias page1.testurl.test или даже Serveralias ★.testurl.test. В Nginx аналогично, настраиваем конфигурацию для всех поддоменов.

В случае с Апачем, документация по виртуальным хостам (англ) тут: https://httpd.apache.org/docs/2.4/vhosts/name-based.html
Аноним 30/09/21 Чтв 21:08:19 2171040557
>>2167427

Переменные $_SERVER тебе задавать не надо. Их задает веб-сервер и PHP при поступлении запроса. Тебе надо только проверять их содержимое.

Ты можешь увидеть содержимое $_SERVER, сделав var_dump($_SERVER);

Для редактирования кода лучше взять бесплатный Notepad++ или пробную версию Sublime Text или бесплатный VS Code.

>>2166942

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

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

Далее, мы можем заметить, что у нас есть действия, которые вроде бы относятся по смыслу к сущности, но которые нельзя поместить в ее класс. Например, загрузка товара из базы данных: мы не можем поместить ее в класс товара, так как объект товара не существует до загрузки. Да и нехорошо, все складывать в один огромный класс. Такие функции удобно собрать вместе в класс "сохранятель товаров". Аналогично, мы можешь сделать класс вроде "оформитель заказов", "регистратор пользователей", "управлятель заказами" и так далее. Эти классы не соответствуют какой-то сущности, и у них нет свойств, и они содержат лишь наборы действий.

Постепенно мы весь код программы разложим по классам. Это и будет "каноничное" использование классов.

Если ты хочешь изучить ООП, то открой учебник их первого поста треда и прочитай там главу про ООП. Если что-то непонятно, спрашивай. Желательно на конкретном примере (то есть, что ты хочешь сделать с помощью ООП).
Аноним 30/09/21 Чтв 21:24:37 2171058558
>>2166419

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

Если ты возьмешься сразу за фреймворки, то тебе будет очень трудно разобраться из-за незнания основ. Задача про студентов как раз и позволяет изучить основы.

>>2165247

Теоретически, если злоумышленник не может внедрить код на твой сайт (XSS), то хранить авторизационные данные в localStorage безопаснее, так как они не добавляются в запрос автоматически, в отличие от кук, что исключает CSRF.

Если же у злоумышленника есть возможность внедрять скрипты, то хоть куки ты используй, хоть localStorage - он сможет отправлять поддельные запросы от имени пользователя.

Получается, localStorage безопаснее.
Аноним 30/09/21 Чтв 21:36:55 2171067559
1.png 99Кб, 1001x883
1001x883
>>2171040
Да я в принципе понял идею, но в книжке что-то дичь с этими примерами аутентификации, там дальше левая бд создается, и типа пары логин пароль будто бы будут подходить, хотя пароли хранятся в другом текстовом файле .htpasswd, который про эту бд и не знает.
Автору следовало просто наверное инпут поля формы сделать и все.
Аноним 30/09/21 Чтв 21:56:12 2171082560
>>2163327

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

Хороший вариант тут - отправить запрос на сервер, тот возвращает кусок HTML кода и этот кусок просто вставляется в текущий документ (без создания новых). Например, так:

// допустим, с сервера пришел HTML код в переменной html
document.getElementById('result').innerHTML = html;

Если ты хочешь формировать страницу на стороне сервера, то использовать DOMDocument не лучшая идея. Так как тебе придется писать очень много лишнего кода. Лучше использовать шаблонизацию, как описано тут: https://github.com/codedokode/pasta/blob/master/php/templates.md

То есть, ты заранее делаешь шаблон и потом просто подставляешь в него данные. Есть хороший и удобный шаблонизатор Twig.

Если же ты хочешь перенести шаблонизацию на клиент, то в общем случае это усложняет код и утяжеляет фронтенд. Теперь пользователь должен будет загрузить на клиент шаблонизатор, шаблоны. Шаблонизацию на клиенте имеет смысл делать, если у тебя сложная логика на клиенте и ты обрабатываешь и преобразуешь там данные. Если тебе просто надо что-то отобразить, то проще получать с сервера кусок HTML и вставлять в нужное место страницы.
Аноним 30/09/21 Чтв 22:08:02 2171089561
>>2163297

Это плохой код, и плохая книга, если в ней такому учат. Параметры в запрос надо подставлять через плейсхолдеры и подготовленные запросы (пример для mysqli: https://www.php.net/manual/ru/mysqli.quickstart.prepared-statements.php ). Тогда данные автоматически экранируются как надо.

Если тебе хочется экранировать данные вручную, то надо это делать непосредственно перед запросом (а не в функции get_post).

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

Также, тут неправильно обрабатываются ошибки. Они выводятся на экран. Это значит, что если произойдет ошибка, то пользователь ее увидит и ничего не поймет, а администратор сайта о ней не узнает. Ошибки надо писать в логи. Проще всего включить режим выброса исключений в mysqli ( функцией https://www.php.net/manual/ru/mysqli-driver.report-mode.php с параметрами MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT). Тогда локально ошибки будут выводиться на жкран, а на продакшене - писаться в логи.
Аноним 30/09/21 Чтв 22:15:40 2171097562
>>2163287

Ошибка где-то в другом месте. real_escape_string может превратить данные в пустую строку только если в них содержится совсем уж мусор (что маловероятно). Потому сдампь содержимое POST с помощью var_dump($_POST); и сдампь что получается после real_escape_string.

>>2162318

Да.

>>2161979

Нужна очередь задач, а не костыли.

>>2161891

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

>>2161496

Только если у тебя есть готовые наработки и ты способен быстрее других писать парсеры, обходить капчи, блокировки итд. Так как скрейпинг довольно простая задача, там высокая конкуренция и низкая оплата.
Аноним 30/09/21 Чтв 22:29:57 2171121563
>>2161470

Мы используем шаблоны https://github.com/codedokode/pasta/blob/master/php/templates.md

>>2159811

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

>>2155161

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

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

То есть, надо много трудозатрат, чтобы сделать такое окошко, а пользы от него будет мало.

А смотри, какие плюсы есть у текстового файла:

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

То есть, возможностей текстовый конфиг дает намного больше, чем окошко с галочками.
Аноним 30/09/21 Чтв 22:36:21 2171127564
>>2171067

Это ты напутал.

HTTP-авторизацию можно проверять в двух местах - на уровне веб-сервера (apache или nginx) или на уровне PHP. В первом случае при запросе без правильного пароля сервер его отвергает и PHP даже не вызывается. Во втором случае веб-сервер на пароль не смотрит и передает все запросы в PHP.

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

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

Если ты хочешь сделать что-то похожее на обычную регистрацию, то лучше не использовать HTTP-авторизацию, а использовать авторизацию на основе секрета в куках. Потому что куками легко управлять: поставить куки, очистить куки. А HTTP-авторизацией управлять неудобно, например, нет простого способа "разлогинить" пользователя.
Аноним 30/09/21 Чтв 23:19:54 2171174565
>>2171040
Да я понял в общих чертах про переменные сервера уже, vscode установил как выше советовали и Notepad++ для удаления BOM'ов (может и вскод умеет, но я не нашел).
>>2171089
Ну он говорит в книге дальше, что лучше через подстановку prepare делать, там постепенно как бы примеры идут.
>>2171097
Ничего вообще не менял, только добавил дамп этих только переменных, все работает как надо. Чертовщина какая-то, может опять из-за каких-нибудь BOMов пусто было.
>>2171121
Еще не дошел в книге про это, возможно там вообще нет про это, отдельно тогда поищу.
>>2171127
Да, точно. Из-за BOM'а в подключаемом файле не работали хедеры http 401, а я думал что-то из-за модуля апача. Нельзя быть самоуверенным, особенно новичку.
Спасибо за подробные ответы, вот уж не лень писать действительно!
Аноним 01/10/21 Птн 00:22:26 2171208566
>>2170978
Ну собственно вот отличный пример, почему к пхп макакам относятся как к конченному быдлу и непрофессионалам.

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

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

И вот, 26 лет спустя, какой-то вырожденец на каменном ебале сравнивает массив и хеш мапу. И пердит про "удобно" "не удобно".
Аноним 01/10/21 Птн 04:25:34 2171237567
>>2171208
> И назвал хеш мапу ебать массивом, ну чисто по приколу.
Есть термин ассоциативный массив. Отсюда это и пошло. Если ты такой умный, то дай определение массива из какого-нибудь более или менее серьёзного источника. "массив -- это вот так и вот так", потому что такая терминология в библиотеке твоего любимого ЯП, -- это не аргумент. Терминология от технологии к технологии постоянно меняется. Про джаваскрипт вообще смешно даже. Массив в PHP -- это очень хитрая структура, которую так просто не опишешь. Технически под капотом она реально может эффективно функционировать и как хеш-мап, и как индексированная последовательность.

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

Я воспринимаю программирование как работу, а не как способ возвыситься в узком кругу ценителей. Поэтому учу только скучные технологии строго под задачи и рынок. Даже если в пхп будут все эти крутые структуры, то код с ними будет менее понятен и дороже в поддержке. Не только потому, что пхпшники их не знают. Это лишний бойлерплейт и лишнее думанье. Структуры в этих языках намеренно упрощены, а алгоритмы прячутся под капот, чтобы разработка была эффективнее. Я всегда думаю про цену поддержки, надёжность и отказоустойчивость, а не тупо накидать, чтобы было круто. Ты не студент случайно? Мне кажется, что эту еботерию про охуеть интеллектуальные алгоритмы и байты уровня первокурсоты какого-нибудь матфака Урюпинска пишут именно студенты, возможно преподы или научные работники, которые редко пишут больше 1000 строк в одном проекте. Как много ты писал бенчмарков, которые на реальных задачах могут продемонстрировать реальный прирост производительности твоих эффективных "стеков на векторе"? Не задачах с олимпиад, а реальных задачах бизнеса. Сколько строк было в максимально большом проекте? А сколько максимально людей было у тебя в команде?

Фанаты Хаскеля, Раста и других неебаться крутых языков вообще всё время пишут в интернете про то, какие популярные мейнстримовые языки говно. Какого говно жс, пхп, с++, джава. Но рынок и технологии продолжают крутиться вокруг них, а не вокруг любимых всеми Растов и Хаскелей.
Аноним 01/10/21 Птн 06:22:23 2171246568
>>2171237
>Терминология от технологии к технологии постоянно меняется
Не позорься, просто погугли пару минут и поймешь какую хуйню ты сморозил.

>Массив в PHP -- это очень хитрая структура, которую так просто не опишешь
Это хеш мапа. Все структуры данных в пхп это хеш мапы. И объекты и массивы и небо и аллах.

>Вообще очень смешно, что чел ебался писать эти километры объяснений для нубов
Именно это и нужно знать нубам. Пхп программист это белая ворона, паршивая овца. У него пробелы в фундаментальных знаниях. Сам факт того что ты буквально первый шаг в обучении программированию превозносишь как какой-то невероятный элитизм об этом просто кричит. Эта хуйня идет сразу после "научиться писоть". Буквально: "почитать синтаксис", "написать хеллуворлд", "прочитать про структуры данных".

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

Дальше какой-то поток сознания про цену и надежность, хуй знает как ты это все измеряешь офк никак, просто надо пиздануть.

Новичку из твоей стены текста нужно знать вот это: "Поэтому учу только скучные технологии строго под задачи и рынок". Ты сам не понимаешь что это приговор? Человек, который пишет на ссаном го имеет возможность пощупать любой свежий или несвежий яп. Потому что принципы у них будут общие. Термины одинаковые. И начать писать это дело банальной привычки. Для таких людей выбор языка для проекта это действительно выбор инструмента.

А пхп макаке либо нужно самостоятельно дрочить computer science, потому что в повседневной работе он с этим просто не сталкивается. И становиться "элитой". Только это не элитизм, а обычное положение вещей для нормальных языков. Либо шипеть "нинужно" и какие-нибудь мантры про понятный простой и надежный бойлерплейт, в стиле твоего поста.
Аноним 01/10/21 Птн 09:42:44 2171303569
>>2171208
>относятся как к конченному быдлу и непрофессионалам
Это проблемы быдла и непрфессионалов вроде тебя.
Аноним 01/10/21 Птн 10:19:40 2171331570
Допустим делаю форму регистрации, при регистрации новый пароль вводится 2 раза, есть ли разница с точки зрения безопасности, сравнивать пароли тупо в текстовом в формате или их тоже лучше предварительно захешировать?
Аноним 01/10/21 Птн 12:04:38 2171417571
Сделал класс условного человека и его редактирования, а если я хочу сделать функции по типу сколько всего человек в базе, сколько из них храмые, то эти функции необходимо уже размещать в другом классе или в этом же? Или лучше не в классе, а сразу сделать эти функции в месте, где мне эти данные понадобятся?
Аноним 01/10/21 Птн 12:21:10 2171426572
>>2171417
>а если я хочу сделать функции по типу сколько всего человек в базе, сколько из них храмые, то эти функции необходимо уже размещать в другом классе

Да, но вообще мне кажется что ты без определенных юзкейсов не поймешь почему тот или другой подход лучше или хуже. Попробуй придумать абсолютно разные задачи, которые работают с твоими людьми, сделай например какой-то демографический сервис, который считает людей по годам или городам, сделай какой-то налоговый сервис, который считает людей по зп или пенсии, то есть чтобы у тебя разные модули общались с каким-то общим классом. Мне кажется что так у тебя быстрее выработается картина, что и на какие слои удобнее делить.
Аноним 01/10/21 Птн 14:23:17 2171512573
>>2171246
>Не позорься, просто погугли пару минут и поймешь какую хуйню ты сморозил.
Ты только снимаешь с себя необходимость что-то доказывать этими словами.

Может быть, ты этого не понимаешь, но я хоть и не учёный по теме CS и не плюсовик, но знаю эти базовые структуры данных типа стеков/очередей/деков, умею наивным универовским способом реализовать связный список на указателях или кучу на массиве. Я знаю в целом, как рабоатет С и С++ и что такое стек вызовов и куча в памяти, и как работает планеровщик процессов в ОС. И я пробовал писать на Хаскеле и знаю, что такое монады. Но пишу всё равно на пыхе и жиесе. Для меня в основном выбора языка под задачи то и не существует. Язык выбирает начальник, который за это платит. Потому что "а где мы найдём других таких как ты потом" и "мы не хотим зоопарк языков".

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

>А пхп макаке либо нужно самостоятельно дрочить computer science, потому что в повседневной работе он с этим просто не сталкивается.
Слабо представляю, как может быть иначе. CS требует подготовки.
Аноним 01/10/21 Птн 15:22:04 2171563574
>>2171246
>Это хеш мапа
Не совсем просто хеш мапа. Во-первых это упорядоченная хеш-мапа. Т.е. она помнит порядок пар ключ-значение. И там есть указатели на следующий/предыдущий элмент как в linked list. Так что фактически это упорядоченный хеш-мап, совмещённый со связным списоком.
Аноним 01/10/21 Птн 18:29:51 2171718575
>>2171512
>Ты только снимаешь с себя необходимость что-то доказывать этими словами.
Доказывать что свзязный список это связный список, а массив это массив? Мне это не надо, спасибо.

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

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

>Ты же в курсе, что в Го нет исключений и дженериков, кстати?
Ну если бы какой-нибудь долбоеб сравнивал дженерики с массивами я бы об этом и написал.
Аноним 01/10/21 Птн 18:56:34 2171733576
>>2171174

VSCode умеет сохранять файлы без BOM. Нужно выбрать кодировку "utf-8" (также есть кодировка utf8bom, она добавляет BOM в начало файла). заходишь в settings -> поиск по encoding -> выбираешь utf8.

>>2171208

Ты написал фигню. Есть такое понятие "ассоциативный массив". Хеш-таблица - это лишь одна из возможных реализаций ассоциативного массива. Так что название "массив" в PHP абсолютно нормальное.

https://xlinux.nist.gov/dads/HTML/assocarray.html

Ты не разобрался, а брызжа слюнями, побежал всех вокруг обзывать "макаками".

Представь, что кто-нибудь скажет, что "белые люди" самостоятельно выделяют и освобождают память и указывают типы всех переменных, а "макаки" пользуются сборщиком мусора и динамической типизацией. И вот теперь ты стал макакой.
Аноним 01/10/21 Птн 19:03:34 2171738577
>>2171733
Странно, но там UTF-8 и стоял по дефолту.
Аноним 01/10/21 Птн 19:03:52 2171739578
>>2171331

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

>>2171417

Я бы тебе советовал выложить твои классы на гитхаб для проверки. Вдруг ты ошибся, а тебе укажут на ошибки и помогут исправить.

Обычно функции, которые работают с таблицей в базе, собирают в один класс. Есть несколько паттернов (я описал из тут: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md ), самый простой это TableDataGateway.

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

Это называется "принцип разделения ответственности". У каждого класса своя "зона ответственности" и он не занимается тем, за что отвечает другой класс.

Частая ошибка начинающих в том, что они пытаются все запихнуть в один класс. Например, обработку формы редактирования, проверку на ошибки, работу с базой данных, вывод результата. В результате получается не ООП, а обычная лапша, завернутая в класс.


Аноним 01/10/21 Птн 19:23:04 2171756579
>>2171718
>На работе мнения макаки
Хорошо иметь работу. Тебе не понять.
Аноним 01/10/21 Птн 19:36:44 2171766580
>>2171733
>Ты написал фигню. Есть такое понятие "ассоциативный массив"
Капуцин ебаный, ты читать умеешь? Я именно именно о том и говорю что "массив" и "ассоциативный массив" это разные вещи.

Я хуй знаю, давай я тебе аналогию приведу что-ли.

У чела есть вилка и ложка. Он ест мясо вилкой, а суп ложкой.
Подходит пхп макака и говорит:
- Моя ложка удобнее твоей вилки.
Подходит еще один и добавляет:
- Да. У нас в дурке вообще вилок нет. Сидим кайфуем, удобно пиздец. Вилки это сложно и элитарно. Даже если бы они и были, мы в дурке сто пудов бы запутались.

>>2171756
Мимо. Я такая же пхп макака, только опыта побольше.
Аноним 01/10/21 Птн 19:38:43 2171768581
>>2171766
>только опыта побольше
Опыта холиваров на бордах? Нерелевантно.
Аноним 02/10/21 Суб 01:34:17 2171930582
Нахуй я вообще поступил на это дегенератский мехмат. Я зарабатываю дохуя. Что математиков другие математики ненавидят, потому что это не же матфак вшэ и все определения неправильные,, вот у вас сначала предел, потом непрерывность, а надо блять наоборот, нахуй, что программисты доказывают, что языки и технологии им блять неправильные. Вы все блять макаки, неинтересные, забитые чмо, кнопкодавы, не настоящие, ничего интересного не добились. А щас бы работал вместо этого дерьмеца учителем русского языка и летаратуры. И все бы меня любили. Дети бы со мной обнимались на выпускной. Я был бы основой культуры и общества. Я был бы красив. И все бы мне простили, что у меня денег нет, даже красивые женщины. Даже, если бы я не был как Быков и Лимонов. А я вынужден жить с вами, вонючими и мерзкими крысами, потому что 10 лет назад неправильно выбрал специальность. Вы хуже дерьма, вы хуже лежалого трупа. Вас все ненавидят в России, сравнивают с наркоторговцами и проститутками.
Аноним 02/10/21 Суб 10:00:29 2172020583
106234847275255[...].jpg 24Кб, 536x288
536x288
Почему он подчеркнул эту строку? И вообще поясните если можете за эту строчку что она делает, запускаю на локалке
Аноним 02/10/21 Суб 11:07:49 2172053584
>>2172020
Наведи курсор и прочитай во вспылающем окне подсказочку или через alt+enter посмотри что IDE посоветует исправить.
Наверное дело в том, что определить строковую константу можно задать через const.
И закрывающий тег тут не нужен. Он может навредить, так как все символы до следующего открывающего тега (например случайный пробел) улетят в stdout и расхуячат скрипт.
Аноним 02/10/21 Суб 11:28:54 2172068585
>>2172053
Да, тыкнул на подсказку и он счам исправил, до чего техника дошла
Аноним 02/10/21 Суб 17:18:25 2172298586
Аноны, всем привет, выручайте пожалуйста. Может даже не совсем по теме вопрос. Запилил сейчас на vps хостинг свой первый сайт, ни разу не делал раньше этого. Что нужно прописать в файлах .htaaccess чтобы все нормально директилось на корневую папку public, и это касалось также css, js файлов и изображений? Я разобрался что прописать чтобы при при хттп запросах выдавались страницы как положено, но чтобы подрубались изображения, стили и жс мне пришлось прописать /publuc вначале каждого пути, благо это немного. То что техподдержка сказала не помогло. Как по-нормальному сделать, выручите плиз.
Аноним 03/10/21 Вск 19:46:31 2173033587
106234847275255[...].jpg 24Кб, 536x288
536x288
Как фиксить?
Аноним 03/10/21 Вск 19:50:04 2173037588
16332731912692.png 95Кб, 886x604
886x604
Аноним 03/10/21 Вск 21:24:40 2173100589
>>2173037
У тебя константа root_path существует?
Аноним 03/10/21 Вск 21:52:20 2173123590
>>2173037
Может config.php надо все-таки самим первым подключать? Или в пыхе это не критично?
Аноним 03/10/21 Вск 21:54:59 2173124591
>>2173123
Да, именно его и нужно сначала подключить. Посмотри на первый скрин - у него ROOT_PATH там дефинится.
Аноним 03/10/21 Вск 21:56:57 2173125592
>>2173124
Я просто видел в примерах в книге, что определение функции идет в конце файла после вызова уже, думал тут интерпретатору пофиг где что. Похоже это работает только внутри одного файла.
Аноним 04/10/21 Пнд 14:21:40 2173613593
>>2172298

Ты сделал как-то неправильно. Идея папки public в том, что это единственная доступная снаружи папка, и обратиться к другим папкам снаружи нельзя.

У тебя же судя по тому, что ты дописываешь public в путь, это не так и все файлы доступны снаружи. В htaccess это можно попробовать как-то исправить, но это неправильный путь.

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

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

Также, ты можешь изучить линукс и взять вместо хостинга VPS, где ты сам сможешь настроить веб сервер как хочешь.
Аноним 04/10/21 Пнд 16:09:08 2173672594
Нахуй нужна еботня с REST и GraphQL, когда можно просто и без задней мысли перекладывать json'ы?
Аноним 04/10/21 Пнд 16:55:57 2173714595
Аноним 04/10/21 Пнд 17:10:54 2173733596
>>2173714
json api, без rest и ебли с gql запросами
Аноним 05/10/21 Втр 03:41:34 2174211597
>>2173733

Во-первых, начнем с REST. REST это набор определенных концепций, но на практике под REST подразумевают API с методами вроде GET/POST/DELETE/PUT и URL вроде /product/1234. То есть на практике, когда говорят "REST API" имеют в виду просто API на основе протокола HTTP.

Теперь про GraphQL. Допустим, у тебя большой сайт и база с тысячей таблиц. Тебе понадобилось аяксом выводить список комментариев. Ты сделал для этого обработчик. Дальше тебе понадобилось получать список комментариев, но с другим набором полей. Ты доработал обработчик. Дальше тебе понадобилось получать список лайков. Ты написал еще один обработчик. И так далее. Когда ты напишешь 100 штук похожих обработчиков, тебе начнет приходить в голову мысль: а не пора ли это оптимизировать?

Это и привело к созданию GraphQL. Его идея в том, что ты на клиенте (в яваскрипте) пишешь GrpahQL-запрос, описывая сущности, которые ты хочешь получить:

- какие поля тебе нужны
- какие связанные сущности нужны (например: добавить к комментариям информацию об авторе и о числе лайков)
- по каким условиям выбирать сущности

А сервер ищет и отдает нужные данные. Это напоминает SQL-запрос, но тут есть отличия:

- поля сущностей не обязаны соответствовать полям в БД, а могут как-то генерироваться программно
- аналогично, сущности не обязаны соответствовать таблицам в БД

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

Разумеется, тут есть множество сложных моментов:

- нужно настроить права доступа, иначе злоумышленник через GraphQL "запросит" персональные данные пользователей, их email, пароли и все, что есть в твоей базе. Более того, права доступа могут быть сложными, в стиле "пользователь с кармой больше 100 имеет доступ к разделу X", и это надо как-то вкрутить в GraphQL сервер.
- тебе могут присылать "тяжелые" запросы, которые вытянут миллионы сущностей без индекса и положат твой сервер. Надо как-то оптимизировать выборку, причем тут ты заранее не знаешь, какой запрос может прийти и должен оптимизировать под все возможные случаи.

Но эти проблемы решаемы при грамотном подходе.

Аноним 05/10/21 Втр 03:54:08 2174213598
Аноним 05/10/21 Втр 09:38:16 2174277599
>>2174213
>ничего не работает
Не пиши как Тупая Пизда, а описывай проблему нормально. Что не работает, какая ошибка, что было предпринято?
Аноним 05/10/21 Втр 10:05:52 2174306600
>>2174213
Ещё и не pdo с экранирование м
Аноним 05/10/21 Втр 10:38:24 2174335601
>>2174213
Где ты откопал этот доисторический кал? Mysqli уже давно в легаси ушло.
Аноним 05/10/21 Втр 11:00:49 2174352602
Аноним 05/10/21 Втр 12:03:43 2174399603
>>2174213
Сделай дамп переменной user перед последним If, может что-то с бд?
Аноним 05/10/21 Втр 12:27:13 2174416604
А в js есть какой-нибудь эквивалент var_dump для дебага? console.log не такой информативный.9
Аноним 05/10/21 Втр 12:30:28 2174420605
Как засунуть класс в функцию?
Аноним 05/10/21 Втр 12:55:48 2174438606
>>2174211
>Это и привело к созданию GraphQL. Его идея в том, что ты на клиенте (в яваскрипте) пишешь GrpahQL-запрос, описывая сущности, которые ты хочешь получить:
>А сервер ищет и отдает нужные данные.
Но ведь это не так. Нужно ещё пердолить скиму к этому всему. И получается "100 штук похожих обработчиков", просто в другом виде. А так-то конечно было бы здорово просто отправить квери к серверу и он магическим образом как-то бы вытягивал по этому квери данные, но увы, магии нет, нужна скима (которая почти дублирует квери), бойлерплейт, моча, говно
Аноним 05/10/21 Втр 13:13:12 2174454607
>>2174420
Что у вас за привычка - невнятно бормотать что-то?. Какой класс, какая функция? Объясни нормально что хочешь сделать.
Ты не этот >>2174213 у которого "я что-то нажала и всё пропало!".
Аноним 05/10/21 Втр 13:48:12 2174470608
02.jpg 31Кб, 1440x102
1440x102
Что вводить?
Аноним 05/10/21 Втр 14:26:58 2174505609
>>2174352
Тебе время пытаются сохранить, сейчас ты его буквально тратишь на хуйню.
Ты никогда в реальной задаче не будешь писать код вот таким образом, а именно:
у тебя не экранирован запрос, то есть злоумышленник может легко получить доступ к базе, ты используешь глобальные переменные, что ведет к протечке абстракций, делает код уязвимым и привязывает его к конкретным переменным и их состоянию.

По сути материал чисто для вката в ПХП просто понять, че там и как, писать так не стоит даже в самом начале.
Аноним 05/10/21 Втр 14:36:34 2174510610
>>2173037
Учись юзать композер сразу, избавишься от этих простыней в виде куч рекуаер.
Аноним 05/10/21 Втр 19:26:23 2174782611
1.png 48Кб, 712x414
712x414
Почему не выполняется эта команда? На экране выводится только предыдущий echo с приветствием.
Аноним 05/10/21 Втр 19:55:57 2174801612
14348797347.jpg 18Кб, 448x256
448x256
>>2174782
Не в том месте закрыл тег слепошарый.
Аноним 05/10/21 Втр 20:25:32 2174822613
>>2174454
Чтобы функция вызывала класс
Аноним 05/10/21 Втр 20:27:05 2174825614
>>2174822
Ну так вызывай, кто тебе мешает-то?
Аноним 06/10/21 Срд 02:28:05 2175102615
Аноним 06/10/21 Срд 05:36:41 2175124616
aqqxUF8XOiQ.jpg 91Кб, 553x419
553x419
>>2174822
Завязывай с этой хуйней. Такие вызовы до добра не доведут.
Аноним 06/10/21 Срд 10:01:54 2175270617
Уважаемые, кто работал с битриксом?
Есть урл на пикчу, допустим
сайт/upload/resize_cache/iblock/9c7/862_471_1/9c7e59ec57153040155471666a50f54a.jpg
По урл видно, что картинка отресайзана чтобы вывести ее в iblock (видимо плагин такой? неважно)

Как мне найти оригинал картинки?
Аноним 06/10/21 Срд 13:43:26 2175522618
>>2175270
С ним полтреда работало и эти же полтреда его искренне ненавидят, чем больше работали тем больше ненавидят.
В отличие от петухов с хабра которым просто сказали что это говно тут с ним лично знакомы.
Что ты хочешь? Нахуй тебе исходный файл? НЕ ВЗДУМАЙ работать с картинками загруженными в битру как с файлами, забудь про это.

Судя по урлу, картинка загружена как свойство элемента инфоблока и пожала через ResizeImageGet.
Аноним 06/10/21 Срд 15:27:22 2175633619
>>2175522
Да сайт не мой, и о говенности битрикса я наслышан.
Я просто я не могу вытянуть из него фотку в оригинальном разрешении, она скейлится, даже если я в инспекторе ставлю устройство с 8К экраном. А в ресурсах только вот урл на resize_cache. Думал по этому урлу можно собрать урл до оригинальной картинки
Аноним 06/10/21 Срд 15:32:21 2175637620
>>2175633
попробуй
сайт/upload/iblock/9c7/9c7e59ec57153040155471666a50f54a.jpg

Аноним 06/10/21 Срд 17:04:50 2175726621
>>2175522
Вебасист ещё параша похожая - приходилось иметь дело. Точно такая же разрекламированная хуита с говнокодом.
Аноним 06/10/21 Срд 17:19:40 2175738622
Аноним 06/10/21 Срд 17:43:58 2175757623
изображение.png 56Кб, 203x249
203x249
Аноним 06/10/21 Срд 17:58:18 2175765624
>>2175757
Дополню: с валидацией данных от пользователя
Аноним 06/10/21 Срд 18:38:16 2175793625
>>2175637
Спасибо, сработало :3
Аноним 06/10/21 Срд 19:03:08 2175823626
Как сделать вход в акк админа?
Аноним 07/10/21 Чтв 09:51:02 2176459627
Аноним 07/10/21 Чтв 12:45:54 2176624628
Аноним 07/10/21 Чтв 15:05:27 2176760629
>>2176624
Ну ладно. Удачи тогда.
Аноним 07/10/21 Чтв 18:27:47 2176935630
Реально ли найти работу на удалёнке?
Аноним 07/10/21 Чтв 18:55:18 2176956631
>>2176935
Джунов на удалёнку не берут обычно. Джуномидлы ещё туда-сюда.
Аноним 07/10/21 Чтв 18:56:14 2176958632
>>2176956
Вы сговорились что ли все?
Аноним 07/10/21 Чтв 19:32:58 2176996633
Аноним 07/10/21 Чтв 19:38:36 2177002634
>>2176958
А что тебя удивляет?
Аноним 07/10/21 Чтв 19:51:54 2177024635
>>2177002
Вдруг я талантливый программист с провинции, а работодатель не берёт таких на удалёнку, в итоге работает с посредственностями ирл, но с ДС.
Аноним 07/10/21 Чтв 19:58:54 2177028636
image.png 349Кб, 960x540
960x540
>>2177024
>Вдруг я талантливый программист с провинции
Пикрелейтед прямо.

>работает с посредственностями
На работе надо работу работать, а не талантом сверкать.
Аноним 07/10/21 Чтв 20:05:37 2177035637
>>2174470

Адрес хоста, где расположена база данных. Если у тебя (скорее всего так и есть) база данных расположена на том же самом компьютере, то вводи 127.0.0.1.

>>2174822

Ты не можешь "вызвать" класс. Ты можешь только вызвать метод в классе. Если это статический метод, то так:

SomeClass::someMethod();

Если не статический, то тебе сначала надо создать объект и потом у него вызвать метод:

$o = new SomeClass();
$o->someMethod();

Если ты не знаком с ООП, то советую открыть учебник из шапки и в нем прочесть главу про ООП.



Аноним 07/10/21 Чтв 20:08:47 2177037638
>>2175823

Есть два варианта:

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

Аноним 07/10/21 Чтв 20:10:08 2177041639
>>2177028
У меня были пятёрки в ВУЗе по программированию и я один из первых с потока сдал лабу сайт-визитку на РНР с гостевой и счетчиком.
Аноним 07/10/21 Чтв 20:13:21 2177045640
>>2175757
>>2175765
обычно фильтровать надо ещё на уровне запроса к БД, а не когда у тебя уже готовая огромная коллекция, занимающая кучу памяти -- очевидно
Аноним 07/10/21 Чтв 20:21:11 2177049641
>>2177041
А ты из какого города? Напиши в телегу @your_future_life, нам могут быть нужны такие кадры
Аноним 07/10/21 Чтв 20:24:34 2177055642
>>2177037
И какой способ популярней?
Аноним 07/10/21 Чтв 21:38:11 2177117643
>>2177045
ну а если у тебя не огромная коллекция и тебе надо фильтровать эту не огромную коллекцию на стороне кода?
Аноним 07/10/21 Чтв 22:01:54 2177137644
Аноним 07/10/21 Чтв 23:37:35 2177209645
>>2174801
Ты не слепошарый. Ты нахальный и самоуверенный. В этом треде наверняка написано пицот раз, чтобы ты юзал нормальный профессиональный редактор кода. Он должен был такие вещи подсвечивать. Хватит выёбываться со своим блокнотом. "Почему вы упорствуете, мистер Андерсон?"
Аноним 07/10/21 Чтв 23:57:59 2177217646
>>2177209
Vscode я сразу поставил. Такие ошибки редакторы не подсвечивают.
Аноним 08/10/21 Птн 01:52:43 2177246647
16298429506460.png 403Кб, 600x404
600x404
>>2177045
Старина я про это и спрашиваю.
Создал реквест -> написал правила валидации ->получаю провалидированный массив с данными. Дальше же идёт куча ифов с проверкой есть ли тот или иной параметр или нет. Если да то хуярим в квери ещё один where.
И это заебывает. Вот и ищу хоть какой нибудь стандарт как это все менее всрато сделать. Находил инструкции от индусов разной степени уебищности. На многих сайтах ссылаются на либу какого то Ивана Иванова Джона Смита. Но как то не особо хочется ставить новый пакет из-за казалось бы пустяковой задач.
Вот и думаю мб что-то в доках пропустил.
Алсо. Вариант который более менее понравился - https://pineco.de/filtering-eloquent-queries-based-on-http-requests/
Однако здесь есть нюанс который вызывает вопросы. Зачем в фильтр передается реквест, а не массив который нам выдаётся из метода $request->validated()?
Плюс строчка $this->request->all() немного напрягает ибо на сколько я понимаю мы забиваем на валидвцию в таком случае?
Аноним 08/10/21 Птн 06:40:50 2177263648
>>2177246
>Однако здесь есть нюанс который вызывает вопросы. Зачем в фильтр передается реквест, а не массив который нам выдаётся из метода $request->validated()?
Плюс строчка $this->request->all() немного напрягает ибо на сколько я понимаю мы забиваем на валидвцию в таком случае?

Тебе ничего не мешает создать Form Request (читни в доках) и точно так же принимать весь реквест, он будет ларкой сперва проводится через твои правила валидации, а потом юзаться в контрллере(или где там у тебя), метод $request->validated(), можно будет явно не вызывать, если у тебя нет последующих условий, каких нибудь. Скорее всего это просто было опущено как очевидное.
Аноним 08/10/21 Птн 06:42:12 2177265649
>>2177217
Чему вы извращаетесь с этими редакторами, когда есть пхпшторм где подсвечивается вообще все, даже небо и аллах и с коробки дается полностью весь нужный функционал для экосистемы пыхи? Платность шторма решается же?
Аноним 08/10/21 Птн 10:41:23 2177346650
>>2177265
>пхпшторм
Тяжёлая хрень. Заебали вы со своим штормом - не всем он нравится.
Аноним 08/10/21 Птн 12:49:28 2177435651
>>2177265
>Платность шторма решается же?
Кряками с мокрыми писечками или мимикрирование под студента?
Аноним 08/10/21 Птн 14:50:49 2177494652
>>2177346
>Тяжёлая хрень. Заебали вы со своим штормом - не всем он нравится.
Ты его в руках что-ли носишь? Что значит "тяжелая"?
Пиздец конечно рассуждение категориями "нравится/не нравится". Шторм закрывает вопрос работы с пхп. Совсем. И закрытие тегов это самая маленькая хуйня которую он решает.

Это иллюзия новичка, что можно обойтись просто редактором, без IDE. Как только начнется реальная работа сразу выяснится что недостаток функция в редакторе придется восполнять сторонним софтом. Git, docker, db, ftp, http запросы.

Потом начнутся проблемы с актуальностью версии php. Нужна будет подсветка синтаксиса и под вышедшую вчера версию и под версию десятилетней давности. Потом понадобятся доп инструменты под конкретный стек, типа плагинов для лары или симфони. Потом понадобится возможность гибко изменять кодстайл, чтобы руками сотни файлов не править. Потом понадобится дописать что-то на TypeScript, или какой-нибудь scss. И все вышеперечисленное умножай на два.

Так что шторм это по сути единственный вариант для профессиональной разработки на пхп. Да сложный, да нужно его долго изучать. Но по факту альтернатив нет. Раньше начнешь пользоваться - раньше привыкнешь. За годы идеально настроишь его под себя, от внешнего вида, до автогенерации кода и будешь рофлить на пассажами про "не нравится".
Аноним 08/10/21 Птн 15:34:32 2177509653
>>2177494
>Это иллюзия новичка
Я не новичок, мань. Как раз новички сразу в шторм лезут, думая, что он им всё закроет. Так не бывает и любая ide будет хуже чем конкретный софт под задачу.

>Потом понадобятся доп инструменты под конкретный стек, типа плагинов для лары или симфони.
Лол. Что дальше - плагины для плагинов для пакетов лары и симфони?

>Потом понадобится дописать что-то на TypeScript, или какой-нибудь scss. И все вышеперечисленное умножай на два.
Функционал обычного редактора кода. Причём тут шторм, поехавший?

>шторм это по сути единственный вариант для профессиональной разработки на
Маркетолог залогинься.
Аноним 08/10/21 Птн 15:39:13 2177512654
>>2177494
>Что значит "тяжелая"?
"Тяжёлая" это когде мне нужно максимум 20% от того, что даёт шторм в некотором конкретном случае. Мне не нужны все 100500 его функций на каждом проекте.
Аноним 08/10/21 Птн 16:25:53 2177558655
>>2177509
>Я не новичок, мань. Как раз новички сразу в шторм лезут, думая, что он им всё закроет. Так не бывает и любая ide будет хуже чем конкретный софт под задачу.
>Функционал обычного редактора кода. Причём тут шторм, поехавший?
Сто процентов новичок. До сих пор мыслишь категориями "пишу буквы, хули еще надо". А надо убедиться что написанное не конфликтует с тысячами уже написанных строчек кода. Надо скомпилить. Надо задеплоить.

>Лол. Что дальше - плагины для плагинов для пакетов лары и симфони?
Если это сэкономит время, то да. Че думаешь от нехуй делать IDE пользуются? Еще больше убеждаюсь что ты нубас.

>Маркетолог залогинься.
Не, ну ты похоже даже не джун. Кто вообще шторм покупает? Тебе принесут лицензию на любую хуйню, если она увеличит твою производительность. Погугли сколько джира стоит, например. И че-то так совпало, что за десять лет я везде видел только шторм. Один раз на собесе дали ноут с нетбинсом и дико извинялись, мол "не успели шторм поставить".
Аноним 08/10/21 Птн 16:32:09 2177561656
>>2177512
Так убери то чем не пользуешься с панелей и из меню. Настрой тему под себя, сочетания клавиш, поставь шрифт удобный. Я когда-то пользовался nusphere и привык к цветам и хоткеям. При переходе на шторм просто наебенил все один в один как там, хуй отличишь.
Аноним 08/10/21 Птн 16:55:17 2177589657
>>2177558
>надо убедиться что написанное не конфликтует с тысячами уже написанных строчек кода
Лол, чё несёт, охуеть. Без костылей уже и ходить не может.
Аноним 08/10/21 Птн 16:57:43 2177593658
>>2177558
>Тебе принесут лицензию
Пиздец. Хуй на лицо тебе принесут.
Ты охуевший вкатунам вкатунам шторм советовать, мань? Ничего кроме него не знаешь и везде лезешь со своими тупыми советами.
Аноним 08/10/21 Птн 18:43:29 2177707659
>>2177589
>Ты охуевший вкатунам вкатунам шторм советовать
Так именно вкатунам и надо его советовать. Половины треда не было бы юзай они шторм. Жалко денег - спирать. Спиздить хорошую вещь у буржуев святое дело. Но не надо заниматься хуйней и искать незакрытые теги и опечатки.

Если хочешь работать работу в офисе и писать на пхп, то там будет только шторм, просто без вариантов. А если фрилансить, то сам побежишь его покупать, потому что время = деньги.

>Ничего кроме него не знаешь
Вот как раз потому что знаю и советую.
Аноним 09/10/21 Суб 14:40:01 2178317660
Аноним 09/10/21 Суб 15:18:17 2178352661
>>2177217
Забытые скобки подсвечивают все редакторы. Настрой более грамотно. Vscode должен это делать. Даже Sublime может. Все редакторы чекают синтаксис. Шторм идёт дальше, он чекает частые логические ошибки, используя статический анализ кода, который почти что компилит весь код на лету. Это и жрёт память. А сопоставить скобки там много ума не надо -- это везде должно быть. Строки выделяются одним цветом обычно. Возможно у тебя редактор вообще не настроен понимать php.
Аноним 09/10/21 Суб 15:38:53 2178378662
>>2178352
Я не забыл скобку, а поставил ее не там.
<a href='page.php' Щелкните здесь для продолжения></a>
Аноним 09/10/21 Суб 15:39:38 2178380663
>>2177494
>Что значит "тяжелая"?

Много ресурсов потребляет, нужен достаточно мощный комп
Аноним 09/10/21 Суб 16:40:19 2178433664
>>2178378
Тю. На твоём скрине эта скобка на месте, а пропущена другая скобка, круглая. Ну во-первых учись проверять конечный результат вывода программ и функций. Ты должен был в браузере посмотреть возвращаемый код и понять. Там в браузере тоже бы всё подсветилось. Во-вторых HTML в идеале, конечно, выносить из строковых литералов в отдельные файлы. Гугли, как делается вьюха, view file. Тогда html тоже будет подсвечиваться.
Аноним 09/10/21 Суб 18:35:27 2178510665
16332785086220.png 79Кб, 1382x536
1382x536
Как фиксить?
Аноним 09/10/21 Суб 18:39:00 2178514666
>>2178510
Тебе там белым по черному написали, даже гадать не надо, в чем проблема?
Аноним 09/10/21 Суб 18:48:08 2178519667
>>2178514
>>2178514
Надо гадать, сидеть дав часа в гугле потому что ебучий композер утсанавливает фреймворки по велению левой пятки
Аноним 09/10/21 Суб 19:47:27 2178607668
>>2178510
1) Когда ты создавал проект, то он появился у тебя в подпапке myapp. Так что перед очередным вызовом композера надо было выполнить cd myapp. Во-первых выучи команды ls, чтобы видеть, где ты вообще и где файлы. Ты же видешь написано, что файла composer.json нету. Так почему ты не начал его искать. Во вторых там сверху написано, что проект создаётся в ./myapp .
2) Попытка игнорировать требования пакетов вероятно только создаст тебе ещё больше проблем. Тебя попросили установить ext-fileinfo. Лучше поставь по-хорошему. Если ставил пых из пакетов, то это тоже будет пакет скорее всего.
Аноним 09/10/21 Суб 20:46:12 2178717669
>>2178607
Да все, надо было раскомментировать в php.ini extension_dir = "ext" и добавить extension=php_fileinfo.dll
Аноним 09/10/21 Суб 21:01:29 2178742670
Какой редактор посоветуете ньюфагу? Visual Studio (которая !Code) норм?
Аноним 09/10/21 Суб 21:48:15 2178773671
>>2178742
Первый рабочий проект писал с помощью notepad++
Аноним 10/10/21 Вск 03:27:35 2178986672
712667.png 320Кб, 460x460
460x460
>>2178742
Юзай phpstorm. Ипользуй триал, наеби с учобой или просто спизди.

"Но я же только учусь и пишу для себя, мне не нужен остальной функционал" это нуб трапа. Откуда ты узнаешь что тебе нужно? Что сократит количество ошибок, а что сократит затраты времени? Книжек об этом не написано.

А обучение инструментам разработки это такое же обучение как и сама разработка. IDE со старта сэкономит тебе миллиард нервных клеток. Вместо 125 тредов было бы от силы 50 если бы все начали со шторма.

VSCode это хороший редактор. Но он полностью стоит на плагинах, которые во первых нужно найти, а во вторых созданы случайными людьми. Без плагинов писать в VSCode на пхп нереально. А добавляя плагины ты по сути пытаешься воспроизвести phptorm, только хуже.

Вот тебе пример. Я за семь лет на шторме забыл вообще про существование кнопки Save. Я пишу буквы, потом закрываю файл, закрываю IDE и пиздую домой. Не сохраненые изменения? Каво нахуй? Я прекрасно знаю, что в момент когда я закончил печатать все уже сохранилось. И я прекрасно знаю что есть история локальных изменений. И если я позавчера написал функцию, потом подумал "не, хуйня какая-то" и удалил её, то сегодня я подумав "да не, не хуйня" могу открыть историю, чекнуть че там было написано и одним кликом вернуть её на то самое место если нужно. И с файлами и папками это тоже работает. И это не git, эта система не требует что-то коммитить или пушить.
Это блядь как дышать. Как без этого вообще возможно работать даже со средним проектом хуй его знает.

А вот как это выглядит в VSCode. По сути есть только плагин Local History https://marketplace.visualstudio.com/items?itemName=xyz.local-history . Сразу внимание на количество скачиваний: 370,389. Это просто мизер. Например PHP Intelephense, без которого в принципе невозможно писать код на пхп, 4 ляма. Большинство просто не в курсе что такая охуенная фишка существует. Дальше. Кто автор? Куда бежать с порванной сракой если багует? Некие zabel-xyz и João Morais. Куда тебе идти со своими багами можно понять по ебалу Мораиса пикрелетед и issue за 2019 в статусе in progress. К тому же плагин создает какую-то там локальную папку, все неуклюже, без нормального интерфейса, но вроде работает.

Короче юзай шторм сразу, в нем есть куча специфичных для пхп подсказок и приколов. Тебя все время будут крепко держать за яйца плечо и не дадут писать хуйни. Всегда предупредят что вот тут "возможна ошибка". Не просто "есть ошибка". А именно предупредят, что код написан таким образом что частенько в такой ситуации возникают ошибки. Ни один другой редактор или IDE больше поддержки новичку не даст. Это определенно стоит того чтобы погуглить с кряк десять минут.
Аноним 10/10/21 Вск 09:27:02 2179043673
>>2178317
И где должна быть вторая форма входа,на секретном урле?
Аноним 10/10/21 Вск 14:49:31 2179297674
16233322944790.mp4 1447Кб, 360x638, 00:00:15
360x638
Ищу работу джуном и уже второй работодатель хочет от меня чтобы я себе сделал статус самозанятого, при этом у них какие-то тестовые периоды по 2-3 месяца с пониженной зарплатой. Предлагают после прохождения тестового и видеособеседования.
Как-то это подозрительно выглядит, не? Или это нормальная практика?
Аноним 10/10/21 Вск 16:02:18 2179350675
Аноним 10/10/21 Вск 16:26:05 2179376676
>>2178986
>Куда тебе идти со своими багами можно понять по ебалу Мораиса пикрелетед
Взоржал
Аноним 11/10/21 Пнд 22:47:11 2180724677
>>2179297
вкатывальщики в 2021 должны страдать
Аноним 12/10/21 Втр 02:53:05 2180848678
Актуально изучать yii2 ?
Аноним 12/10/21 Втр 04:30:52 2180867679
Привет! Что в php из документации следует особо тщательно изучать перед laravel, symfony?
Аноним 12/10/21 Втр 14:14:04 2181245680
>>2180867
Честно?
Документацию я читал только по мере надобности.

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

Поставь OpenServer, напиши hello word, и начни разбираться что и как происходит когда ты переходишь по ссылке в браузере, прям детально.
Аноним 12/10/21 Втр 14:41:42 2181274681
>>2181245
>А вот все вкатывальщикам я бы посоветовал тратить время на теорию - архитектуру сетей, базовое администрирование, etc.
А при чем тут пхп, или в вакансию входит все подряд включая заправку принтеров кроме написания кода?
Аноним 12/10/21 Втр 14:44:57 2181277682
>>2181274
Это похоже на "вредный совет" чтобы вкатуны подольше занимались бесполезной хуйней и не мешали конкуренцией
Аноним 12/10/21 Втр 17:06:07 2181403683
Кто-нибудь с Битриксом работал? Не могу найти код подключения JivoChat'a, ни в темплейтах шаблона, ни в индексах его нет. Уже скачал все с сервака, открыл штормом, провел поиск "jivo, jiv, chat" — пусто! Только в файлах стилей шаблона, да и то выключение отображения этого живочата при печати страницы. Ладно, думаю. Может, в бд запихнули. Скачал бд — опять нихуя. Да где эта сука и ещё коды счетчиков от яши и добра спрятались?
Аноним 12/10/21 Втр 18:41:24 2181519684
>>2181274
у меня спрашивали (помимо php)

1) Что такое сессия
2) Можем ли мы на сервере увидеть User-agent и изменить его
3) Что такое schema и какие операции можно делать с sitemap?

Это всё к какому разделу относится?

Аноним 12/10/21 Втр 18:55:57 2181542685
>>2181245
>Поставь OpenServer, напиши hello word, и начни разбираться что и как происходит когда ты переходишь по ссылке в браузере, прям детально.

то есть это веб-аналитика? А xampp для этого не пойдёт
Аноним 12/10/21 Втр 20:21:09 2181675686
16049874783070.jpg 21Кб, 480x362
480x362
>>2178519
Жаль, что PHP (и все остальные) приложения постепенно превращаются в бесконечный набор через жопу связанных и постоянно меняющихся дырявых зависимостей.

Повторюсь, в некоторых секурных компаниях использование фреймворков по причине выше просто запрещено. Но, тогда в моменте из конкуренты приобретают преимущество в скорости разработки.
Аноним 12/10/21 Втр 20:24:21 2181683687
TGuSjRBS6E.jpg 64Кб, 494x662
494x662
Аноним 12/10/21 Втр 20:24:59 2181687688
Аноним 13/10/21 Срд 00:28:32 2181988689
>>2181675
В основном фреймворки запрещают в госконторах(или ТИПА не гос), по причине ИМПОРТОЗАМЕЩЕНИЯ, что ставит разработчиков всех уровней в позицию долбоёбов, которые пилят свои велосипеды, также обрастающие говнозависимостями, только своими, довольно сомнительного качества. Всегда приятно думать, что в мире живут одни долбоёбы и ты(вы) напишешь(-те) лучше, но это не так и никогда так, собственно, не будет. Заниматься байтоёбством и микросекундами имеет смысл только на очень низких уровнях, а небольшая каша зависимостей на пхп/жс/джаве/шарпах/.. это ничтожная плата за скорость разработки и, очень часто, качество кода с регулярными обновлениями. Единственный толковый(с моей конечно же точки зрения) совет это - писать по возможности функционал самим, а не тянуть говнопакет на любому поводу, особенно на суперэнтерпрайзе каком-нибудь. Меньше всего этого придерживаются фронтендеры, но у них и так жизнь тяжёлая, поэтому можно понять.
Аноним 13/10/21 Срд 00:46:27 2182003690
>>2178352

Что касается ошибок синтаксиса ("неазкрытые скобки"): vscode точно должен это уметь - проверять синтаксис файла во время редактирования и подчеркивать ошибки. Описано тут: https://code.visualstudio.com/Docs/languages/php#_linting

Для статического анализа кода не обязательно покупать phpstorm. Лучше будет использовать анализаторы вроде phpstan и psalm. Они покажут не только ошибки вроде незакрытых скобок, но и более сложные случаи, например, когда ты пытаешься сложить массив со строкой или передать в функцию что-то не то, или опечатался в ее названии. Их можно запускать из командной строки или из vscode, вот пример такого расширения: https://marketplace.visualstudio.com/items?itemName=calsmurf2904.vscode-phpstan

Что касается ситуации с ошибкой в HTML коде внутри текстовой строки, не знаю, помог бы PHPStorm тут или нет. Он отнюдь не всемогущ.

Аноним 13/10/21 Срд 00:54:10 2182012691
>>2178986

Справедливости ради, не понимаю смысла функции "локальная история". Это выглядит как бесполезное дублирование функционала гита. Только гит лучше. Он показывает не только то, что поменял я, а и то, что меняли другие и когда и зачем.

>>2180867

Функции работы с массивами, строками, ООП.

Аноним 13/10/21 Срд 01:45:16 2182049692
>>2182012
>Справедливости ради, не понимаю смысла функции "локальная история". Это выглядит как бесполезное дублирование функционала гита.
Не путай историю изменений и историю коммитов.
Ты в процессе работы менял файл пять раз. А закоммитил только последний вариант, который посчитал готовым. Предыдущих четырех итераций для гита не существует. Гит это "глобальная история", тяжеловесная и неповоротливая. Каждый коммит намертво вплетается в репозиторий. Для сохранения обязательно нужно выполнять далеко не мгновенные команды. И обычно существуют внутренние правила как дробить коммиты именовать итд. Зато глобально синхронизироваться нужно относительно редко.

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

Да и вообще локальная история это просто пример. Таких вещей в шторме миллион.
Аноним 13/10/21 Срд 12:07:55 2182255693
>>2180848
Это уже легаси сегодня. Если хочешь ковырять вилкой тонны чужого говнокода, то учи на здоровье - работы на нём вагон.
Аноним 13/10/21 Срд 12:10:53 2182261694
>>2181519
>Это всё к какому разделу относится?
Относится напрямую. PHP это бекенд в первую очередь и тесно работает с HTTP-протоколом. Знать этот протокол обязательно надо.

Этого дебила >>2181683 не слушай - там толстота какая-то.
Аноним 13/10/21 Срд 14:52:32 2182398695
>>2182255
Почему легаси, третья версия же вроде не вышла
Аноним 13/10/21 Срд 15:20:56 2182434696
>>2122851
Нахуя тебе битрикс после изучения лары? Еще понятно, когда до, но вот так?..
Аноним 14/10/21 Чтв 23:01:08 2183946697
>>2168908
работаю в конторе где +-25 бекендеров на симфони
стандратный набор = убунту+докер+шторм
а так юзай что хочешь главное чтоб таски сделал

это тебе просто экономит время:
docker-compose up и погнал работать
почистить? docker system prune --all
у нас проекты сделаны через makefile - вообще песня
make start
make test
...

многие выбирают линукс тк докер не тормозит
на макоси тормоза - можно :cached(частично решает проблему) или купить Parallels (100$ в год)
на винде хз но думаю тоже тормоза

>mysql взаимодействуете
давно юзал воркбенч. сейчас шторм
Аноним 15/10/21 Птн 00:44:58 2184023698
Анон не встает расширение php server в vs code.
Там всего пару строк надо прописать, а оно все равно не пашет.
Кто использует отпишитесь.
Аноним 18/10/21 Пнд 01:29:32 2186424699
>>2120804 (OP)
>PHP developer roadmap
>Карта знаний
Братишка уважаю!
Но там много всего.
Выдели основное.
Лучше норм знать базу чем кучу технологий посредственно.
Аноним 18/10/21 Пнд 02:29:49 2186448700
maxresdefault ([...].jpg 13Кб, 424x200
424x200
Почему пхпшторм пишет что версия пыхи 5.6 хотя у меня стоит восьмая?
Аноним 18/10/21 Пнд 08:29:47 2186490701
>>2186448
Это кнопка. Нажми и выбери нужную версию.
В настройках шторма можно выбрать интерпретатор, чтобы можно было внутри шторма скрипты запускать. От этого тоже меняется версия.
Аноним 18/10/21 Пнд 09:17:23 2186503702
файберы это подобие асинхронного движка?
Аноним 18/10/21 Пнд 12:13:53 2186583703
Аноним 18/10/21 Пнд 13:00:05 2186625704
>>2186583
Купить можно на офф сайте. Там же можно схалявить если ты студент или "студент".

Ну а "купить" можно с помощью сброса триала или чужого кода активации. На кряки не ведись, качай саму прогу только с офф сайта.
Аноним 18/10/21 Пнд 16:03:03 2186791705
Аноним 18/10/21 Пнд 16:10:05 2186799706
>>2186625
>>2186791
Спасибо.
Думаю все же поебаться и ставить VS Code. Или напрасная трата времени?
Аноним 18/10/21 Пнд 23:27:13 2187202707
>>2186503

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

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

Например, у тебя есть Доктрина. Это синхронная ORM. Она использует синхронную же библиотеку соединения с БД (DBAL) и в асинхронном режиме работать не может.

Код получения сущности из БД выглядит так:

$user = $em->find(User::class, 10);

Видно, что тут нет никакой асинхронности: нет ни промисов, ни коллбеков.

То есть, когда Доктрина делает SQL-запрос, то она останавливается и ждет ответа и другие задачи в это время никто выполнять не может. Но если мы подсунем ей вместо DBAL специальную библиотеку с файберами, то мы сможем "останавливать" выполнение кода доктрины, переключиться на другие задачи, а потом, когда придет результат SQL-запроса, продолжить выполнение. И мы получаем код, который выглядит как синхронный (нет ни промисов, ни коллбеков, ни await), а работает асинхронно.
Аноним 19/10/21 Втр 02:19:52 2187292708
>>2187202
Чет ты хуйню написал.

>То есть, когда Доктрина делает SQL-запрос, то она останавливается и ждет ответа и другие задачи в это время никто выполнять не может. Но если мы подсунем ей вместо DBAL специальную библиотеку с файберами, то мы сможем "останавливать" выполнение кода доктрины
Это основная проблема почему считается что PHP нихуя не асинхронный. Ты можешь приостановить СВОЙ код. Для этого нахуй никакие файберы не нужны, пишешь yield и все. А вот функции самого PHP ты приостановить не можешь нихуя, поэтому непосредственно выполнения запроса дождутся вообще все как миленькие, никуда не денутся.

Все что делают файберы можно делать в PHP прямо сейчас, без всяких реактпхп и свулов, с помощью генераторов. Файберы нужны исключительно чтобы скрыть асинхронность, чтобы с любой функцией можно было работать одинаково асинхронная она или нет. Все, точка. Сам пхп по прежнему однопоточная залупа, никакого прироста производительности из этого выжать не получится, до того же Go по прежнему как до луны раком.
Аноним 19/10/21 Втр 09:21:11 2187355709
Не знаю, туда ли написал. Пните в конкретный тред, если запостил не по адресу.

Подскажите, пожалуйста, как генерировать уникальные ссылки на скачивание файлов для http-сервера apache.

И реально ли организовать следующий сценарий: при появлении трёх разных файлов в указанной папке надо сгенерировать для них уникальные ссылки и выгрузить в текстовый файл.
Аноним 19/10/21 Втр 17:22:33 2187674710
>Вызов PDO::prepare() и PDOStatement::execute() для запросов, которые будут запускаться многократно с различными параметрами, повышает производительность приложения, позволяя драйверу кешировать на клиенте и/или сервере план выполнения запроса и метаданные, а также помогает избежать SQL-инъекций, так как нет необходимости экранировать передаваемые параметры.
То есть PDO::quote() не надо вместе с этим использовать и внутри методов prepare и execute как-то внутри все экранируется для безопасных запросов к бд? Скачал примеры из нового издания той книги, там он через quote() типа экранирует и потом просто пихает в $pdo->query().
Аноним 19/10/21 Втр 18:34:19 2187786711
>>2187674
И вдогонку опция PDO::ATTR_EMULATE_PREPARES должна быть обязательная включена для экранирования? Или это влияет только на скорость работы?
Аноним 19/10/21 Втр 20:45:28 2187988712
>>2187292

В твоем посте столько злости на PHP, что можно подумать, что злые разработчики PHP тебе не дают писать на любимом Го.

> Ты можешь приостановить СВОЙ код. Для этого нахуй никакие файберы не нужны, пишешь yield и все.

Это костыль. Yield не предназначен для создания асинхронного кода, а для создания генераторов. Использование его для асинхронного кода приводит к плохой читаемости.

Если, как ты, отвергать удобные средства языка, то тогда и yield не нужен. Просто используешь везде коллбеки, как в старых версиях Ноды, и пишешь асинхронный код.

> А вот функции самого PHP ты приостановить не можешь

Это можно сказать про почти любой язык. Просто не используй синхронные функции, если тебе нужны асинхронные, и все.

> Файберы нужны исключительно чтобы скрыть асинхронность,

Они нужны, чтобы асинхронный код выглядел нормально, а не как уродище с кучей await. Это средство для создания асинхронных библиотек. По моему, удобный инструмент. И как побочное явление, они позволяют использовать не-асинхронные библиотеки вроде Доктрины в асинхронном коде. Очень умно придумано.

Аноним 19/10/21 Втр 20:55:50 2188008713
>>2187674

Посмотри примеры кода тут: https://www.php.net/manual/ru/pdo.prepared-statements.php

Идея подготовленного запроса в том, что ты не вставляешь данные в запрос, а лишь оставляешь в запросе плейсхолдеры (они выглядят как ? или :name) в том месте, где надо подставить данные. И затем ты отдельно задаешь значения для плейсхолдеров. В этом случае база данных сама подставит значения в запрос со всем требуемым экранированием и SQL-инъекции не будет.

То есть:

$sql = "SELECT ... WHERE x = $x .. "; <-- Тут SQL-инъекция возможна

$sql = "SELECT ... WHERE x = :x" <-- тут нет

PDO::quote при использовании плейсхолдеров использовать не надо.

>>2187786

> И вдогонку опция PDO::ATTR_EMULATE_PREPARES должна быть обязательная включена для экранирования? Или это влияет только на скорость работы?

Если эта опция включена, то PDO сам подставит значения в запрос (со всем требуемым экранированием) и пошлет в базу готовый запрос. Если выключена, то PDO не будет подставлять значения в запрос, а пошлет в базу отдельно запрос и отдельно значения.

На безопасность это не влияет. На работу программы тоже. Зачем это нужно?

Дело в том, что некоторые базы данных не поддерживают плейсхолдеры вообще, а некоторые поддерживают, но только один вид, а не оба (например только ?, но не :name). Эта опция позволяет использовать плейсхолдеры даже с такими базами данных.
Аноним 19/10/21 Втр 21:05:32 2188019714
>>2188008
Спасибо.
С quote() вообще по-моему там не работает, у меня вместо целого числа добавлялся 0 в БД из формы, а вместо char строки только одни кавычки. Нового издания не нашел, может там пояснение какое-то было про это, только примеры из книги на гитхабе. Хотя может быть это из-за того, что я пытался совместить эти 2 метода(execute(array(..)) и quote для каждой переменной из массива POST).
Аноним 20/10/21 Срд 20:02:01 2188954715
Может кто объяснить что нужно знать о генерации URL?

У меня, например, есть персональная динамическая галерея.
Юзер может зайти в свой профиль, нажать на галерею и получить возможность листать по картине(с инфой, интерфейсом и тп) влево-вправо.

Интуиция говорит, я видел отрывочно в примерах, но не обращал внимания, что url для каждой страницы картин генерируется что-то типа /gallery + /img + img.cnt

Когда я сам начал делать такое, то стал задаваться вопросом как правильно делать, учитывая информацию которую я написал выше. Ведь для реализации такого не нужно создавать-изменять ссылку, просто есть какой-нибудь GalleryController, который сам изнутри знает какую ему картинку отдать когда юзер нажимает влево-вправо. Пользователь просто будет видеть один и тот же урл /gallery, все, больше ничего и не надо, так?

Аноним 21/10/21 Чтв 04:18:17 2189186716
>>2186799
Ну для начала можно и на нем, но лучше сразу привыкать к пхпшторму так как все равно придешь к нему в дальнейшем
Аноним 21/10/21 Чтв 13:43:53 2189366717
>>2189186
Читал что у шторма траблы со сбросом триала, есть такое?
А VS code как бы всегда будет гарантированно работать.
А разницу в функционале я навряд ли увижу на начальном уровне.
Как быстро развивается VS ?
Аноним 21/10/21 Чтв 16:39:38 2189538718
>>2188954

Ты очень плохо объяснил задачу. Как реализована твоя галерея?

1) пользователь заходит на страницу, смотрит картинку, затем переходит к следующей картинке с перезагрузкой страницы
2) пользователь заходит на страницу, в страницу встроен список всех картинок и они переключаются яваскриптом без перезагрузки страницы

Если у тебя вариант 1, то ты обязан указывать в URL номер картинки, иначе как сервер поймет, какую картинку выводить? Если URL всегда одинаковый, то пользователь всегда будет видеть одну и ту же картинку.

Если у тебя вариант 2, то номер картинки в URL можно не указывать, но тогда сайт просто будет неудобный. Если ты не обновляешь URL, то при перезагрузке страницы все сбросится на первую картинку. Также, нельзя будет поделиться ссылкой на определенную картинку. Если ты перешел по ссылке и вернулся назад, опять-таки, все сбросится на первую картинку.

Поэтому логичнее добавлять номер картинки в URL.

В варианте 2, номер картинки можно встроить как в часть URL, которая передается на сервер (до знака #), так и в ту, что не передается (после #). В первом случае над обновлять URL с помощью History.pushState(), чтобы страница не перезагружалась, во втором можно обновлять как обычно, так как от замены части после # страница не перезагружается.
Аноним 21/10/21 Чтв 21:11:12 2189829719
>>2189538
По мне так ты все хорошо понял)
У меня вариант 1, с перезагрузкой страницы.

>если вариант 1
По нажатию кнопки влево-вправо. Галерея начинается с 0 картинки, клик далее и индекс +1, клик назад индекс -1.
Все данные галереи хранятся в сессии.
В таком случае и без урл будет работать.

>cбросится
В сессии сохраняется актуальный индекс картинки. Не сбросится в таком случае.

>нельзя поделиться ссылкой
Бинго! Теперь точно дошло зачем так делать надо.

>hash
Я все понял, пойду почитаю, спасибо тебе.



Аноним 22/10/21 Птн 04:33:48 2190055720
>>2189829
Очередной параноик у которого украдут картинки? За 15 лет в интеренте ни разу не видел херни, которую ты описываешь. Если я захочу спиздить твои картинки, то я спизжу - они один хуй згружаются если подергать ссылку несколько раз. Но нахуя пользователям такая система я хуй пойму.
Аноним 22/10/21 Птн 10:29:01 2190125721
>>2190055
Я задал просто вопрос, использовав абстрактную ситуацию, мне надо просто понять как работает та или иная технология.

>подергать ссылку несколько раз
Слишком много гемора, ты расхочешь спиздить.
Аноним 22/10/21 Птн 22:08:11 2190790722
>>2190125
А ты подходи со стороны пользователя, который будет эту галерею смотреть. Ему на твою паранойю насрать. Если ему неудобно он развернется и уйдет. А парсеру поебать много ссылок тыкать или одну.
Аноним 22/10/21 Птн 23:00:31 2190882723
>>2189829

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

Потому лучше добавлять номер картинки в URL. Ну и с точки зрения оптимизации выгоднее было бы загрузить сразу список всех картинок и переключать яваскриптом без перезагрузки страницы, но с обновлением URL.
Аноним 23/10/21 Суб 00:30:25 2191015724
изображение.png 137Кб, 632x184
632x184
>>2120804 (OP)
Как посмотреть какие данные приходят? Кликая на кнопку сабмит, должны фоточки отдаваться, как глянуть какие?
Мимо вебмакака, бэк на ларавеле.
Аноним 23/10/21 Суб 01:23:46 2191097725
Аноним 23/10/21 Суб 17:00:44 2191545726
Пытаюсь вкатиться в Symfony по книжке с их сайтика. Дошел до БД, и пытаюсь в доктрин создать сущность через symfony console make:entity Conference. Выскакивает такая ошибка https://pastebin.com/a0Ri9a7r . ЧЯДНТ?
Аноним 23/10/21 Суб 19:40:53 2191692727
>>2191545
Вкатывайся в рельсы
Аноним 23/10/21 Суб 20:31:39 2191716728
image 20Кб, 480x360
480x360
Приветствую, пэхапэшники. Вопрос ньюфажный. Например, у меня есть сайт, если перейти на http://example.com/index.php, то там (если юзер не залогинен )ему через include("auth.php") вылезет форма входа. После успешного входа его перенаправит через header("Location: main.php") на http://example.com/main.php. Но если сразу ввести ссылку http://example.com/main.php, то на эту страницу можно попасть прямиком, минуя http://example.com/index.php. Как экранировать остальные страницы, кроме index.php, если юзер не авторизован?
Аноним 23/10/21 Суб 21:29:33 2191762729
>>2191716
Использовать MVC вместо страниц и держать в /public только index.php, вызывающий роутер, очевидно. Ты бы хоть гайд в шапке почитал.
Аноним 23/10/21 Суб 22:14:57 2191791730
вонючая жизнь п[...].mp4 886Кб, 1280x720, 00:00:08
1280x720
Аноним 23/10/21 Суб 22:36:04 2191800731
>>2191015

Открой инструменты разработчика в браузере (F12) на вкладке Network и нажми на кнопку. Там должен отобразиться запрос и ответ на него.

>>2191545

Класс App\Kernel не найден. Впрочем, в новых версиях Симфони его вроде и не должно быть.

>>2191716

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


Аноним 24/10/21 Вск 02:13:21 2191920732
PhpStorm какой-то странный. Работаю с одним скриптом, создаю там какие то переменные. Закрываю. Создаю новый, а там в автодополнении высвечиваются переменные из старого скрипта. Они хоть и в одном проекте, но никак не связаны. Соответственно, если я из нового скрипта вызову переменную из старого, будет PHP Fatal error. Нахрена мне тогда IDE предлагает эти переменные?
Ещё проблемы с закрашиванием, у меня было так, что из четырёх неиспользуемых переменных предупреждение появляется только на двух из них.
Почему так? В IntellijIDEA такого не было.
Аноним 24/10/21 Вск 23:58:29 2192656733
Перестал запускаться встроенный в php сервер, точнее один раз запустился и больше не хочет.
c:\php\php.exe" -S localhost:9091
В чем может быть проблема?
Аноним 25/10/21 Пнд 00:04:36 2192659734
>>2192656
Вернее сам сервер запускается, но файл не проходит, тупо как текстовый редактор выводит код во вкладкке.
Аноним 25/10/21 Пнд 00:24:34 2192664735
>>2192659
<?php в начале файла припиши.
Аноним 25/10/21 Пнд 00:53:34 2192691736
>>2192664
Все работает, если набирать через localhost.
Но у меня вроде как через правую мышь открывалось или меня глюкануло?
так же не должно работать?
Аноним 25/10/21 Пнд 01:00:45 2192695737
>>2192691
но это уже после установки XAMPP.
Но у меня как то же работало без него в первый раз со встроенным.
Аноним 25/10/21 Пнд 01:03:38 2192698738
>>2192695
а теперь он открывает только через файловую систему.
Где то прописывать надо, чтобы он через сервер заходил?
В принципе я все же XAMPP , буду пользоваться, но просто на будущее хотелось бы знать, что случилось и как это работает.
Аноним 25/10/21 Пнд 04:22:27 2192803739
Посмотрите, это автозамена. Норм array_map применил, или наговнякал?
https://ideone.com/dCEerL
Аноним 25/10/21 Пнд 05:17:14 2192808740
Аноним 25/10/21 Пнд 20:30:56 2193419741
1.png 10Кб, 647x120
647x120
Как все-таки правильно экранируется html от XSS-аттак? Вот он в книге так предлагает, но я заметил что для юникода символы потом отображаются как #xxxx а не по-нормальному.
Аноним 25/10/21 Пнд 21:58:03 2193495742
>>2193419
Может просто заменить htmlentities на htmlspecialchars?
Аноним 26/10/21 Втр 00:06:29 2193592743
>>2193419

Правильно с использованием htmlspecialchars при выводе в шаблон: https://github.com/codedokode/pasta/blob/master/security/xss.md

Обрати внимание, экранирование надо делать при выводе. А не в начале скрипта, когда мы читаем данные из GET/POST.

Код на твоем скриншоте очень старый. Так как magic quotes давно отключены по умолчанию.
Аноним 26/10/21 Втр 00:14:15 2193596744
>>2192803

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

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

Функция mb_toArray названа неудачно, и еще и стиль в названии не выдерживается. Ее лучше было назвать toLetters, splitToLetters.

Аноним 26/10/21 Втр 00:15:12 2193598745
>>2192698

По идее ты должен просматривать страницу, набирая в браузере localhost/.... Если ты открвываешь файл напрямую, то браузер показывает содержимое PHP файла, но не выполняет его.
Аноним 26/10/21 Втр 00:29:44 2193603746
>>2193592
Спасибо.
Пятое издание книги все то же от 19го года, в примерах к 6му 21года все то же самое. Надо наверное по быстрому ее дочитать и переходить к вашей шапке.
Аноним 26/10/21 Втр 19:56:31 2194289747
Я так понимаю эта функция не будет работать с https сайтами (судя по гуглению)? SSL warning выскакивает в браузере.
file_get_contents("http://" . SanitizeString($_POST['url']));
Хотя автор как-то к news.com коннектился, раньше по http тоже была поддержка? Http-страницы вроде загружаются, хоть и с вопросительными знаками вместо букв. Не пойму, это его экранирующая функция виновата или у меня в 7ке винде шрифты не обновленные какие-то.
function SanitizeString($var)
{ $var = strip_tags($var);
$var = htmlspecialchars($var);
return stripslashes($var); }
Это все в контексте главы про AJAX. Inb4 древний код тоже, там дальше jquery, это вроде тоже в тему.
Аноним 26/10/21 Втр 23:01:54 2194421748
>>2194289
И как я понял charset нельзя передать через setRequestHeader.
Аноним 27/10/21 Срд 11:53:24 2194700749
2.PNG 36Кб, 598x371
598x371
Госопода, как застабить (от англ. stub - прихуярить заглушку) метод на существующем объекте и проверить, что этот метод был вызван?
Я выяснил, что это, вроде как, умеет Mockery - https://laravel.com/docs/8.x/mocking#mocking-objects или http://docs.mockery.io/en/latest/reference/partial_mocks.html#runtime-partial-test-doubles
Но у меня все-равно вызывается оригинальный метод ("fetchCurrencies").
Ну и вообще как тестировать сервисы, которые ходят к сторонним api?
Аноним 27/10/21 Срд 22:57:18 2195555750
Верните аниме и котиков в шапку, суки блять
Аноним 27/10/21 Срд 23:37:46 2195593751
>>2194289

Сейчас многие сайты не поддерживают http, а только https. Может, в этом проблема? По идее, если при соединении происходит ошибка, то ты должен видеть либо на экране, либо в логах, причину ошибки.

> Я так понимаю эта функция не будет работать с https сайтами

Ну в ней же написано http, а не https, естественно не будет.

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

Тебе надо корректно работать с кодировками. Во-первых, при выводе страницы указать кодировку в теге meta charset (желательно utf-8), во-вторых, если страница, которую ты скачиваешь, в другой кодировке, то ее надо преобразовать в utf-8.

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

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

Эти странные функции экранирования надо убрать. Далее, надо переделать логику функции, чтобы она не позволяла делать запросы к произвольным сайтам, а только к разрешенным. Или как-то ограничить доступ, чтобы этим мог пользоваться только админ, а не любой желающий.
Аноним 28/10/21 Чтв 00:03:58 2195611752
>>2194700

Надо понимать, как работает Mockery. Как я понял, ты используешь Proxied Partial Doubles (так как ты передаешь в конструктор мока объект, а не имя класса: http://docs.mockery.io/en/latest/reference/creating_test_doubles.html#proxied-partial-test-doubles ). То есть, ты создаешь объект Mockery, вызываешь supportsCurrency, он вызывает этот метод на исходном объекте. И если дальше вызываются какие-то другие методы вроде fetchCurrencies, то прокси этого никак не видит и ничего сделать не может.

Тебе нужен другой тип мока, который создается как \Mockery::mock(SomeClass::name). И то, надо понимать, что он например не сможет перехватывать обращения к приватным методам, так как он работает путем создания класса-наследника и переопределения методов исходного класса.

И часто объект не мокают частично, а заменяют целиком. То есть, если у тебя есть какая-то логика и работа с API , то ты делаешь два класса. И мокаешь тот, что работает с API, а класс с логикой не трогаешь. Такое разделение хорошо и с архитектурной точки зрения.

Работу с API обычно тестируют через заглушки/моки. Мы подменяем класс, который взаимодействует с API, чтобы он вместо обращения к API отдавал заготовленный ответ. Для этого не обязательно использовать Mockery, можно например просто сделать второй класс-заглушку и передать его, используя Dependency Injection:

$fakeApi = new FakeAPI(['USD' => 70]); // заглушка
$currencyService = new CurrencyService($fakeApi);

И еще, один момент. Мне крайне не нравятся тесты, которые проверяют, что определенный метод был вызван, или что он был вызван с такими-то аргументами. Это плохие, хрупкие тесты, так как они полагаются на знание, как устроен тестируемый код. Завтра ты чуть перепишешь код, и тест сломается.

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

Аноним 28/10/21 Чтв 00:24:02 2195625753
>>2195593
Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
Вот такая была ошибка, но я разобрался, надо создать массив контекста и в подмассиве ssl для ключей verify_peer и verify_peer_name поставить false, потом добавить этот контекст как параметр в ф-ию file_get_contents. http или https в строке внутри функции - не важно как ни странно.
А вот как переделать кодировку? Там страница в windows-1251 передается со стороннего сайта и встраивается в мою аяксом.
request = new new XMLHttpRequest()
request.open("POST", "urlpost.php", true)
request.setRequestHeader("Content-type",
"application/x-www-form-urlencoded")
Я прочел, что в этот заголовок нельзя добавить еще какие-то параметры.
request.onreadystatechange = function()
{
if (this.readyState == 4)
{
if (this.status == 200)
{
if (this.responseText != null)
{
document.getElementById('info').innerHTML =
this.responseText
}}}}
request.send("url=on-line-teaching.com/index.html)
Аноним 28/10/21 Чтв 16:56:10 2196224754
>>2195625

> Вот такая была ошибка, но я разобрался, надо создать массив контекста и в подмассиве ssl для ключей verify_peer и verify_peer_name поставить false,

Вообще, это не очень правильное решение. Ты отключаешь проверку сертификатов, а значит, не сможешь распознать если кто-то попытается перехватить HTTPS-соединение. Правильнее было бы добавить нужные корневые сертификаты, чтобы PHP мог их проверять. Смотри, например, эту страницу https://neurotechnics.com/blog/ssl-ca-bundles-for-curl-and-php/

> А вот как переделать кодировку?

Функцией iconv на стороне PHP. Ты получаешь страницу в Windows-1251, конвертируешь ее в utf-8 и отдаешь с правильным заголовком Content-Type (в котором указана кодировка utf-8).
Аноним 28/10/21 Чтв 18:36:48 2196392755
>>2196224
Блин, спасибо, преобразовалось как надо все и отобразилось.
Да я не дошел ни до каких курлов пока. У него в книге он просто как-то подрубился к сайту news.com непонятным образом безо всяких контекстов. Япросто скопировал пример из книги и в браузере выскочил ssl warning вышеуказанный вместо страницы. А это потом уже все костыли, которые я скопипастил со stackoverflow как водится.
Аноним 28/10/21 Чтв 18:59:49 2196430756
>>2195611
У меня этот сервис только внешний api дёргает и результатом гидрирует value-objects. А я не понимаю как это тестировать.
А советы дельные, спасибо.
Аноним 29/10/21 Птн 13:01:14 2197141757
Аноны, при помощи чего на пхп лучше всего запилить парсер одного вебсайта?
Аноним 29/10/21 Птн 14:55:36 2197241758
в пхп конторах тоже пьют смущи и ездят на гироскутерах?
Аноним 29/10/21 Птн 19:19:39 2197557759
Аноним 29/10/21 Птн 20:37:34 2197611760
>>2187355

> как генерировать уникальные ссылки на скачивание файлов

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

> И реально ли организовать следующий сценарий: при появлении трёх разных файлов в указанной папке надо сгенерировать для них уникальные ссылки и выгрузить в текстовый файл.

Реально. Чтобы отслеживать появление файлов надо либо использовать что-то вроде inotify (из постоянно работающего скрипта), либо запускать скрипт по крону и проверять список файлов.
Аноним 29/10/21 Птн 20:42:11 2197612761
>>2196430

Ты можешь попробовать использовать мок другого типа, когда ты передаешь в конструктор Mockery не объект, а имя класса. И используя этот мок, перехватить функцию, которая отправляет запрос.

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

Гораздо лучше будет подменить HTTP-клиент. Если у тебя нормальная архитектура, то ты не отправляешь запрос вручную вызывая функции вроде curl_init, а используешь класс HTTP-клиента вроде Guzzle. Его и можно подменить, или использовать встроенную в Guzzle возможность подменять ответы.

Если у тебя плохая архитектура и ты прямо в классе делаешь HTTP-запрос с помощью file_get_contents или curl, то единственный правильный вариант тестирования такого кода - это поднять веб-сервер с заглушкой и сделать, чтобы запросы слались к нему вместо настоящего сервера.
Аноним 29/10/21 Птн 20:57:15 2197625762
Аноним 30/10/21 Суб 00:11:37 2197725763
сяп хочу быть вкатывальщиком войти в пшп, вот суть такова что я шкила на каникулах и хочу зарабатывать себе на хотелки, отчим не дает очевидно, мамка не указ ему, вооот, хочу быть как индус только урус на рынке и делать сайтики за тыщи рублей, стоит пытаться?
Аноним 30/10/21 Суб 00:28:55 2197738764
>>2196392

Та статья про курл, но она применима и к твоей ситуации. В контексте для ssl ( https://www.php.net/manual/en/context.ssl.php ) есть опции cafile и capath.

В cafile указывают путь к файлу со всеми корневыми сертификатами.

В capath указывают путь к "correctly hashed" папке с отдельными файлами-сертификатами. Как я понимаю, такая папка есть в системах на linux.

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

Вручную скачать файл с корневыми сертификатами, собранными Mozilla, можно тут: https://github.com/composer/ca-bundle/blob/main/res/cacert.pem

Так как список корневых сертификатов может меняться, тебе надо периодически обновлять файл.

Но удобнее было бы, используя композер, установить пакет composer/ca-bundle и далее использовать код из документации к нему: https://github.com/composer/ca-bundle#to-use-with-php-streams

Тогда ты будешь проверять сертификаты и использовать безопасное шифрованное соединение. А советы по отключению проверки просто вредные.
Аноним 30/10/21 Суб 00:30:43 2197740765
>>2196392

Пример кода в книге раньше работал скорее всего потому что в то время сайты использовали в основном нешифрованный HTTP, и проблемы с проверкой сертификатов не было. И не сработал сейчас, так как сейчас практически все сайты используют HTTPS.
Аноним 30/10/21 Суб 00:42:39 2197744766
Вот я дошел до очередного концепта интересного.
Как генерировать уникальные ссылки-айдишники? В целом, уникальную строку.
Каждый раз при создании-изменении записи в базе нужно либо самому проверять не использовалось ли значение раньше, либо если колонка имеет свойство "уникальность", то база при записи будет сама проверять все это, так?
То бишь у тебя записей 100, ты делаешь 101 и скрипт смотрит на 100 записей и сравнивает их с новой. И если у тебя, скажем, 10кк записей, то при добавлении новой, он будет перебирать все эти 10кк? Из чего можно сделать вывод, что нагрузка на оборудование растет в прогрессии.
Знаю, что это не тянет на открытие Америки, просто хотелось бы послушать мнения-отсылки-примеры на этот счет.
Аноним 30/10/21 Суб 00:45:11 2197745767
>>2197725
Почему всем похуй на меня, ответьте пожалуйста
Аноним 30/10/21 Суб 00:46:37 2197746768
>>2197745
Ну попытайся, с тебя не убудет
Аноним 30/10/21 Суб 00:50:11 2197753769
>>2197746
Понятно, пасиба за ответ я пойду учить
Аноним 30/10/21 Суб 03:31:31 2197801770
>>2197611
>Ты не знаешь, как устроена ссылка? Как сгенерировать случайный набор символов?
Да, не знаю. Особенно как это делается в плане Apache.

Допустим, подсунули в каталог www или как его там в Апаче нужный файл foo.txt.

Ссылка на него будет выглядеть наверно так http://localIP/foo.txt

Как изменить ссылку, например, на http://localIP/90490458qniauelink333 чтобы она продолжала указывать на искомый файл.

Короче, как это называется - я съебу в интернеты в на поиски.

А то тут такие наезды, как-будто я HTTP сервера каждые полчаса поднимаю и настраиваю.
Аноним 30/10/21 Суб 12:53:53 2197976771
>>2197744
>То бишь у тебя записей 100, ты делаешь 101 и скрипт смотрит на 100 записей и сравнивает их с новой. И если у тебя, скажем, 10кк записей, то при добавлении новой, он будет перебирать все эти 10кк
Ну формально так. Очевидно пусть этим занимается БД.
Приделай индекс к этому полю, тогда 10кк строк можно будет перебрать за 17 итераций или вообще за одну (зависит от индекса).
Аноним 31/10/21 Вск 04:10:46 2198663772
>>2161064
О, таким и занимаюсь. Самописная CMS-ка без документации. Но не вижу в этом ничего плохого, если это будет первой работой в этой сфере
Аноним 31/10/21 Вск 04:13:00 2198664773
>>2161177
>У меня кореш на автомойке столько же зарабатывает без всякой ебли с кодом
О да, без всякой ебли с кодом, ебля с немытыми машины намного лучше за эти деньги, а перспективы-то какие!
Аноним 31/10/21 Вск 15:24:55 2198989774
>>2197744

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

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

Что значит "очень быстро"? Значит, время поиска в индексе пропорционально не числу записей в таблице, а логарифму по основанию 2 от него.

Пусть поиск по таблице из 1 записи занимает t. Поиск по таблице из миллиона записей займет 1000000t. А поиск по индексу на миллион записей займет log2(1000000) ~ 20t. То есть, поиск по индексу для таблицы в миллион записей будет всего в 20 раз медленнее чем по таблице с одной записью и в 50 000 раз быстрее чем поиск без индекса.

То есть, если ты создаешь таблицу уникальных кодов и сделаешь в ней индекс, то поиск будет происходить быстро.

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

EXPLAIN SELECT * FROM codes WHERE code = 123456;

В общем, иди читать про индексы и команду EXPLAIN. Если будут вопросы, то уточняй.
Аноним 31/10/21 Вск 15:33:30 2199001775
>>2197801

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

Изменить ссылку на файл можно как минимум двумя способами.

1) путем переименования файла. Во-первых, это плохая идея класть файл прямо в папку www, так как он сразу будет доступен по прямой ссылке. Лучше сделать специальный каталог private. недоступный из веба, и класть файл туда.

Допустим, кто-то положил файл foo.txt в каталог private. Если мы хотим сделать на него трудноподбираемую ссылку, то мы можем просто скопировать этот файл в папку Апача, дав ему произвольно длинное имя. Также, мы можем сохранить информацию о файле в базу данных, чтобы его потом можно было найти.

2) веб-сервер можно настроить таким образом, чтобы при открытии ссылки он не пытался искать файл с таким именем, а вызывал PHP-скрипт, например index.php. А дальше уже PHP-скрипт анализирует URL, проверяет его корректность и если все ок, то отдает файл из папки private (к которому нельзя обратиться в обход PHP-скрипта, так как эта папка недоступна Апачу).

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

Гугли информацию по mod_rewrite для этого метода. Лучшая информация это официальная документация Апача на английском.
Аноним 31/10/21 Вск 16:18:24 2199084776
Нужно сделать скриптецкий на пыхе, есть у меня сайт и приложение в котором генерируется ссылка с рандомными аргументами, нужно её обработать и передать её пост запросом уже на другой сервер, как это сделать?
в пыхе нулевой
Аноним 31/10/21 Вск 18:32:58 2199209777
А какую версию jQuery юзают обычно? Или вообще другие библиотеки?
Аноним 31/10/21 Вск 21:40:59 2199355778
>>2199209
очевидно, последнюю
Аноним 31/10/21 Вск 21:41:22 2199356779
Аноним 01/11/21 Пнд 11:40:17 2199622780
76867876867.jpg 80Кб, 1200x613
1200x613
По ходу прикрыли лавочку с бесконечным триалом шторма. Попробовал нетбинс - лютая ебанина и выглядит как говно. Пичаль...
Аноним 01/11/21 Пнд 13:54:58 2199698781
>>2199622
Регайся на stepik. Под бесплатные курсы Python выдавали лицуху для PyCharm на 3 месяца, можно продлевать. Кто знает, может и с пыхой так.
Аноним 01/11/21 Пнд 14:09:06 2199706782
>>2199698
Спасибо, анон, попробую. Не покупать же в самом-то деле.
Аноним 02/11/21 Втр 00:02:41 2200206783
>>2199622

Попробуй еще VS Code с нужными плагинами.
Аноним 02/11/21 Втр 01:06:45 2200249784
Реквестирую положняк по битриксу. Стоит в него закатываться будучи джуном? Плятт вроде нормально.
Аноним 02/11/21 Втр 01:07:39 2200250785
>>2199355
>>2199209
>акую версию jQuery юзают обычно?
>очевидно, последнюю
Да, потом еще городят костыли что бы в select2 работала автофокусировка на поле ввода. юзай 3.5.1
Аноним 02/11/21 Втр 01:11:47 2200252786
>>2199209
>Или вообще другие библиотеки?
Сейчас все боготворят SPA. Поэтому актуальны React, Vue, Angular.
jQuery постепенно опускается в могилу, ибо никому уже не всралась поддержка ie9, часть неработающих селекторов и ужасная производительность.
Аноним 02/11/21 Втр 01:16:21 2200255787
>>2200249
У тебя есть выбор? Кстати где вообще прочитать, как его использовать?
Аноним 02/11/21 Втр 01:18:29 2200257788
>>2200255
Не, я просто вротендер, сейчас рассматриваю вариант немного прокачаться как фулстек, на этом проекте используется битрикс. Выбор у меня либо дрочить реакт, либо дрочить реакт+ битрикс.
Аноним 02/11/21 Втр 01:27:13 2200263789
>>2200257
Как вообще разделяется работа фронт и бек-ендеров? Например в случае использования ajax? Верстальщик это третье лицо или тоже во фронтенд входит?
Аноним 02/11/21 Втр 01:30:46 2200264790
>>2200263
>Как вообще разделяется работа фронт и бек-ендеров?
>Например в случае использования ajax?
Ну создается ишью, по нему пилится отдельный метод на бэкенде с этими вашими крудами, затем (или параллельно) интегрируется в приложение.
> Верстальщик это третье лицо или тоже во фронтенд входит?
Смотря какой размер проекта. На больших проектах есть целые отделы верстальщиков, на более мелких верстает как правило фронтендер.
Аноним 02/11/21 Втр 01:34:39 2200266791
>>2200264
Ок, в моей мухосрани похоже только конторы типа >>2161064 , вот я сижу и читаю все подряд.
Аноним 02/11/21 Втр 01:37:41 2200268792
>>2200266
Устраивайся не в мухосрань. У меня одногруппник джуном пыхером устроился на удаленку в ДС за 50к.
Аноним 02/11/21 Втр 01:40:56 2200269793
>>2200268
Так джунов берут на удаленку сразу? Или все-таки есть период "стажерства" где под присмотром в офисе работаешь?
Аноним 02/11/21 Втр 01:42:12 2200271794
>>2200269
Берут на испытательный срок, что бы убедится, что ты в рабочее время будешь грести, а не устраивать срачи в /po/
Аноним 02/11/21 Втр 02:48:23 2200286795
>Это паникод для кирилических доменов. Его сам Chrome делает. В Firefox все норм
Как вместо кода панина возвращать Email?
Аноним 03/11/21 Срд 15:03:12 2201746796
>>2195625
>Я прочел, что в этот заголовок нельзя добавить еще какие-то параметры.
Плохой источник у тебя. Ты можешь добавить encoding в content-type и все у тебя будет работать (если ты используешь XMLHttpRequest). Если ты используешь fetch, то тебе нужен будет создать TextDecoder для перекодировки из бинарных данных в UTF кодировку.
Аноним 03/11/21 Срд 15:07:30 2201753797
>>2201746
>>2195625
Я ошибся. Тебе надо не в content-type забить encodig, а вызвать метод у твоего xhr под названием overrideMimeType, передать в него "text/plain; ну или че там у тебя charset=windows-1251"
Аноним 03/11/21 Срд 18:49:47 2202100798
>>2201753
Спасибо, не нашел этого тогда.
request.setRequestHeader("Content-type",
"application/x-www-form-urlencoded")
Вот что там было у xhr.
Аноним 04/11/21 Чтв 04:38:34 2202565799
>>2202100
>не нашел этого тогда
Потому что ты не там искал, надо было в >>2200419 (OP)
Аноним 04/11/21 Чтв 09:22:21 2202595800
image.png 28Кб, 774x398
774x398
Подскажите, в чем ошибка? Должно получиться 65.
Аноним 04/11/21 Чтв 11:37:40 2202661801
>>2202595
Ну так ты определись, 1к у него было сначала или 10к.
Аноним 04/11/21 Чтв 13:47:26 2202841802
>>2202661
Лол, и как я не заметил. Спасиба.
Аноним 04/11/21 Чтв 15:40:32 2202994803
Аноним 04/11/21 Чтв 23:06:57 2203485804
>>2202994
О, это тот самый Бабак из эпичного треда в /b
Аноним 05/11/21 Птн 11:27:19 2203622805
Аноним 06/11/21 Суб 15:08:37 2204549806
>>2201753

Это неправильный подход. Ты предлагаешь с сервера отдавать ответ с некорректной кодировкой в заголовке, а на клиенте переопределять этот заголовок. Надо на сервере отдавать и правильную кодировку, и правильный заголовок.

Тем более, что человек учится, и ему надо изучать, как решить задачу правильно, а не как бездумно воткнуть костыли.
Аноним 06/11/21 Суб 16:20:58 2204592807
>>2204549
Из его описания я понял, что сервер не совсем его. А так да, согласен.
Аноним 06/11/21 Суб 16:26:20 2204596808
>>2204592
Я юзаю локальный сервер openserver.
Аноним 06/11/21 Суб 16:30:46 2204599809
>>2204596
>Там страница в windows-1251 передается со стороннего сайта и встраивается в мою аяксом.
Аноним 06/11/21 Суб 16:40:09 2204604810
>>2204599
Я нуб пока и путаю может что-то, но тот пример состоял в том, что страница делает аякс запрос, вызывается php скрипт, в нем с левого сайта из инетра с помощью file_get_contents помещается страница в переменную, а эта переменная асинхронно встраивается в innerHTML элемента исходной страницы.
Аноним 06/11/21 Суб 16:44:36 2204611811
>>2204604
Ну если у тебя проходит через твой сервер, то да, лучше декодировать прямо на твоем сервере, чем на клиенте.
Аноним 06/11/21 Суб 22:31:56 2204889812
>>2204604
>эта переменная асинхронно встраивается в innerHTML
Почистить контент переменной от опасных тегов не забудь.
Аноним 07/11/21 Вск 17:10:15 2205321813
Объясните, как подключить обработку PHP-файлов в Apache. Win 10
Аноним 07/11/21 Вск 17:32:55 2205343814
Аноним 08/11/21 Пнд 09:10:42 2206441815
>>2202595
Чтобы не писать два раза, сколько было кэша вначале и как рассчитывается процент, лучше использовать цикл while.
Аноним 08/11/21 Пнд 14:26:34 2206764816
>>2206441
https://ideone.com/6tEU0x
Срабатывает даже если не считать процент перед циклом. И я что-то не догоняю почему, если переменная процента инициалировалась нулем, тогда по идее ошибка была бы в один год т.к. во время первой итерации ничего не прибавилось к сумме, а год увеличился на 1.
Аноним 08/11/21 Пнд 15:01:02 2206810817
>>2206764
For работает так:
1. Инициализация счётчика.
2. Проверка условия.
3. Если условие истинно, выполняем блок действий.
4. Изменяем значение счётчика.

Пункт 4 выполняется после п.3, поэтому значение процента будет рассчитано и учтено уже на первой итерации цикла.
Аноним 08/11/21 Пнд 15:04:35 2206815818
>>2206764
И ещё, условия должно быть <1000000, иначе ровно миллион твой скрипт проигнорирует.
И не надо длть прмнн вида $с, $p.
Аноним 08/11/21 Пнд 15:15:35 2206837819
tumblrpdolevre6[...].jpg 109Кб, 600x857
600x857
>пишем учебник перегруженный математикой практически без намека на реальные интересные приложения
>думаем что новичкам это будет очень интересно изучать
>ехидно умиляемся наивным вкатунам
Аноним 08/11/21 Пнд 21:05:57 2207219820
А как сделать чтобы сайт работал? Reg.ru windows yii2
Домашний каталог указал /
Стартовую позицию указал web/index.php
Главную страницу показывает нормально, но когда роуты строит подставляет /web и все не работает (( Еще и .htaccess нет в для windows
Аноним 12/11/21 Птн 12:41:16 2210107821
>>2204889

Вот это правильный совет. Действительно, тут возможна такая атака: сторонний сайт, с которого берется контент, вставляет в него скрипт, этот скрипт попадает вместо с контентом на страницу, и начинает срабатывать у пользователей. Также, есть чуть менее опасная атака: сторонний сайт вставляет в контент CSS-стили и они ломают отображение сайта.

Получается, надо библиотекой вроде htmlPurifier удалять теги script/style/iframe и фильтровать CSS-правила в атрибуте style.

>>2206837

Подскажи, где тут перегрузка математикой? Я не думаю, что вычисление процентов это такая уж тяжелая математика.

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

>>2207219

Я не очень понял, что такое "стартовая позиция", ты не мог бы скинуть скриншот настроек хостинга?

Ты не написал, какой веб-сервер используется (Apache или IIS). Под Windows теоретически можно использовать Апач, который поддерживает htaccess. Но если используется IIS, то у него наверно есть свой механизм для настройки соответствия между URL и файлами на диске.
Аноним 12/11/21 Птн 16:50:45 2210427822
>>2210107
>>2204889
Да это все я одними и теми же с вопросами, вкатывальщики похоже закончились пока.
Дочитал ту книгу многострадальную, в конце он делает типа мини блог/соцсеть, ну типовое задание как я понимаю. Так вот он там никаких связываний не делает, если где-то надо к бд обратиться, использует функцию где просто передает строку запроса SQL:
function queryMysql($query)
{
global $pdo;
return $pdo->query($query);
}
Как по уму тут делать надо, или хотя бы с привязыванием значений к запросу, функцию с переменным числом аргументов и туда добавлять значения запроса как аргументы?
Алсо страницы сайта у него в формате php, то есть если страница юзера одного выводится, там добавляется GET значение к ссылке members.php?$user=..
Это и есть шаблоны о которых говорилось или надо как-то отдельно html страницы делать, а в них вызывать php скрипты? У него html код через отдельные echo или heredoc выводится внутри этих скриптов.
Аноним 12/11/21 Птн 16:58:18 2210442823
php-noob-24.png 121Кб, 718x938
718x938
>>2210427
Также решил глянуть учебник из шапки, т.к. автор книги ооп не коснулся вообще, паттернов, mvc, etc ну и практики нет по факту. Так вот самому даже что-то простое написать гораздо сложнее чем читать чей-то код, с этим кредитом на айфон такой затуп произошел, что я уже что-то сомневаюсь теперь про вкат, по крайней мере в бекэнд (а там и на фронте в js логика ведь тоже нужна).
Ну а вопрос вот про вывод индекса здесь в примере, разве он не с нуля начинается? 0..15 для 16 элементов.
Аноним 12/11/21 Птн 21:30:28 2210844824
Уважаемые пыхеры, какой актуальный стек бекенда для создания SPA и бэкенда на пыхе?
Аноним 12/11/21 Птн 21:31:15 2210846825
>>2210844
SPA, само собой, написан на жс. А то как-то двусмысленно написал.
Аноним 12/11/21 Птн 22:13:11 2210876826
Чем плох пхп?
Аноним 12/11/21 Птн 22:51:21 2210904827
https://ideone.com/6GiCO0
Вроде правильный результат, ответа нет в той главе. Кстати почему переменные внутри echo бывают выделены фигурными скобками, чтобы отдельно точками не складывать строку?
Аноним 13/11/21 Суб 11:17:49 2211069828
>>2210442
С нуля.
Когда работают с массивами, и нужно по индексу и получить доступ к элементу и вывести индекс в человеческом формате (начиная с 1), то в одном месте придётся добавлять или вычитать единицу из индекса.
Раз вывело 16, а индексы в массиве 0..15, значит $randomText = $letters[$random - 1]
Аноним 13/11/21 Суб 11:48:29 2211094829
>>2211069
Там просто предлагалось использовать array_rand(), а он возвращает индексы как есть.
Аноним 13/11/21 Суб 15:55:15 2211314830
https://ideone.com/I4aAUa
Не понимаю, как указать в регулярке символы на любой позиции. На стековерфлоу про какой-то lookahead говорили, но в статье из шапки нет про это, значит какое-то более простое есть решение.
Аноним 13/11/21 Суб 16:41:12 2211327831
Хочу вкатиться в PHP разраба.
Уже выучил(или как минимум знаком):
PHP, Git, Docker(docker-compose), composer, начал недавно Laravel изучать, MySQL(простые SQL запросы, типы данных), знаю немного SOLID, MVC, DRY/KISS(читал), парочка простых паттернов проектирования.

Этого хватит для вката или что ещё нужно осилить? Напрягает, что в дохуище мест требуют JS, я его вообще не шарю.
Аноним 13/11/21 Суб 19:59:36 2211518832
>>2120804 (OP)
Привет, а что у вас в php используется вместо шаблонов? Например, как я могу сделать наследование шаблонов? Или хотя бы шаблон внутри шаблона?
Аноним 13/11/21 Суб 20:41:09 2211558833
Аноним 14/11/21 Вск 01:39:50 2211714834
Как в PhpStorn отлаживать PHP-страницы? У меня есть форма с валидацией и вычислением ответа, мне бы отладить её, а как - не знаю
Аноним 14/11/21 Вск 11:19:46 2211836835
>>2211558
Спасибо, нужно на чистом php, без фреймворков. required для этих целей использовать нормально?
Аноним 14/11/21 Вск 11:49:49 2211856836
>>2211836
Симфони как конструктор работает, можешь из него только twig взять. В документации должны быть рекомендации по подключению.
Аноним 14/11/21 Вск 13:30:03 2211933837
>>2211327
Не парься, джс не сложный для php-разработчика, сложные вещи делать не надо будет скорее всего.
Аноним 14/11/21 Вск 13:39:38 2211940838
>>2211314
^[-\s\(\)](8|\+7|\+ 7)[-\s\(\)][\d][-\s\(\)][\d][-\s\(\)][\d][-\s\(\)][\d][-\s\(\)][\d][-\s\(\)][\d][-\s\(\)][\d][-\s\(\)][\d][-\s\(\)][\d][-\s\(\)]*[\d]$
Во, утро вечера мудренее, обрабатываются номера теперь вот такой регуляркой. Так и задумывалось или можно короче сделать?
https://ideone.com/CMjiOq
Как кстати длинную строку разделить на более короткие в редакторе, но чтобы не вставилось символов переноса?
Аноним 14/11/21 Вск 17:15:00 2212089839
>>2211940
>Как кстати длинную строку разделить на более короткие в редакторе, но чтобы не вставилось символов переноса?
Через конкатенации. Можно записать:
$var = 'ab';
но можно и так:
$var = 'a'
. 'b';
Аноним 14/11/21 Вск 17:35:32 2212109840
>>2212089
Точно, почему-то не подумал про это, спасибо. Думал там символ типа бекслеша как в питоне надо.
Аноним 14/11/21 Вск 18:57:31 2212145841
>>2212109
Ну так у пистона конец инструкции это конец строки, а у php как у сишки точка с запятой, ему на твои переносы строк похуй.
Аноним 14/11/21 Вск 21:01:16 2212269842
http://phpbook.ga/l1/regexp.html
Что-то я не понял как в задаче об "опечаточниках" в конце в одном регулярном выражении корректно найти все возможные варианты чередования языка и еще чтобы вдобавок выделить их скобками в нужном месте.
Костыли это тоже решение, как по мне. И автоисправление что-то тоже не очень понятно, для каждой буквы отдельно прогонять через preg_replace? Сомнительно.
https://ideone.com/KiYApX
Аноним 17/11/21 Срд 19:28:32 2215272843
Анон-автор учебника из шапки, ты в порядке?
https://ideone.com/UchUS6
https://ideone.com/z8RG0m
Кое-как пробираюсь через задачи, хотя наверное говнокод получается обычно. Два вопроса возникло:
Как правильно сравнивать элемент массива с пробелом? Я так понимаю " " и "\\s" это равнозначно.
Это норма что сразу не выходит и приходится через var_dump смотреть промежуточные результаты и как бы брутфорсить решение?
Аноним 18/11/21 Чтв 13:13:20 2215933844
Блин, пока печатал, видимо истек какой-то таймер внутри ideone и после отправки там ничего не оказалось, просто обновилась страница. Поле ввода не сохраняется в массив POST или как у них вообще реализовано?
Аноним 18/11/21 Чтв 16:01:10 2216135845
>>2120804 (OP)
Хелп, уже полдня не могу сгенерировать Laravel - приложение по официальному гайду.
Что я делаю:
sudo systemctl start docker
curl -s https://laravel.build/example-app | bash
Послушно ввожу пароль.
cd example-app
./vendor/bin/sail up

Что я получаю:
[+] Running 0/1
⠿ laravel.test Error 0.4s
и далее:
https://pastebin.com/nZm49Br1

В сети информации не нашел, писали, что могли криво пакеты выкачаться либо места на диске не хватать, но я специально очистил 8+ гигов и кучу раз все перекачивал (возможно, не все, но я хз, где еще может храниться кэш вот отсюда: https://laravel.build/)

Прошу хоть намекнуть, в каком направлении двигаться. Система - Arch Linux, возможно, не хватает каких-то пакетов, хотя по идее одного докера должно быть достаточно.
Аноним 20/11/21 Суб 04:12:02 2217587846
>>2210427

> использует функцию где просто передает строку

Это неправильно. Надо отдельно передавать запрос с плейсхолдерами и отдельно переменные для него.

Здесь есть примеры корректного кода для PDO, MySQLi: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md#%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%B1%D0%BE%D1%80%D1%8C%D0%B1%D1%8B

Дополнительно я советую почитать описания функций PDO prepare, bindValue, execute в мануале (он переведен на русский): https://www.php.net/manual/ru/pdo.prepare.php

> Как по уму тут делать надо, или хотя бы с привязыванием значений к запросу, функцию с переменным числом аргументов и туда добавлять значения запроса как аргументы?

Да, функцию, которая принимает запрос и массив параметров к нему. Вот пример такой функции в библиотеке DBAL, там еще можно третьим параметром передать типы аргументов:

$stmt = $conn->executeQuery('SELECT * FROM articles WHERE id IN (?)',
array(array(1, 2, 3, 4, 5, 6)),
array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
);

> Это и есть шаблоны о которых говорилось

Нет. Что такое шаблоны, описано тут: https://github.com/codedokode/pasta/blob/master/php/templates.md

> У него html код через отдельные echo или heredoc выводится внутри этих скриптов.

Это очень неудобно и код получается плохо читаемый.
Аноним 20/11/21 Суб 04:20:57 2217588847
>>2210442

Чем больше ты решаешь задач, тем проще становится. Так что не беспокойся, а больше пиши код.

Индексы в массиве по умолчанию (если ты их не задаешь сам) действительно начинаются с 0. Но здесь переменная $i не используется как индекс массива, а просто для отсчета количества слогов, потому можно начинать ее с 1.

>>2210904

Переменную можно (но не обязательно) окружать скобками, чтобы отделить от текста (чтобы он не был частью имени переменной): echo "{$weight}kg". Если у тебя за переменной идет пробел или знак препинания, то скобки не требуются.

То есть, можно писать так:

echo "Вес $weight кг\n";

По коду: во-первых, код надо выравнивать правильно. Код внутри функции должен быть сдвинут на 4 пробела вправо. Читать тяжело такой код.

> while($credit!=0){
Безопаснее писать $credit > 0. А то вдруг из-за округления получится не 0, а -0.000001 и тогда цикл никогда не закончится.

> if($credit<$payout) $payout=$credit;
Тело if надо заключать в фигурные скобки (язык позволяет не заключать, но рекомендации по стилю кода PSR рекомендуют ставить их). Эту строчку можно заменить на более короткий вызов функции min().

> $credit=$credit-$payout;
Здесь можно использовать -=

Ответы выглядят правильно.





Аноним 20/11/21 Суб 04:26:39 2217589848
>>2211314

Регулярки так не работают. Регулярка это последовательность: сначала идет x, за ним идет y, за ним z. Ты не можешь "вернуться" назад и сказать: а вот там 5 символов назад должна быть буква w.

Потому ты должен написать примерно так:

- сначала идет +7 или 8
- за ними идет 10 повторяющихся групп; каждая группа состоит из любого количества знаков, за которым идет одна цифра

Как описать "10 повторяющихся групп"? Используй круглые скобки, чтобы создать группу и применить квантификатор (знак повторения) к ней. Например:

(abc)+ значит "1 или более раз повторяется abc". Если бы скобок не было, то знак плюс применился бы только к букве c, а так он применяется ко всей группе.



Аноним 20/11/21 Суб 04:33:31 2217590849
>>2211314

lookahead это другое и тут не поможет. Но давай я расскажу при lookahead и lookbehind. Это "утверждения", assertions, они отличаются от других выражений тем, что не "поглощают" символы, которые проверяют, а лишь проверяют условие.

Например, это выражение:

[a-z]{4}

Значит "4 любых буквы". А как сказать "слово из 4 букв, не начинающееся с xyz"? Тут и нужен отрицательный lookahead:

(?!xyz)[a-z]{4}

Тут (?!xyz) значит "дальше должно быть не xyz".

Другой пример - lookbehind. Он проверяет условие ДО текущей позиции. Например: найти все буквы a, перед которыми стоит не цифра:

(?<![0-9])a

Выражение в скобках значит "слева от текущей позиции должна быть не цифра".

assertions не поглощают символы и не сдвигают текущую позицию. То есть, если несколько утверждений идут подряд, то они все относятся к одному и тому же месту в строке. Например, это:

(?!xyz)(?!abc)[a-z]{4}

Значит "слово из 4 букв, не начинающееся с xyz и не начинающееся с abc".
Аноним 20/11/21 Суб 04:36:21 2217593850
>>2211327

Наверно надо изучить фреймворк. Так как реальные проекты часто пишутся на фреймворках, а не с нуля.

>>2211836

На "чистом" PHP тебе придется изобретать свой шаблонизатор для этого. Проще отказаться от наследования шаблонов и вручную из страницы подключать шапку и подвал с помощью require.

>>2211836

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


Аноним 20/11/21 Суб 04:38:57 2217596851
>>2211940

> Как кстати длинную строку разделить на более короткие в редакторе, но чтобы не вставилось символов переноса?

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

$regexp = "/
# Это комментарий
hello |
world |
something
/ux";

Пробелы в такой регулярке обозначают с помощью \s.

Аноним 20/11/21 Суб 04:45:05 2217599852
>>2211940

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

>>2212269

> в одном регулярном выражении корректно найти все возможные варианты чередования языка

А тебе не надо искать все варианты. Тебе надо найти слова, в которых за любой буквой одного алфавита идет любая буква другого алфавита.

То есть: любые буквы, кирилица + латиница или латиница + кирилица, любые буквы.

> И автоисправление что-то тоже не очень понятно, для каждой буквы отдельно прогонять через preg_replace?

Ты можешь использовать strtr, она принимает массив символов и их замен. И preg_replace по моему тоже принимает массив (смотри мануал).

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



Аноним 20/11/21 Суб 04:52:40 2217601853
>>2215272

> $parts
Лучше назвать $sentences
> $arr
Ужасное название. Используй $letters.

Форматируй код (клавиша Tab) или используй редактор, который умеет это делать сам.

> $i=0;
> while(true)
Тут цикл for бы лучше подошел. А вообще, отрезать пробелы можно с помощью функции trim().

Функцию makeFirstLetter... нужно значительно укоротить. Там хватит trim + замена первой буквы.

> $res
Тоже плохое название так как ничего не говорит о содержимом.

> preg_replace("/\,/ui","",$text);
Запятую безопаснее заменять на пробел, а не удалять целиком.

> $final=makeFirstletterUppercase($sentence);
> $final.=". ";
> $result.=$final;
Лучше складывать предложения в массив, а в конце склеить его в строку. Будет короче и читабельнее.


Аноним 20/11/21 Суб 05:05:18 2217604854
>>2215933

Ты можешь установить редактор и печатать код в нем. И даже запускать, если установишь PHP.

>>2216135

Может быть проблема с местом. Установщик использует команду:

apt-get install -y lsb-release > /dev/null 2>&1

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

Ты можешь проверить свободное место с помощью df.

Другой вариант - проблемы с проверкой подписей. там есть сообщения:

W: Failed to fetch http://ppa.launchpad.net/ondrej/php/ubuntu/dists/hirsute/InRelease At least one invalid signature was encountered.

Но так как установщик не пишет реальную причину ошибки, то понять что-то трудно. Может баг в установщике, тогда можно попробовать взять чуть более старую версию.
Аноним 20/11/21 Суб 05:06:08 2217605855
>>2216135

> где еще может храниться кэш вот отсюда: https://laravel.build/)
Установщик выполняет операции в докер-контейнере, потому надо смотреть мануалы, где докер хранит образы и как их можно почистить.
Аноним 20/11/21 Суб 12:38:17 2217747856
>>2217604
>>2217605
Спасибо, df делал сразу, места на системном диске 2+ гига, на пользовательском - 8+ гигов. Но когда я посмотрел, сколько занимают все мои образы командой docker image ls, то охренел. Возможно, стоит перенести /var/lib/docker на диск с 8 гигами и попробовать снова, но после удаления всех образов на системном диске освободилось аж 4 гига и теперь я сомневаюсь, что хватит моих восьми на пользовательском диске )

C PPA ondrej/php у меня еще пару лет назад проблемы были, когда пытался писать на yii. Это кстати одна из причин, почему сменил убунту на арч.

Короче, пока забил на этот sail, решил установить по-старинке, через composer.
Аноним 20/11/21 Суб 14:14:20 2217832857
>>2217599
Во, спасибо за ответы! Я уж думал что-то стряслось ну или в крайнем случае вопросы слишком тривиальные для комментариев.

>нужно использовать группировку с помощью круглых скобок
Точно, что-то не подумал про это вообще. Вроде запомнил все эти фичи регулярок, но как что-то конкретное надо сделать, получается недоумение.
https://ideone.com/u6Ulad
По поводу названий переменных и форматирования, я понимаю что в реальных проектах надо по-другому, а тут просто ведь небольшие скрипты, вот и пишу немного коряво. Хотя может лучше сразу привыкнуть.
VS code есть, но там ведь в браузер вывод php файла и надо немного по-другому форматировать, а ideone я так понимаю выводит просто консоль, поэтому в ideone и делаю, чтобы тут запостить результат.

Еще небольшой вопрос, я заметил некоторые стандартные функции принимают по ссылке аргумент, а не которые вроде как по значению. Так вот чтобы много лишних переменных не плодить, но чтобы и результат был нужный, надо стараться одну перезаписывать все время в любом случае? Типа
$someArray=array_reverse($someArray);
$someArray=sort($someArray);
По идее IDE должна подсказывать параметры.
Аноним 20/11/21 Суб 23:32:17 2218287858
>>2217832

Надо с самого начала приучаться нормально оформлять код. В VS Code есть команда format (Ctrl + Shift + P -> Format document). Ты можешь писать код в VS Code и копипастить его в ideone. Или, что лучше, настроить VS Code для запуска кода в консоли по горячей клавише. Если что, тут можно почитать про запуск PHP из консоли (не в VS Code, а вообще): https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

Также, у твоей программы неправильно сделан вывод. Если правильный номер не прошел проверку, она пишет точно такое же сообщение, что и для неправильного номера. И глядя на результат, непонятно: правильно отработала программа или нет. О таких вещах тоже надо приучаться думать, удобно ли воспринимать результат работы твоей программы? Можно ли с первого взгляда понять, правильно ли она работает?

Вместо "$x ошибок" лучше писать "ошибки: $x". Тогда не будет неправильного текста вроде "2 ошибок". Или можно сделать функцию, которая будет выбирать корректную форму слова.

Код должен быть с одной стороны читабельным, как будто это текст на английском, но с другой стороны коротким и лаконичным. То есть не стоит доходить до фанатизма и делать названия по 30 символов. Например, $correctNumbers допустимо сократить до $correct или $valid.

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

$regexp = "/abc/u";
...preg_match($regexp, ...);

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

$fixSpaceAfterCommaRe = "/.../u";

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

Не стоит создавать кучу переменных в такой ситуации:

$number1 = trim($number);
$number2 = preg_replace)(..., $number1);
$number3 = mb_strtoupper($number2);

Одним из решений тут было бы отказаться от ненужных промежуточных переменных и написать все одним выражением (с отступами и форматированием!):

$number = mb_strtoupper(preg_replace(..., trim($number)));

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

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

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

[$a, $b, $c] = func($x, $y, $z);

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

Что касается функции sort, то ее результат не используют и пишут просто

sort($array);

> По идее IDE должна подсказывать параметры.

Полагаться на IDE тоже плохо. По идее, код должен быть понятен без IDE. Например, если у функции много аргументов (> 3-4), то лишние аргументы должны быть с именами, так как вряд ли кто-то помнит наизусть, какой 5-й параметр у preg_replace:

$x = preg_replace("...", "...", $str, count: 10);

Именованные аргументы появились в PHP8.0. Используй их, если в твоей функции более 3-4 аргументов или если у тебя много необязательных аргументов.
Аноним 21/11/21 Вск 01:19:55 2218347859
>>2218287
Понял, в следующий раз по-человечески постараюсь отформатировать и проименовать все.
>Что касается функции sort, то ее результат не используют и пишут просто sort($array);
Ну вот я как раз делал про Йоду ту небольшую задачку и не переворачивались слова, я смотрю array_reverse в php мануале, а там
>array_reverse(array $array, bool $preserve_keys = false): array
И я понял, что нужно в новую переменную результат помещать, т.к. передается по значению. Потом еще другие некоторые функции глянул и заметил, что sort передает по ссылке
>sort(array &$array, int $flags = SORT_REGULAR): bool
И результат тем самым не теряется, если никуда его не присваивать.
Аноним 22/11/21 Пнд 12:28:14 2219470860
Если у меня приложение использует много third-party сервисов, имеет ли смысл в дев окружении менять реализацию на стабы, чтобы не ходить во время разработки в эти сервисы? Тут просто даже намёка на такое нет, и непонятно, это раньше не сделали потому что не парились, или есть какой-то скрытый смысл? (Все сервисы просто как логгеры выступают, что-то отсылает во внешние хранилища при разных событиях)
Аноним 22/11/21 Пнд 13:15:13 2219485861
>>2219470

Это есть смысл делать, если эти сервисы как-то мешают разработке (например: выдают ошибки или тормозят). Если они не мешают, то особой необходимости их подменять нет.

Плюс, если ты поставишь заглушку, а кому-то понадобится протестировать взаимодействие с этими сервисами, то что делать?

Впрочем, если ты пишешь автоматизированные тесты, то тогда надо изолироваться от внешних сервисов.
Аноним 22/11/21 Пнд 15:49:38 2219592862
https://ideone.com/NIahyJ
Не понял прикола про "жадный" алгоритм, у меня вроде работает просто так.
Тут выше про математику и троллинг писал кто-то, сколько реально приходится решать новые алгоритмические задачи на практике и сколько делать типовые вещи с использованием готовых подходов?
Аноним 22/11/21 Пнд 19:22:42 2219769863
большие дяди ПХП, скажите
есть странице, на нем видео на фоне в блуре, 480p, 50 секунд, 10 мегабайт, mp4, звука нет.
и вот странице виснет, вижу что фпс падает. но ничего сложного кроме видео она не делает.
на мобилках - збс. на винде - збс. даже не на все линуксах виснет, но вот на некоторых прям дропы до 15-20 фпс.
я пытался накомпресировать как-то иначе. и ниче.
Аноним 22/11/21 Пнд 19:59:00 2219818864
Кто то мне оюъяснит нахуя учить еще и фронт? html css js
Аноним 22/11/21 Пнд 23:37:06 2219979865
>>2219818
Кабанчик хочет чтобы делал и фронт и бэк, а платить только за одно
Аноним 22/11/21 Пнд 23:41:38 2219982866
>>2219979
Так шли кабанчика нахуй и ищи другого
Аноним 22/11/21 Пнд 23:55:51 2219997867
>>2219769

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

Также, я не понял про "блур". Ты имеешь в виду, что видео уже размытое, или ты берешь четкое видео и размываешь его средствами CSS? Тогда на процессор ложится дополнительная нагрузка по обработке десятков миллионов пикселей в секунду. Видео должно быть изначально размытым; тогда оно и сжиматься будет лучше. А то ты пересылаешь ненужные данные.

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

Ну и по моему, вставлять видео на фон в общем плохая идея.
Аноним 23/11/21 Втр 00:01:55 2220001868
>>2219592

Поменяй число сотенных купюр на ноль и в твоей программе вываливается ошибка: https://ideone.com/XhnzJE

Можешь поломать голову и попробовать это исправить. Когда надоест ломать голову - почитай разбор этой задачи: https://github.com/codedokode/pasta/blob/master/algorithm/atm.md

Также, в твоем коде не хватает пробелов, например, пробелы после запятой. Научись оформлять код по рекомендациям PSR.
Аноним 23/11/21 Втр 00:50:51 2220060869
>>2220001
Ошибка потому что не хватает купюр. 5000+500+3х200=6100 только, а надо 6600. Или я задачу не так понял?
Аноним 23/11/21 Втр 00:55:03 2220067870
>>2220060
А, глянул статью на гитхабе, вижу теперь эти проблемные ситуации.
Аноним 23/11/21 Втр 01:26:06 2220087871
Как повлияет на PHP то, что Никита Попов прекращает заниматься им?
Аноним 23/11/21 Втр 15:10:18 2220380872
https://ideone.com/LYg7vS
Тут наверное какое-то простое решение, но я его не смог к сожалению придумать, только брутфорс, только хардкор. Я так не вывезу в реальных проектах.
Кстати в процессе у меня возник вопрос, как пройтись по ассоциативному массиву циклом for? Или он не предназначен для этого в принципе?
Аноним 23/11/21 Втр 20:08:44 2220681873
>>2120804 (OP)
Посоветуйте что-нибудь для вот таких целей:
1.Вывод ошибок в отдельное место (консоль браузера, отдельный монитор или вкладка или еще что, главное чтобы вместе с запросом, просто не на странице, хотя бы во фрейме если в 2021 они еще работают).
2.Давно у кого-то на youtube видел на пятой пыхе цветной вывод ошибок и var_dump, где такое найти?
Аноним 23/11/21 Втр 20:14:44 2220685874
>>2220681
3.Помимо ошибок я хочу выводить свой отладочный вывод в то же место.
Чтобы был работающий проект и рядом окно с текстом о том что происходит.
Аноним 23/11/21 Втр 20:42:31 2220708875
>>2220685
>>2220681
Нашел, что цветной вывод дает xdebug.
Кто-нибудь пользовал его с отдельным выводом в cli или куда-нибудь еще кроме файла?
Аноним 23/11/21 Втр 21:19:35 2220754876
Зачем нужны интерфейсы?
Аноним 23/11/21 Втр 22:56:34 2220879877
>>2220087
Неужели это никому не интересно?
Аноним 23/11/21 Втр 23:05:42 2220883878
>>2120804 (OP)
Помохите, анончики, как установить ебаный мбстринг? Комментарий в .ini убрал, сам файл с дополнением есть, сервак перезагрузил, хули ему ещё надо-то?!
Аноним 23/11/21 Втр 23:34:58 2220904879
>>2220883
самофикс
Проблема в том, что пыха не хочет видеть .ini файл. Ебал в рот
Аноним 24/11/21 Срд 00:44:30 2220957880
>>2220883

Выполни php-файл с таким содержанием:

<?php

phpinfo();

Он выведет, какие конкретно ini-файлы использовались. Изменения надо вносить в них.

Также, ты точно тот ini-файл правил? Там есть образцы ini-файлов вроде php.ini-production, их править бесполезно.
Аноним 24/11/21 Срд 09:17:06 2221028881
image.png 6Кб, 792x44
792x44
Привет, почему не получается открыть config файл? Права на папку выставлены даже у обычного пользователя, хотя запускаю под администратором.
Аноним 24/11/21 Срд 09:20:30 2221030882
>>2221028
Блин, нашел ошибку, невнимателен.
Аноним 24/11/21 Срд 14:40:24 2221266883
>>2220708
Кто юзал xdebug? Как заставить его писать вывод в отдельное место, но не файл?
Чтобы только к текущему запросу например в отдельном окне писал ошибки и то что я захочу.
Аноним 24/11/21 Срд 14:42:18 2221267884
>>2220087
php вроде не дураки делают, так что наверное не сильно
главное чтобы сжв и копирасты не добрались
Аноним 24/11/21 Срд 14:54:29 2221274885
>>2221266

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

PHP может писать сообщения в файл. Путь к файлу определяется параметром error_log в php.ini ( https://www.php.net/manual/en/errorfunc.configuration.php#ini.error-log ). Если этот параметр пуст, то поведение отличается в зависимости от используемого веб-сервера:

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

Соответственно, тут два варианта:

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

Под Линуксом отображение данных из файла в реальном времени делается командой tail -f /var/error.log. Под Windows ты можешь использовать команду Powershell или искать другие варианты, которые описаны тут: https://stackoverflow.com/questions/36430524/is-there-an-equivalent-of-tail-f-on-windows

Еще, как вариант, ты можешь сам написать программу чтения лога на PHP.
Аноним 24/11/21 Срд 14:58:19 2221278886
Почему при сравнении веб сервера и сервера приложений первым делом упоминают что сервер приложений может давать динамичный контент, а веб выдает статику?
Это же звучит как бред, не. Я могу просто в процессе запроса мотнуть его по кругу, сделав запрос к чему угодно и поменяв конечный ответ - это же и есть динамика.
Я знаю что там есть конкретные прям отличия, но меня интересует какого лешего упоминают про динамичный контент, как будто веб серв не может его подавать( в общем-то он это и делает в 99% случаев)
Аноним 24/11/21 Срд 15:04:04 2221283887
>>2220754

У меня есть урок про интерфейсы: https://github.com/codedokode/pasta/blob/master/php/interfaces.md

Если кратко, то интерфейсы нужны, когда у тебя есть несколько разных классов, которые умеют делать одну и ту же вещь. Например, у тебя есть прием платежей через разные платежные системы. За каждую систему отвечает свой класс. Но они все реализуют один и тот же интерфейс PaymentInterface с методом "выставить счет" (createInvoice()). И тогда код, который принимает на вход объект PaymentInterface, может работать с любой платежной системой.

Или когда у тебя один класс, но ты хочешь, чтобы его можно было позже заменить на другой. Например, тебе надо делать запросы к другим сайтам. Ты можешь сделать класс CurlHttpClient, и прописать в тайп-хинты этот класс. Но тогда функции будут принимать только объект этого класса. А если ты создаешь интерфейс HttpClientInterface и пропишешь в тайп-хинты его, то можно будет передать любой объект, реализующий этот интерфейс. Например, класс-заглушку, который не делает никаких запросов, а отдает заранее подготовленный ответ.

Аноним 24/11/21 Срд 15:04:37 2221285888
>>2221274
А что ты знаешь об обработчиках ошибках типа как в laravel и symphony?
Хочу с минимумом ебли направить все что выходит на странице в отдельную вкладку или окно или консоль браузера или хотя бы скрываемый div.
Чтобы вообще ничего не протекало в шаблон.
Знаю, что можно отключить, но мне удобно когда я вижу что все отработало как задумано.
Аноним 24/11/21 Срд 15:15:14 2221293889
>>2221278

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

>>2220685

Ты можешь писать в лог ошибок с помощью функции error_log().

Также, ты можешь использовать навороченную библиотеку-логгер вроде Monolog, там вообще можно перенаправлять сообщения как угодно и куда угодно.

>>2220380

> Кстати в процессе у меня возник вопрос, как пройтись по ассоциативному массиву циклом for?

Никак. Надо либо использовать foreach, либо получить массив ключей с помощью array_keys и пройтись циклом по нему.

> foreach($strings as $key => $str){
> $maxLength = max($maxLength, mb_strlen($str));
Тут можно использовать функцию array_map и избавиться от цикла.

> foreach($arr as $value)
> { echo $value." | ";}
Тут нужно использовать implode вместо цикла.
Аноним 24/11/21 Срд 15:17:24 2221298890
>>2221285

По моему, так лога в консоли более чем достаточно. Но если тебе зачем-то нужно выводить сообщения в консоль браузера, то можно использовать FirePHP: http://www.firephp.org/
Аноним 24/11/21 Срд 15:19:01 2221301891
>>2221285

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

Обычно делают так: на продакшене вывод ошибок отключают и они пишутся только в лог. На машине разработчика включают вывод ошибок и смотрят их либо на экране, либо в консоли.
Аноним 24/11/21 Срд 15:51:57 2221319892
>>2221301
реально ли написать свой обработчик чтобы он все писал в переменную и потом ее слать как скрытую часть страницы или js, который напишет в консоль?
Аноним 24/11/21 Срд 17:53:53 2221409893
Matthew McConau[...].mp4 4176Кб, 1280x720, 00:00:38
1280x720
Объясните, пожалуйста, как пользоваться путями в php? Почему они вычисляются динамически? Почему из одного скрипта виден файл, а из другого не виден. Хотя путь одинаковый и исходит из уровня на котором находится index.php Я уже 5 часов сижу с ошибкой и не понимаю...
Аноним 24/11/21 Срд 18:22:54 2221432894
Аноним 24/11/21 Срд 18:29:17 2221436895
Че там по хорошим практикам с .env файлами. У меня гит игнорит даже .env.example, если ручками добавляю - пишет что скрытый.
Это мне каждый раз создавать файл в гите и ручками копипастить содержимое примера?
Аноним 24/11/21 Срд 18:54:11 2221464896
>>2221432
Уже нашел. Путь выстраивается в зависимости от исполняемого(!) скрипта, это я не про тот, который через точку. Видимо мудрейшим из мира php ,было невдомек, что задачи бывают сложнее чем домашнюю страничку сверстать.
Аноним 24/11/21 Срд 19:18:12 2221483897
>>2221436
.env.example всунь в гит, при деплое или первой установке проекта делай cp .env.example .env
>>2221464
Что ты делаешь и зачем тебе пути к файлам, если сейчас используется автолоад через psr-4?
Аноним 24/11/21 Срд 19:28:37 2221486898
>>2221464
>Видимо мудрейшим из мира php ,было невдомек, что задачи бывают сложнее чем домашнюю страничку сверстать.
Ну это вкусовщина, мне неудобно тоже, но не сказать что прям проблема.
Так-то он довольно толковый, мне доставило.

>>2221483
>Что ты делаешь и зачем тебе пути к файлам, если сейчас используется автолоад через psr-4?

автолоад только для классов емнип, никто же не запрещает выносить в отдельные файлы просто куски кода
Аноним 24/11/21 Срд 19:37:28 2221495899
>>2221483
Опять ручками работать эххх. Столько рутинных действий епанутся можно.
Аноним 24/11/21 Срд 22:55:44 2221591900
>>2120804 (OP)
print_r это не заменитель var_dump и он не печатает bool.
как можно получить вывод var_dump в переменную?
Аноним 24/11/21 Срд 23:22:04 2221610901
Screenshot12.jpg 11Кб, 294x141
294x141
Screenshot13.jpg 12Кб, 197x303
197x303
>>2221495
Тебе написали как раз, что делать, что бы ручками не работать.
Laravel какой нибудь?
С CI гита знаком? Экшены как ставить знаешь? Makefile вкурсе что такое?

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

>>2221591
Что из себя представляет вывод var_dump? Ответь на этот вопрос и получишь ответ.
Аноним 24/11/21 Срд 23:46:09 2221630902
>>2221610
>должен уметь
Я?? поститесамисмешное.жпеге

Файл который исполняет команды, интересно, пойду почитаю. Спасибо за подсказку.
Аноним 25/11/21 Чтв 15:43:29 2222070903
>>2221319

Реально, но не проще ли взять FirePHP, где это уже сделано?
Аноним 25/11/21 Чтв 15:47:47 2222074904
>>2221409

Ты должен использовать абсолютные пути. То есть писать require __DIR__ . './index.php' или require '/var/site/index.php';

Если ты пишешь require 'index.php' то это не значит "искать в той же папке что и текущий файл". Кто тебе такое сказал? Это значит "искать в текущей директории процесса", а текущая директория может быть какой угодно (её можно узнать через getcwd() и задать через chdir()). Такой код никогда не будет работать надежно, если только ты не задашь текущую директорию через chdir(). но лучше и проще использовать абсолютные пути.
Аноним 25/11/21 Чтв 15:55:59 2222082905
>>2221409

Дополню еще. Когда ты пишешь require 'index.php', файл может искаться не только в "текущей директории" (текущей директории процесса!, а не той, где расположен вызывающий файл), но еще в include_path. Эта фича по задумке работает таким образом:

- ты выделяешь папку для бибиотек, например /usr/lib/php/
- ты прописываешь ее в include_path
- после этого ты иклюдишь файл через require 'file.php' и он ищется в папке для библиотек

То есть, это явно не то, что тебе нужно. Тебе нужны абсолютные пути. Правила поиска файла без абсолютно пути описаны в мануале https://www.php.net/manual/ru/function.include.php . Если ты будешь читать мануал, имей в виду что "текущая директория" там значит "текущая директория процесса".
Аноним 25/11/21 Чтв 16:00:37 2222087906
>>2221436

Мы не можем коммитить .env в гит, так как настройки у каждого разработчика разные. Потому он в игноре. А .env.example не должен быть в гитигноре, это образец файла, из которого ты делаешь свой .env.

>>2221486

Никто не запрещает, но в современных проектах обычно нет кода на верхнем уровне - код только внутри функций или классов и потому нет необходимости что-то инклудить.

>>2221591

Есть var_export - он не подойдет? Также, есть json_encode.


Аноним 25/11/21 Чтв 18:13:57 2222205907
стоить запилить проэкт на чистом пхп?
Аноним 25/11/21 Чтв 18:39:15 2222237908
16376125317450.jpg 137Кб, 827x817
827x817
Планирую взять чужой код с гит хаба, бложик какой-нибудь из обучающего видео на ютубе, залить его на свой хост назвав своим проектиком для показа в резюме, какие подводные?
Аноним 25/11/21 Чтв 18:46:57 2222246909
>>2222237
Ну обосрешься знатно, потом просто добавят тебя в чс все эйчарки в айти или как минимум в пхп, если прознают. Даже если разберешься, то часто чекают по антиплагиату, твой это код или нет. Правда в самых ущербных типа рога и копыта не делают так, потому что им на такое похуй в целом, но в более менее адекватных уже сами хрюши чекают код на плагиат, только после этого твоё дело двигается дальше.

В общем, дело твоё. Тут ведь еще зависит от того, насколько ты сейчас способен выполнять ИРЛ задачи. Если ты ни одного проекта не сделал, то потом даже если пройдешь собес, то на самой работе обосрешься и вылетишь с треском через неделю/месяц. У нас был такой пчел, напиздел в резюме, сумел пройти собес каким-то хуем, ну и зафейлил пару задач, потом пришло МНЕ допиливать за ним вечером после работы блять. Разумеется его сразу уволили, когда узнали, что они ничего не может сделать. Но думаю собес он прошел только из-за своего ссаного диплома. Хз.

Кароче, я считаю, что если не сделал ни один проджект хотя бы самый всратый САМОСТОЯТЕЛЬНО, то лучше все-таки сделать.
Аноним 25/11/21 Чтв 19:36:43 2222310910
>>2222082
Большое спасибо, теперь понятно.
Аноним 25/11/21 Чтв 20:58:42 2222377911
Как сделать роутинг самому?
Аноним 25/11/21 Чтв 23:26:11 2222470912
>>2222246
4 пет проекта на гите два из них на Laravel, ссу делать даже резюме.

ООП знаю поверхностно, отличу абстрактный класс от интерфейса, знаю парочку простых шаблонов типа стратегии, композциции, dto, di, осторожен с наследованием, отличу self от static.

SQL ну такое, JOIN через JOIN напишу конечно, но что то супероптимизированное нет, конечно на стороне кода всю базу в цикле не перебираю, в коде только минимальная выборка коллекции, остальное на стороне базы, это мое правило.
Про нормализацию знаю, со связями тоже вроде порядок.

Знание гита "уверенный пользователь", не пушу в мейн, мержу после апрува CI(своих же тестов и линтера, лол).

Виртуализация на данный момент только Vagrant, с Dockeroм пока не подружился.

Но есть и очень серьезные минусы, например мне абсолютно не известен html/ccs, для проектов тупо копипастил с доки бутстрапа так как мне надо было, подглядывая в примеры из интернетов. Весь фронт для меня как темный лес, марджин лишает дара речи, а паддинг заставляет трястись. Что же касается пыхи, тут трудности с рекурсией, не дается она мне, я ее ненавижу, я тупой для нее слишком видимо, смирился.

В принципе написать простейшую Api не вижу проблем, но я уверен, на собеседовании на просьбу перевернуть строку просто встану и уйду молча, а дома расплачусь в подушку.
Аноним 25/11/21 Чтв 23:30:33 2222473913
Аноним 25/11/21 Чтв 23:33:42 2222476914
>>2222205
Думаю стоит, желательно что бы проект был напрямую связан с вебом, работой с запросами, ответами, базой, сессиями, куками, лучше с ООП. Я вот сразу за фреймворки взялся и теперь некомфортно, многое кажется магией.
Аноним 26/11/21 Птн 00:00:54 2222484915
>>2222470
>тут трудности с рекурсией, не дается она мне
Та же фигня, ментальный блок просто. Весь день пытался сделать задачу про поиск пути из шапочного учебника, ничего не выходит.
https://ideone.com/I24WUd
Аноним 26/11/21 Птн 03:18:11 2222530916
>>2222470

Почему бы тебе не освоить HTML/CSS? CSS во многом логичный и в нем есть определенные правила. Просто надо их изучать, а не пытаться по-быстрому накопипастить код откуда-то или наугад подбирать значения.
Аноним 26/11/21 Птн 03:29:00 2222531917
>>2222484
>>2222470

Если у вас трудности с рекурсией, может решите пару задачек на нее? Простая и сложная.

1) Дано математическое выражение в виде массива. Нужно вычислить его значение.

Вот формат массива: массив, представляющий выражение, содержит несколько элементов, где первый элемент это знак операции (+, -, *, /, ** - возведение в степень), а оставшиеся - операнды (слагаемые, множители и тд). При этом операнды тоже могут быть массивами-выражениями.

Например, вот как представляется выражение 2 + 3 + 4:

['+', 2, 3, 4]

Вот выражение 5 - 4 - 3:

['-', 5, 4, 3]

А вот выражение с вложенностью: (2 + 3) / (4 + 5):

['/',
['+', 2, 3],
['+', 4, 5]
]

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

Возведение в степень надо вычислять справа налево, то есть

['**', 2, 3, 4] значит "2 ** (3 ** 4)".

Твоя функция принимает на вход массив и должна вернуть число - результат вычисления выражения.
Аноним 26/11/21 Птн 03:41:15 2222534918
>>2222484
>>2222470

2) довольно сложная задача на рекурсию

Напиши функцию, которая принимает на вход имя файла и маску и проверяет, соответствует ли файла маске или нет.

Формат маски такой:

Знак вопроса ? обозначает "ровно один любой символ"
Звездочка * обозначает "любое число любых символов, в том числе ноль символов"
Любой другой символ обозначает сам себя.

Например:

??? - значит, имя файла состоит ровно из трех любых символов
x??* - имя файла начинается с x, за ней идет 2 или более любых символов
*x* - имя файла состоит минимум из одной буквы и должно содержать букву x
x*y*z - имя файла начинается с x, заканчивается на z и где-то между ними должна быть буква y, все остальные символы любые в любом количестве.

Более каверзный пример:

*xy??z* этой маске соответствует имя "123xy456xy78z9". Здесь в имени содержится две пары xy, и буквам xy в маске соответствует вторая пара (за которой идет 78z9), а не первая.

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

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

Аноним 26/11/21 Птн 03:49:33 2222535919
>>2222534

Там в примеры масок попали лишние пробелы, не обращайте на них внимания.

>>2222484

> $result=array();
Тут можно использовать [] вместо array

> $result['time'] += $time;
Тут ошибка: в массиве нет элемента time, а ты пытаешься к нему что-то прибавить.

> if(isset($result['path'][$target])) break;
Здесь ты перебираешь соседние точки, и если мы в одной из них уже были, прерываешь цикл. Но надо не прерывать цикл, а просто пропускать одну такую точки и продолжать перебирать остальные.

> make1step($paths, $result['path'], $result['time'], $station, $target);
Здесь ошибка: ты вызываешь функцию поиска пути, но не используешь то, что она вернула.

Код перебора точек надо переделать так:

1) Создаем пустой список путей к цели

2) перебираем соседние точки и для каждой:
- если мы в ней были, пропускаем ее
- иначе, вызываем себя, чтобы найти путь к цели через эту точку. Найденный путь добавляем в список возможных путей к цели.

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

У тебя не хватает создания списка путей и выбора кратчайшего.

Аноним 26/11/21 Птн 12:46:41 2222705920
потихоньку вкатываюсь в web программирования, изучаю основы в виде html и css. Подумываю, после того, как выдрачу основу, вкатится в php. Стоит ли оно того? Можно ли, на php, заработать себе средства для существования?
Аноним 26/11/21 Птн 13:06:44 2222717921
Для всех, у кого проблемы с рекурсией - советую Липовача прочитать полкниги, этого хватит пхп-кодерка. Будете не только понимать рекурсию, но и шире смотреть на прогерство.
Аноним 26/11/21 Птн 14:20:54 2222781922
Аноним 26/11/21 Птн 18:09:38 2222919923
>>2222781
Т.е. после php нужно еще js выдрочить?
Аноним 26/11/21 Птн 18:29:09 2222926924
Аноним 26/11/21 Птн 18:34:11 2222930925
Аноны, выбираю между вкатом в Python и PHP для реализации своего проекта (чисто для себя).

Python привлекает перспективностью и тем, что это хорошее вложение на будущее.

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

Да, это размышления нуба, поэтому и спрошиваю совета.

ЧТО ПОСОВЕТУЕТЕ ВЫБРАТЬ?
Аноним 27/11/21 Суб 01:07:19 2223155926
>>2222930
>Python привлекает перспективностью и тем, что это хорошее вложение на будущее.

ну смотря в какой области ? AI, BA да, WEB очень сомнительно потому , аннон выбирай с того что ты будешь делать в бедующем
Аноним 27/11/21 Суб 01:08:45 2223156927
>>2223155
Несложный web проект для себя, семьи и друзей
Аноним 27/11/21 Суб 06:52:31 2223195928
Аноним 27/11/21 Суб 17:39:38 2223591929
>>2222717
Причем здесь шведский футболист?
Аноним 27/11/21 Суб 17:52:10 2223607930
>>2222470
>Что же касается пыхи, тут трудности с рекурсией, не дается она мне, я ее ненавижу, я тупой для нее слишком видимо, смирился.
Какой смысл в рекурсии в пхп, у пхп нет tail call оптимизации.
Аноним 27/11/21 Суб 23:57:45 2223905931
>>2222930
> быстрее и производительнее
На самом деле, сомнительный аргумент. Реальные плюсы РНР:
- он чуть легче в изучении
- отлично живёт на недорогих вирт.хостингах (на пистоне ты будешь вынужден обслуживать виртуалку, либо пользоваться немногочисленными платформами для выполнения пистоновских аппов)
- РНР не зависает

> web проект
для веба в виде веб-сайтов и HTML страниц, однозначно РНР
Аноним 28/11/21 Вск 01:26:58 2223944932
>>2223195
шпалы! такое только на дваче могут посоветовать
Аноним 28/11/21 Вск 03:36:58 2223967933
2021-11-2803-34[...].png 15Кб, 505x371
505x371
Как фиксить?
Аноним 28/11/21 Вск 04:42:52 2223969934
>>2223967
что тебе непонятно? ветка не существует, создай её
Аноним 28/11/21 Вск 04:52:33 2223970935
Дописываю сейчас прогу на Java.

Господи, какой же РНР быстрый и лаконичный в разработке!
Аноним 28/11/21 Вск 06:11:19 2223985936
Аноним 28/11/21 Вск 07:17:37 2223991937
Аноним 28/11/21 Вск 13:28:00 2224142938
>>2219818
>>2222919
Что бы иметь представление, как будет обрабатываться и отображаться то говно, которое ты отправляешь на фронт.
>>2219997
>на процессор
CSS уже давно имеет аппаратное ускорение средством видеоадаптера
>>2219997
>вставлять видео на фон в общем плохая идея.
Дизайнеры так не считают

Аноним 28/11/21 Вск 14:40:35 2224221939
Аноним 28/11/21 Вск 15:23:58 2224266940
>>2223970
Ты руби ещё не пробовал
Аноним 28/11/21 Вск 20:48:18 2224669941
Там это,пхп 8.1 вышел,чё не празднуем?
Аноним 29/11/21 Пнд 00:09:43 2224837942
Аноны (начинающие), кто хочет поломать голову и получше изучить массивы, вот вам задачка:

Дан массив целых чисел вроде [1, 4, 3, 5, 10, 12, 11]

Надо вывести его, сжав последовательно идущие числа в группы. При этом вывести числа надо в порядке возрастания. Например, для массива выше надо вывести 1, 3-5, 10-12.

Массив может быть пуст, тогда надо вывести пустую строку.
Аноним 29/11/21 Пнд 01:52:20 2224869943
>>2224837
Я думаю аноны знают что есть сайты где этих задачек полно.
Аноним 29/11/21 Пнд 02:14:58 2224874944
2021-11-2902-14[...].png 14Кб, 962x535
962x535
>>2224221
Как же я ненавижу это говно
Аноним 29/11/21 Пнд 03:46:32 2224883945
scr.png 34Кб, 674x504
674x504
Аноним 29/11/21 Пнд 05:31:03 2224894946
>>2223967

Скорее всего, ты не настроил параметры удаленного репозитория (origin) и потому ветки origin/master нет. Или же ты настроил параметры, но ни разу не делал fetch, и потому ветка origin/master не скачалась к тебе. Кстати, желтенький текст об этом и говорит.

И, кстати, буквы в консоли можно сделать покрупнее, щелкнув на заголовок правой кнопкой мыши.

То есть, проверь:

- что в гите добавлен удаленный репозиторий origin (командой git remote -v )
- если репозиторий есть, проверь, что ты сделал fetch из него

>>2224883

Вроде на картинке все в порядке. Ты бы хоть написал, что не так.
Аноним 30/11/21 Втр 05:35:37 2225705947
Как учить этот ваш ларавел, создание приложений, какой там базовый минимум чтобы считаться адептом?
Я вот сижу, думаю попробовать установить laravel breeze. Установил. А он взял и удалил(заменив) мои нужные файлы типа рутов. Вот откуда я должен был знать что он поступит так, а не по-другому, например, спросив нужно ли заменить файл, или выбросив ошибку что дескать файлы созданы отменяю загрузку. В репо сказано смотрите в офф доках ларавеля, а в них об это ничего не сказано. Сижу с лицом лягухи. Благо я не потерял лишь один вечер работы, ведь какой я молодец что задумался недавно о необходимости бекапов.
Что вообще у веб програмиста считается за навык, понимание сквозь опыт как работает конкретный стек? Потому что логикой фиг поймешь все эти вещи, сплошной гуглинг и пердолинг.

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

ПС И заодно если знаете то подскажите что можно сделать с реактом прикольного. Я его научился запускать-устанавливать, но не понимаю для чего он нужен. Все взаимодействия с фронендом которые приходят мне на ум спокойно решаются обычным жсом.
Аноним 01/12/21 Срд 23:31:26 2227192948
>>2225705

> Как учить этот ваш ларавел

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

> А он взял и удалил(заменив) мои нужные файлы типа рутов

Я не понял, что такое "рут". Может быть, "роут"? В любом случае, если ты устанавливаешь шаблон проекта, то его надо ставить в пустую папку.

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

> Потому что логикой фиг поймешь все эти вещи, сплошной гуглинг и пердолинг.

Логикой понять все можно, просто надо начинать с основ, а не браться сразу за сложное. Постепенно идя от простого к сложному, можно разобраться в чем угодно (по крайней мере в программировании). Ну к примеру, не имеет смысла изучать Докер, если ты не умеешь пользоваться командной строкойв линуксе, bash и не знаешь основные команды. Ты просто ничего не поймешь и напишешь такой же разочарованный пост. Соответственно, если ты используешь какую-то систему, основанную на Докер, то получается сначала хорошо бы изучить основы командной строки, основы линукс (файловые системы/права/сетевые настройки/основные утилиты), потом Докер и только потом использовать эту систему.

Или если ты хочешь пользоваться ООП-фреймворком, то необходимо сначала знать сам ООП, ORM, MVC, паттерны вроде внедрения зависимостей. Если ты будешь их изучать, параллельно читая код фреймворка - будет вообще идеально. Немного информации есть тут: https://github.com/codedokode/pasta/

> Еще посоветуйте, если можете, каких-нибудь челленджей

У нас есть задача сделать сайт для прохождения тестов TestHub ( https://gist.github.com/codedokode/8733007 ). Можешь попробовать ее реализовать, или придумать что-то свое аналогичное по сложности. Это будет по уровню близко к реальным проектам.

> И заодно если знаете то подскажите что можно сделать с реактом прикольного. Я его научился запускать-устанавливать, но не понимаю для чего он нужен.

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

Например:

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

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

Если тебе хочется попробовать применить реакт на практике, то ты можешь попробовать сделать одно из описанных выше приложений, либо нашу задачу на SPA: https://github.com/codedokode/pasta/blob/master/js/spa.md
Аноним 03/12/21 Птн 01:48:05 2227977949
>>2227192
> открываем и читаем исходный код.

Не слишком сложно для новичка? Мне кажется таким только крепкие мидлы занимаются
Аноним 03/12/21 Птн 11:29:06 2228138950
Вот есть у меня на проекте актив-рекорд модель Post, но в некоторых местах, например в сервисах, я бы тоже создал Post для того чтобы убрать логику в них. Это нормально когда у меня несколько классов с одним именем, но разными неймспейсами? Есть смысл делать какой-то общий интерфейс для них?
Если нет, то как обычно поступают?
Аноним 03/12/21 Птн 12:22:09 2228166951
>>2228138

Это, конечно, плохая идея, так как будет приводить к путанице. Программист видит, что в функцию приходит Post, думает, что это актив-рекорд и начинает писать код. А потом тратит время, чтобы разобраться, почему он не работает.

Человек не робот и не может проверять неймспейс в каждом классе. Потому лучше избегать классов с одинаковыми названиями. И, как я понимаю, даже IDE тут не поможет и не подскажет, что это не тот Post, который нужен.

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

> Есть смысл делать какой-то общий интерфейс для них?

Это решит проблему с функциями, но приведет к дублированию кода.

Правильно будет иметь один класс для представления одной сущности.

Ты можешь заметить, что тебе не хотелось бы давать сервису доступ к базе данных, а хотелось бы дать им только Post. Это слабое место Active Record - в ней модель и код работы с БД переплетены и не отделяются друг от друга.

Иногда бывает такое, что класс большой и сложный, а нам нужна лишь небольшая его часть и не хотелось бы создавать объект целиком. В такой ситуации можно попробовать сделать DTO, но тогда понадобятся методы для конвертации Post в PostDTO.

Аноним 03/12/21 Птн 14:41:52 2228276952
>>2228166
Понятненько. Значит придётся как-то конкретизировать классы в зависимости от задачи.
Аноним 04/12/21 Суб 10:04:14 2228868953
t.png 2777Кб, 1920x1080
1920x1080
Коллеги, го движок тестировать.
https://0ch.kz
Аноним 04/12/21 Суб 17:40:54 2229178954
>>2228868
Ну с капчой сразу на хуй
Аноним 05/12/21 Вск 22:24:04 2230295955
FireShot Captur[...].jpg 16Кб, 1440x1420
1440x1420
Из-за чего такое может быть? Отправляю обычный хэллоу ворлд
Аноним 05/12/21 Вск 22:45:41 2230313956
>>2230295
Ты думаешь тут экстрасенсы сидят? Если это laravel экран ошибки на него смахивает, но могу ошибаться, то смотри логи в storage
Аноним 05/12/21 Вск 23:21:33 2230335957
>>2227192
>начать с основ
Мне коллега с прошлой подработки наоборот говорил "та поъуй сваргань лишь бы работало там потом сам разберешься".
И все равно я не понимаю какие такие основы надо знать чтобы понять что Laravel Breeze без всякого разрешение заменит определенные файлы, если они есть. Некоторые другие установщики, например, все прекрасно спрашивают, выкидывают ошибки и сворачиваются.
Сейчас то я конечно знаю как это работает, но как логикой я должен был допереть до этого?

>тебе не нужен
Да, мне не нужен, но он нужен рыночку, чтобы получить работу)

За задачи спасибо, я из них свое портфолио сварганю.
Аноним 05/12/21 Вск 23:22:52 2230337958
>>2230295
Ошибка 500 это неизвестная ошибка сервера. Это значит что это ты, а не прога, где-то накосячил. Причина может быть абсолютно любая.
Правильно тебе сказали логи посмотреть.
Аноним 06/12/21 Пнд 00:14:53 2230384959
Сап, пхпаны. Реквестирую примеры хорошего кода на пхп. Пишу проектик на симфони и прям чувствую, как от моего кода попахивает калом, хочу посмотреть, как умелые комрады решают задачи по написанию крудиков.
Аноним 06/12/21 Пнд 00:15:36 2230385960
>>2230384
так бери и смотри в симфони
Аноним 06/12/21 Пнд 00:55:46 2230421961
Аноним 08/12/21 Срд 10:57:13 2232285962
>>2120804 (OP)
idn_to_utf8(): INTL_IDNA_VARIANT_2003 is deprecated
Почему сайт на хостинге выдает эту ошибку, а на локальной машине этого нету? Разница в версиях php?
Мимо вебмакака.
Аноним 08/12/21 Срд 19:22:04 2232677963
Насколько перспективно вкатываться в PHP? В будущем не хотелось бы писать всякую парашу для битрикса, вордпресса и других говноCMS

И какие альтернативы, где реально будет найти работу стажером или джуном? Думал о GO, но там даже джуны никому не всрались
Аноним 08/12/21 Срд 20:10:07 2232694964
>>2232677
> Насколько перспективно вкатываться в PHP?
Зависит от тебя, в том числе, это лишь инструмент.

> В будущем не хотелось бы писать всякую парашу
Никто не застравляет

> какие альтернативы, где реально будет найти работу стажером или джуном
Любые. Открываешь вакансии и смотришь.
Аноним 08/12/21 Срд 20:24:19 2232704965
Анонсы,как сделать такую фичу,аутентификация пользователя.
На каждое поле формы пилить функцию проверки? А как сделать итоговую проверку,типа если хоть одно поле не верно,остановить вход и выбросить сообщение что допустим такоко логина нет
Аноним 08/12/21 Срд 20:27:52 2232706966
Аноним 08/12/21 Срд 20:29:12 2232709967
>>2232704
В первом приближении, достаточно одной проверки и одного сообщения об ошибке. Нафиг тебе дать дополнительную инфу непонятно кому, какие у тебя есть логины?
Аноним 08/12/21 Срд 21:06:56 2232724968
>>2232709
Просто написать логин и пароль неверны?а кодом как выглядеть будет? В допустим есть эти две функции, одна ищет в бд логин, вторая пароль,вызываем функции и логическим оператором проверяем на тру результат?
Аноним 09/12/21 Чтв 13:20:08 2233068969
>>2232724
Почитай какую-нибудь книжку, там такие типовые вещи расписаны, вот например.
<?php // Example 27-7: login.php
require_once 'header.php';
$error = $user = $pass = "";

if (isset($_POST['user']))
{
$user = sanitizeString($_POST['user']);
$pass = sanitizeString($_POST['pass']);

if ($user == "" || $pass == "")
$error = 'Not all fields were entered';
else
{
$result = queryMySQL("SELECT user,pass FROM members
WHERE user='$user' AND pass='$pass'");

if ($result->num_rows == 0)
{
$error = "Invalid login attempt";
}
else
{
$_SESSION['user'] = $user;
$_SESSION['pass'] = $pass;
die("<div class='center'>You are now logged in. Please
<a data-transition='slide' href='members.php?view=$user'>click here</a>
to continue.</div></div></body></html>");
}
}
}

echo <<<_END
<form method='post' action='login.php'>
<div data-role='fieldcontain'>
<label></label>
<span class='error'>$error</span>
</div>
<div data-role='fieldcontain'>
<label></label>
Please enter your details to log in
</div>
<div data-role='fieldcontain'>
<label>Username</label>
<input type='text' maxlength='16' name='user' value='$user'>
</div>
<div data-role='fieldcontain'>
<label>Password</label>
<input type='password' maxlength='16' name='pass' value='$pass'>
</div>
<div data-role='fieldcontain'>
<label></label>
<input data-transition='slide' type='submit' value='Login'>
</div>
</form>
</div>
</body>
</html>
_END;
Аноним 09/12/21 Чтв 17:55:29 2233306970
Всем привет. Задам несколько вопросов на которые, скорее всего, уже давали сотню раз ответы. В шапке актуальна информация для вката? Во что будет легче вкатиться не самому умному человеку, во фронт или в бек? Желательно на удалённую работу. Выбор стоит между пхп либо жаваскрипт со всеми вытекающими
Аноним 09/12/21 Чтв 18:03:01 2233319971
>>2233306
Походу тредом ошибся. Извиняюсь
Аноним 09/12/21 Чтв 20:14:47 2233420972
>>2232694
>Зависит от тебя, в том числе, это лишь инструмент.
>Никто не застравляет
Я, очевидно, о реальной ситуации на рынке спрашиваю, ИТТ думаю больше видели
Не окажется ли так, что нормальных вакансий на джуна кот наплакал, а 99% будет связано с написанием интернет-магазинов на CMS
Аноним 10/12/21 Птн 02:22:54 2233668973
ич8.jpg 48Кб, 668x264
668x264
Что ему не нравится? Гугл не помог
Аноним 10/12/21 Птн 20:20:33 2234371974
>>2233068
>user='$user' AND pass='$pass'");
Пиздец. нельзя хранить пароль в открытом виде.
Аноним 10/12/21 Птн 21:05:56 2234452975
Аноним 10/12/21 Птн 21:06:51 2234454976
>>2224837
Почему
>1, 3-5, 10-12
ты группу 1-4 пропустил или я чего то не понял в условии?
Аноним 10/12/21 Птн 21:15:28 2234467977
Аноны, так получилось, что мне доверили создание высоконагруженного веб-сервиса, но я в этом деле неопытен.

Такой вопрос. Что посоветуете (не срача ради, а для решения задачи вопрос) из двух вариантов использовать для бэкенда:

1) React + React Native (под мобильные устройства) + PHP + PostgreSQL

либо

2) React + React Native (под мобильные устройства) + NodeJS + база пока не выбрана.

Есть ли у вас какие-либо советы или мысли? Они не помешают.

Желательный вариант - максимальная производительность и минимальное потребление ресурсов.
Аноним 10/12/21 Птн 21:56:19 2234525978
>>2234454
Двойки нету, нет и группы соответственно.
Аноним 10/12/21 Птн 22:09:07 2234539979
>>2234525
Аа всё, дошло наконец.
Аноним 11/12/21 Суб 17:49:06 2235042980
>>2232677

Если ты хочешь писать на Го, то не забудь что для этого тебе надо будет изучить Си, основы Линукса, основы сетевых сокетов.

>>2233068

Это пример плохого кода. Во-первых, пароли надо солить и хешировать, а не хранить в открытом виде. Это описано тут: https://github.com/codedokode/pasta/blob/master/security/password-hashing.md

Во-вторых, переменные плохо подставлять в SQL-запрос напрямую, надо использовать плейсхолдеры и подготовленные запросы, иначе можно получить SQL-иъеккцию. Это описано тут: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md

При выводе данные надо экранировать, иначе может получиться уязвимость XSS. Это описано тут: https://github.com/codedokode/pasta/blob/master/security/xss.md

Я советую прочитать перечисленные статьи и исправить код на правильный.
Аноним 11/12/21 Суб 17:52:16 2235048981
>>2233668

Ты указал неправильные параметры после make:factory. Чтобы увидеть , какие параметры есть у команды, набери:

php artisan make:factory --help

Скорее всего ключ -m не нужен, а нужно что-то другое.

>>2234452

И солить.

>>2234467

Если тебя интересует максимальная производительность, то надо брать Го или Раст. Если с этим тяжко, то хотя бы Java или C#. И делать бенчмарки.
Аноним 11/12/21 Суб 18:03:21 2235060982
>>2235048
А что почитать про безопасность,прям маст рид
Аноним 12/12/21 Вск 01:14:09 2235489983
Аноним 13/12/21 Пнд 01:44:22 2236248984
Symfony = лучший framework на свете
Аноним 13/12/21 Пнд 09:15:20 2236330985
Как узнать порт своего хоста на сервере? Айпи знаю а какой порт хз
Аноним 13/12/21 Пнд 14:12:15 2236543986
изображение.png 26Кб, 766x354
766x354
изображение.png 20Кб, 627x423
627x423
Почему выдает ошибку Fatal error: Uncaught Error: Undefined constant "q1" in C:\Apache24\htdocs\result.php:5 Stack trace: #0 {main} thrown in C:\Apache24\htdocs\result.php on line 5
Аноним 13/12/21 Пнд 14:32:15 2236568987
>>2236543
Что такое а в if $_POST[...] = a, это птица, это самолёт?
Аноним 13/12/21 Пнд 15:19:18 2236616988
>>2236543
И ключи надо в кавычки заключить $_POST["q1"]
Аноним 13/12/21 Пнд 19:45:13 2236916989
>>2236330

Порт идентифицирует не машину, а программу, запущенную на ней. У разных программ он разный. Если тебя интересует порт веб-сервера, то это обычно 80 для http и 443 для https. Обрати внимание, что на хостингах часто один веб-сервер (с одним и тем же IP и портом) обслуживает множество сайтов.

>>2236543

Строки в PHP пишутся в кавычках. И a, и q1 надо заключить в кавычки.
Аноним 13/12/21 Пнд 20:54:47 2236970990
Нормально ли в миграциях писать логику, не связанную с изменением схемы данных, а просто свои скл запросы, которые нужно один раз выполнить, например засинхронизировать дату у двух связных сущностей и т.п.?
Аноним 13/12/21 Пнд 23:04:56 2237039991
>>2222535
Спасибо за подсказки, медицина тут бессильна правда. После перерыва решил опять попробовать, но все равно ничего не получилось. Не знаю, если постоянно такие задачи придется решать вместо чего-то типового, наверное стоит менять планы о вкате.
>в массиве нет элемента time, а ты пытаешься к нему что-то прибавить
Я думал интерпретатор сам инициализирует нулем, ошибку не выдает, только notice. https://ideone.com/qlvSd5
>Но надо не прерывать цикл, а просто пропускать одну такую точки и продолжать перебирать остальные
Да там вообще бред был у меня написан, надо было не через isset проверять (ключ, которого там нет вообще), а сравнивать напрямую значение. Проблема в том, что без break там похоже бесконечный цикл.
>Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 65488 bytes) on line 148
Странно только, что выделить вроде немного пытается памяти-то по сравнению с доступной.
https://ideone.com/Q86SZT
Думаю, что я упускаю внутри цикла создание еще одного промежуточного массива внутри которого массив массивов result, и там уже выбирать из него надо подмассив с наименьшим временем. Я сейчас похоже все подряд записываю в result, поэтому и не работает.
Аноним 14/12/21 Втр 03:28:33 2237150992
unnamed.jpg 103Кб, 566x758
566x758
>>2236916
Спасиб, уже сам понял. Но вот у меня постоянно ошибка доступа 403 вылазит, пробовал менять разрешения, файл .htaccess по адресу /.cache/composer выглядит вот так:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.mysite\.ru$ [NC]
RewriteRule ^(.*)$ http://mysyte.ru/$1 [R=301,L]
ErrorDocument 403 "Access forbidden / Доступ запрещен"
Аноним 14/12/21 Втр 04:34:20 2237157993
Я немножко умею верстать на хтмл, цсс, жс. А сколько времени займет - научиться создавать сайт на вордпрессе? Я смотрел codex wordpress такое ощущение, что пройдет дохуилиард лет, пока я смогу всё прочитать. Учиться лабать на вордпрессе дохуя долго? За пол года хуй успеешь?
Аноним 14/12/21 Втр 18:03:32 2237591994
>>2236970
в каждой компании по-разному

если один пишешь, то вообще пох
Аноним 14/12/21 Втр 18:03:50 2237592995
>>2237157
зависит от твоих способностей!
Аноним 14/12/21 Втр 18:38:30 2237633996
>>2237592
How Hard is it to Learn WordPress Development?

Time to become an entry-level WordPress developer: 6 months to a year. This is 6-12 months of steady, active learning. The outcome of being an “entry-level developer” is the ability to take on simple WordPress projects with minor twists: “Build a straight-ahead site for my bowling league, and can we have a calendar of our upcoming tournaments?” Time to become a full-fledged WordPress developer: 2 years, plus continual ongoing learning.

Короче, я нагуглил, что джва года надо каждый день ёбстись с вротпрессом, чтоб стать минимальным вротпресс кодером
Аноним 14/12/21 Втр 20:54:18 2237753997
>>2236970

Назначение миграций - это обновление базы данных у других разработчиков и на продакшене. Миграция может содержать не только DDL запросы (CREATE/ALTER TABLE), но и DML (INSERT/UPDATE/DELETE). Например, если ты добавляешь справочник городов, то тебе понадобится его заполнить, для этого нужны INSERT запросы.

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

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

Если ты используешь фреймворк вроде Симфони/Ларавель, то можно создать отдельную команду для таких тестовых одноразовых скриптов. Я также советую сделать у команды два режима: тестовый и реальный. В тестовом режиме команда пишет, что она будет делать, но не вносит изменений в БД. В реальном изменения записываются. Это можно реализовать через откат/коммит транзакции. Это позволяет тебе убедиться, что команда отработает верно.

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

Небольшой минус отдельного скрипта - это то, что для миграций можно увидеть историю их выполнения, а когда и кто запускал скрипт - неизвестно.
Аноним 14/12/21 Втр 21:22:12 2237770998
>>2237039

> ошибку не выдает, только notice

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

Просто приведу пример: допустим, ты опечатался и вместо

$balance += 1

написал

$bOlance += 1;

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

Поэтому нельзя полагаться на то, что PHP сам за тебя проинициализирует переменную или массив - это надо делать явно.

> Проблема в том, что без break там похоже бесконечный цикл.
Там бесконечная рекурсия. Вот она:

> function make1step(....)
> foreach($paths[$point] as $station => $values){
> $step = make1step($paths, $result['path'], $result['time'], $station, $target); // <-- рекурсивный вызов

Здесь мы вызываем сами себя. После этого внутри нового вызова мы снова вызываем сами себя. Затем снова. И так пока память не закончится. Ты можешь это увидеть, если поставишь в начало функции make1step вывод значений переменных. Вот результат: https://ideone.com/RgBoBM

Как видишь, он постоянно ходит из одной точки в другую и обратно.

Чтобы бесконечной рекурсии не было, надо проверять до вызова make1step, не были ли мы уже в этой точке (что $station нету в $pathDone).

> $step['path'][count($step['path'])-1]

Это можно записать короче как end($step['path']). end() передвигает внутренний указатель массива (что нам неважно) и возвращает значение последнего элемента.

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

> Странно только, что выделить вроде немного пытается памяти-то по сравнению с доступной.

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

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

Да. Тут два варианта. Либо создать массив путей и выбирать самый лучший. Либо сделать переменную "лучший путь" и каждый раз сравнивать новый путь с ней. Если новый путь лучше, то записывать его в переменную.

> Не знаю, если постоянно такие задачи придется решать вместо чего-то типового, наверное стоит менять планы о вкате.

Реальные задачи могут быть сложнее. Массивы там могут быть гораздо более сложной структуры, и объем кода будет не 20, а например 2000 строк. Лучше сейчас как следует потренироваться на учебных задачах.

Аноним 14/12/21 Втр 21:25:41 2237772999
>>2237039

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

>>2237150

Папка /.cache/composer вообще не должна быть доступна снаружи. Она должна располагаться за пределами публичной папки сайта.

Думаю, что твоя ошибка не имеет никакого отношения к htaccess в этой папке.

>>2237157

Тебе надо изучить PHP, потом ООП, потом базы данных, только после этого можно браться за вордпресс. Не надо пытаться стать "вордпресс разработчиком", становись PHP разработчиком. Тогда изучение вордпресса не потребует столько времени.
Аноним 14/12/21 Втр 22:09:37 22377991000
Аноны, расскажите как вы ООП осваивали?
Начал делать задачу ОПа про "ООО Вектор" и чет прилип. Есть что-то промежуточного уровня?
Аноним 14/12/21 Втр 22:45:56 22378191001
image.png 234Кб, 680x647
680x647
Мне не прихомдит письмо с packagist.org (((
Хочу зарегистрировамтся (((
Аноним 15/12/21 Срд 01:56:54 22379201002
>>2237772
>Думаю, что твоя ошибка не имеет никакого отношения к htaccess в этой папке.

Оказалось что дело в ссылке в папке public на public_html, просто скопировал все оттуда в public_html и заработало, это нормально?В инструкции было написано что так надо, типа паблик_хтмл ларавел не читает и все держит в своей папке паблик поэтому нужно перенаправление
Аноним 15/12/21 Срд 12:35:24 22381411003
один класс- один объект?
Аноним 15/12/21 Срд 13:52:13 22381901004
Аноним 15/12/21 Срд 16:25:35 22383401005
>>2237772
>ООП
>>2237799
>ООП
А как долго учится ООП? Я в книге Зандстры прочитал про Синглтон и Фабричный методы. Примерно понял сами примеры, как работают идеализированные упрощённые для понимания примеры в книжке, но как применять ИРЛ так и не понял. А это джва паттерна. Я слышал их там 24 кажется или сколько? И мне кажется, что я буду изучать ООП до минимального стартового уровня пиздец как долго. Сколько освоение ООП занимает у норм поссонов по времени?
Аноним 15/12/21 Срд 20:10:22 22385391006
как сделать регистрацию в ооп стиле?
просто пишем свойства потом пишем метод проверки на прааильность символов в форме и метод щаписи в бд,и как все это соединить вместе?
Аноним 15/12/21 Срд 21:24:51 22385781007
>>2237799

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

>>2238141

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

Класс это разновидность объекта. Каждый объект относится к какому-то классу. Класс определяет, какие поля (свойства) и методы (функции) есть в объекте.

Возьмем, например, магазин. В нем мы можем сделать класс Товар со свойствами: название, цена. И затем создать несколько объектов этого класса: объект1 (название = "Телевизор Samsung", цена = 20000), объект2 (название = "Холодильник LG", цена = 10000). У этих товаров разные цены и названия, но объединяет их то, что у них есть такие свойства.

Заметь, что объект товара здесь обозначает не конкретную единицу товара (один конкретный телевизор), а лишь его характеристики (сколько он стоит и как называется).

Дальше, допустим мы хотим сделать регистрацию в нашем магазине. Мы делаем для этого класс Пользователь со свойствами: email, хеш пароля, телефон, адрес. И можем создать несколько объектов-пользователей. У них будут разные значения свойств, то общее то, что у них у всех есть и email, и телефон.

То есть, в нашем магазине есть множество объектов, и они могут быть разных классов. У товара есть цена, но нет email, а у пользователя есть email, но нет цены.


Аноним 15/12/21 Срд 21:39:50 22385851008
>>2238340

Эти паттерны трудно понять, пока ты не столкнешься с ситуацией, когда они тебе понадобятся. Если тебе хочется увидеть, где они применяются, ты можешь попробовать почитать код сложных фреймворков и библиотек вроде Доктрины (там применяются паттерны ORM вроде Identity Map, Unit of Work, Repository) или некотоые компоненты Symfony, например Symfony Forms (там применяются Factory, Builder).

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

Если ты пишешь простой код для себя, то зачастую паттерны тебе не нужны. Они часто нужны в библиотеках и фреймворках. В сложных больших системах со сложной архитектурой. Возьмем, например, фабрику. Это объект, который создает ("порождает") другие объекты. Зачем он нужен? Ведь ты можешь создать объект через new. Это короче читабельнее и лучше.

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

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

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

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

Если просто заучивать определения, то толку не будет. Типичная ошибка начинающих - они читают про паттерн вроде Стратегии и бегут заменять в коде свитчи на кучу классов.

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

Аноним 15/12/21 Срд 22:21:18 22386101009
>>2238539

ООП подразумевает разбиение кода на классы, где каждый класс делает что-то одно, у него своя зона ответственности. Если ты возьмешь свой обычный код, где все написано одной длинной стеной, и напишешь перед ним class Registration, то это не ООП.

Давай попробуем разобрать, из чего состоит процесс регистрации и что в нем происходит?

Итак: нам приходят данные из формы (в переменной $_POST). Мы должны их проверить, в случае ошибки - показать форму с заполненными данными и сообщение об ошибке, в случае успеха - создать в БД нового пользователя, и, может быть, послать какое-то письмо (например, для подтверждения email). Также, мы можем сразу залогинить пользователя, чтобы он не вводил свои данные в форму логина повторно.

Если ты плохо знаешь, как работать с формами, то немного есть в этом уроке: https://github.com/codedokode/pasta/blob/master/forms.md

Соответственно, мы можем выделить тут такие процессы и объекты:

- объект: данные из формы. Мы могли бы представить эти данные в виде массива вроде ['email' => ..., 'password' => ...], но так как мы изучаем ООП, то мы представим их в виде объекта RegistrationData с полями email, password и тд.

- процесс: прием данных из формы. Нам нужен код, который читает данные из $_POST и создает и заполняет объект RegistrationData на их основе. Мы можем пойти простым или сложным путем. Простой путь - мы делаем класс RegistrationController (контроллер это термин из MVC, если ты не знаешь, что это, то читай https://github.com/codedokode/pasta/blob/master/arch/mvc.md ) и в нем делаем прием данных для формы регистрации. Если нам потом понадобится сделать еще одну форму, мы напишем аналогичный код для нее заново. И так для каждой новой формы. Сложный путь - мы делаем универсальный класс для приема данных из любой формы - BaseForm. Затем на его основе делаем класс RegistrationForm, который описывает форму регистрации (какие в ней есть поля). И в RegistrationController используем этот класс, чтобы он прочитал данные из POST и создал нам RegistrationData.

- процесс: проверка данных. Опять же, тут можно пойти двумя путями. Простой путь - делаем класс RegistrationFormValidator. Он принимает на вход объект RegistrationData и возвращает список объектов FormError, которые содержат информацию об ошибке: текст ошибки, название поля с ошибкой (одна ошибка - один объект). Если нам понадобится сделать еще одну форму, мы сделаем для нее новый класс Validator. Сложный путь - доработать универсальный класс BaseForm, чтобы в нем можно было указывать правила проверки для полей (каждое правило это отдельный объект, у нас же ООП). Тогда в классе RegistrationForm, который представляет собой описание полей формы, мы добавляем правила проверки и все само проверяется на правильность.

- процесс: создание пользователя в БД. Во-первых, нам нужен класс, который умеет работать с таблицей пользователей. Мы назовем его UserTableGateway (что такое паттерн table data gateway, можно прочесть тут https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md ). У тебя может возникнуть соблазн передать в UserTG объект RegistrationData, но это неправильный подход. Ведь тогда UserTG сможет создавать пользователей только через форму, и нельзя будет создать пользователя без использования формы. Да и не должен класс работы с БД знать о форме регистрации и о регистрации вообще - это не его зона ответственности. Нужен более универсальный подход. Потому мы делаем класс User, который хранит информацию о пользователе. Преобразуем RegistrationData в объект User. И передаем User в UserTG, чтобы тот вставил их в БД. То есть UserTG не важно, откуда мы взяли объект пользователя - из формы или откуда-то еще.

- процесс: отправка письма. Тут все просто: делаем класс Mailer, который умеет отправлять письма. При желании можем сделать объект-письмо MailMessage, который надо заполнить и передать в Mailer для отправки

- процесс: залогинить пользователя (то есть, записать что-то в сессию или выставить куки). Разумеется, для управления залогиненностью мы сделаем отдельный класс: AuthorizationManager. Он будет уметь залогинивать, разлогинивать пользователей и определять, залогинен ли текущий пользователь.

Наконец, нам может понадобиться еще кто-то, кто будет координировать все это: тот, кто проверит данные, вставит пользователя в БД, отправит письмо. Для этого можно сделать класс UserService. Или пойти простым путем и сделать вызовы из RegistrationController.

В общем, вот минимальный набор классов:

RegistrationController - показывает станицу с формой регистрации, разбирает POST-запрос, создает RegistrationData, вызывает все нужные методы других классов.
RegistrationData - содержит введенные в форму данные
User - представляет объект пользователя с информацией о нем, который можно загрузить из БД или вставить в БД. У него те же поля, которые есть в таблице пользователей. Он похож на RegistrationData, тем что у них есть одинаковые поля (вроде email). Но есть и различия: в RegistrationData хранится две копии пароля в открытом виде, а в User хранится лишь хеш пароля. Также, в User могут быть поля, которых нет в форме регистрации, например: права пользователя, аватарка и тд.
RegistartionFormValidator - проверяет данные формы на правильность
UserTableGateway - умеет вставлять пользователей в БД и загружать из нее
Mailer - отправляет письма
AuthorizationManager - умеет залогинивать/разлогинивать пользователей

Попробуй теперь написать код. Если будут вопросы - задавай.
Аноним 16/12/21 Чтв 00:11:38 22386921010
14464101896490.jpg 205Кб, 1280x1024
1280x1024
Как не тонуть в своём же коде на сложных проектах?

Да, я знаю, что существуют паттерны. Я могу объяснить на собеседовании, что такое синглтон и зачем он нужен. И про солид знаю. И "Чистый код" читал. Но когда пишу реальный код, то быстро в нём вязну. Когда ТЗ меняется в процессе и теперь нужно где-то в потрохах кода добавлять лишнюю проверку, и в зависимости от результата скорректировать работу ниже и выше(!) этого участка. Появляются какие-то магические числа, в параметры функций уходят уже по 6-8 переменных, и так далее. Код становится монструозным и его тяжело "загружать в мозг", чтобы погонять чисто там. Всё чаще приходится писать строчку и смотреть, чего будет. Хорошо - ну ок, пишем следующую. Не получилось? Ну, попробуем тут тип данных изменить, может в этом проблема? А, нет, проверка на ноль. Тоже нет. Так, что там вообще эта хуйня возвращает? Инт, но может и false. Или перехватить сразу эксепшен и стринг выдать... Таааак, падажжи, ёбана...
Аноним 16/12/21 Чтв 05:39:07 22387851011
>>2238692
Поздравляю. Вот ты и добрался до дна пхп. Если ответить на твой вопрос коротко, то НИКАК.

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

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

А раз инструментов нет, то должны помочь паттерны. И обязательно нужно называть классы так чтобы было видно что это паттерн. StrategyInterface, AmazingFactory. Нормальный человек пальцем у виска покрутит, а в пхп это норма, других то способов разделения кода нет нихуя.

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

И это все еще покрывается тестами. Вайтбокс тестами на моках. Пернул в коде - двадцать тестов отвалилось. Не потому что в коде ошибка, а просто их теперь переписать надо. А без тестов проект не соберется и в прод не попадет. Все на серьезном ебале - безопасность ебать. Только баги по кд от ТП сыпятся. И нахуя эта тысяча тестов с их постоянными false positive нужна хуй его знает.

И так везде. Как только проект набирает определенное количество строк начинается вся эта поебень. Спасения от неё нет и похоже ближайшие лет десять не будет. Переписывай начисто, рефактори до посинения один хуй со временем опять будет так же.

Аноним 16/12/21 Чтв 12:34:46 22389991012
>>2238692
>ТЗ меняется в процессе и теперь нужно где-то в потрохах кода добавлять лишнюю проверку
Когда ТЗ меняется "на горячую", то запрашивай больше времени - тебе придётся делать дополнительный рефракторинг уже написанного под новые требования.

>Появляются какие-то магические числа
Все магические числа определяй константами класса к которому они относятся.

>в параметры функций уходят уже по 6-8 переменных
Если переменных уже больше 2-3, то где-то ты проебал создание класса. Скорее всего эта функция хорошо будет работать как метод класса или принимать объект.

>Код становится монструозным и его тяжело "загружать в мозг", чтобы погонять чисто там
Потому, что проёбываешь то самое создание класса и, скорее всего, пишешь процедурно большую часть кода. У тебя мало абстракций, а это именно они облегчают понимание системы.

>>2238785
>Причина в том что в пхп нет инструментов для создания абстракций более чем из одного класса. Нет возможности разделить код на более высоком уровне, на модули например
Ты чушь каку-то несёшь. В пхп классы универсальни и модули из них делаются очень легко - только определи нужные интерфесы которые нужны системе.
Аноним 16/12/21 Чтв 13:04:34 22390251013
>>2238692

Так как вопрос довольно абстрактный, без примеров кода, то и ответ будет довольно абстрактный. Надо писать код так, чтобы он был максимально понятен для понимания. Чтобы в нем было трудно случайно что-то сломать.

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

Один из приемов - разбивать код на небольшие функции, каждая из которых делает что-то одно, и давать им понятные названия. Ну например, тебе надо проверить, имеет ли право пользователь удалить комментарий. Ты можешь написать код, который проверяет, кто автор комментария, сравнивает с id пользователя, заодно проверяет, не админ ли он. Но правильнее будет сделать тут вызов функции:

if (isGranted($user, Comment::ACTION_DELETE, $comment)) {
...
}

Или так:

if ($commentService->canDelete($user, $comment)) {
...
}

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

Такой подход с разбиением на функции хорошо работает и для сложных алгоритмов. Вместо того, чтобы писать стену кода, мы описываем алгоритм как небольшой набор действий. Если твой алгоритм требует 1000 строк кода, то ты вряд ли его сожмешь до 500. Но ты можешь разбить его на функции так, что основная функция будет занимать 20-50 строк кода и логика алгоритма будет понятна без изучения всего кода.

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

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

> Появляются какие-то магические числа,
Используй константы вместо магических чисел.

> в параметры функций уходят уже по 6-8 переменных,
Лучшим решением будет отрефакторить такие функции. Если в них приходит так много параметров, это может значить, что функция выполняет не одну задачу, а сразу несколько и ее можно заменить на несколько отдельных функций. Если же это сделать нельзя, то в PHP8 (по моему) появились именованные аргументы, которые могут улучшить ситуацию. Или же, возможно, некоторые аргументы можно сгруппировать в объект.

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

> Инт, но может и false.
В такой ситуации можно сделать два возвращаемых значения: объект ошибки и результат:

[$error, $result] = someFunction();


Аноним 16/12/21 Чтв 15:50:40 22391581014
>>2238785

> Пернул в коде - двадцать тестов отвалилось. Не потому что в коде ошибка, а просто их теперь переписать надо.

Значит, проблемы с архитектурой. Тесты нужны. Или ты считаешь, что ты уникальный и пишешь код без единой ошибки?

Ты берешь пример неудачного проекта и делаешь вывод, что все другие проекты такие же.
Аноним 16/12/21 Чтв 21:58:43 22394501015
>>2238999
>В пхп классы универсальни и модули из них делаются очень легко - только определи нужные интерфесы которые нужны системе.
Это ты хуйню несешь. Ты композер пакет хоть раз писал? В пхп нет способа с помощью кода объяснить как им пользоваться. Только с помощью гайда можно понять какой класс что делает. Причем тут нахуй интерфейс, когда любой из твоих пятидесяти классов в либе может использоваться. И чтобы понять какой и как нужно нырнуть в этот унитаз головой. Тебе человек о том и пишет что когнитивно всю эту поеботу осилить нельзя. И я объяснил почему. Язык блядь такой. Многословный, без высокоуровневых абстракций. Все что ты можешь сделать это либо именовать классы как-то по особенному, либо раскладывать по папочкам в особом порядке. Пиздец джуны пошли, уже и читать нихуя не умеют.

>Значит, проблемы с архитектурой. Тесты нужны. Или ты считаешь, что ты уникальный и пишешь код без единой ошибки?
Нужны епта, нужны. А ты их писал? Вот есть у тебя сервис, который использует два других сервиса. Надо тестить. Че ты тут гениального напишешь? Замокаешь интерфейсы, пропишешь: дергается n раз, возвращает такие-то объекты. И напишешь дата провайдер этих объектов. Ты напишешь, Вася напишет, Коля напишет. А потом нужно будет в метод одного из этих сервисов параметр добавить. Или убрать. Даже еще проще - в один из возвращаемых объектов параметр добавить. Вопрос: сколько тестов деграднет после изменения одной единственной строчки? Ответ убил: а хуй его знает. Тебе придется проверить все тесты, в которых эти милые люди упоминали изменяемый сервис. Удачи сделать это даже с использованием шторма. А если это системный сервис, который дохуя где используется инфа стотка что ты какое-нибудь место проебешь. И будет у тебя тестироваться там какая-то поебень вместо актуального поведения. А уж если кто-то додумался контроллеры тестировать, интеграционно, то это вообще пизда. Там мокается даже небо, даже аллах.

>Ты берешь пример неудачного проекта и делаешь вывод, что все другие проекты такие же.
Я этих проектов видел за сотню. Везде одно и тоже, просто с разной степенью пиздеца. Были такие где был условный порядок, но в таких местах спартанская дисциплина, кросс ревью от пяти человек, солюшен ревью и отдел качества. И скорость разработки там крайне низкая (читай нехуй делать). Сейчас у меня вообще прям показательный пример. Было несколько команд, у каждой по пять-шесть пхп проектов. После того как ковид уебал их всех разогнали, а проекты остались. Люди разные, подходы разные. А проблемы у всех одинаковые. Хрупкие тесты, мессиво из классов и интерфейсов и полное отсутствие понимания как это должно работать. Кто-то свое мессиво раскладывал по ДДД как Эванс завещал, у кого-то чистая архетиктура по Мартину - порты ебут адаптеры, а адаптеры твой мозг. Но если в проекте было много конрибьютеров и туда много писали - готовь ебало к фейспалмам. И яне утверждаю что эти люди были какие-то говнокодеры, просто язык вот такой. Наступает момент когда мозг перестает усваивать объем кода и начинается неизбежная деградация.
Аноним 16/12/21 Чтв 22:50:53 22394851016
>>2239450

> В пхп нет способа с помощью кода объяснить как им пользоваться.

Во многих других языках так же - например, Питон, JS.

> Вот есть у тебя сервис, который использует два других сервиса. Надо тестить. Че ты тут гениального напишешь? Замокаешь интерфейсы, пропишешь: дергается n раз, возвращает такие-то объекты.

Это плохой тест, так как ты полагаешься на знание внутренней логики сервиса. Что он вызовет такой-то метод. И ты тестируешь непонятно что. Ты сервис написал, чтобы он вызывал методы или чтобы он сделал что-то полезное? Надо тестировать конечный результат работы сервиса, а не то, сколько раз он для этого вызовет какой-то метод.

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

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

> Даже еще проще - в один из возвращаемых объектов параметр добавить. Вопрос: сколько тестов деграднет после изменения одной единственной строчки?

Ага, то есть ломаются у тебя только тесты, а код не ломается от этих изменений? Опять же, проблема в тестах. Тесты должны использовать тестируемый юнит точно так же, как его будет использовать код. И тогда ломается либо все, либо ничего.

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

> А уж если кто-то додумался контроллеры тестировать, интеграционно,

Да, контроллеры это часть интерфейса и их наверно лучше тестировать через E2E тесты, из эмулятора браузера. Если это сложно организовать, то можно просто вызвать контроллер напрямую и убедиться, что он отдает код 200. Это будет лучше, чем ничего, и поможет обнаружить самые заметные ошибки.

То есть, что касается тестов, я не думаю, что тут PHP как-то виноват. Тесты везде пишутся одинаково.

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

Ок, давай пример языка, на котором те же самые люди при таком же объеме проекта и сроках напишут идеально читаемый код.
Аноним 17/12/21 Птн 02:13:29 22395991017
>>2239485
>Во многих других языках так же - например, Питон, JS.
В JS уже есть понятие модуля, сейчас в тайпскрипте добавляют области видимости для модулей. Когда сделают будет еще один смачный харчек в ебло пхп. Жаль что фронтендеры не понимают какую манну небесную им дали и пишут на тайпскрипте такую поебень что глаз дергается.

>Это плохой тест, так как ты полагаешься на знание внутренней логики сервиса. Бла бла бла... нормально делай - нормально будет.
Никакой конкретики так и не выдавил. Вот тебе конкретный пример: https://3v4l.org/AD5bt простой сервис, наливает воду в чашки. Покрой тестами FillCupsWithWater, ну так примерно как чувствуешь должно быть правильно.

>Если это сложно организовать, то можно просто вызвать контроллер напрямую и убедиться, что он отдает код 200. Это будет лучше, чем ничего, и поможет обнаружить самые заметные ошибки.
Сразу видно что ты такое никогда не писал. Любой логгер где-то по пути может просто уронить к хуям тест когда ломанется наружу из тестового окружения. Придется его замокать. Шины сообщений придется замокать или перевести с реббита на что-то более локальное. Ебаться с доктриной - это подгрузи заранее, это наоборот очисти. Каждый тест будет как праздник с новыми подарками, только в подарках говно. А самое веселое это когда ты поменяешь код, а отвалится чужой тест. Ты его откроешь, а там сетап на два экрана. И ближайшие два часа пройдут незабываемо.

>Ок, давай пример языка, на котором те же самые люди при таком же объеме проекта и сроках напишут идеально читаемый код.
Про идеально читаемый код хуйня конечно, но выдать лучше чем на пхп изи.
TypeScript если писать будут бекендеры. На Go будет не идеальный код, но гораздо короче и понятнее че мна пхп. А чтобы вообще охуеть от зависти и боли в очке просто посмотри как вся эта многословная поебень исчезает в нормальном языке https://www.youtube.com/watch?v=PLFl95c-IiU . Система типов заменяет 90% тестов, никаких ебучих абстрактных фабрик интерфейсов, весь домен умещается на одной странице.
Аноним 17/12/21 Птн 11:03:40 22396871018
Какая разница между mysql and postgres?
Аноним 17/12/21 Птн 14:42:55 22398841019
>>2239687
В postgres больше свистелок и перделок, некоторые вещи отличаются, но в целом они по использованию одинаковые, а с ORM вообще разницы не почувствуешь.
Аноним 17/12/21 Птн 16:29:24 22399751020
>>2239599

В JS куча унаследованных проблем и довольно уродливый синтаксис.

> Покрой тестами FillCupsWithWater

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

Требования, конечно, лучше всего брать из ТЗ или документации, но так как ТЗ нету, нам придется восстановить их из кода.

- FillCupsWithWater получает (возможно, ограниченный) источник чашек и неограниченный источник воды, описанные интерфейсами
- он должен заполнить все доступные (1), но не более N (2), чашек
- чашки могут быть частично наполнены изначально
- чашки должны заполняться до максимума, но не переполняться (3)

Цифрами я пометил правила, которые мы будем тестировать.

Соответственно, для теста нам понадобится создать 2 вспомогательных класса: источник воды - TestTap и источник чашек - TestCupboard, который принимает в конструктор набор чашек. Мы можем сделать их отдельными классами или можем динамически сконструировать как моки, но в любом случае, мы не будем проверять, какие методы у них вызывались и какое число раз. Это не важно и это не входит в требования к тестируемому классу.

Если мы сделаем их отдельными классами, то мы сможем переиспользовать их в любом количестве тестов.

Соответственно, тесты будут такие:

1) вызываем FillCupsWithWater с N = 2, притом что TestCupboard предоставляет 3 пустых чашки. Проверяем, что нам вернули 2 чашки, что в них больше воды, чем было изначально. Дополнительно можно проверить, что третья чашка не заполнена.

2) вызываем FillCupsWithWater с N = 5 при том, что TestCupboard предоставляет 3 пустых чашки. Проверяем, что нам вернули 3 чашки, что воды в них больше, чем было изначально.

3a) берем чашку емкостью 100 с начальным заполнением 0, и кран, выдающий по 20 воды за раз. Подсовываем их FillCupsWithWater и проверяем, что чашка наполнена на 100.

3b) берем чашку емкостью 100 с начальным наполнением 10, и кран, выдающий 20 воды за раз. Проверяем, что чашка наполнена до уровня 90.

Если присмотреться, то при желании можно увидеть, что не все сценарии продуманы: что, если кран выдает разные порции воды? Что, если чашки могут быть разной емкости и начального наполнения? Что, если мы берем больше воды, чем нужно, и проливаем ее мимо чашки? Покрыть 100% входных данных тестами даже в таком простом коде не получится. Если мы наткнемся на баг, связанный с чашками разного размера или неравномерным источником воды, то, или если в ТЗ на это будет обращено внимание, то мы напишем дополнительные тесты, а пока хватит этого.

Написанные тесты проверяют, что класс соответствует предъявляемым к нему требованиям.

> Придется его замокать

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

Да, для каждого сервиса, который лезет куда-то наружу, надо сделать тестовую заглушку.

> На Go будет не идеальный код, но гораздо короче и понятнее

В Го очень много, мягко говоря, странностей. Например, там одно время была идея, что все модули должны лежать в выделенной папке - GOPATH, или идея использовать маленькие/большие буквы для обозначения видимости, что по моему портит код (и плюс, если ты хочешь поменять видимость, то тебе придется делать кучу замен). Странная идея писать адрес с гитхаба для импорта модуля. Нельзя задавать значения для полей по умолчанию. Нет возможности делать коллекции. Ужасный модуль flags, основанный на глобальных переменных,
а не на ООП, для разбора параметров командной строки.

Также, как я помню, в Го методы объекта не помещаются в класс, а их разрешено раскидывать по нескольким разным файлам, что тоже добавляет веселья при чтении кода. То ли дело PHP - все методы класса собраны в одном месте, каждый класс лежит в отдельном одноименном файле.

Тот код на Го, который я видел, я бы не сказал что он радикально читабельнее и понятнее, чем на PHP.

> Система типов заменяет 90% тестов,

Это заблуждение. Ты не сможешь переделать свой же код с чашками так, чтобы система типов проверяла корректность его логики.
Аноним 17/12/21 Птн 16:38:23 22399871021
>>2239599

Аргументирую по поводу уродливого синтаксиса в JS. Вот объявление функции в PHP:

function test(...): Result

Человек читает текст слева направо, и тут мы видим, что перед нами функция, и что она называется test. Прекрасно. Вот объявление функции в Питоне:

def test(...) -> Result:

Тоже прекрасно читается. А вот что изобрели гении от яваскрипта:

const test = (...) => {

Что мы видим: перед нами якобы "константа" с названием test. И только дочитав до конца и разобрав кучу скобочек и стрелочек, мы можем понять, что перед нами функция. Такое объявление плохо читаемо и не несет никакой выгоды. Я не понимаю, почему так пишут: неужели всем остальным это кажется читабельным и понятным?

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

Или другой пример кода из JS:

someObject.someInvalidProperty = 1;

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

Или, если ты забудешь слово var, то JS не смутится и просто создаст глобальную переменную.

Еще один пример: JS не выбросит исключение при чтении несуществующего свойства, или при делении на ноль, хотя математика это запрещает. Мне нужно нормальное математическое деление а не деление вида "ой, давайте не проверять деление на ноль, чтобы сэкономить 1 байт кода". И язык, который помогает находить ошибки, а не делает вид, что все в порядке.
Аноним 17/12/21 Птн 17:16:53 22400201022
>>2239987
>function test(...)
Но ведь так можно в js.
Аноним 17/12/21 Птн 17:21:12 22400221023
>>2240020

Можно, но все пишут через const.
Аноним 17/12/21 Птн 19:47:28 22401391024
>>2240022
Это макаки неграмотные пишут.
С хера ли функцию в константу загонять надо? Они для другого придуманы.
Аноним 18/12/21 Суб 00:17:50 22404161025
>>2239987
>этот код не выдает ни ошибки, ни предупреждения, хотя я опечатался в названии свойства
На 100% решается TS
>Или, если ты забудешь слово var, то JS не смутится и просто создаст глобальную переменную.
наличие use strict или TS, опять же, решает эту проблему
>JS не выбросит исключение при чтении несуществующего свойства
Во первых, это решается TS. Во вторых, с огромной вероятностью в таком случае тебе будет выброшено исключение последующими строками кода.
> при делении на ноль
Часто приходится делить на ноль в реальной разработке?
Аноним 18/12/21 Суб 00:55:59 22404501026
>>2238692
Щас ты до ивент листенеров дойдешь и охуеешь
Аноним 18/12/21 Суб 02:09:21 22404831027
>>2240450
А можно вкрации, что там такое?
Аноним 18/12/21 Суб 08:49:48 22405361028
>>2238692
>Всё чаще приходится писать строчку и смотреть, чего будет. Хорошо - ну ок, пишем следующую. Не получилось? Ну, попробуем тут тип данных изменить, может в этом проблема? А, нет, проверка на ноль. Тоже нет. Так, что там вообще эта хуйня возвращает?
Коротко и ясно о современных реалиях пхп кодеров.
Я знаю шаблоны проектирования, читал книги разные, но я хуй его знает как работает мой код =)
Аноним 18/12/21 Суб 10:08:03 22405601029
>>2240536
>Так, что там вообще эта хуйня возвращает?
Тайпхинты уже давным давно завезли. Не надо позориться.
Аноним 18/12/21 Суб 14:17:46 22408021030
>>2239975
Ебать ты хитрый. Заебись конечно что ты расписал требования. Но меня интересовала именно непосредственная реализация, реальный код, который будет написан чтобы протестировать простейшую хуйню. Я именно это и хотел показать. Сетап для тестирования одной маленькой функции будет в десять раз больше её кода. Еще мне интересно было глянуть как ты будешь генерить тестовые данные и проверять что там внутри приватных свойств объектов. А если добавить кружкам айдишники, а если эти айдишники будут еще и uuid'ами будет вообще бурлеск. Так между прочим напомню что количество багов на количество строчек кода это константа. Чем больше кода в тестах, тем больше багов в тестах. Фейки это конечно лучше чем моки, но они и дороже как когнитивно, так и по времени.

>Если присмотреться, то при желании можно увидеть, что не все сценарии продуманы
Это тоже очень важный момент. Ты по своей внутренней интуиции решил что те условия, которые ты покрыл, покрыть нужно, а остальные уже по факту багов. Но правда в том что все они равнозначны, а трудозатраты на полное покрытие никогда не окупятся. Почему тогда вообще не перейти на написание тестов по факту багов?

>Конечно, придется. Но ты делаешь это один раз, а не в каждом тесте. То же касается очереди сообщений - надо сделать, чтобы сообщения не отправлялись наружу, а немедленно обрабатывались, опять же, один раз для всего проекта.
Еще раз повторю, что сразу видно что ты с таким никогда не сталкивался. Краник наливающий воду в чашку порождает нехуйный граф граничных условий. А полный прогон через крупное приложения порождает бездну. Моя позиция что таких тестов не должно быть вообще, слишком много false позитив, а когда заткнешь дырки моками, то вообще хуй пойми что в итоге тестируется. Но их пишут и пишут дохуя.

>В Го очень много, мягко говоря, странностей
А в пхп мало? В не зависимости от недостатков го, переписанные на го проекты которые я видел, всегда были короче в несколько раз. И в них было меньше мусора.

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

>>2239987
Тебе >>2240416 правильно написал что TypeScript все это решает. Но я немного добавлю чтобы было понятно что это на самом деле такое.
TypeScript это компилируемый, асинхронный, строго типизированный, модульный, полностью поддерживающий как ООП так и ФП парадигму язык, созданный ведущими архитекторами C#. В TypeScript есть: вывод типов, дженерики, туплы, readonly свойства, энумы и куча синтаксического сахара.
Вот на этом сегодня фронтендеры пишут селекты и дропдауны. Просто блядь представь, что у каждого деревенского теперь есть новенький спорткар, которым они по старинке пашут поле и возят картоху на заднем сиденье. А у тебя старый ржавый корч, на котором тебе нужно ехать 24 часа Нюрбургринга.
Аноним 18/12/21 Суб 17:48:00 22410471031
>>2120804 (OP)
>PHP developer roadmap
>Карта знаний

Реально все это спрашивают со стажера за 0-30к и с джуна 50?
Аноним 18/12/21 Суб 23:03:31 22413861032
Насколько важно знать линукс пхп программисту? Можно обйтись без него?
Аноним 18/12/21 Суб 23:31:00 22414151033
>>2241386
В ооо рога и копыта тебя заставят деплоить ваше говно на линуксы, так что обойтись нельзя, если не хочешь на ровном месте обосраться, но и учить что-то дальше базовых команд не нужно. в больших конторах скорее всего джуну линукс не понадобится
Аноним 18/12/21 Суб 23:47:07 22414251034
>>2240802

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

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

> вызываем FillCupsWithWater с N = 2, притом что TestCupboard предоставляет 3 пустых чашки. Проверяем, что нам вернули 2 чашки, что в них больше воды, чем было изначально. Дополнительно можно проверить, что третья чашка не заполнена.

public function testFilledCupsLimitIsRespected()
{
$testCupboard = new TestCupboard([
new Cup(100, 0),
new Cup(100, 0),
new Cup(100, 0)
]);

$testTap = new TestTap(20);

$dut = new FillCupsWithWater($testCupboard, $testTap);
$cups = $dut(2);
$this->assertCount(2, $cups);
$this->assertGreaterThan(0, $cups[0]->getLevel());
$this->assertGreaterThan(1, $cups[0]->getLevel());
// при желании проверим последнюю чашку
$this->assertEquals(0, $testCupboard->getCup(2)->getLevel());
}

Код можно чуть улучшить, если вынести проверку уровня в функцию и написать:

$this->assertCupNotEmpty($cups[0]);

Здесь требуется создать классы TestTap/TestCupboard, но они очень маленькие (в отличие от реальных классов, в которых будут сотни строк или больше), и их можно переиспользовать во многих тестах. Как альтернатива, можно использовать моки, но тогда придется копипастить однотиный код из теста в тест, а это, по моему, плохо.

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

Тест получился немаленький, но ведь скорее всего код тестируемого сервиса будет намного больше, чем в твоем примере. А считается нормальным, если объем тестов сопоставим с объемом кода.

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

$product = $this->warehouseBuilder->addProduct(['name' => ..., 'price' => ...]);

То есть, если тебе нужен товар на складе с названием N и ценой X, то объем информации, которая требуется для создания этого товара такой: "товар на складе", N, X. И соответственно, это создание можно реализовать одной строчкой.

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

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

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

Аноним 18/12/21 Суб 23:49:15 22414271035
>>2241047
Там хуиты много написано из манямира.
Аноним 19/12/21 Вск 00:05:02 22414411036
>>2240802

> Сетап для тестирования одной маленькой функции будет в десять раз больше её кода.

Странно. На практике, наоборот, у тебя будет сервис, в котором 500-1000 строк, и к нему куча тестов по 15-20 строк каждый. Если ты пишешь свой код в виде сервисов по 20 строк, то может быть ты что-то делаешь не очень правильно.

> Еще мне интересно было глянуть как ты будешь генерить тестовые данные и проверять что там внутри приватных свойств объектов.

Мы не проверяем, что внутри приватных свойств, так как это состояние объекта не наблюдаемо снаружи. Нам важно либо наблюдаемое состояние (что можно увидеть через публичные методы) либо сайд-эффекты (изменения в БД, отправленные письма, HTTP-запросы итд). Какая разница, что у объекта в приватном свойстве, если он выдает правильные значения через публичные методы?

В ТЗ же не пишут "после вызова функции приватное свойство должно равняться true". Обычно там пишут более высокоуровневые вещи, которые мы и проверяем.

Если все-таки надо проверять приватные свойства, то к ним пишутся геттеры.

> . А если добавить кружкам айдишники

То мы не будем их проверять, так как объект обладает идентичностью и их можно сравнивать через $a === $b. Однако, если в требованиях требуется, чтобы был определенный id, то тогда будем проверять. Если требуется сравнить много свойств, то мы пишем функцию преобразования объекта в массив и сравниваем массивы. Функция, естественно, пригодится и в других тестах.

> Ты по своей внутренней интуиции решил что те условия, которые ты покрыл, покрыть нужно, а остальные уже по факту багов.

Ты не дал ТЗ.

> Но правда в том что все они равнозначны, а трудозатраты на полное покрытие никогда не окупятся. Почему тогда вообще не перейти на написание тестов по факту багов?

Задача тестов 1) проверить, что код соответствует требованиям 2) что при правках кода он не перестал соответствовать требованиям. Нам не требуется покрывать 100% входных данных, так как во-первых, это нереально, во-вторых, мы предполагаем, что разработчики добросовестные люди, которые в общем стараются писать правильно, просто иногда могут что-то нечаянно сломать (не зная, что один компонент влияет на работу второго). Тесты как раз и отлавливают такие нечаянные поломки. Конечно, баги могут просочиться. Но сравни это с ситуацией, когда тестов нет. Тогда правки кода напоминают прогулку по минному полю, что приводит к тому, что никто не рефакторит и не исправляет код, а только добавляет новый.

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

> В не зависимости от недостатков го, переписанные на го проекты которые я видел, всегда были короче в несколько раз.

Они могут быть короче только по одной причине: в них меньше функционала. Объясни, какие конструкции есть в строго типизированном языке Го, которые заменяют конструкции большего размера в PHP? По моим ощущениям, из-за статической типизации код на Го как раз получается больше при равно функционале.


Аноним 19/12/21 Вск 02:22:44 22415081037
>>2240416
>решается TS
>или TS
>это решается TS
Классное оправдание костылей языка тем, что у него есть надстройка которая решает проблемы языка.

>Часто приходится делить на ноль в реальной разработке?
Чаще чем хотелось бы.

>>2240560
>Не надо позориться
Удвоил.

>>2240802
>что TypeScript все это решает
Тайпскрипт придэ порядок наведэ!
Когда в других языках фреймворки решают проблемы скорости разработки на этом языке, TS решает проблемы JS'а.
Аноним 19/12/21 Вск 03:19:25 22415241038
>>2241508
>Классное оправдание костылей языка тем, что у него есть надстройка которая решает проблемы языка.
А у PHP нет этих надстроек в виде фреймоврков?
Аноним 19/12/21 Вск 05:15:38 22415341039
>>2241508
>Когда в других языках фреймворки решают проблемы скорости разработки на этом языке, TS решает проблемы JS'а.
Граница между определением фремворка и typescript'а настолько мала, что её невозможно заметить невооруженным глазом.
Аноним 19/12/21 Вск 11:10:01 22416141040
изображение.png 296Кб, 597x327
597x327
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов