«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP #120 Аноним 2020/11/05 19:13:56  №1849078 1
php-noob-1.png (32, 500x500)
500x500
cat-cafe-osaka.jpg (138, 1024x683)
683x1024
l0-sensei.jpg (34, 650x384)
384x650
cat-sad.jpg (173, 1024x768)
768x1024
Здесь мы изучаем язык PHP (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.

Предыдущий тред был тут: >>1785871 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, можно искать решения и обсуждения задач).

С чего начать

Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не запоминайте его, он временный). Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.

Если не знаешь как решать, запости код и попроси подсказку или поищи задачу в архиве тредов.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. У нас есть задачи для изучения этого:

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Laravel/Symfony: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- Если ты все решил, переходи к Symfony или Laravel
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1
- Новости IT на англ. https://news.ycombinator.com/
- какой-то древний, устаревший, но большой и на русском справочник по веб-разработке, посоветованный аноном: https://starcat.dp.ua/doc/wdh/

Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492

У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.

Платиновые вопросы

- Почему PHP? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Clone or Download -> Download ZIP, распакуй на рабочий стол и получи личную копию сайта, не требующую интернетов.
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу (ищи в архиве по слову "устроился").
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Аноним 2020/11/05 19:16:39  №1849084 2
grammar.png (47, 500x644)
644x500
Код должен быть аккуратным и оформлен, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.

Для этого достаточно вставить код на http://beta.phpformatter.com/ и нажать «format». Робот оформит все как надо. Если ты используешь IDE, то там есть горячая клавиша для этого. Список клавиш для IDE: https://gist.github.com/codedokode/8759492

Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть рекомендации PSR-1 и PSR-12. Вот как надо оформлять код:

- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
- ставим тайп-хинты на аргументы функций, результат функций и поля классов

Вот ссылка на рекомендации PSR, где все это описано подробнее и даны примеры оформления:

PSR-1 (рус.): https://svyatoslav.biz/misc/psr_translation/#_PSR-1
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
Аноним 2020/11/05 19:18:04  №1849091 3
Если вдруг кого-то в прошлом треде пропустили, можете напомнить о себе здесь.
Аноним 2020/11/05 19:38:16  №1849109 4
почему в шапке одни и те же картинки?
фанат Японии?
а че не руби тред тогда?
Аноним 2020/11/05 19:39:31  №1849112 5
пхп еще жив?
Аноним 2020/11/05 19:57:21  №1849129 6
>>1849112
Прикинь умер уже давно, а вакансий как говна за баней, сам удивляюсь как так.
Аноним 2020/11/05 20:09:54  №1849138 7
>>1849112
А на бэке пхп как раз живее чем допустим пистон по моим ощущениям
Ответы: >>1866112
Аноним 2020/11/05 23:51:21  №1849235 8
16039281712440.png (220, 600x600)
600x600
Сап, анчоусы. Может кто-то поделиться ключом активации для phpstorm? 2019.1.2
Ответы: >>1850391 >>1857845
Аноним 2020/11/06 04:42:29  №1849281 9
Анон как правильно работать с фронтенд фреймворком на php фреймворке? Как и положено в nginx домашняя локация указана на www/html/web/project/index.php. index.php запускает php фреймворк, открывается контроллер, который собирает вьюху. Или не собирает?
Ответы: >>1849291
Аноним 2020/11/06 05:22:17  №1849291 10
>>1849281
Собирает в любом случае, просто в зависимости от архитектуры фронта эта вьюха может быть просто тег <main></main>, а все что внутри уже фронт добавляет. Но может и более-менее полную собирать. Еще фронт может полностью генерится на сервере изпользуя фронтенд фреймворк. Тогда бекэнд отдает полностью готовыю вью, но отрендерена она фронт фрейморком, а не бекэндом. Такое используют, например, когда хотят чтобы SPA индексировалось ботами поисковиков - ботам отдают полностью сгенерированую страницу с инфой, потому что скрипты они не запускают и обычная SPA страница для них будет пустая.
Ответы: >>1849600
Аноним 2020/11/06 05:25:07  №1849293 11
>>1849078 (OP)
Сколько можно постить одну и ту же старую шапку? Даже картинки не меняете
Ответы: >>1849462 >>1850058
Аноним 2020/11/06 05:35:36  №1849295 12
Прохожу гайд из шапки, пытаюсь решить задачу на форматирование текста (удаление лишних пробелов и т.д.)
Но могу сделать так, чтобы все предложения начинались с большой буквы. Пытаюсь с помощью регулярки и preg_replace найти все первые буквы предложения, и применить к ним mb_strtoupper. Но она не применяется. Что я не так делаю? Или так вообще нельзя делать?
Ответы: >>1850058
Аноним 2020/11/06 09:10:42  №1849462 13
>>1849293
>Даже картинки не меняете
а это важно?
Аноним 2020/11/06 09:54:36  №1849494 14
>>1849112
Причем еще и доминирует в вебе
Аноним 2020/11/06 11:45:02  №1849573 15
На меня тут в прошлый раз накинулись из-за того, что я хочу с C# перейти на PHP, но за пару дней тестов и чтения сравнений я пришел к тому, что чистый архитектурный код можно писать и на PHP, но единственный минус C# в том, что он менее производительный. Я прошу вас оценить не со стороны больших дядек, который C# выбирают просто потому что, а чисто по архитектуре, защищенности и быстродействию. Что лучше?
Аноним 2020/11/06 12:04:58  №1849585 16
Аноним 2020/11/06 12:07:36  №1849589 17
Аноним 2020/11/06 12:18:34  №1849600 18
>>1849291
Вроде все логично. Спасибо.
Аноним 2020/11/06 16:54:43  №1849909 19
>>1849112
Вполне. Комьюнити бодрое, чет новое постоянно пилится, работа есть.
Аноним 2020/11/06 16:57:30  №1849911 20
>>1849573
Где платят больше, туда и иди.
Аноним 2020/11/06 17:28:02  №1849930 21
какая разница между MySQL и Postgres?
Ответы: >>1849940
Аноним 2020/11/06 17:44:17  №1849940 22
>>1849930
В двух словах PostgreSQL для кровавого тырпрайза, там есть всякие плюшки коих нет в MySQL, ну и всякая оптимизация, быстродействие и тп., но с другой стороны если нужно лезть в конфиги, то на PostgreSQL это боль, если нет DevOps который бы эту хуйню поддерживал, то лучше MySQL. С точки зрения разработчика почти не отличаются те же самые запросы, все тоже самое в общем и целом. А так можно нагуглить много разных статей на эту тему, лень с телефона печатать.
Ответы: >>1849942 >>1850235
Аноним 2020/11/06 17:46:04  №1849942 23
Ответы: >>1850391 >>1852159
Аноним 2020/11/06 19:01:51  №1850027 24
>>1849078 (OP)
Объясните, почему когда в <?php

error_reporting(-1);

for ($i = 1; $i<=10; $i++) {
\t$a=$i$i;
\techo "{$i}
{$i}={$a}\n";
}

$a=$i*$i; выносишь перед циклом, он в итоге нихуя не считает, а выводит нули?
Ответы: >>1850058
Аноним 2020/11/06 19:41:57  №1850058 25
>>1849293

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

>>1849295

Тут есть разные вараинты:

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

Использовать preg_replace вместе с mb_strtoupper, чтобы это работало, невозможно.

>>1850027

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

Выражение $a = $i * $i не значит, что "$a будет дальше автоматически обновляться при изменении $i". Нет, это команда: перемножь $i на $i и помести результат в $a. Если ты ставишь ее до цикла, то она выполняется один раз. Если внутрь цикла - то несколько раз, на каждом шаге цикла.
Аноним 2020/11/06 21:27:47  №1850131 26
<?php

$bankSum = 10000;
$bankPercent = 1.1;

for ($age = 16; $age < 100; $age++) {
\t$years = $age - 16;
\t$bankSum = $bankSum * $bankPercent;
\tif ($bankSum >= 1000000) {
\t\techo "gotovo \n";
\t\tbreak;}
}
\t
echo "Через $years в банке накопится сумма $bankSum, а вкладчику будет $age";

Аноны где ошибка? Вручную сначала посчитал, убедился, что 49 лет пройдет, выдает упорно 48, в каком месте проебался?

Ответы: >>1850314
Аноним 2020/11/07 04:16:51  №1850235 27
>>1849940
Дело совсем не в быстродействии. Есть стандарты SQL, а конкретные базы им следуют. Ну пытаются во всяком случае. SQL это внезапно тоже язык, который нужно учить. Представь что ты всю жизнь учил урезанную версию пхп, в которой, например, нет функций работы с массивами или json. Нахуй такой обрубок вообще нужен?

В предыдущем треде анон спрашивал банальный вопрос:
Есть самописная борда, на борде есть треды, в тредах посты. Как выбрать последние n постов для каждого треда.

Удачи исполнить такое на MySql. Никаких нативных инструментов для этого нет. Только хаки и подзапросы по секунде. А на постгресе куча вариантов и все в соответствии со стандартом.
Ответы: >>1850491
Аноним 2020/11/07 09:33:03  №1850314 28
>>1850131
Потому что вкладчик положил деньги в 16 лет и ему сразу же начислило 110% в тот же день, а нужно чтобы через год.
Ответы: >>1851145
Аноним 2020/11/07 10:43:50  №1850372 29
сап аноны, записался на курсы рнр, там задание "Составьте регулярные выражения для маскирования тегов HTML ", не могу понять что такое "маскирование", может кто знает
Ответы: >>1852163
Аноним 2020/11/07 11:01:10  №1850391 30
>>1849942
В том, что нет join'ов, данные любого формата можно хранить в json. Нет фиксированной структуры, не нужно заранее объявлять schema, просто берешь и работаешь без задней мысли.

>>1849573
Что тебе больше нравится, то и используй. Нравится ООП, используешь azure - бери C#. Нравится простота и дешевизна - бери PHP.

>>1849235
Бери Visual Studio Code, функции все те же, только бесплатный.
Ответы: >>1850578 >>1852163
Аноним 2020/11/07 13:19:18  №1850490 31
>>1849078 (OP)
Как в рамках php решается проблема highload если асинхронности как таковой в пыхе нет и вызываемый файл-скрипт .php запускается для каждого поступившего обращения на сервер?
Аноним 2020/11/07 13:20:05  №1850491 32
>>1850235
>Удачи исполнить такое на MySql
Я таки исполнил MariaDB. ХЗ начиная с какой версии, но там есть оконные функции.
Аноним 2020/11/07 13:21:31  №1850492 33
>>1850490
Там есть процесс-менеджер, который спавнит дохуя процессов-обработчиков. Смотри php-fpm.
Ответы: >>1850493
Аноним 2020/11/07 13:22:05  №1850493 34
>>1850492
>спавнит дохуя процессов-обработчиков
И это типо норм?
Ответы: >>1850495
Аноним 2020/11/07 13:23:47  №1850495 35
Аноним 2020/11/07 14:33:11  №1850559 36
>>1850490

Как связаны асинхронность и highload? Я думаю, что никак, так что непонятно, зачем ты про нее вспомнил.

В highload PHP прекрасно распараллеливается на любое число машин. Благодаря синхронному коду писать на PHP удобнее и проще.

Хотя это на практике не очень нужно, так как реально highload приложений в мире очень мало. Мало кто может похвастаться миллионами одновременно заходящими на сайт или в приложение пользователями. Вконтакте, твиттер, инстаграм - это единицы, а у 99% сайтов такие объемы трафика никогда не будут.
Аноним 2020/11/07 14:50:29  №1850578 37
>>1850391
>В том, что нет join'ов, данные любого формата можно хранить в json. Нет фиксированной структуры, не нужно заранее объявлять schema, просто берешь и работаешь без задней мысли.
А в чем подводные?
Ответы: >>1850579 >>1850638
Аноним 2020/11/07 14:51:10  №1850579 38
>>1850578
>нет join'ов
>в чем подводные?
Ответы: >>1850582
Аноним 2020/11/07 14:52:32  №1850582 39
>>1850579
я только начал изучать архитектуру БД и запросы
Аноним 2020/11/07 16:57:30  №1850638 40
>>1850578
>А в чем подводные?
Да нет никаких подводных. Каждая БД работает в рамках своей задачи, под которую она разрабатывалась. Memcached/redis например хранят базу в оперативной памяти, поэтому их часто как прокладку для кеша используют. InfluxDB под временные ряды заточена (котировки акций например). Neo4j заточена под графы и отношения many-to-many (система рекомендации товаров например). Есть мультимодельные БД, которые сочетают в себе качества как реляционных БД, так и документоориентированных - например FaunaDB.

В MongoDB просто другая идеология, не размазывать данные по куче таблиц, а хранить данные в самих документах. Если у тебя много взаимосвязей между данными - к примеру ты строишь социальную сеть. Тут конечно лучше подойдет MySQL, заебешься в NoSQL моделировать отношения.
Ответы: >>1850757
Аноним 2020/11/07 17:17:13  №1850650 41
>>1850490
>Как в рамках php решается проблема highload если асинхронности как таковой в пыхе нет
Асинхронности нет, но есть воркеры. В nginx ставишь worker_processes равное количеству ядер, например у тебя 4 ядра на сервере, значит ты ставишь worker_processes равное 4-м и сервер у тебя свободно обрабатывает 4 некешированных запроса одновременно. Это первый вариант.

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

Третий вариант - кеширование. Ставиться memcached и время генерации страницы уменьшается до 20мс или около того.
Аноним 2020/11/07 17:30:25  №1850656 42
>>1850490
Ах да, этот ваш JavaScript тоже не тру асинхронный язык. Асинхронность в нем достигается за счет использования Web API (написанных на плюсах) и механизма колбеков (в ноде за счет использования libuv, которая тоже написана на c++ между прочим). Это так, к слову...
Аноним 2020/11/07 19:37:46  №1850757 43
>>1850638
короче как простая база,типа вот есть юзер,и списком в ней идут просто данные юзера,а рядом по списку другой юзер и между ними нет связи?
Ответы: >>1851001 >>1851005 >>1852163
Аноним 2020/11/07 19:44:27  №1850766 44
Подскажите, пожалуйста, как сделать так, чтобы при нажатии на чекбокс, который находится в диве 1, менялся фон у h1 в диве 2?
https://jsfiddle.net/fhw64m9v/
Если не туда написал, скажите плз куда написать?
Ответы: >>1852163
Аноним 2020/11/07 20:03:47  №1850788 45
https://2ch.hk/pr/res/1845843.html
Это вообще нормально что опять зумерсике жс-пидоры что-то тявкают про пхп, хотя нихуя не шарят в матчасти? Пора им смачно так провести шершавым хуем по еблам
Аноним 2020/11/08 07:49:26  №1850989 46
зато пых не умеет в веб сокеты
умеет,но это лютый костыль
Аноним 2020/11/08 08:10:15  №1851001 47
>>1850757
Для простых сайтов вообще заебись. Если у тебя тупо статьи по категориям/пользователи, то mongodb подойдет идеально. Это БД общего назначения, для особых случаев есть специализированные БД.
Аноним 2020/11/08 08:20:46  №1851005 48
>>1850757
Просто у nosql немного своя атмосфера, не такая как у mysql/postgresql. Свои техники и приемы работы. Перекатышам можно забыть всё что они знали о реляционных дб и учить всё заново)
Аноним 2020/11/08 12:53:04  №1851145 49
фыфвф.jpg (70, 878x550)
550x878
>>1850314
И как это реализовать без нагромождения всякого говна?
мимо другой вкатывальщик
Ответы: >>1851161 >>1851231 >>1852164
Аноним 2020/11/08 13:24:57  №1851161 50
>>1851145
навернуть while($bankSum < 1000000)
Аноним 2020/11/08 15:12:21  №1851231 51
>>1851145
решить уравнение вида 1e4 1.1^n >= 1e6
https://www.wolframalpha.com/input/?i=1e4+
+1.1%5En+%3E%3D+1e6
с точки зрения _как_ решать - фигануть просто логарифм по основанию 1.1 - log_{1.1}(1e6/1e4)=48.31.. (что сходится с вольфрамом)
Аноним 2020/11/08 17:04:26  №1851321 52
image.png (235, 512x369)
369x512
Сап, веб-макаки. Как можно редачить код в Вижуал Студио и сразу же выводить его на другое окно в этом же самом вижуал студио, чтобы каждый раз не запускать файл в браузере по новой?>>1849078 (OP)
Ответы: >>1851460
Аноним 2020/11/08 19:53:25  №1851460 53
16039904232790.jpg (110, 1080x720)
720x1080
>>1851321
Используй Macromedia Dreamweaver

Аноним 2020/11/08 22:47:54  №1851560 54
Ебать, два часа думал как нужно написать решение задачи про мальчика с айфоном в кредит. Че то меня зацепила фраза автора о том что с первого раза мало кому удается решить ее и прям замотивирован был. На самом деле само решение образное в голове, пришло почти сразу, но как это все оформить и написать - пиздец просто. Спрашивать само решение здесь у анонов было как- стыдно..... хотя я был близок. Рад просто пиздец как
Ответы: >>1852069
Аноним 2020/11/08 23:33:48  №1851585 55
Всем привет. Собираюсь пустится в бэк разработку (столкнусь с разработкой впервые в принципе) и думаю какую IDE бесплатную можно взять. Ломаюсь между VsCode, SublimeText(но, говорят, там гемор с допами) и phpstorm (бесплатной версии, была же такая, да?..). Планирую за 6-7 месяцев пройти обучения в шапке и податься на джуна, потому хочу сразу начинать с какой-то нормальной IDE, а не notepad++. К тому же планирую винду полностью Linux заменить (опыт пользования есть), а потому кроссплатформенность тоже важна. Пытался статейки нагуглить, но всё херня какая-то.
Заранее спасибо.
Ответы: >>1851629 >>1851710
Аноним 2020/11/09 01:55:51  №1851629 56
>>1851585
если надо бесплатный присмотрись к VsCode с расширениями
все с кем работал используют шторм
Ответы: >>1851633
Аноним 2020/11/09 02:14:12  №1851633 57
>>1851629
+добавлю
ставил вскод чтоб просто посмотреть - вроде вполне сносно работало на убунте. Ставил одно расширение для пхп (у которого много скачиваний и рейтинг хороший) + хдебаг (не настраивал).
интелисенс(автодополнение) норм работал
навигация по коду норм
консоль понравилась
есть гайды по настройке вскод+хдебаг+докер
думаю вполне можно работать/учиться
Аноним 2020/11/09 02:21:39  №1851634 58
бамп
Аноним 2020/11/09 07:14:14  №1851710 59
>>1851585
vscode на убунте норм, но для него нужно расширения ставить, я уже не помню какие я тогда нагуглил, не все адекватно работают. Если его настроить правильно и оперативки много, то для начала пойдет, у нас на работе даже некоторые в нем пишут. А так сам купил ключи к шторму и не парюсь.
Ответы: >>1852001
Аноним 2020/11/09 12:53:49  №1851929 60
Блэт, аноны, чет я затупил как мразь просто, нихуя нагуглить не могу.
Как в базу с помощью sql запроса вставить дату полученную из строки?
Дата - "2020-11-10Т10:44:06.333Z" - это дата expires сессии для куки. Одна либа генерит такую.
Первое - что значат цифры и буква после точки - .333Z?
Второе - я инсертом не понимаю как правильно ткнуть эту дату в базу в поле с типом DATATIME.
Юзал str_to_date функцию - но не получается.
Как првильно это сделать?
Вообще я чет нихуя не понимаю в sql датах
Ответы: >>1851940 >>1852153
Аноним 2020/11/09 13:08:24  №1851940 61
>>1851929
самофикс - дата прекрасно втсавляется как строка '2020-11-10Т10:44:06.333Z', я чет сам себя перемудрил. Вставлял эту строку в VALUES ( DATETIME('2020-11-10Т10:44:06.333Z') )
Хотя если юзать DATE('2020-11-10Т10:44:06.333Z') - в базу вставится значение - но только год-месяц-день
Аноним 2020/11/09 13:27:46  №1851953 62
Решаю задачу из гайда про размен. Разобрался как выдавать минимальное количество купюр. Но это работает только если количество купюр достаточно много в банкомате. Как тогда рассматривать случай, когда каких то купюр в дефиците И их не хватит для минимальной последовательности.
Ответы: >>1852164
Аноним 2020/11/09 14:55:28  №1852001 63
Ответы: >>1852438
Аноним 2020/11/09 16:03:24  №1852069 64
>>1851560
Можешь не спрашивать, вбивай условия задачи в гугл и там будет решенная задачка. Большинство задач, ну как бэ явно с нуля решить очень сложно для вкатывальщика, поэтому автор не лукавил.
Ответы: >>1852076
Аноним 2020/11/09 16:15:37  №1852076 65
Аноним 2020/11/09 18:03:51  №1852153 66
>>1851929

.333 это доли секунд. Z - Это часовой пояс (гугли Zulu time).

Правильно, наверно, преобразовать это время в timestamp функцией strtotime(), а затем сформатировать дату для MySQL с помощью date('Y-m-d H:i:s').

Аноним 2020/11/09 18:12:19  №1852159 67
>>1849942

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

Mongo просто лучше мапится на объекты. Если ты не начинающий, то ты скорее всего напрямую не работаешь ни с Mongo, ни c MySQL. А используешь ODM/ORM. Для мапинга объектов на хранилище SQL подходит хуже (так как мы делаем сложное преобразование из объектов в SQL-запросы), а Mongo - лучше (так как мы сразу преобразовываем объект в JSON и засовываем в хранилище). Добавление нового поля, например, реализуется добавлением одного поля в объекте. Не требуется делать миграций.

С другой стороны, если надо вручную выбрать какие-то данные, SQL позволяет сделать это быстро, а вот с Mongo придется писать громоздкий JSON. То есть SQL лучше подходит для использования человеком, а MongoDB - приложением.
Ответы: >>1852195
Аноним 2020/11/09 18:20:01  №1852163 68
>>1850372

У них и уточняй.

>>1850391

Джойнов там нет, потому что связи реализуются на уровне ODM (object to document mapper) вроде Доктрины. Также, схемы нет в Монго, но она реализуется на уровне приложения.

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

>>1850757

С Монго обычно работают через ODM. Ты создаешь объект с нужными тебе полями, а ODM делает из него JSON-документ для монго.

>>1850766

Тебе надо получше изучить селекторы CSS. Этот селектор:

#switch:checked container

Значит, что тег (не класс) container должен быть вложен внутрь input.



Ответы: >>1852251
Аноним 2020/11/09 18:23:52  №1852164 69
>>1851145

Можно цикл начинать не с 16, а с 17.

>>1851953

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

В жадном алгоритме ты идешь от больших купюр к маленьким и берешь по максимуму каждой купюры (но так, чтобы это было не больше остатка выдаваемой суммы и не больше имеющегося запаса купюр).
Ответы: >>1852213
Аноним 2020/11/09 19:01:15  №1852195 70
>>1852159
Алле там есть рефы https://docs.mongodb.com/manual/reference/database-references/, они храняться отдельно
Монга от реляционных бд отличается не отсутствием отношений между документами, а отсутствием реляционных операций, напр джоинов.
Ответы: >>1852199
Аноним 2020/11/09 19:02:01  №1852198 71
Аноны, наткнулся вот на такой сайтец с самообучением начальным по пхп. Вопрос, сильно ли он отличается от того что тут автор залил? Ибо он мне больше зашел чем тот который в закрепе поскольку там есть возможность сразу проверить решение задачи а не лопатить гугол или тут доебывать анонов. Столкнулся просто с проблемой что пример кода который я копирую в кодпэд - не воспроизводится.... Я понимаю что там немного другое оформление нежели у автора треда, но энивей, хотел узнать что все таки лучше
Ответы: >>1852205
Аноним 2020/11/09 19:02:11  №1852199 72
Аноним 2020/11/09 19:02:36  №1852200 73
Сам сайтец - programulin
Аноним 2020/11/09 19:05:09  №1852205 74
unnamed.jpg (48, 512x427)
427x512
Аноним 2020/11/09 19:24:09  №1852213 75
>>1852164
Не, попробую объяснить на примере, что есть скажем купюры
5 - 2 шт
10- 1шт
20 - 1шт

Если я хочу получить 40, то минимальное количество купюр будет 2 по 20. Но в наличии то у меня только одна двадцатка. И в реальности я должен выдать 20+10+5+5, что не является минимальным количеством в идеальном случае, но минимально возможное в действительности. Вопрос в том, в каком месте кода это надо учитывать и как обрабатывать?
Ответы: >>1852235
Аноним 2020/11/09 20:08:13  №1852235 76
>>1852213

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

- хотелось бы выдать: 40/20 = 2 шт
- в наличии: 1 шт
- потому берем 1 шт по 20

Невыданный остаток = 20. Переходим к купюре по 10:

- хотелось бы выдать: 20/10 = 2 шт
- в наличии: 1 шт
- потому берем 1 шт по 10

И так далее.
Аноним 2020/11/09 20:36:06  №1852251 77
>>1852163
>Джойнов там нет, потому что связи реализуются на уровне ODM (object to document mapper) вроде Доктрины
В анус себе замаппь свою доктрину. Зачем мне маппить объекты на базу? Чтобы он мне под каждый класс делал новую коллекцию? А может я хотел сделать одну коллекцию а-ля single table design? Без соплей разберусь как мне моделировать мою базу.

>Обычно используют ODM для взаимодействия с монго, иначе получится бардак.
Обычно используют ODM такие дауны как ты. Которые и перднуть не могут без лишних абстракций.
Аноним 2020/11/09 21:24:48  №1852277 78
Аноны сеньоры, расскажите как вкатиться верстальщиком, с чего стоит начать, чтобы хоть на кусок хлеба заработать себе
Ответы: >>1852284 >>1852644 >>1852659
Аноним 2020/11/09 21:35:03  №1852284 79
>>1852277
с html и css я так понимаю
Ответы: >>1852287
Аноним 2020/11/09 21:41:23  №1852287 80
>>1852284
Так а как конкретно? Есть какая-то литература, а то сидеть учить тэги как-то ебано мне кажется, или в этом весь смысл?
Ответы: >>1852288 >>1853989
Аноним 2020/11/09 21:45:53  №1852288 81
>>1852287
я тут не профессионал далеко. сам только вкатываюсь но в пхп сначала а потом уже верстку подхвачу как плюс минус пхп основы освою.
ну, подрочить теги наверно все равно придется т.к. хтмл/ксс все таки язык со своим синтаксисом и какие-то основы знать энивей придется. но это чисто мнение очередняры, папки мб не согласятся и че то другое посоветуют. жди
Ответы: >>1852566
Аноним 2020/11/10 07:20:02  №1852438 82
>>1852001
Что много? Ключи $89.00 примерно 7000, после НГ будет стоить дороже на 20% из-за НДС, ну и рубль дно прошибет опять.
Аноним 2020/11/10 10:56:02  №1852566 83
>>1852288
сам вкатываюсь только, и чем дальше в php, тем все больше понимаю что верстка(на деле не так сложно учить) + хотя бы основы JS просто обязательно надо знать будет
Аноним 2020/11/10 12:41:04  №1852644 84
>>1852277
>Аноны сеньоры, расскажите как вкатиться верстальщиком
Тру сеньоры никогда бы не посоветовали становиться верстальщиком in the first place. Верстальщик - это низшее звено в пищевой цепи, самая ебаная, низкопробная и низкооплачиваемая специальность. Наподобие дворника или разнорабочего на стройке. Верстают HTML только те, кто ничего больше делать не умеет. Если ты хочешь получать зарплату больше, чем только на сиги и пивас, я бы советовал приобрести больше навыков, чем только знание HTML/CSS.

>хоть на кусок хлеба заработать себе
Если ты себя не ценишь - никто тебя ценить не будет. Если просишь на кусок хлеба, тебе и дадут ровно кусок хлеба. Потому что ты сам себе назначил такую цену. Никто тебе не скажет, "сорри, чувак, но ты стоишь 100 тысяч как минимум". Скажешь 10 тысяч, тебе десятку и назначат.
Аноним 2020/11/10 13:03:08  №1852659 85
>>1852277
Почему в php треде спрашиваешь? По вопросу - берёшь и верстаешь без задней мысли, лендинг сверстай, потом многостраничник, настрой всякие вебпаки и сасы что бы удобней было. В процессе гуглишь нужные тебе теги и как это лучше сделать. Потом пиздуешь на фрилас верстать лендосы за 2к)
Аноним 2020/11/11 05:02:51  №1853269 86
ОП, вызываю тебя.

https://ideone.com/42dzWV

Сделал задачу про Grammar Nazi, хочу теперь от тебя узнать где я тут обсренькался и как пишут регулярки нормальные люди. Еще никак не мог понять как работает preg_replace и эти $0 и $1, но методом проб, ошибок и гугления что-то смог намутить, еще не всегда понимаю где нужны круглые скобки, а где нет.

пикрелейтед челибос у которого плавится мозг от регулярок
Ответы: >>1854548 >>1854554
Аноним 2020/11/11 09:43:52  №1853412 87
тред официально сдох, как и php кста
Аноним 2020/11/11 10:44:06  №1853474 88
Аноним 2020/11/11 10:52:05  №1853480 89
>>1853412
Когда в треде отвечают два/три раза в день = тред сдох или Чи тролли?
Аноним 2020/11/11 12:02:23  №1853532 90
Аноним 2020/11/11 18:49:56  №1853928 91
>>1853412
Знаете, в мере вокруг столько негатива, все кругом грязное, а хочется чего-то светлого, я хочу рассказать вам о Битриксе. Вы бы хотели пустить Битрикс в свой дом?
Аноним 2020/11/11 20:56:45  №1853989 92
>>1852287
1. Основы html/css
https://webref.ru/
http://htmlbook.ru/
2. проанализировать вакансии - дальше сам поймёшь куда надо двигаться

P.S. обязательно нужно практиковаться
P.S. #2 Вёрстка и JS связаны https://learn.javascript.ru/
P.S. #3 возможно не стоит сильно углубляться в специфические моменты(сложные css-анимации), а то долго будешь учиться до получения первого оффера

Ответы: >>1855641
Аноним 2020/11/11 21:46:24  №1854007 93
Пиздец, я дошел до функций и охуел просто. Я искренне пытался вникать в каждый этап, решая задачки но это же пиздец какой то с этими ебучими массивами и циклами. Столько всего нужно держать в голове чтобы понимать когда и как использовать эти приколы. Только я плюс минус запомню как работают массивы так потом появляются ебучие циклы И ВСЕ ЭТО НАДО КОМБИНИРОВАТЬ. Массив в массиве, цикл в цикле, еще и миллион этих ебаных функций. Я просто охуеваю. Неужели я один такой бездарный даун которому так сложно в погромирование?
Аноним 2020/11/11 21:52:31  №1854009 94
>>1854007
Не один, не парься. Просто нужно перепотеть (я так и не смог в вузе, потому буду дрочить снова )
Ответы: >>1854010
Аноним 2020/11/11 21:54:56  №1854010 95
>>1854009
я решил по другой тропинке пройтись. скачал курс борисова. говорят лучший для освоения базы пхп
Ответы: >>1854011
Аноним 2020/11/11 21:58:43  №1854011 96
>>1854010
Расскажи потом, как оно :3
Ответы: >>1854012
Аноним 2020/11/11 21:59:50  №1854012 97
Аноним 2020/11/12 01:06:45  №1854054 98
>>1854007
Это ты еще до регулярок не дошел, у меня тоже было много проблем с циклами в первое время, но регулярки это просто пиздец. В любом случае, я заметил что постепенно любую задачу можно решить, мне понадобилось несколько раз дропать учебник на длительное время (2-3 месяца), чтобы хоть как-то продвинуться, сейчас нахожусь на главе "Повторим?". Главное не сдавайся, анон, и не скипай задачи. Если уже окончательно на курс перешёл, то потом как пройдешь, вернись к задачам из учебника.



Аноним 2020/11/12 08:35:02  №1854164 99
Спасибо оп, за проделанную работу. Очень приятно и понятно читать сайт обучалку. Но я тут же стопорнулся на второй задачке с командой mt_rand, погуглив понял что нужно вбить в неё два числа, минимальное и максимальное. Жаль ты не сказал это в уроке.
Ответы: >>1854186
Аноним 2020/11/12 09:01:57  №1854186 100
Ответы: >>1854187
Аноним 2020/11/12 09:07:00  №1854187 101
tenor[1].gif (360, 498x498)
498x498
>>1854186
Понял принял. Таки осилил следующую задачку про кости с компуктером. На самом деле выглядит все как в школе с вижуал бейсик. Прямо чувствую как извилины напрягаться начинают, лел.
Аноним 2020/11/12 09:31:27  №1854197 102
<?php

for ($x = 0; $x <= 10; $x++) {
\t$y = $x * $x;
\techo "$x x $x = $y \n";
}

Вопрос по следующей задачке, в echo нельзя сразу вбить умножение, что бы не вводить еще одну переменную y, а что бы он прямо в echo подсчитывал?
Ответы: >>1854216 >>1854561
Аноним 2020/11/12 10:04:44  №1854216 103
>>1854197
А ты попробуй, потом расскажешь нам
Аноним 2020/11/12 10:36:54  №1854232 104
Набросал я простую страничку для рассчёта кредита как в задаче.
Задал несколько строк в форме, для передачи параметров в файл php.

Но все это выводит у меня в новой странице простым тексом. Как сделать что после рассчёта данные выводились (добавлялись) на ту же страницу с вводом данных? Я так понимаю как минимум надо использовать метод post?
Ответы: >>1854297 >>1854561
Аноним 2020/11/12 11:46:22  №1854267 105
Сап.

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

Поэтому вопрос к анону за сколько деняк он взялся бы за это дело.

Собственно на начальном этапе я вижу это вот как:
1) Есть табличка excel (или csv-файл, как тут советовал анон, не принципиально) со столбцами "ФИО, адрес, номер телефона, сумма в рублях" мб еще 1-2 столбца
2) Табличка загружается в веб-приложение
3) Для каждой строки генерируется пдф-файл и сохраняется на сервере для дальнейшего скачивания (или еще лучше весь этот пак качается зип-архивом, например)
???
PROFIT


Анончик тут писал, что это лучше всего сделать через wkhtmltodpf. В html-шаблоне время от времени нужно будет редактировать 1-2 абзаца (в начале и в конце файла).

Напишите, плиз, за сколько бы запилили такую хуйню?
Аноним 2020/11/12 12:40:07  №1854297 106
>>1854232
Вопрос времено решил тем, что в файле php выполняется функция с аргументами из гета и после дублируется весь код страницы с дополнительными строками в которых отображается результат выполнения функции php.
Но это слишком тупо и в лоб чтобы быть правильным решением. Прошу совета бывалых.
Если важно, то сервер использую встроенный в php
Ответы: >>1854492
Аноним 2020/11/12 15:34:09  №1854492 107
>>1854297
Я не понял. Ты используешь хтмл файл, который отправляет запрос на сервер и уже средствами пыхи генерируешь такую же страничку но уже через пхп?
Если да, то бы почему не сделать одну точку входа, которая смотрит, был ли пост запрос и выводит результат
Ответы: >>1854497
Аноним 2020/11/12 15:44:54  №1854497 108
>>1854492
Да, я тоже сейчас подумал о чем то похожем, использовать файл php с функцией и разметкой. Чисто ради интереса, а как из пыхи добавлять в другой файл хтмл новые теги? Или чтобы они становились видимыми по условию из результатов в файле пыхи
Ответы: >>1854556 >>1854561
Аноним 2020/11/12 16:46:09  №1854548 109
>>1853269

$0, $1 работают так:

Когда делается поиск в тексте по регулярке, запоминается, какие части регулярки совпали с какой частью текста. $0 - это весь текст, с которым совпала регулярка. $1 - это текст, с которым совпали первые круглые скобки в регулярке, $2 - вторые и так далее.

Например, если дан текст "кот и мышь" и регулярка /к(.(.))/u то $0 = "кот", $1 = "от", $2 = "т". Эти значения ты можешь использовать в строке для замены в preg_replace. А если ты просто проверяешь текст на соответствие регулярке с помощью preg_match, то она заполняет массив этими значениями.

Твой код видит ошибку в фразе "одно дно": https://ideone.com/BBCBsl

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

Я бы добавил \b вокруг слов а, но, чтобы регулярка не принимала любые слова, которые содержат в себе эти буквы.

Аноним 2020/11/12 16:53:45  №1854554 110
>>1853269

Круглые скобки нужны в таких случаях:

- чтобы применить квантификатор вроде звездочки или плюса не к одной букве, а к группе: сравни (абв)+ и абв+
- чтобы сгруппировать перечисляемые через | варианты: сравни (а|б|в)где и а|б|вгде
- чтобы "захватить" часть найденной строки и использовать позже как $1, $2 итд.

>>1854007

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

Аноним 2020/11/12 16:54:46  №1854556 111
>>1854497
>добавлять в другой файл
Прозвучало, как будто ты открываешь пустой файл, пишешь внутрь разметку, закрываешь, а потом показываешь, кек

<?php if ($_GET['some_shit]): ?>
разметка-разметка
<? endif; ?>

Либо вынеси разметку в отдельный файлик и по условию делай include, например.
Ответы: >>1854557
Аноним 2020/11/12 16:56:07  №1854557 112
>>1854556
>вынеси разметку
уникальную разметку в смысле. Надеюсь, ты в курсе, что можно подключить хоть 10 файликов с тегами
Аноним 2020/11/12 17:01:57  №1854561 113
>>1854197

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

>>1854232

Можно сделать так:

- если форма заполнена и отправлена, то взять данные, посчитать результат, вывести его
- вывести форму

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

Смешивать HTML-шаблон и логику на PHP считается дурным тоном, потому лучше сделать так, чтобы вначале шла вся логика, а в конце - только HTML-шаблон с подстановкой переменных:

- естьРезультат = false
- если форма заполнена и переданы ее данные, то посчитать результат и присвоить переменной естьРезультат=true
----- конец логики, начало шаблона----
- если естьРезультат, то вывести его
- вывести форму

>>1854497

В HTML файл ты ничего не можешь добавить. Ты должен генерировать HTML из PHP кода, как описано тут: https://www.php.net/manual/ru/language.basic-syntax.phpmode.php
Аноним 2020/11/12 17:48:06  №1854616 114
Ответы: >>1854746
Аноним 2020/11/12 18:07:23  №1854641 115
Аноны, немного такой вопрос:
По работе пилю приложуху. Она простая - slim + sql.
Вот допустим есть таблица "событие", она связана с другими таблицами.
И когда условно в контроллере я беру выборку по "событиям" - мне нужно так же куча связанной инфы с выборкой "событий" из разных других таблиц. Я делаю просто - sql запрос с кучей объединений.

Но вот у меня такой вопрос, допустим "событие" связанно с таблицей "статья". И для "события" и для "статьи" у меня есть классы отдельные, т.е. модели.
Возникла мысль.
Не получается ли что когда я в контроллере запросом выбираю все события , а так же связанную инфу, из других таблиц( для которых есть отдельные классы-модели) одним запросом с объединениями - нарушаю принцип единой ответственности?
Не должен ли я в методах модели "события" получать инфу о связанных с этой моделью "статьям" - вызывая для этого соответствующие методы модели "статьи"?
Т.е. класс "события" работает только с таблицой "события", а класс "статья" - касается только таблицы "статья". А как реализовывать транзакции? Передавать объект коннекта из одного метода класса в метод класса другого объекта? Допустим для того что бы одномоментно в нескольких таблицах insert-ы реализовать.
Ответы: >>1854778 >>1856228
Аноним 2020/11/12 21:22:52  №1854735 116
Вопрос про трекинг времени для тестов в задаче на тестхаб. Как у меня получилось: когда юзер открывает тест с вопросами, то создается сессия с датой старта, а потом при сдаче эта дата сверяется с дедлайном теста. А что делать, если, допустим, юзер открыл тест, а потом закрыл браузер и не стал отправлять ответы? Я думаю просто написать скрипт для крона, который будет запускаться каждые 30 минут, чекать все сессии с тестами на время и если дедлайн истек, то ставить отрицательные оценки. Норм решение или как-то по-другому лучше сделать?
Ответы: >>1856239
Аноним 2020/11/12 21:39:54  №1854746 117
>>1854616
немало, придется брать кредит ради такого. подожду еще ставок
Аноним 2020/11/12 22:51:53  №1854778 118
>>1854641
> в методах модели "события" получать инфу о связанных с этой моделью "статьям"
как-то так
> класс "события" работает только с таблицой "события", а класс "статья"
Если так получается то лучше сделать попростому (тоесть так). У тебя простые модели которые замаплены на бд с помощью ORM. Но структура таблиц бд может быть не очень удобна (так как к ним свои требования не связаные с бизнес логикой). Тогда у тебя слой моделей (domain model) которые преставляют бизнес-логику так как ее удобно сделать. Этой слой использует уже нижний слой простых ORM моделей. Ну или делает какие-то выдроченые зщапросы к бд если требования к производительности.
Ответы: >>1856210
Аноним 2020/11/13 06:47:58  №1854872 119
https://ideone.com/HbUn3J
Почаны, почему на втором месяце срабатывает
if ($creditBalance <= 5000), ведь кредит баланс там явно больше 5к?
Ответы: >>1854943 >>1855607
Аноним 2020/11/13 08:25:30  №1854922 120
пыха.png (58, 1129x925)
925x1129
шаблон.png (44, 887x726)
726x887
результат.png (18, 691x491)
491x691
Я все ещё пытаюсь написать нормальную страницу для рассчёта кредита в браузере.
Благодарю за вчерашнюю помощь. Прочитал ещё раз гайд от ОПа про шаблоны и поптылася реализовать на работе. Результаты на пике.(на работе код не могу скинуть, сори)
Пик 1. Скрипт пыхи который получает из гета входные данные и обрабатывает их, после подключает шаблон хтмл
Пик 2. Собственно сам шаблон хтмл, куда вставляются результаты работы скрипта
Пик 3. Что вижу в браузере.
Вопрос в правильном ли я направлении иду? Где косяки и что лучше делать по другому?
Аноним 2020/11/13 08:28:58  №1854924 121
j3C1YO5.jpg (32, 702x478)
478x702
ОП, запрашиваю проверку задачи про Shift. 3 дня пыхтел и каком кверху написал регулярки, все вроде работает, но я не понимаю почему, например, если вместо двух вопросов идущих подряд написать 3, то скрипт все равно корректно работает. Ну и как можно было сократить код и есть ли у меня тут явные ошибки.

https://ideone.com/JQ1Ejb

Ответы: >>1856248
Аноним 2020/11/13 08:51:04  №1854943 122
>>1854872
>if ($creditBalance <= 5000)
У тебя ; стоит после закрывающей скобки, поэтому условие перестает работать и в переменную $monthlyPayment попадает большое число.
Ответы: >>1855607
Аноним 2020/11/13 09:41:03  №1854977 123
>>1854922
>Вопрос в правильном ли я направлении иду? Где косяки и что лучше делать по другому?

Для начала нормально. Теперь этот код разбить на функции, чтобы не писать exit(); а просто при выполнении условий вызывать функции. Шаблон луче тоже сделать php, если обратиться к нему напрямую, то в браузере будет виден весь код.
Ну и вместо if elseif elseif в шаблоне попробуй switch case. Еще не понятно зачем фильтровать выводимый результат, он же у тебя float там не может быть символов которые ты пытаешься отфильтровать при помощи htmlspecialchars(). Фильтровать нужно входные данные, что собственно у тебя и сделано.

Можно теперь попробовать ajax, когда отправка идет без перезагрузки страницы.

Либо если с фронтом тяжело, то можно попробовать ООП, эту логику перенести в отдельный класс и уже его дергать из твоего скрипта создать экземпляр класса передав в конструктор входные параметры, вызвать метод расчета, если он нам вернул true, вызвать методы которые вернут месяцы и полную стоимость и передать в шаблон, если false то вызвать метод с ошибками и передать в шаблон. Короче сделать отдельную "коробочку" которая все считает и которую можно применить в других местах без модификации. Для начала будет тяжело и непонятно, но на работе чаще всего придется именно так и делать в ООП. Пытайся смотреть в ту сторону.
Ответы: >>1854979 >>1856248
Аноним 2020/11/13 09:48:59  №1854979 124
>>1854977
Спасибо, буду работать дальше

На счёт свитча, я изначально хотел сделать, но не понял как использовать конструкцию типа
<?php switch: ?>
<?php case 1: p>
<?php case 2: p>
<?php endswitch; ?>

Надо ли тут вставлять break и в каком формате? Типо
<?php switch: ?>
<?php case 1: p>
<?php break; ?>
<?php case 2: p>
<?php break; ?>
<?php endswitch; ?>

?
Ответы: >>1854989
Аноним 2020/11/13 09:51:23  №1854982 125
>>1854007
это еще херня,как выше сказали регулярки и еще deep OOP меня повеселило
Аноним 2020/11/13 09:59:48  №1854989 126
>>1854979
Да в твоем случае break; обязательно, у тебя будут выполнятся все остальные условия, то есть пойдет в следующий case и до тех пор пока не будет break
Аноним 2020/11/13 14:39:06  №1855266 127
Аноны, вкатываюсь веб из дезигна (делал различную графику и анимацию + монтаж. афтер/премьер,вегас) Так вот при изучении основ из учебника в закрепе, столкнулся с задачами на шифрование и понял что не получается у меня применить то что я уже изучил, сразу сходу. Не лучше ли после изучения основ начать смотреть какие-то видосы где автор учит простейшим процессам написания кода, повторять за ним, пытаться вникать в то что он пишет, разбираться в этом и таким образом набивать руку а потом уже пытаться самому что то делать/решать задачи?
Просто в дезигне именно по такой методике я обучался. Изучаешь теорию > повторяешь за автором практику применения каких-то плагинов, эффектов > потом имея уже какое-то представление начинаешь повторять популярные эффекты по гайдам с ютуба параллельно вникая как это делает > а потом уже набив руку ты можешь что-то самостоятельно свое делать.
Ну подойдет ли такая методика в изучении веба? Допустим я тупой и не могу в задачки сразу после теории. Могу ли я сначала изучить всю теорию, потом по гайдам писать код, вникая в него, а потом уже набив руку делать что-то свое и пытаться решать уже задачки?
Ответы: >>1855338 >>1855849
Аноним 2020/11/13 14:47:49  №1855273 128
>>1854922
Зачем ты выводишь пустой абзац в первом случае в шаблоне? Убери лишний р тег
Перегруппируй пыху, сделай по типу


если условие 1
работа с переменными 1;
если условие 2
работа с переменными 2;
иначе
работа с переменными 3;

вывести шаблон;


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

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

И как придирка, переменные должны быть названы так, чтобы и без поясняющих комментариев другим было всё понятно. Что за cosma? Что именно perMonth? Любой мало мальский код ревью ты не пройдёшь.
Чуть позже рекомендую почитать psr стандарты и кодить согласно им, например, у нас всё оформляется по psr-12.
Ответы: >>1855394
Аноним 2020/11/13 15:46:35  №1855338 129
>>1855266
>Допустим я тупой и не могу в задачки сразу после теории
Я сам как вкатывающийся (и мягко говоря не самый умный, на лету не схватываю, думаю долго), все же посоветую тебе просто долго и упорно пытаться их самому решить, никуда не подглядывая, кроме теории в учебнике и официального мануала. Если уж совсем невмоготу, то спроси непонятные тебе моменты в треде. Я заметил, что лучше начинаешь мыслить и ориентироваться в коде, изучая основы языка именно путем решения задач (самостоятельно или почти самостоятельно).
Аноним 2020/11/13 16:48:36  №1855394 130
>>1855273
Спасибо, попытаюсь применять в следующих программах
Laravel Аноним 2020/11/13 21:03:30  №1855565 131
Вопрос: как в Laravel-проекте грамотно создать файл index.php, чтобы сайт работал?

Сап, ПХПеч! Я изучаю фреймворк Laravel, уже часовой гайд просмотрел, в принципе тренировочный проект работает через "php artisan serve". А я хочу обыграть ситуацию, если мне надо сбросить проект с локалки на реальный сервер и чтобы сайт работал с реального сервера. Тут возник ступор с файлом index.php — его нет.

Тем не менее, в корне есть файл startup.php, который подгружает всё с собой. Я его переименовал на index.php и это частично сработало: при переходе на сайт slonik.com/ сайт грузится, но при переходе на slonik.com/reviews, slonik.com/about и т.п. вылетает ошибка 404.


Аноним 2020/11/13 21:38:10  №1855587 132
>>1855565
Але, гараж У тебя в мамке папке public лежит index.php. Папка public должна быть web root для твоего сервака.
Ответы: >>1855596 >>1855689
Аноним 2020/11/13 21:44:42  №1855595 133
>>1855565
Для того что бы открывались какие то страницы, их нужно сначала указать в роутах, идёшь в routes и указываешь в файле web.php маршруты.
Аноним 2020/11/13 21:45:16  №1855596 134
Ответы: >>1855689
Аноним 2020/11/13 22:05:57  №1855607 135
>>1854872
https://ideone.com/E54kEA
Как-то так?
>>1854943
А в чем разница писать ; после { или до? На что это влияет? Если бы ты это не сказал я бы вообще не понял. Я вообще искал ошибку в переменных, думал они где-то не так стоят.
Ответы: >>1855733 >>1856251
Аноним 2020/11/13 22:49:05  №1855641 136
>>1853989
спасибо анон, 300кк в наносекунду тебе
Аноним 2020/11/14 00:51:00  №1855689 137
>>1855587
>>1855596
У меня апач (openserver). В корень поставил файл .httaccess прописав
DirectoryIndex public/index.php
но это не помогло, по-прежнему заходит только на slonik.com/, а на остальных путях выдаёт 404

Есть варианты?
Ответы: >>1856251
Аноним 2020/11/14 02:31:14  №1855733 138
Аноним 2020/11/14 07:43:39  №1855849 139
>>1855266
Возьми другой задачник по пхп. Не можешь функцию написать как 2+2 сложить?)
Аноним 2020/11/14 07:51:34  №1855852 140
>>1854922
выучи PSR.
If () - пробел нужен
$_GET == "" - пробелы ставь.
if () { - пробел
$date++ - тут не нужен пробел

Между строками по смыслу - отступы делай
if {
} else { - сюда else вставляй
}

Комментарии не уводи так далеко.

floatval() - та можешь забыть уже эту функцию и их подобие, ставь так:
(float) $int или (string) $str - это переведёт в этот тип.

Ну и конечно сразу учись делить на функции код.
Ответы: >>1855868
Аноним 2020/11/14 08:09:35  №1855858 141
>>1854267
Сохранить каждую строку из экселя в пдф-файл? За каких 200$ сделаю, пиши, договоримся.
it.craftsman@protonmail.com
Аноним 2020/11/14 08:38:44  №1855868 142
>>1855852
Спасибо, буду изучать psr. Я так понимаю мне надо psr12 и psr1 в первую очередь
Аноним 2020/11/14 17:05:37  №1856210 143
>>1854778
>>У тебя простые модели которые замаплены на бд с помощью ORM.
ORM - это можно назвать то, как у меня мои модели "замаплены" на таблицы в базе?
Так то я никаких либ типа eloquent не юзаю.
>>Тогда у тебя слой моделей (domain model)
Где почитать подробнее про эти "слои", и как их реализовывать в приложении? Не оч понимаю, может книгу какую?
Ответы: >>1856219 >>1856257
Аноним 2020/11/14 17:20:38  №1856219 144
>>1856210
еще вопрос

У меня контроллер, в нем должно быть много разных данных подтягиваться из разных таблиц. И выводиться в шаблон.
Для каждой таблицы своя модель.
по идее нужно все это от контроллера как то абстрагировать, но я придумать как не могу пока
И вот все эти модели я подгружаю через конструктор этого контроллера
типа так
public function __construct(){
//допустим
$this->authors = new AuthorsModel()
}
Это по идее противоречит вообще инверсии зависимостей.
Но в контроллер добавлять все эти классы через конструктор new Controller(...) - как то диковато.

В слиме есть контейнер зависимостей - но не пихать же в него все модели?

Мне бы как прмиер какое то хорошее приложение на слим, или ларавел - где все эти слои и организация кода видны правильно. Что бы один раз на примере понять как нужно делать.
Ответы: >>1856257
Аноним 2020/11/14 17:25:39  №1856228 145
>>1854641

> Не должен ли я в методах модели "события" получать инфу о связанных с этой моделью "статьям" - вызывая для этого соответствующие методы модели "статьи"?

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

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

> А как реализовывать транзакции?

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

$db->transactional(function() {
$articleTable->insert(...);
$eventTable->insert(...);
});


Аноним 2020/11/14 17:33:53  №1856239 146
>>1854735

Да, хороший вариант.

>>1854922

Не очень красиво, что у тебя в трех местах делается require. Красивее, если require будет один и в самом конце скрипта.

Расчет кредита стоило бы поместить в функцию.

Для значений $resultState лучше использовать не цифры, а константы с понятными названиями вроде:

const RESULT_EMPTY_INPUT = 1;
const RESULT_NOT_ENOUGH_MONEY = 2;

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

Значения в $_GET могут отсутствовать и это вызовет предупреждения (которые у тебя почему-то не выводятся, зря ты их отключил). Надо либо проверять явно, что они есть (if (isset($_GET['x])) либо использовать ??: $a = floatval($_GET['x] ?? 0);


Аноним 2020/11/14 17:45:07  №1856248 147
>>1854924

Регулярку для разбиения предложений можно было бы упростить так:

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

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

> но я не понимаю почему, например, если вместо двух вопросов идущих подряд написать 3, то скрипт все равно корректно работает

Он разбивает группу из 3 вопросов: ??? на 2 "предложения": ?? и ?, но потом их склеивает обратно в implode() и проблема не заметна.

>>1854977

ВОобще, switch/case неудобно использовать в шаблоне и elseif удобнее.

ООП тут использовать нет особого смысла, так как непонятно что делать объектом.
Аноним 2020/11/14 17:49:59  №1856251 148
>>1855689

Корень сервера в Апаче настраивается директивой DocumentRoot в конфиге Апача (а не в htaccess).

>>1855607

Точка с запятой обозначает конец команды. То есть в случае

if ($x > 0) ; {
....
}

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

В случае с if, точку с запятой можно было бы писать после закрывающей скобки } , но это не требуется и потому никто так не пишет.
Ответы: >>1856328
Аноним 2020/11/14 17:57:07  №1856257 149
>>1856210

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

Вроде:

class User
{
private $email;
private $username;
...
}

Если ты возвращаешь массивы, то это не ORM.

>>1856219

"Модель" - это обычно объект вроде того, что написано выше. Который представляет собой одну сущность из БД (а не всю таблицу). У тебя не AuthorsModel а AuthorsRepository, или AuthorsDataGateway (смотри паттерн Table Data Gateway).

> В слиме есть контейнер зависимостей - но не пихать же в него все модели?

именно туда их и стоит класть.
Ответы: >>1856299 >>1863787
Аноним 2020/11/14 18:45:14  №1856299 150
>>1856257
Ок, спасибо за ответы.

А по слоистой архитектуре подскажешь что почитать? И лучше с живым примером.
А то я в "в общем" почитал, а по факту мне явно нужно из контроллера все эти классы по которым я из БД данные получаю куда то наверх абстрагировать, типа слой приложения что ли.
В контроллере же еще какая то логика выполняется. Я вообще зачатки это абстракции обозначил - вывел отдельный класс. Но пока не понимаю как правильно.
Ответы: >>1856947
Аноним 2020/11/14 19:34:02  №1856328 151
>>1855565
>>1856251
У меня таки получилось деплойнуть ларавель-сайт из локалки в продакшн-сервак. Скопировал .htaccess из public-директории в корень, немного подправил пару строк и заработало.
Ответы: >>1856342
Аноним 2020/11/14 20:06:48  №1856342 152
>>1856328
Пиздец я хуею с пэхепешников
Ответы: >>1856371
Аноним 2020/11/14 21:35:12  №1856371 153
>>1856342
А ты у нас из какой области? И что тебя в пиэйчпишниках не оставляет равнодушным?
Ответы: >>1856405
Аноним 2020/11/14 22:55:48  №1856405 154
>>1856371
Не забудь .env файл в deny from all добавить, если все через жопу любишь делать.
Ответы: >>1857125
Аноним 2020/11/15 02:38:08  №1856475 155
php-soft-engineer.jpg (27, 640x640)
640x640
Аноны, я вот уже очень близок к уровню знаний с которыми можно спокойно искать работу, но недавно понял, что РАБотать я совсем не хочу. Планирую начинать двигаться в сторону фриланса. Посоветуйте что учить для успешного поиска заказов на фрилансе? Тяжело ли вкатится туда пхп новичку без опыта? Хватает ли там достойных заказов или же придется всю жизнь говнякать один вордпресс?
Ответы: >>1856522 >>1856536
Аноним 2020/11/15 03:33:15  №1856487 156
>>1849078 (OP)
Правильно понимаю, что в PHP нельзя просто взять и отдать данные на запрос? В ноде например можно прослушивать порт, принимать с него запросы и отправлять ответы. В Go тоже самое. Наверное почти в каждом языке так. Как в PHP такое сделать? Мне нужно просто слушать порт и кидать туда респонсы.
Ответы: >>1856527 >>1857197
Аноним 2020/11/15 05:51:54  №1856522 157
>>1856475
Иди на удалёнку в команду на галеру на годик, чтобы дотянули до мидла.
Аноним 2020/11/15 05:57:45  №1856527 158
>>1856487
Что ты хочешь сделать? В чём задача?
Весь бэкенд это брать реквесты и отправлять респонсы, везде это есть.
Ответы: >>1856533
Аноним 2020/11/15 06:25:49  №1856533 159
>>1856527
Разве не ясно написано? Ты писал hello web на node.js, go? Создается хендлер, принимающий запрос и отправляющий ответ. Создается функция листенер, которая слушает порт и передает соединение с клиентом хендлеру. Код привести для примера? В PHP же все не так, верно? Я не могу нагуглить такой же пример на PHP. Ну вот нету их. Почему то сразу обработка форм. Мне она накой не нужна. В любом языке, на котором можно писать веб-приложения, в доке есть пример простого сервера с одним общим хендлером. Есть такое в PHP?
Ответы: >>1856540 >>1856544 >>1856940
Аноним 2020/11/15 06:37:04  №1856536 160
>>1856475
>Посоветуйте что учить для успешного поиска заказов на фрилансе? Тяжело ли вкатится туда пхп новичку без опыта? Хватает ли там достойных заказов или же придется всю жизнь говнякать один вордпресс?
Еще ни дня не говнякал, а уже планы на всю жизнь? Ну откуда вы беретесь? Сделай хоть 10 заказов, хоть на вордпрессе, денег поднимешь, почувствуешь фриланс, опыта наберешься, потом жужжи про всю жизнь.
Аноним 2020/11/15 06:48:53  №1856540 161
>>1856533
Если ты про асинхронный реалтайм, типа например ты хочешь чат сделать, то причём тут вообще язык программирования? Это не нод.js и не go тебе это делает, а протокол WebSocket. Следовательно какая разница на каком языке будет использоваться тот или иной протокол?

Вообще всё зависит от задачи.
Ответы: >>1856541 >>1856543 >>1856547
Аноним 2020/11/15 06:53:29  №1856541 162
>>1856540
>Если ты про асинхронный реалтайм, типа например ты хочешь чат сделать, то причём тут вообще язык программирования? Это не нод.js и не go тебе это делает, а протокол WebSocket.
Ну ты даешь, какие вебсокеты, обычный http.

>Вообще всё зависит от задачи.
Что в моем описании задачи не ясно написано? Похоже у тебя пхп-деформация. На других языках писал? Я могу код привести если надо. Надо?
Ответы: >>1856546 >>1856954
Аноним 2020/11/15 06:57:49  №1856543 163
>>1856540
>Если ты про асинхронный реалтайм
Что ты под этим понимаешь? Полнодуплексную связь? Так не подходит, написал же, что одна функция слушает порт, а другая обрабатывает запрос. Короче функция листенер это сервер. Другая это хендлер, обычный обработчик http запросов.
Аноним 2020/11/15 07:02:21  №1856544 164
>>1856533
>> Создается хендлер, принимающий запрос и отправляющий ответ.
В первую очередь в ноде создается объект net.Server - который и представляет собой твой вэб сервер висящий в памяти, если угодно.
В пхп не так - модель выполнения другая. Вэб сервер там отдельно - аппач, нгникс или встроенные в пхп вэб-сервер. Два отдельных запроса в пхп не связанны друг с другом никак, нет никакого глобального лексического окружения в котором видны эти оба ззапроса.
Ответы: >>1856549 >>1856549
Аноним 2020/11/15 07:07:34  №1856546 165
>>1856541
> Создается хендлер, принимающий запрос и отправляющий ответ.
Любой сайт так работает.

>Создается функция листенер, которая слушает порт и передает соединение с клиентом хендлеру.
Любой сайт так работает.

Начни лучше с базовых основ для начала, потому что ты видимо не понимаешь как работает интернет) Поизучай HTTP, TCP, как реализованы сервера, сети.
Создаёшь сервер, ложишь туда пхп-файл - всё, можешь принимать реквесты, отправлять респонсы.
Ответы: >>1856551 >>1856551
Аноним 2020/11/15 07:09:25  №1856547 166
>>1856540
Нагуглил как черес сокеты сделать. Полстраницы кода. Еще и цикл нужен. Слишком много кода, это же PHP, язык для веба, не Си ведь чтобы строку в браузер по сокетам отдавать.

В PHP доке легаси пример со встраиванием <?php echo '<p>Привет, мир!</p>'; ?> в тело html документа. Еще нужно .php файл в директорию веб-сервера закинуть. Еще чтобы он отдавал адрес не http://localhost/hello.php, а http://localhost/ нужно в настройки сервера лезть. Такое не делать в 2020 году это еще хуже чем через сокеты, веб-разработка уровня 90-х.

Есть способы сделать более лаконично?
Ответы: >>1856548 >>1856552 >>1856954
Аноним 2020/11/15 07:15:12  №1856548 167
>>1856547
>Нагуглил как черес сокеты сделать. Полстраницы кода. Еще и цикл нужен. Слишком много кода, это же PHP, язык для веба, не Си ведь чтобы строку в браузер по сокетам отдавать.
Ничего не понял.

> Еще чтобы он отдавал адрес не http://localhost/hello.php, а http://localhost/ нужно в настройки сервера лезть.
Почитай что такое ЧПУ, ООП.
А лучше и не лезь в дебри, научись для начала просто запускать скрипт, складывать 2+2, выучи как привести к числу строку например. В ПХП всё лаконично, идеально, красиво, но до этого дорасти надо.
Ответы: >>1856553 >>1856556 >>1856559
Аноним 2020/11/15 07:16:10  №1856549 168
>>1856544
>В первую очередь в ноде создается объект net.Server - который и представляет собой твой вэб сервер висящий в памяти, если угодно.
Ну да, он же листенер.

>>1856544
>В пхп не так - модель выполнения другая. Вэб сервер там отдельно - аппач, нгникс или встроенные в пхп вэб-сервер. Два отдельных запроса в пхп не связанны друг с другом никак, нет никакого глобального лексического окружения в котором видны эти оба ззапроса.
А как же HTTP 1.1? В нем есть постоянные соединения. А, понял, запрос принял-отдал и умер? Но, есть же всякие fpm, они же позволяют держать соединение?
Ответы: >>1856564 >>1856962
Аноним 2020/11/15 07:22:36  №1856551 169
>>1856546
>Любой сайт так работает.
Нет, в PHP так не работает. В PHP веб-сервер выполняет файл по запросу, а не отдельный хендлер, и отдает его выполненным браузеру, примерно так.

>>1856546
>Любой сайт так работает.
Ну и как в PHP создать функцию сервера чтобы слушала рандомный порт? И чтобы не файл отдавал сервер в браузер, а выполнял определенный хендлер?

>Начни лучше с базовых основ для начала, потому что ты видимо не понимаешь как работает интернет) Поизучай HTTP, TCP, как реализованы сервера, сети.
Лол, я то понимаю как работает интернет, а у тебя видимо php-деформация. Вы же привыкли, что для того чтобы строчку в браузер отдать, нужно внедрить php код в html страницу, в других языках такого нет.

>Создаёшь сервер, ложишь туда пхп-файл - всё, можешь принимать реквесты, отправлять респонсы.
Ну да, то что я выше описал. Но не все сайты так работают, повторюсь, что в других языках по другому .Хорошо что PHP не был моим первым языком программирования. Я не хейтю его, просто эти особенности, они накладывают деформацию, а потом выясняется, что это только в php так.
Ответы: >>1856564 >>1856962
Аноним 2020/11/15 07:24:05  №1856552 170
>>1856547
>Такое НЕ делать в 2020 году это еще хуже чем через сокеты
Не лишняя, опечатка.
Аноним 2020/11/15 07:24:50  №1856553 171
>>1856548
>Ничего не понял.

<?php
// AF_INET6 for IPv6 // IP
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die('Failed to create socket!');
// '127.0.0.1' to limit only to localhost // Port
socket_bind($socket, 0, 8080);
socket_listen($socket);

$msg = '<html><head><title>Goodbye, world!</title></head><body>Goodbye, world!</body></html>';

for (;;) {
// @ is used to stop PHP from spamming with error messages if there is no connection
if ($client = @socket_accept($socket)) {
socket_write($client, "HTTP/1.1 200 OK\r\n" .
"Content-length: " . strlen($msg) . "\r\n" .
"Content-Type: text/html; charset=UTF-8\r\n\r\n" .
$msg);
}
else usleep(100000); // limits CPU usage by sleeping after doing every request
}
?>
Аноним 2020/11/15 07:26:50  №1856556 172
>>1856548
>Почитай что такое ЧПУ, ООП.
Лол, ЧПУ это чисто пхпэшная тема. ООП тут вообще не при делах.
Аноним 2020/11/15 07:31:14  №1856559 173
>>1856548
>В ПХП всё лаконично, идеально, красиво, но до этого дорасти надо.
Лол, очень лаконично (лаконично - кратко), чтобы строку в браузер отдать нужно смешать php код c html кодом. А чтобы отдать на <хост>:<порт>, а не <хост>:<порт>/index.php нужно веб-сервер настраивать.
Ответы: >>1856568
Аноним 2020/11/15 07:41:06  №1856564 174
>>1856549
>>А как же HTTP 1.1? В нем есть постоянные соединения. А, понял, запрос принял-отдал и умер?
Именно так. Постоянные соединения, типо сокетов - не для пхп. Есть фреймворки, но там это реализуется через боль.

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

>>потом выясняется, что это только в php так.
Ну фактически это вроде как единственный язык с такой моделью выполнения. У этого есть и плюсы и минусы, и море споров вокруг. Я лично недостаточно компетентный что бы тут какое то мнение иметь. Имеем то что имеем.

А так язык вполне полноценный, годное ООП, интерпретатор очень быстрый. Сейчас с 8 версией, с jit компиляцией - прям пиздец какой быстрый. Читал что каких то числодробильных тестах он с определенными условиями дает скорость чуть ли не как у с++. условный питон по скорости где то далеко в сраке.
Преимущество пхп - это его на самом деле оч зрелое и компетентное комьюнити.

Ответы: >>1856592
Аноним 2020/11/15 07:44:34  №1856568 175
>>1856559
Это не так. Все что требуется от сервера - настроить его на единую точку входа - и сервер все запросы кидает на условный index.php. А там уже все как у людей, создаем объект приложения, роутинг, модели, контроллеры, представления и т.д.

В любом случае даже если на ноде пишешь - придется пердолиться с вэб-серверами -
обратный прокси, статику отдавать, еще всякое.
Ответы: >>1856595 >>1856595
Аноним 2020/11/15 07:45:24  №1856569 176
Есть какой-то устоявшийся способ отрендерить реакт в хтмл на сервере (разумеется, только с использованием пыхпыхи)?
Ответы: >>1856589 >>1856689
Аноним 2020/11/15 08:35:31  №1856589 177
>>1856569
Нет. Там же нужно исполнять JS.
Ответы: >>1856591
Аноним 2020/11/15 08:37:28  №1856591 178
>>1856589
>Там же нужно исполнять JS.
Ну так 2020 год на дворе. Давно бы уже затащили V8 в пыху в виде расширения.
Ответы: >>1856593 >>1856596
Аноним 2020/11/15 08:38:30  №1856592 179
>>1856564
>Именно так. Постоянные соединения, типо сокетов - не для пхп. Есть фреймворки, но там это реализуется через боль.
Ты смешиваешь все в кучу. Сокеты с циклом можно, пример кода я привел. Постоянное соединение реализовано в HTTP 1.1, по идее должна быть реализация в PHP, позволяющая это использовать без написания сокет-соединения вручную. Ведь с базами данных есть постоянные соединения? Почему не сделали за 20 лет тоже самое для HTTP?

>Сам скрипт пхп ничего не слушает. Слушает вэб-сервере на котором пхп исполняется. Короче если совсем грубо - пхп это надстройка над апачем или нгниксом, такая уж модель сложилась.
Почему же. Сервер необязателен. Можно же через сокеты, просто файл запускаешь php index.php и он уже слушает бесконечно и обрабатывает запросы Можно через встроенный сервер, встроенный сервер это обычный PHP скрипт. Но это не то, не идиоматично для современной веб-разработки.

>Ну фактически это вроде как единственный язык с такой моделью выполнения. У этого есть и плюсы и минусы, и море споров вокруг. Я лично недостаточно компетентный что бы тут какое то мнение иметь. Имеем то что имеем.
>А так язык вполне полноценный, годное ООП, интерпретатор очень быстрый. Сейчас с 8 версией, с jit компиляцией - прям пиздец какой быстрый. Читал что каких то числодробильных тестах он с определенными условиями дает скорость чуть ли не как у с++. условный питон по скорости где то далеко в сраке.
>Преимущество пхп - это его на самом деле оч зрелое и компетентное комьюнити.
С этим не спорю. Вот и хочу попробовать как он по скорости. Может мне для поделок и сервер не понадобится на начальном этапе. Да и вообще так лучше пойму что как работает.
Ответы: >>1856968
Аноним 2020/11/15 08:38:52  №1856593 180
Ответы: >>1856599
Аноним 2020/11/15 08:40:42  №1856595 181
>>1856568
>Все что требуется от сервера - настроить его на единую точку входа - и сервер все запросы кидает на условный index.php. А там уже все как у людей, создаем объект приложения, роутинг, модели, контроллеры, представления и т.д.
Ну я и говорю, во первых сервер нужен, во вторых настраивать его. Я в этом не силен и пока не охота ввязываться. Собственно как запускать без сервера я уже придумал. Либо через сокеты либо через встроенный сервер.

>>1856568
>В любом случае даже если на ноде пишешь - придется пердолиться с вэб-серверами -
>обратный прокси, статику отдавать, еще всякое.
В продакшене только. Нода и так справляется.
Ответы: >>1856968
Аноним 2020/11/15 08:41:58  №1856596 182
>>1856591
>Ну так 2020 год на дворе.
Во, я тоже тут пытаюсь понять как php по современному использовать.
Аноним 2020/11/15 08:46:02  №1856599 183
Ответы: >>1856604
Аноним 2020/11/15 08:54:54  №1856604 184
>>1856599
Не факт. На всяких shared хостингах V8JS вряд ли есть, т. е. решение не универсальное.
Ответы: >>1856618 >>1856621 >>1856623
Аноним 2020/11/15 09:17:15  №1856618 185
>>1856604
Шаред хостинги еще кто-то использует? Школьники которые потратили карманные на донат кумиру?
Аноним 2020/11/15 09:18:50  №1856621 186
>>1856604
Ой, для него, похоже, ещё самому надо V8 на сервере компилять. Нафиг такое счастье.

Вопрос остаётся открытым: как с помощью пыхи отдать клиенту отрендеренный в хтмл реакт?
Ответы: >>1856624 >>1856627 >>1856968
Аноним 2020/11/15 09:23:54  №1856623 187
>>1856604
>На всяких shared хостингах V8JS вряд ли есть
Сейчас shared хостинги дороже обходятся виртуальных серверов. Что означает 4X Распределённых ресурсов? Нормальный виртуальный хостинг от 400 руб./месяц, там эти самые 4X Распределённых ресурсов, а ближе к средненькому VPS можно взять от 200 руб./месяц.
Аноним 2020/11/15 09:25:35  №1856624 188
>>1856621
>СЛОЖНА!
Линуксом пользовался? Я пока не дочитал до установки, но думаю там не сложнее чем я у себя на домашнем линуксе пакеты ставлю.
Ответы: >>1856632
Аноним 2020/11/15 09:30:03  №1856627 189
>>1856621
>Вопрос остаётся открытым: как с помощью пыхи отдать клиенту отрендеренный в хтмл реакт?
Ну подумой, как можно выполнить реакт без ноды? У тебя сервер или что? Можешь прикрутить саму ноду без расширения для php, но это сложнее будет.
Ответы: >>1856628
Аноним 2020/11/15 09:32:11  №1856628 190
>>1856627
там нодой и не пахнет
Ответы: >>1856629
Аноним 2020/11/15 09:33:39  №1856629 191
>>1856628
>там нодой и не пахнет
Чем же там пахнет? Ему нужен SSR.
Аноним 2020/11/15 09:36:20  №1856632 192
>>1856624
>Линуксом пользовался?
Клиентам от меня нужен код приложения, и ебаццо с V8JS буду не я, а сам клиент или какой-нибудь админ. А ебаццо с неведомой хуйнёй, которая ещё не факт, что заработает, не захочет никто (деплой нихуя не отлажен). Поэтому полагаться на V8JS нельзя.

P.S. Естественно, ни для чего нового пыха не используется. Однако в легаси-говно (вроде вордпресса или битрикса) могло бы быть полезно затащить SSR. Но пыха такая пыха...
Ответы: >>1856638 >>1856640 >>1856979
Аноним 2020/11/15 09:38:34  №1856634 193
Это какой же пиздец.писать бэк на основе Ноды
Ответы: >>1856639
Аноним 2020/11/15 09:43:21  №1856638 194
>>1856632
>Клиентам от меня нужен код приложения, и ебаццо с V8JS буду не я, а сам клиент или какой-нибудь админ. А ебаццо с неведомой хуйнёй, которая ещё не факт, что заработает, не захочет никто (деплой нихуя не отлажен).
На раз-два решается докером. Вот https://habr.com/ru/post/513682/
Ответы: >>1856665
Аноним 2020/11/15 09:43:49  №1856639 195
>>1856634
>Это какой же пиздец.писать бэк на основе Ноды
В чем пиздец?
Ответы: >>1856643
Аноним 2020/11/15 09:45:17  №1856640 196
>>1856632
>P.S. Естественно, ни для чего нового пыха не используется. Однако в легаси-говно (вроде вордпресса или битрикса) могло бы быть полезно затащить SSR. Но пыха такая пыха...
Кто сказал? Еще как используют. Разница какая, ну надо было бы к Go прикрутить V8, пришлось бы делать аналогичные телодвижения.
Аноним 2020/11/15 09:47:44  №1856643 197
>>1856639
Экспресс используешь,монгу?
Ответы: >>1856650 >>1856655
Аноним 2020/11/15 09:54:09  №1856650 198
>>1856643
>Экспресс используешь,монгу?
Вопросом на вопрос отвечаешь? Можешь использую, может не использую. Какая разница, ответь в чем пиздец?
Ответы: >>1856659 >>1856979
Аноним 2020/11/15 09:58:12  №1856655 199
Ответы: >>1856658 >>1856661
Аноним 2020/11/15 09:58:53  №1856658 200
Ответы: >>1856668
Аноним 2020/11/15 09:59:00  №1856659 201
>>1856650
Нет возможности не говнокодить, в пхп хотя бы есть возможность.
Ответы: >>1856668
Аноним 2020/11/15 10:01:36  №1856661 202
>>1856655
ебаный велосипед собирать из +100500 библиотек,нет единой канвы,как у пхп фреймворков
Ответы: >>1856672 >>1856674
Аноним 2020/11/15 10:03:06  №1856665 203
>>1856638
>На раз-два решается докером. Вот https://habr.com/ru/post/513682/
И получается тормозное говно.
>Единственное что стоит здесь добавить — рендер может занимать достаточно долгое время

И, в любом случае, рядом с рабочими вордпрессами и битриксами никто не будет ставить неведомую хуйню вроде V8JS только ради SSR.
Ответы: >>1856675
Аноним 2020/11/15 10:05:02  №1856668 204
>>1856658
>жс на бэке
>>1856659
>Нет возможности не говнокодить
Конкретные примеры будут? Пока что слышу только пердеж
Ответы: >>1856669
Аноним 2020/11/15 10:06:27  №1856669 205
>>1856668
Конкретные примеры - это твой код на ноде.
Ответы: >>1856676
Аноним 2020/11/15 10:08:19  №1856672 206
>>1856661
>ебаный велосипед собирать из +100500 библиотек
А у похапэ все 100500 либ из коробки?

>нет единой канвы,как у пхп фреймворков
Какой еще нахер канвы?
Ответы: >>1856673 >>1856678 >>1856679
Аноним 2020/11/15 10:10:23  №1856673 207
>>1856672
В смысле канавы куда все php прогеры попадают после увольнения.
Аноним 2020/11/15 10:10:57  №1856674 208
>>1856661
>нет единой канвы,как у пхп фреймворков
Ну, для таких предъяв нужно хотя бы немного знать экосистему ноды. А в этой экосистеме уже давно есть NextJS и NestJS, которые позволяют писать горизонтально масштабируемые легко поддерживаемые веб приложения любой сложности.
С другой стороны, пыха - это легаси-говно для написания немасштабируемых легаси-говномонолитов, которые при достижении определённых объёмов становится невозможно поддерживать.
Ответы: >>1856682 >>1856989
Аноним 2020/11/15 10:11:21  №1856675 209
>>1856665
>И получается тормозное говно.
Измерял, пруфы есть? Конечно же ты выяснил, что это именно из-за докера? В 2020 от докера минимальный оверхед. Скорее php расширения написаные дегродами будут тормозить.

>И, в любом случае, рядом с рабочими вордпрессами и битриксами никто не будет ставить неведомую хуйню вроде V8JS только ради SSR.
Так зачем ты вола ебешь с ssr? Или ты думал можно с помощью пары кликов к легаси гавну вордпресс и битрикс все что хочешь прикрутить?
Ответы: >>1856684
Аноним 2020/11/15 10:12:19  №1856676 210
>>1856669
>Конкретные примеры - это твой код на ноде.
Все ясно, школьник слился. Без примеров не приходи.
Аноним 2020/11/15 10:13:27  №1856678 211
>>1856672
>А у похапэ все 100500 либ из коробки?
Забей. Это безмозглый школьник, который даже не слышал про composer/pear.
Ответы: >>1856681
Аноним 2020/11/15 10:14:07  №1856679 212
>>1856672
Нет,не все.На пыхе ты сразу начинаешь писать бэк
Когда единый дизайн со всем необходимым.
Эко ноды-низко урваневое говно.
А большой жс проэкт прям мечта перфикциониста?
Через пару лет превратиться в нечитаемое говно
Ответы: >>1856685 >>1856686
Аноним 2020/11/15 10:15:29  №1856681 213
>>1856678
Мне его поведение, напоминает кота, который не может просраться. И так мычит и эдак, а сказать ничего толком не может.
Аноним 2020/11/15 10:15:30  №1856682 214
>>1856674
Но реальность такова что в пхп и ноде одни и те же лица. И в пхп и ноде код не поддерживают десятилетиями а переписывают, благо эти лица на рынке труда ценой пучок за пяток.
Ответы: >>1856688
Аноним 2020/11/15 10:19:37  №1856684 215
>>1856675
>Измерял, пруфы есть?
Я ж тебе цитату автора той заметки про V8JS с хабра дал, на которую ты сослался.
Ответы: >>1856687
Аноним 2020/11/15 10:20:42  №1856685 216
>>1856679
На пыхе кот тоже обычно сразу нечитаемое говно, причем со всеми сервисами, билдерами, фабриками, которые обычно используются не к месту, чистый карго культ.
Аноним 2020/11/15 10:21:26  №1856686 217
>>1856679
Когда нужно сделать то, что php не умеет из коробки, начинается забивание гвоздей лопатой. У ноды экосистема очень развитая, если надо что-то нестандартное для всего есть уже либы, а в php если и есть что-то, то часто легаси. У тебя максималистское мышление. Всегда в крайностях. Пойми, что одним языком не решишь все задачи.
Аноним 2020/11/15 10:23:05  №1856687 218
>>1856684
>Я ж тебе цитату автора той заметки про V8JS с хабра дал, на которую ты сослался.
Я должен щас на слово ему верить? Мало ли что там он пишет. Может у него руки из жопы и он не смог по человечески все сделать, а может просто не делал толком ничего и не мерял, а просто воздух сотрясает.
Аноним 2020/11/15 10:24:35  №1856688 219
Ответы: >>1856690
Аноним 2020/11/15 10:26:31  №1856689 220
Аноним 2020/11/15 10:29:25  №1856690 221
Аноним 2020/11/15 12:56:08  №1856793 222
Какой-то студент-двачер, который аж хелоуворлд написал на ноде - ворвался в тред и пытается видимо что-то высрать/доказать, да несёт полную чушь.

Иди срать в тред со своей нодой, зачем тебе PHP? Что, на ноде деньги не платят, ибо нахер никому она не всралась а PHP решает все веб-задачи, поэтому приходится таки PHP учить?)
Ответы: >>1856999
Аноним 2020/11/15 16:24:37  №1856940 223
>>1856533

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

Если тебе нужно принимать запросы по протоколу HTTP - то тебе не нужно руками открывать порт, в PHP уже встроен веб-сервер с роутингом. Просто кладешь файл index.php, запускаешь веб-сервер и index.php будет запускаться при поступлении запроса GET /. В нем ты отдаешь любой ответ, какой хочется.

Заметь, что в отличие от Ноды, не нужно возиться и устанавливать сторонние библиотеки, все встроено. В отличие от Ноды, не нужно перезапускать сервер, если ты поменял что-то в коде index.php.

Если тебе не нужен HTTP, или просто хочется усложнить себе жизнь, то в PHP есть поддержка сокетов Беркли. Открывай любой порт и принимай на него любые запросы. https://www.php.net/manual/en/function.socket-listen.php

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

И ноду не приводи в пример. Более ужасный язык, чем JS, трудно себе представить. Ничего, кроме нечитаемой лапши, на нем не пишут (по моему опыту взаимодействия с фронтенд-специалистами).
Аноним 2020/11/15 16:33:48  №1856947 224
>>1856299

Не знаю, того, кто рекомендовал слои, наверно и надо спрашивать.

Обычно код на слои разбивают так, что каждый слой взаимодействует только с низлежащим. Рисунок есть, например, тут: https://martinfowler.com/eaaCatalog/serviceLayer.html

При этом каждый слой отвечает за что-то свое. Например, data source layer на картинке отвечает только за получение/сохранение данных из БД, domain model - за бизнес-логику, service layer - делает сложные операции, требующие совместной работы нескольких низлежащих классов.

Такая схема подразумевает использование ORM вроде Доктрины, без него отделить domain model от data source layer сложно.

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

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

Вообще непонятно, о чем речь и что ты называешь "слоем приложения".
Аноним 2020/11/15 16:44:11  №1856954 225
>>1856541

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

>>1856547

Ты опять свою неграмотность выдаешь за недостатки PHP. Плохо гуглишь. Элементарно настройками веб-сервера можно перенаправить все запросы на один скрипт и в нем вручную маршрутизировать URL как угодно. В случае встроенного в PHP веб-сервера, например, скрипт маршрутизации просто указывается в командной строке: https://www.php.net/manual/ru/features.commandline.webserver.php

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

В ноде или Го без сторонних библиотек еще больше кода будет. В отличие от них, в PHP уже есть встроенный HTTP-сервер. А со сторонними библиотеками ты можешь поставить фреймворк вроде Slim и будет точно так же как и в ноде - с маршрутизацией и функциями-хендлерами.
Ответы: >>1857036 >>1857111 >>1857402
Аноним 2020/11/15 16:46:18  №1856956 226
а как к кнопке привязать к-л действие на сервере?
Ответы: >>1856993
Аноним 2020/11/15 16:50:04  №1856962 227
>>1856549

> Но, есть же всякие fpm, они же позволяют держать соединение?

Неграмотность так и прет из тебя. PHP-FPM не поддерживает keepalive, так как работает по протоколу FastCGI, а не HTTP.

Keepalive реализует балансер вроде nginx, а на бекенд он прокидывает запросы по протоколу FastCGI. Опять, проблема в твоем незнании, ты не разбираешься как что устроено, но торопишься обвинить во всем PHP. На котором писать гораздо комфортнее чем на какой-нибудь Ноде, которая игнорирует кучу ошибок (вроде опечаток в имени свойства), у которой течет память, и в которой нет тайп-хинтов.

>>1856551

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

> И чтобы не файл отдавал сервер в браузер, а выполнял определенный хендлер?

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

Аноним 2020/11/15 16:56:58  №1856968 228
>>1856592

> Почему не сделали за 20 лет тоже самое для HTTP?

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

>>1856595

> Нода и так справляется.
В PHP встроенный веб-сервер тоже справляется. А писать на PHP удобнее, чем на JS с его кучей недостатков и отсутствием тайп-хинтов.

>>1856621

Никак. Алсо, говорят, реакт уже устарел, все используют Vue.
Аноним 2020/11/15 17:04:15  №1856979 229
>>1856632

Ну и идиотизм. Зачем вордпрессу реакт и SSR, если он свои страницы и так генерирует на сервере. Ты бы почитал, как SSR расшифровывается. Вордпресс прекрасно работает без всяких реактов, а ты пытаешься на ровном месте усложнить архитектуру без всякой выгоды. Чтобы вместо 20 Кб HTML, которые сразу отображаются на экране, тебе сервер отдавал заглушку, потом мегабайт-два тормозного реакта, а потом тот медленно делал кучу аякс-запросов для получения данных.

Ты ничего ни в архитектуре, ни в работе веб-приложений не понимаешь.

Выкинь свой реакт и переходи на серверный рендеринг и твой сайт будет грузиться в 10 раз быстрее.

>>1856650

В JS куча убогости, например, опечатка в имени поля объекта не выдает ошибки и остается незамеченной. Нету тайп-хинтов. Классы удогие.

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

Ответы: >>1857391
Аноним 2020/11/15 17:14:06  №1856989 230
>>1856674

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

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

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

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

У тебя полный набор стереотипов и заблуждений в веб-разработке. Ты не понимаешь плюсов монолитных приложений в сравнении микросервисами, это автоматически обесценивает все твои рассуждения. Не видишь недостатков JS, которые просто бросаются в глаза. Скорее всего, ты просто пересказываешь чужое неграмотное мнение. Где-то прочел, что монолит и PHP это плохо, но сам не понимаешь ничего в архитектуре.
Аноним 2020/11/15 17:17:19  №1856993 231
Аноним 2020/11/15 17:19:59  №1856999 232
>>1856793

Причем он наверняка никогда не работал в команде и не видел чужого кода. Свой-то код всегда кажется понятным, даже если он написал как попало. Отправить бы его на проект на его любимой ноде хотя бы на 100 000 строк, и чтобы все было на асинхронном коде и промизах, и пусть он там попробует разобраться в получившейся нечитаемой лапше без тайп-хинтов.
Аноним 2020/11/15 17:49:55  №1857036 233
>>1856954
> В отличие от них, в PHP уже есть встроенный HTTP-сервер.
За Го ничего не скажу, но в ноде есть нативный объект net.httpServer - он и является вэб-сервером.

А вообще ты типа апологет пхп, но делаешь это как то странно, лучше вообще ничего не писать.
Любому ясно что у всякой технологии есть +/-, и евангелистские споры удел людей которым заняться нечем.
Единственно что факт - пхп точно не умрет, но вот ниша его... Я бы хотел что бы пхп перешел все таки из лиги языка для цмс. Хотя может этот выход его и погубит, а может как то на двух стульях усидит. Хз, время покажет, но пока что пхп точно не собирается помирать. Как впрочем и нода.
Мне обе эти платформы нравятся, они в некотором роде противоречат друг-другу, и поэтому интересно изучать обе.

Ответы: >>1857408
Аноним 2020/11/15 19:30:47  №1857111 234
webhuerver.PNG (46, 2091x346)
346x2091
webhuerver2.PNG (24, 1908x189)
189x1908
>>1856954
>В отличие от них, в PHP уже есть встроенный HTTP-сервер
Бля, долбаеб. Если ты никогда не пхп не писал, так сиди и молчи. Нахуй ты рандомную хуйню пишешь? Какой-то веб сервер, какие-то настройки. Про что несет? Вообще охуеть.
Аноним 2020/11/15 19:47:39  №1857125 235
>>1856405
.env уже закрыт от сторонних глаз и без .htacess (проверил), такшто тут фсьо харашо.

>если все через жопу любишь делать
А если не через жопу делать, то как это выглядит?

Кстати, на офф сайте laravel есть статья о деплойменте своего проекта в продакшн сервер, но советы в статье - говно, ибо там пишут какую-то далёкую от реальности бесполезную ахинею
Аноним 2020/11/15 19:58:31  №1857130 236
Привет анончики, хочу начать изучать PHP для фриланса, с чего начать уже понял. Вопрос такой: долго ли вкатываться и есть ли возможность после вката зарабатывать 30к на фрилансе?
Ответы: >>1857410 >>1857457 >>1857534
Аноним 2020/11/15 21:24:10  №1857197 237
>>1856487
слушать порт на пхп(без веб-сервера - сам пхп выступает как сервер)
https://reactphp.org/
есть мнение что для таких задач лучше использовать golang/node.js/...
Аноним 2020/11/16 03:34:41  №1857391 238
>>1856979
>сколько я не видел JS кода, написанного фронтендщиками - весь был убогая нечитаемая лапша с кучей сайд-эффектов
Это говорит об изъянах JS? Ну OK, пусть это будет считаться аргументом. На PHP написано около 80% всех существующих сайтов, верно? PHP родился калекой, был очень простым в использовании, поэтому стал очень популярным среди необразованных кодеров, школьников, и им подобных, верно? Кто выходит написал большую часть этих 80% всея интернета? Эти самые необразованные кодеры, школьники, и им подобные. Их код не убогая лапша с кучей сайд-эффектов? Так что там получается, PHP еще хуже JS, так?

>Нету тайп-хинтов
TypeScript, Flow, etc.

>Классы удогие
Уточни.

>опечатка в имени поля объекта не выдает ошибки
Линтер?
Ответы: >>1857397 >>1857535
Аноним 2020/11/16 03:49:03  №1857394 239
>>1856989
>Монолит это, наоборот, хорошо. В нем проще взаимодействие между модулями, не нужно городить API, не нужно городить оркестрацию и тащить докер, нет проблем с версионированием и совместимостью, проще отлаживать код. Монолит во всем лучше и удобнее микросервисов и работает без докера.
>
>На микросервисы переходят не потому что они чем-то лучше, а от безвыходности, когда очень много кода и людей.
>
>Микросервисы имеют смысл только в огромных командах и огромных приложениях, а когда средняя фирмочка из 10 человек пытается изображать из себя Гугл и пилит микросервисы по полтора человека на сервис, это выглядит как посмешище. Если они не осилили правильно разбить на модули и организовать монолит, у них и микросервисы выйдут такие же кривые и убогие, как и их монолит.
Столько одностороннего бреда, что даже не хочется отвечать. Но попробую привести один пример. Фирмочка из 10 человек не может иметь кодовую базу в районе миллиона или более строк? Еще как может. Команды стартаперов из 2-5 человек создают рабочие комерчески успешные проекты, к примеру на Рельсах. Имея так мало рук, ограниченный бюджет и время, они конечно же используют по максимуму богатую экосистему Руби. Собирают большие системы из множества библиотек. Для них простота монолита уже не важна, встают вопросы поддержки кодовой базы и высокой производительности. Так как рук, денег и времени мало, они режут монолит на сервисы, используют контейнеры и оркестрацию, и по максимуму все автоматизируют. Да, приложение может в таком случае выглядеть переусложненным, но зато оно работает и способно поддерживаться и развиваться небольшой командой, принося при этом реальные деньги.

Для многих php-разработчиков такое конечно сложно понять, у них другие понятия в голове, и они решают немного другие задачи. Поэтому если ты из таких, подумай головой и осознай, что не бывает четко хорошо или плохо, бывают рабочие, приемлемые решения. У тебя все как то бинарно. Наверное потому, что ты не управлял командой, и не вел проектов самостоятельно неся на себе риски. Пока ты ходишь и ищешь кто не правильно в интернете пишет веб-приложения, другие создают успешные проекты.
Ответы: >>1857397
Аноним 2020/11/16 03:49:57  №1857396 240
>>1856989
>там нет тайп-хинтов
В сотый раз это напиши.
Аноним 2020/11/16 03:50:35  №1857397 241
>>1856989
>
>У тебя полный набор стереотипов и заблуждений в веб-разработке.
Не, скорее у тебя, вот они >>1857391 >>1857394
Аноним 2020/11/16 03:52:17  №1857399 242
>>1856989
>Ты не понимаешь плюсов монолитных приложений в сравнении микросервисами
Ты не понимаешь плюсов сервисов.

>автоматически обесценивает все твои рассуждения
То есть твои

>Не видишь недостатков JS
Я то вижу, а ты не видишь недостатков PHP.
Аноним 2020/11/16 04:00:24  №1857402 243
>>1856954
>В отличие от них, в PHP уже есть встроенный HTTP-сервер.
Чиво-чиво??? Лол, PHP язык-бомж, не умеющий работать с HTTP изначально, его научили спустя 20 лет засунув этот самый встроенный сервер. В то время как во многих языках из коробки можно использовать HTTP и многие другие протоколы безо всяких встроенных либо внешних веб-серверов. PHP это легаси, все время его существования из него пытаются сделать что-то нормальное, так как родился он калекой. В JS/Node/Deno - на данный момент одна из самых совершенных экосистем, наравне с .NET Core, Ruby (была самой совершенной долгое время, сейчас теряет позиции так как медленно развивается), Python. Да, JS родился недоношенным, но в него заложили неплохой фундамент и возможность дальнейшего развития. Сейчас почти любую проблему, которую ты озвучишь можно решить с помощью встроенных или сторонних инструментов. Один только Babel какие дает возможности, где еще такое есть?
Ответы: >>1857532
Аноним 2020/11/16 04:08:46  №1857408 244
>>1857036
>Любому ясно что у всякой технологии есть +/-
Этого он похоже не понимает. Бинарное мышление.
Аноним 2020/11/16 04:12:59  №1857410 245
>>1857130
>Долго ли вкатываться?
От тебя зависит. Смотря какой бэкграунд, какие способности к обучению, какие возможности обучаться, то есть сколько времени на это тратить, насколько упорно заниматься.

>Есть ли возможность после вката зарабатывать 30к на фрилансе?
На фрилансе можно столько зарабатывать из без PHP, например версткой.
Аноним 2020/11/16 04:48:32  №1857430 246
Почему двач пометил все мои сообщения как не мои? Уже который раз. Теперь если мне ответят я не увижу.
Аноним 2020/11/16 06:03:53  №1857457 247
>>1857130
Я уже 3 года вкатываюсь блядь. С ноля научился фактически.
Сейчас на нодеголая нода или экспресс, на пхпслим/ларавел могуч чет написать, на ларе что то типа магаза. JS в браузере естественно могу. В SQL умею.
Работаю в гос-шараге - пишу для БД скрипты в основном. ЗП - унылая.
Пока учился, да и сейчас 70% времени трачу на хуиту. Не умею искать заказы - так как овощ по жизни.

Так что поверь - уровень твоих практических навыков на пхп - будут в контексте заработка далеко не первой проблеймой.
Я за три года так и не заставил себя дисциплинированно работать.
Ответы: >>1857531
Аноним 2020/11/16 09:28:06  №1857531 248
>>1857457
>Работаю в гос-шараге - пишу для БД скрипты в основном. ЗП - унылая.
Зачем тебе на пыню работать, если нужно на Запад? Уволься и начни изучать PHP-фреймворк+базовые основы фронтенда под его, а так-же learn english.
Ответы: >>1857545
Аноним 2020/11/16 09:29:55  №1857532 249
>>1857402
Если ты такой умный и якобы что-то утверждаешь по ПХП, то сначала покажи-ка нам свой гит. Не надо балаболить, ты пришёл учиться пхп - сиди и учись у старших, что ты споришь с профессионалами?
Аноним 2020/11/16 09:36:40  №1857534 250
>>1857130
>долго ли вкатываться
От тебя зависит. В среднем думаю 1-3 года, как и в любой работе.
>есть ли возможность после вката зарабатывать 30к на фрилансе?
Как работал - так и заработал. Будешь ~160 часов в месяц работать - будешь зарабатывать 30к.
Аноним 2020/11/16 09:38:05  №1857535 251
О, у нас тут js ребенок порвался, лол.

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

Сколько они дрочили сраные коллбеки? 8 лет? Только недавно до долбоебов дошло, что это брат близнец ибаного goto.

>>1857391
>Это говорит об изъянах JS?
Об изъянах js просто ОРЕТ тот факт, что на динамический мать его язык из года в год накручивают компилируемые в него, лол.

TypeScript - луч света в темном царстве говна, но даже ему не под силу до конца отбить вкус нативки.

>максимуму богатую экосистему Руби
>создают рабочие комерчески успешные проекты
>принося при этом реальные деньги.
Блядь, что это я читаю? Стиль написания как у стартапера, который пытается втюхать лоху Руби, что ли? Втюхать собранный из говна и палок проект и съебаться раньше, чем он попросит его доработать?
Ответы: >>1857552
Аноним 2020/11/16 09:54:26  №1857545 252
>>1857531
хуелерн ингриш, ага. Еботеку я с чего буду платить? Я однажды уже ушел "вникуда", до сих пор хвосты разгребаю. А на той прошлой работе меж тем, пусть она условно it была, а к прогингу так вообще отношение никакого, ЗП стабильна, и стабильно растет. Просто я на той работе сдеградировал нахуй, до сих пор последствия имею. Впрочем если бы там остался - то вообще нихуя бы не добился и не изучил. Так что не зря ушел, в любом случае.

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

>>изучать PHP-фреймворк
Я же пишу, я на ларавел/слим/ноде магазин написать могу или что то в духе, клиентский JS знаю. Немного могу в реакт - но мне он совсем не нравится.
Но что бы вкотиться нужно подсакивать , и активно подскакивать.
Не был бы овощем - давно бы на удаленке сидел.
Ответы: >>1857557
Аноним 2020/11/16 10:00:24  №1857552 253
>>1857535
>Сколько они дрочили сраные коллбеки? 8 лет? Только недавно до долбоебов дошло, что это брат близнец ибаного goto.

Не гони, вы в истерику какую то скатили тред. В ноде колбэки - это не маня выбор. Это естественная, и самая простая организация асинхронной модели выполнения в одном потоке.
Потом доползли до промисов, а потом и до async/await. И что промисы, что асинк-авейт это по сути просто сахар над коллбэком, на сколько я знаю.
В пхп естественно это не актуально, и особо не нужно. Нужно ждать ответ ввода/вывода - скрипт подождет спокойно. У всего свои плюсы и минусы
Аноним 2020/11/16 10:06:10  №1857557 254
>>1857545
Так я понимаю, просто в том и суть, что работа сжирает время и силы. Есть работа - нету времени учить что-то ещё, нет работы - есть время, да жрать нечего и платить за хату)

Я лично понимаю что надо работать не больше 20 часов в неделю, иначе так за пару лет выгорю.
А если у вкатывальщика того куча времени и никуда тратиться не надо, мамка кормит - это идеальное время для вката, если каждый день учиться проге.
Ответы: >>1857564
Аноним 2020/11/16 10:17:03  №1857564 255
>>1857557
>>А если у вкатывальщика того куча времени и никуда тратиться не надо, мамка кормит
То такие в 99% в дотку ебашат, зона комфорта жи.
>>просто в том и суть, что работа сжирает время и силы.
У меня по условиям на данным момент оч хорошая работа, оч много свободного времени, и нагрузка релевантна моим задачам. И на этой работе я порою неделями на проебе, зона комфорта жи.
Сейчас одно приложение на ноде накатал для конторы, и еще два на пхп на подходе.
Просто платят реально мало, минус еботека и вообще залупа остается. И программирую я один, нет опыта от людей пищущих профессионально.

Аноним 2020/11/16 11:01:29  №1857612 256
Тайпскрипт уже круче самого пыха
Ответы: >>1864441
Аноним 2020/11/16 14:06:01  №1857761 257
>>1855565
не был тут неделю, а такие эпики происходят. дристанул на всю борду. зря ты сразу во фреймворк полез, анонче. надо было че попроще для начала. а тут в ларавеле магии слишком многовато...
Ответы: >>1857940
Аноним 2020/11/16 16:07:30  №1857836 258
Анонсы, подкиньте идей сайтов на уровне файлообменника. Чтобы недолго делать и быстро получить результат =)
Аноним 2020/11/16 16:19:36  №1857845 259
>>1849235
На рутрекере есть дело 2х кликов
Аноним 2020/11/16 18:04:52  №1857940 260
>>1857761
>зря ты сразу во фреймворк полез, анонче. надо было че попроще для начала
Уже сделал магазин на Опенкарте, даже есть 2 продажи (полтора месяца в продакшне). Я там дохера всего руками правил, готовых модулей почти не ставил, дизайн сам верстал. Теперь хочу освоить что-то посерьёзнее, выбор пал на ларавель, ибо большое комьюнити и востребован.
Ответы: >>1857990
Аноним 2020/11/16 18:51:37  №1857990 261
>>1857940
Свой магаз чтоли запилил?

Я вот тоже нуб, но есть идея запилить свой инет-магазин.
Ответы: >>1857998
Аноним 2020/11/16 19:05:03  №1857998 262
>>1857990
Можешь на email написать, скину линк на магаз. Opencart вообще хорошая вещь для вкатывающихся, там файловая структура предельно понятная. Но бля, костылей потом в дизайне у меня лично дохера вышло. Вроде и норм работает, но некрасивый какой-то код.
Ответы: >>1858368
Аноним 2020/11/17 10:38:58  №1858368 263
>>1857998
В принципе можно и иагаз посмотреть, ном еня больше интересует другое - ты магаз написал для себя? Чем то торгуешь?
просто у меня уже месяца три есть идея написать совй магаз, есть желание торговать начать, может с переходом в реал, арендой и всем таким.
Ответы: >>1859207
Аноним 2020/11/17 17:16:39  №1858713 264
Бля, я походу тупой, но не подскажите что надо сделать чтобы работать с базой данных через php? Я скачал с сайта oracle mysql-installer-community. Мне его надо просто поставить и из коробки все нормально заработает?
Ответы: >>1858757 >>1859668
Йогин 2020/11/17 17:46:18  №1858757 265
>>1858713
Ты в Москву через Караганду идёшь; скачай OpenServer (самого минимального хватит) и программируй на здоровье.
Ответы: >>1858777
Осваиваю Laravel 8 Йогин 2020/11/17 17:57:21  №1858772 266
Создал Laravel-проект, есть файл
project.com/resources/js/bootstrap.js
Открываю его, а там
window.axios = require('axios');

Как это вообще понимать, анон? Это же nodejs функция, а не PHP-шная. Как ноджейесовский require(..) относится к фреймворку на PHP?

И продолжая тему, зачем разрабы приткнули в ларавель модули NPM? Чтобы я bootstrap и popper скачивал, лол?
SOS, ЯННП
Ответы: >>1859244 >>1859681
Аноним 2020/11/17 18:00:26  №1858777 267
>>1858757
Mysql open server?
Понял, попробую. Спасибо
Ответы: >>1858783 >>1859124
Йогин 2020/11/17 18:02:17  №1858783 268
Аноним 2020/11/17 20:10:29  №1859024 269
Гит тренда не нашёл, поэтому пишу сюда. Я создал по ветке на каждый баг. Как лучше их мержить в девелоп? За один раз все влить или по очереди?
Аноним 2020/11/17 22:04:51  №1859124 270
>>1858777
А лучше вместо этого поставь линукс и не пользуйся ублюдскими костылями для битриксоидов. Все равно восьмой пых винда поддерживать не будет.

другой анон
Ответы: >>1859143 >>1859658 >>1859681
Аноним 2020/11/17 22:29:28  №1859143 271
>>1859124
Они работают над полным зохавыванием линупсов, так что отдельные версии не имеют смысла, да.
Аноним 2020/11/17 22:51:20  №1859152 272
image.png (1, 279x171)
171x279
У меня проблема с редиректом. Есть сайт на вордпрессе. В .htaccess стоит
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Установил SSL сертификат, теперь хочу сделать 301 редирект с http на https. Перепробовал уже всё, что выдал гугл - не работает. Либо 404, либо ошибка бесконечной переадресации.
Например, пробовал варианты с сайтов:
https://www.reg.ru/support/hosting-i-servery/kak-dobavit-redirekt/redirekt-s-http-na-https
https://elims.org.ua/blog/wordpress-perexod-na-https/
https://misha.agency/htaccess/3-redirects.html
https://pixelplus.ru/samostoyatelno/stati/indeksatsiya/301-redirekt.html

Я раньше вроде делал такое и получалось. А сейчас ну не идёт и всё тут. Может кто подскажет, как правилно, или даже даст пример рабочего конфига для Вордпресса?
Ответы: >>1859171
Аноним 2020/11/17 23:53:57  №1859171 273
>>1859152
Сам добил. После RewriteEngine On нужно было вставить
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
#Эта строчка делает мейджик, блеадь! Без неё админка вордпресса уходит в бесконечный редирект, а на самом сайте не подгружаются стили.
#Для HTTPS, при совместном использовании nginx и apache апачу необходимо ЯВНО указать, что он должен
#работать с HTTPS а не HTTP, если nginx принял соединение по HTTPS, а не HTTP
SetEnvIf X-Forwarded-Proto https HTTPS=on


Какое же всё таки днище этот веб. У каждого сервера свои стандарты и всё это нужно как-то дружить.
Аноним 2020/11/18 05:21:46  №1859207 274
>>1858368
>у меня уже месяца три есть идея написать совй магаз, есть желание торговать начать
Зачем если можно стать партнером крупных магазинов и получать процент с продаж если кто перейдет с твоего сайта и сделает покупку?
Аноним 2020/11/18 06:54:35  №1859244 275
>>1858772
В laravel есть scaffolding, чтобы ты мог быстро добавить bootstrap, vue.js, react...
Прогугли: Livewire, Inertia. Раньше был laravel/ui (и сейчас есть)
Аноним 2020/11/18 08:02:10  №1859264 276
Блять, есть какая нибудь нормальная инструкция как подключить к php на встроенный локальный сервер базу данных? типо тут это скачай, тут это напиши, тут такую команду отправь. Полдня пытаюсь разобраться и нихуя непонятно.
Ответы: >>1859272 >>1859902
Аноним 2020/11/18 08:18:30  №1859272 277
>>1859264
Хули там разбираться? Сервер бд сам по себе, пхп сам по себе.
Поднимешь сервер и подключайся себе сколько влезет.
Для даунов типа тебя делают сборочки готовые.
Ответы: >>1859277
Аноним 2020/11/18 08:32:17  №1859277 278
>>1859272
Я не хочу быть дауном и разобраться что и как.
Я уже для простоты установил sqlite (db browser fir SQLite).
Создал файл .bd
Закинул этот файл в папку с другими своими тренировочными файлами пыхи.
Запустил сервер в этой папке
А чё дальше делать? Везде пишут типо надо просто пару функции написать, но у меня как будто сервере не знает что с БД делать. Есть подозрения что надо что-то менять в php.ini но я раскомментировал строки с sql и все равно нихуя не работает
Ответы: >>1859339 >>1859374 >>1859902
Аноним 2020/11/18 11:32:41  №1859339 279
>>1859277
Ты хочешь и административную часть досконально знать, и программистом быть. Забей на эти тонкие настройки, скачай opeserver и там уже все конфигурации прописаны
Аноним 2020/11/18 12:02:32  №1859353 280
Перестал понимать как foreach работает, почему тут пустые элементы в массиве выводятся? Хелпаните

https://ideone.com/RdbO73

Ответы: >>1859367
Аноним 2020/11/18 12:26:50  №1859367 281
>>1859353
С чего ты взял что проблема в foreach? Он всегда одинаково работает, у тебя ошибка в makeFirstletterUppercase.
Ответы: >>1859372
Аноним 2020/11/18 12:41:33  №1859372 282
>>1859367
Мда, когда такую мелочь случайно пропускаешь хочется себе об стену башку проломить.

https://ideone.com/dj8qXu
Ответы: >>1859396
Аноним 2020/11/18 12:46:41  №1859374 283
>>1859277

Что касается MySQL:

- тебе надо установить сервер MySQL. Он будет работать в фоне, и выполнять запросы клиентов. Установщик MySQL имеет графический интерфейс, так что команды выполнять не требуется.
- на стороне PHP, чтобы он мог подсоединиться к MySQL, нужно установить либо расширение mysqli, либо pdo_mysql. В винде они скорее всего идут в комплекте с PHP, и для их подключения надо только прописать или раскомментировать строчку в php.ini (extension=xyz.dll)

Что касается SQLite, это встраиваемая (бессерверная) БД. Для нее устанавливать сервер не нужно. Она работает напрямую с файлами с данными. Достаточно только расширения Sqlite3 или pdo_sqlite. Они скорее всего тоже идут в комплекте с PHP, а если не идут, то можно их скачать и положить в папочку с расширениями. Опять же, включить их в php.ini и ты можешь работать с БД.

"db browser fir SQLite" - это всего лишь просмотрщик db-файлов, как я понимаю из названия.

В общем, тебе бы стоило изучить, как ставятся расширения. Вот мануал: https://www.php.net/manual/ru/install.pecl.windows.php

Под виндой расширение - это dll-файл вроде php_mysql.dll. Часть расширений идет в комплекте с PHP (они в папочке ext), часть надо скачивать самостоятельно с сайта pecl: https://pecl.php.net/packages.php . В любом случае, чтобы расширение подключалось при запуске PHP, надо его прописать в php.ini. И перезапустить сервер.

Проверить список установленных расширений можно в консоли командой php -m или вызвав функцию phpinfo() в скрипте.

Задавай уточняющие вопросы, а то не очень понятно, что ты сделал, а что нет.
Аноним 2020/11/18 13:15:22  №1859388 284
https://ideone.com/dj8qXu

Как здесь написать чтобы все работало? \t
>$regexp = '/(?<=[\.\!\?]+)/u';

Я не понимаю этот синтаксис и не вижу чтобы где-то в учебнике были пояснения про это

мимо бездарный даун
Ответы: >>1859454 >>1859681
Аноним 2020/11/18 13:23:17  №1859396 285
stormview.png (126, 1472x1381)
1381x1472
>>1859372
Поэтому используй пхпшторм, он бы тебе подсветил, что переменная не используется.
Ответы: >>1859408
Аноним 2020/11/18 13:34:54  №1859408 286
Аноним 2020/11/18 14:33:33  №1859454 287
Ответы: >>1859683
Аноним 2020/11/18 16:14:11  №1859499 288
Доброго вечера, анончики. Я только встаю на путь программирования, начал заниматься по вашему учебнику, предварительно повторив HTML и CSS, хочу поинтересоваться, а в чем пишете коды вы, ну то есть, чтобы мне сразу привыкать и разобраться в серьезных редакторах или этих IDE и писать сразу там, даже когда учусь? Я вот скачал, который был указан в учебнике из шапки, но там похоже установка сложнее чем просто запустить экзешник, помогите немножко, пожалуйста.
Аноним 2020/11/18 18:04:17  №1859612 289
<?php
echo "Hello 2ch!";
?>

Посоветуйте, пожалуйста, статьи или книги в которых есть пошаговое создание сайтов. В видео формате много контента, но мне больше по кайфу что-то учить под музыку, да и вообще по тексту учить проще и быстрее.
Ответы: >>1861262 >>1861605
Аноним 2020/11/18 18:25:50  №1859636 290
Сначала были те кому нужно было помочь с гуглением. Потом пришли те кто не смог установить иде. Закончилось теми кто не смог включить комп. У них вся вечность впереди. Аминь.
Ответы: >>1859638
Аноним 2020/11/18 18:26:56  №1859638 291
>>1859636
иде это что? опен сервер?
Ответы: >>1859644 >>1859683
Аноним 2020/11/18 18:29:32  №1859644 292
>>1859638
Тип интерфейса подключения накопителя к материнской плате
Ответы: >>1859646
Аноним 2020/11/18 18:30:04  №1859646 293
>>1859644
так понятней, спасибо (иди нахуй)
Ответы: >>1859650
Аноним 2020/11/18 18:36:23  №1859650 294
>>1859646
Пожалуйста. А теперь бесплатный совет. Основные навыки чтобы успешно вкатиться:
1 Умение самостоятельно гуглить искать информацию
2 Умение самостоятельно решать задачи
3 Умение разбивать большие задвачи на маленькие
4 Умение самостоятельно ставить задачи
Аноним 2020/11/18 18:42:46  №1859658 295
>>1859124
Это говно лучше в докере запускать, особенно если какое нибудь Легаси говно в кодировке cp1251.
Аноним 2020/11/18 18:52:40  №1859668 296
>>1858713

Тебе надо установить MySQL сервер. Он управляет базой данных и выполняет запросы клиентов. Также, тебе нужно в PHP установить либо расширение mysqli, либо pdo_mysql (либо и то, и другое). Расширения скорее всего идут в комплекте с PHP. Расширения надо прописать в php.ini, как описано тут: https://www.php.net/manual/ru/install.pecl.windows.php

> Мне его надо просто поставить и из коробки все нормально заработает?

Должно, если ты включишь нужные расширения.

Аноним 2020/11/18 19:03:45  №1859681 297
>>1858772

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

>>1859124

Скорее всего, потому что в винде есть WSL на такой случай. Хотя, непонятно, что делать пользователям Windows 7. Зачем помогать майкрософту и заставлять людей апгрейдиться на худшую версию с телеметрией и принудительными обновлениями с перезагрузками. Как можно этот хлам одобрять, не понимаю. Никакого уважения к пользователю. Унижают, как только могут.

>>1859388

Этот синтаксис (lookbehind assertion) описан тут: https://www.php.net/manual/ru/regexp.reference.assertions.php

У тебя там ошибка, что выражения внутри скобок должны иметь фиксированную длину, то есть "+" использовать нельзя. Можно использовать для разбиения строки такое выражение:

- до текущей позиции должен идти знак препинания (один). Это lookbehind assertion.
- после текущей позиции не должно быть знаков препинания. Это lookahead assertion.

Аноним 2020/11/18 19:05:45  №1859683 298
>>1859454

У тебя + лишний. Он тут никакого смысла не имеет, так как assertions не поглощают символы и не сдвигают позицию, и делать их повторение (с помощью +) бессмысленно.

>>1859638

Integrated Development Environment

Аноним 2020/11/18 22:11:25  №1859840 299
Может есть у кого на примете годные репозитории на гитхабе с пет проектами на ларавеле с более менее хорошим кодом? Хочу поизучать типичные решения.
Аноним 2020/11/19 04:07:27  №1859902 300
Аноним 2020/11/19 10:36:15  №1860046 301
Аноны.

Хочу познать симфони (делал задачи из шапки на слиме/ларе). Для себя вижу такие варианты:
1. ПопенСорс проекты на симфони.
2. Курсы (по типу symfony casts, youtube)
3. Придумать проект и писать ориентируясь на доку.

Что по вашему опыту эффективнее?
Ответы: >>1862266
Аноним 2020/11/19 14:27:11  №1860259 302
Спасибо пидорам из датастакса, которые писали модуль под пхп для их cassandra-драйвера. Мало того, что собранных пакетов под пхп свежее 7.1 нет, мало того, что пришлось компилировать их c++ драйвер под свежий опенссл, так у них еще и в макросах для компиляции пхп-драйвера ошибка.
Ответы: >>1860674
Аноним 2020/11/19 23:57:53  №1860674 303
>>1860259
Просто пхп слишком охуенен для этих устаревших технологий. Мы с почанами двадцать лет уже пилим одностраничные сайты и ни разу не понадобилась эта коксандра или кафка беспонтовая. Ты тоже не выебывайся, а ставь мускуль 5.6. Это проверенное временем решение.
Ответы: >>1861602
https://github.com/kydva/FileHosting Аноним 2020/11/20 00:25:56  №1860687 304
Я файлообменник сделяль. Можно было бы еще много чего допилить, но времени мало, и хочется побыстрее потрогать ларавель.
Гитхаб в теме. Демонстрацию посмотреть можно здеся: https://ru.files.fm/f/992rcsz2e
Ответы: >>1861603
Аноним 2020/11/20 09:08:01  №1860929 305
Аноны, дайте совет.

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

Типа так:
$dbh = new PDO(...);
$dbh->beginTransaction();

$model1 = new Model1;
//по идее объект $dbh возвращать не особо нужно - объекты по ссылке передаются же.
//или все таки нужно?
$model1->method( $dbh );

$model2 = new Model2;
$model2->method( $dbh );

$dbh->commit();

Думаю есть более удачные варианты такого расклада, может кто нибудь подскажет?








Ответы: >>1862258
Аноним 2020/11/20 10:02:08  №1860948 306
не могу понять, точнее не понял еще как пользоваться библиотекой пхп. Но как сделать, что бы скрипт начинал работать по кругу при определенном значении. В игре в кубики, хочу что бы скрипт по новой крутился при ничьей, какая команда?
Ответы: >>1860949 >>1861604
Аноним 2020/11/20 10:08:22  №1860949 307
>>1860948
все нашел, пиздец я долбаеб конечно
Аноним 2020/11/20 15:31:58  №1861262 308
Ск.png (143, 312x388)
388x312
Аноним 2020/11/20 16:24:38  №1861336 309
Читал, что рефлексию не следует использовать как и магические методы. А что если я класс-DTO через рефлексию сделал, это норм?
Аноним 2020/11/20 16:36:53  №1861344 310
Сап. Начал изучать PHP.
Пишу код:
$a = 9;
$b = 3;
echo $a . " + " . $b . " = " . $a + $b . "<br>";
echo $a . " - " . $b . " = " . $a - $b . "<br>";
echo $a . " " . $b . " = " . $a $b . "<br>";
echo $a . " / " . $b . " = " . $a / $b . "<br>";
echo $a . " % " . $b . " = " . $a % $b . "<br>";
Выводит:
12
6
9 * 3 = 27
9 / 3 = 3
9 % 3 = 0
ЧЯДНТ? Почему первые две строки выводят только результат, должны же выводить всё, как и остальные строки?
Аноним 2020/11/20 16:38:01  №1861346 311
>>1861344
echo $a . " (знак умножения) " . $b . " = " . $a (знак умножения) $b . "<br>";
Аноним 2020/11/20 16:52:24  №1861357 312
>>1861344
>Почему первые две строки выводят
>Deprecated: The behavior of unparenthesized expressions containing both '.' and '+'/'-' will change in PHP 8: '+'/'-' will take a higher precedence in on line 5
Обнови пыху раз оно у тебя вообще запускается

Ехуй или через точку + заскобленными операциями, или через запятую
https://dpaste.com/4WQAZ26HF
https://dpaste.com/A6UYZ6A5K
Аноним 2020/11/20 17:10:48  №1861364 313
>>1861344

Скорее всего дело в приоритете операций, и у тебя сначала выполняется точка, а только потом плюс или минус. Расставь скобки явно, например, echo $a . " + " . $b . " = " . ($a + $b) . "<br>";
Аноним 2020/11/21 01:06:26  №1861602 314
>>1860674
>Мы с почанами двадцать лет уже пилим одностраничные сайты
Ахаха, рассмешил.
Аноним 2020/11/21 01:11:43  №1861603 315
>>1860687
>хочется побыстрее потрогать ларавель
Нахуя если у тебя там симфони? Ларавель по сути ничем не отличается. Хочешь нового и необычного попробуй Elixir & Phoenix. На нем можно писать асинхронные, паралелльные и распределенные приложухи без заморочек.
Ответы: >>1861819
Аноним 2020/11/21 01:12:53  №1861604 316
>>1860948
>АБЫРВАЛГ
Чел, тебе бы поднаучиться выражать ясно мысли.
Аноним 2020/11/21 01:14:52  №1861605 317
>>1859612
Лучше книги по PHP - это Дэвид Скляр Изучаем PHP7, PHP7 Котеров, неплохая Кевин Янк, но там PHP5. На английском книг куча новых.
Ответы: >>1861744
Аноним 2020/11/21 07:42:46  №1861744 318
Ответы: >>1861795
Аноним 2020/11/21 08:50:16  №1861795 319
>>1861744
Кроме орать как сучка дельное что то можешь сказать?
Ответы: >>1861830
Аноним 2020/11/21 09:42:37  №1861819 320
>>1861603
Если бы я хотел чего-то нового и необычного, я бы не изучал пых, лол.
Аноним 2020/11/21 09:59:40  №1861830 321
>>1861795
Котеров не учебник,а оч хуевый справочник.
Скляр получше,но подача местами тоже не айс
Ответы: >>1861833
Аноним 2020/11/21 10:04:53  №1861833 322
>>1861830
Предлагай свое. Есть лучше?
Ответы: >>1861835
Аноним 2020/11/21 10:07:50  №1861835 323
>>1861833
А единого нет.Мне лично приходилось иметь по 3-4 книги и херова куча вкладок по каждой теме и все это самому сводить в единую мысль
Ответы: >>1861847
Аноним 2020/11/21 10:25:33  №1861847 324
>>1861835
Опять крутишься как уж на сковородке. Как языком 3.14здеть так тут как тут, а как название книг написать вместо пустого 3.14здежа, так язык в жопу засунул. Несите следующего.
Ответы: >>1861850 >>1861852
Аноним 2020/11/21 10:29:08  №1861850 325
>>1861847
а потому что по php нет ни одной нормальной книги, каждая книга это пересказ документации
Ответы: >>1862067
Аноним 2020/11/21 10:33:55  №1861852 326
>>1861847
PHP 7 Zend
Зандстра М про OOP
Lopez A Php 7
и обязательно гугл
ОФ доки херово подходят для полного нуля,но оч хороши,чтобы видеть ВСЕ возможности языка,которых нет в учебниках
Ответы: >>1861853
Аноним 2020/11/21 10:35:48  №1861853 327
>>1861852
еще Vikram Vaswani beginner guide но там 5.3
но подача неплоха
Аноним 2020/11/21 12:00:19  №1861922 328
Здравствуйте, подскажите, пожалуйста, где искать хорошего программиста с адекватной стоимостью услуг со знаниями laravel и ffmpeg ? Вконтакте в основном кидалы, на хабре написал восьмерым, прошло 5 дней и ни один ещё не посмотрел ТЗ и не назвал цену за работу. На фрилансе в основном команды и фирмы, которым надо заплатить больше, но в итоге всеравно основную работу будет делать один человек, а индусы вообще зажрались, ценники как будто они вечерами подрабатывают после работы в гугле. Я не жадный, просто не люблю переплачивать за одинаковую работу.
Ответы: >>1862125 >>1862126 >>1862173
Аноним 2020/11/21 14:24:33  №1862067 329
>>1861850
Щас бы слушать мнение ноунейма. Ты не школьник часом? Какой опыт программирования?
Ответы: >>1862318
Аноним 2020/11/21 15:26:07  №1862125 330
>>1861922
Бля, у меня дежавю. В прошлом или позапрошлом треде был уже один "нежадный". Кинь ТЗ и напиши сколько готов заплатить, а там видно будет.
Аноним 2020/11/21 15:26:08  №1862126 331
>>1861922
Имею опыт тестирования (Валидация/XSS) и исправления ларавеля, но конкретно на пыхе никогда не специализировался
>не люблю переплачивать
>прошло 5 дней
Если нет каких-то душащих дедлайнов - могу взяться за символическую плату

Дискорд https://dpaste.com/4WHFZH3LN
Аноним 2020/11/21 16:17:40  №1862173 332
>>1861922

Почему бы тебе не пойти на фриланс-сайт? Сформулируй четкое ТЗ, проверь портфолио и опыт исполнителя, попроси у него рекомендации и проверь их, работай с исполнителем через escrow ("безопасная сделка").

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

На фрилансе большое число фрилансеров и есть конкуренция. Если они все просят больше, чем ты готов заплатить, значит такая реальная цена этой работы.
Аноним 2020/11/21 18:39:37  №1862258 333
>>1860929

Правильное решение было бы инжектировать в твои "модели" один и тот же объект PDO при создании. То есть:

$model1 = new Model1($pdo);
$model2 = new Model2($pdo);

После этого они будут работать с одним и тем же объектом-соединением и транзакции будут работать "из коробки".

Почитай про инъекцию зависимостей: https://github.com/codedokode/pasta/blob/master/arch/di.md
Ответы: >>1863483
Аноним 2020/11/21 18:45:31  №1862266 334
>>1860046

Один из вариантов - это уроки/курсы, где делают какой-то сайт, постепенно изучая особенности Симфони, параллельно почитывая документацию и исходники.
Аноним 2020/11/21 19:55:09  №1862318 335
>>1862067
>Ты не школьник часом?
и много ты школьников видел на дваче ?
>Какой опыт программирования?
3 года
Ответы: >>1862495 >>1862496
Аноним 2020/11/21 21:31:27  №1862367 336
>>1854267
Описание задачи не полное, анон. Поэтому оценка навскидку может быть сильно, так, неверной.
Сам функционал этой фичи пилится за пару дней максимум и выйдет в районе 3-4к. Но его ещё надо интегрировать в веб-сервис(тоже время+деньги), и вот тут уже ты никакой инфы не дал совсем. Что за сервис, на чём сделан? А если его нет, то надо и его писать, что встанет сильно дороже - считай с нуля делать.
Аноним 2020/11/21 21:58:02  №1862397 337
>>1854267
Если есть ещё порох в ягодицах, то подходи - пообщаемся.
@nesterom
Аноним 2020/11/21 22:57:07  №1862436 338
image.png (22, 949x391)
391x949
https://sql-academy.org/ru/guide/sorting
Что они хотят вообще?

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


Я пишу
SELECT good, unit_price AS sum FROM Payments
ORDER BY sum DESC

Говорят, неверно. Может, они хотят, чтобы все покупки одинаковых товаров были просуммированы и уже суммы были отсортированы? Но в материале до этого ничего о сложении полей не было сказано.
Ответы: >>1862440
Аноним 2020/11/21 23:19:01  №1862440 339
>>1862436
Не сумму а произведение количества купленого товара на его цену
SELECT good, (unit_price * amount) AS sum FROM Payments ORDER BY sum DESC
Ответы: >>1862448
Аноним 2020/11/21 23:33:27  №1862448 340
>>1862440
А, вот оно что. Меня сбило с толку "sum", как-то сразу о сумме подумал. Спасибо.
Аноним 2020/11/22 03:21:34  №1862495 341
>>1862318
>и много ты школьников видел на дваче ?
Шутка такая неудачная что ли? Тут их 98% наверное.
Аноним 2020/11/22 03:22:44  №1862496 342
>>1862318
>3 года
Вот видишь, у тебя опыт есть, поэтому тебе достаточно доков, а тот чел наверное неопытный, поэтому книги, которые я посоветовал, Скляр, Котеров, ему как раз.
Аноним 2020/11/22 11:52:44  №1862744 343
php=gay

Change my mind
Ответы: >>1862748
Аноним 2020/11/22 11:57:26  №1862748 344
>>1862744
По этому мы его и учим, брат <3
Аноним 2020/11/22 13:07:49  №1862780 345
Кто-то работал с фрилансерами веб-дизайнерами? Где их можно искать, чтоыб норм было?Есть какие-то совета как дизайнеру тз писать, или там все уже при обсуждении определяется?
Аноним 2020/11/22 14:43:06  №1862853 346
а что,пхп 8 для винды ФСЁ?
Ответы: >>1862854
Аноним 2020/11/22 14:43:41  №1862854 347
>>1862853
>а что,пхп 8 для винды ФСЁ?
Vagrant или WSL2 в помощь.
Аноним 2020/11/22 14:52:11  №1862866 348
sdfgsdfhsdh.png (7, 286x377)
377x286
Анон, подскажи почему при добавлении бордера топ/бот в список li, он не обводит всю строку? Убрал буллеты лист стайл тайпом и поебать вообще, они как будто все равно присутствуют и мешают бордеру обвести всю строку...
Час сижу пержу не могу понять блять. В гугле ниче полезного не нашел
Ответы: >>1862870 >>1863631
Аноним 2020/11/22 15:00:27  №1862870 349
>>1862866
Скинул бы хотя бы хтмл с цссом на фиддл, лол
Ответы: >>1862900 >>1862903
Аноним 2020/11/22 15:21:08  №1862900 350
>>1862870
я хз как он работает. копипастнул туда хтмл с ксс но резалт не выводит хотя никаких ошибок не высвечивается в коде....
Аноним 2020/11/22 15:23:30  №1862903 351
Аноним 2020/11/22 17:51:58  №1863083 352
Гайс, как понять свой реальный уровень и эффективность моей работы? Т.е если я отсобеседуюсь на мидла с зп 80+, могу ли я считать себя мидлом? Или если не выгнали - мидл и своих денег стою?
Ответы: >>1863097
Аноним 2020/11/22 18:04:38  №1863097 353
>>1863083
>джун-хуйун, мидл-хуидл
Забудь это стереотипы
Ответы: >>1863102
Аноним 2020/11/22 18:08:52  №1863102 354
>>1863097
Я не про вымышленные плашки с ИТ-званиями, чтобы ходить и щеголять ими. Адекватно автоматом переводить эти названия в зп
Аноним 2020/11/22 22:49:37  №1863356 355
image.png (22, 959x413)
413x959
Снова вопрос по майскулу:

Агрегатные функции MIN и MAX
Найдите самых старших членов семьи (используйте поле birthday) среди всех существующих семей на основании их статуса (поле status). Выведите статус и дату рождения. Для вывода даты рождения используйте псевдоним birthday.


Пишу:
SELECT status, birthday FROM FamilyMembers
GROUP BY status HAVING MIN(birthday)

Говорят, неправильно. Но по логике-то верно же? Мы берём status и birthday из таблицы FamilyMembers, группируем их по полю status, в каждой группировке определяем наименьшее значение и выводим.
Но нифига - "нонагрегатед колумн birthday". Как правильно?

https://sql-academy.org/ru/guide/groupping-aggregate-functions
Ответы: >>1863359 >>1863637
Аноним 2020/11/22 23:07:47  №1863359 356
>>1863356
Справился сам.
SELECT status, MIN(birthday) AS birthday FROM FamilyMembers
GROUP BY status
Аноним 2020/11/23 06:41:14  №1863483 357
>>1862258
Спасибо.
У меня фактически так и есть. Объект подключения у каждой модели один и тот же, из контейнера.
Я видимо с $dbh->beginTrancaction недопонял. Если я начинаю эту транзакцию, то получается все модели которые получат этот объект, даже из контейнера зависимости - получат объект $dbh в состоянии транзакции, я чет об этом не подумал.
Аноним 2020/11/23 10:57:06  №1863631 358
>>1862866

Потому что слева у элементов списка есть паддинг. Тебе надо не в Гугл лезть, а открыть инструменты разработчика в браузере и изучить свойства элементов списка.
Ответы: >>1863641
Аноним 2020/11/23 11:07:46  №1863637 359
>>1863356

HAVING - это условие отбора строк (как WHERE, только оно применяется после группировки). Там можно написать что-то вроде HAVING MIN(x) = 5 а писать HAVING MIN(x) без условия просто некорректно.
Аноним 2020/11/23 11:13:35  №1863641 360
>>1863631
ты сам убирал этот паддинг? или ты думаешь я совсем дегенерат? иди попробуй убери паддинг от лефта а потом открой инструменты разработчика в браузере и изучи свойства элементов списка
Ответы: >>1863957
Аноним 2020/11/23 13:32:40  №1863787 361
>>1856257
>>именно туда их и стоит класть

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

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

Аноним 2020/11/23 16:31:20  №1863957 362
>>1863641

Возможно, там паддинг/маргин у самого списка (родителя), а не у его элементов. Можно пройти в инспекторе от элемента списка вверх по элементам и посмотреть, какие у них маргины/паддинги, они даже цветом подсвечиваются.
Ответы: >>1863965
Аноним 2020/11/23 16:56:58  №1863965 363
>>1863957
да, все, разобрался уже. я позицию выстраивал не у самих лишек а у самого блока юл, поэтому все по пизде шло. щас с трезвой головой все удалил, заново переписал и заебись стало. пиздец на такой хуйне спотыкнуться и втыкать 2-3 часа чтобы в итоге решить все за минуту. я в ахуе
Аноним 2020/11/24 00:30:42  №1864239 364
image.png (30, 1057x509)
509x1057
Опять вопрос про скул.

Скалярные подзапросы
Выведите количество полётов каждого пассажира, представленного в таблице Passenger. Список полётов находится в таблице Pass_in_trip. В качестве результата выведите количество полётов (используйте псевдоним count) и имя пассажира.


Я вообще не понимаю, какого синтаксиса от меня хотят. Как это вообще писать. Битый час перебирал методом научного ытка разные, ничего не подходит. Это ебанина какая-то, а не урок. Прямо классическое "нарисуйте сову". Какой вообще порядок написания ключевых слов? Вообще не понимаю.

Сумел только вот такое написать, вроде результат похож на правду, но запрос криво выглядит и его не засчитали.
SELECT COUNT(*) AS count, (SELECT Passenger.name FROM Passenger WHERE Passenger.id = Pass_in_trip.passenger) AS name
FROM Pass_in_trip
GROUP BY passenger


https://sql-academy.org/ru/guide/nested-sql-queries
Ответы: >>1864323 >>1864557 >>1864589
Аноним 2020/11/24 05:06:04  №1864299 365
Аноны, что скажете о Zend фрейворке? Довольно часто в вакансиях мелькает, стоит связываться?
Аноним 2020/11/24 06:36:22  №1864323 366
>>1864239
Твой запрос выводит количество полетов летавших юзеров, а тебе нужно вывести количество полетов всех юзеров (некоторые из них не летали).
SELECT name, (SELECT count(*) from Pass_in_trip where passenger=Passenger.id) as count from Passenger
Ответы: >>1865018 >>1865097
Аноним 2020/11/24 10:30:24  №1864441 367
>>1857612
Как-то видел как один чел на тайпскрипте писал. Вместо того чтобы заверстать один инпут и прописать ему событие он пиздошил целый интерфейс под этот компонент, потом класс для него, вся эта срань наследавалась хуй пойми откуда и хуй пойми как работала, и в завершение делал он это прямо на проде. Между прочим это был довольно активный и известный стриминговый ресурс.
Вот теперь даже не знаю - то ли на фронтенде такие говнокодеры, то ли только на тайпскрипте. Проганье ради проганья не нужно.
Аноним 2020/11/24 12:51:52  №1864557 368
>>1864239

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

> Какой вообще порядок написания ключевых слов? Вообще не понимаю.

Сначала строки выбираются из таблицы (FROM), затем джойнятся (JOIN), затем отсеиваются (WHERE), затем группируются (GROUP BY), отсеиваются дополнительно (HAVING), сортируются (ORDER BY). Примерно в таком порядке выполняются запросы. Тебе остается лишь подобрать условия, чтобы получилось то, что требуется.
Ответы: >>1865018
Аноним 2020/11/24 13:21:34  №1864589 369
>>1864239
Разбираюсь с задачей просацт со списком студентов.

Как правильно обрабатывать ситуацию когда передаётся несколько параметров через get в сервер?
Сейчас сделал, чтобы весь _GET копировался в рабочий массив, потом передаю его в нужную функцию.
А в самой функции уже смотрю, если в массиве есть ключ с необходимым названием, использовать значение по этому ключу, иначе использовать некое свое значение.
Второй вопрос, в пыхе можно сделать, что если некий аргумент не передается вообще, то функция может брать его значение по умолчанию. Можно ли сделать явное указание при передаче функции чтобы она использовала значение по умолчанию? Типо
function foo($a=1) {}
foo( is_null($b) ? {По-умолчанию} : $b ) {}

Гугл говорит что так нельзя, но это не точно. А если так нельзя, то как подобное обрабатывать? Уместно ли сделать внутри функции условие if, типо если передаю null как аргумент то использовать $a=1?
Ответы: >>1864694 >>1864708
Аноним 2020/11/24 15:12:50  №1864694 370
>>1864589
>А в самой функции уже смотрю, если в массиве есть ключ с необходимым названием, использовать значение по этому ключу, иначе использовать некое свое значение.
Оберни это в класс, будет удобней. Psr\Http\Message\ServerRequestInterface Можешь глянуть этот интерфейс, мб там описаны нужные методы. Можешь сделать по подобию

>Второй вопрос
>function foo($a=1) {}
Ну, так и можно или что ты имеешь ввиду?

>А если так нельзя, то как подобное обрабатывать? Уместно ли сделать внутри функции условие if, типо если передаю null как аргумент то использовать $a=1?
В том примере что ты привел - так function foo($a=1) {}.
Еfunction foo(int $a = 1, int $b = 2){}
В таком случае ты обязан передать в $a инт значение иначе кинет фаталэрор
Ответы: >>1864822
Аноним 2020/11/24 15:22:44  №1864708 371
>>1864589

Ты, по моему, нарушаешь разделение ответственности. В MVC модель не работает с пришедшими из браузера параметрами вроде $_GET. Это задача контроллера.

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

То есть, допустимы оба варианта:

findStudents(array $criteria)
findStudents(string $query, string $sort, int $offset, int $limit)

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

В любом случае, нельзя писать findStudents($_GET). В функцию надо передавать корректные значения, а не свалку параметров из $_GET. Ведь в $_GET могут отсутствовать или присутствовать вообще любые значения. Это просто свалка из пришедших данных.

Правильнее в контроллере разобрать $_GET, сформировать на его основе условия для поиска и передавать уже в функцию поиска.
Ответы: >>1864822
Аноним 2020/11/24 18:23:10  №1864822 372
>>1864694
Я хочу объявить функцию с входным аргументом А, который по умолчанию равен 1.
Т.е. если я вызову функцию без аргумента, функция будет выполняться со значением А=1. А если вызову функцию с входным параметром, то А будет равен этому значению на входе, так?
Мне интересно, можно ли прямо в вызове функции вместо аргумента вставить условие. Примерно так

foo( B==2? : 1);
Т.е. если В равен 2 то функция foo выполнится без входного аргумента (будет использоваться значение входного аргумента по умолчанию) , а если В не равен 2, то на вход функции дадим 1, т.е. уже значение не по умолчанию. Наверное зерово разъясняю, но как получается.

>>1864708
Я только разбираюсь с mvc. Чтобы не вытворять велосипед, я нашел простую реализацию на гитхабе. Суть там такая, что все входные вызовы обрабатывает функция-роутер.
Она парсит url, и выделяет в нем
имя необходимого контроллера,
метод который надо выполнить из класса соответствующего контроллера,
Параметр который передается в вызываемый метод.
Т.е. у меня создается контроллер отвечающий за Вывод таблицы студентов на экране.
Внутри контроллера вызывается соответствующий метод для отрисовки экрана (include кусков html с небольшими вставками php, функция из модели которая выполняет запрос к бд и возвращает ответ от нее)
Все работает хорошо, когда у меня в url три параметра (имя контроллера/имя метода/параметр).
Мне сложно понять как обрабатывать когда параметр не один а произвольное количество. Либо мне надо забить на произвольное количество параметров, и напридумывать методы в классе контроллера под всевозможные случаи (например отдельные методы для отображения таблицы под разные условия сортировки)
Сейчас у меня передается весь массив GET в контроллер, где я ищу в нем конкретные названиями параметров, которые могу передать к функции из модели и передаю. Но я не уверен, что это выглядят не рукожопно.
Ответы: >>1864839 >>1864935 >>1865412
Аноним 2020/11/24 18:42:10  №1864839 373
Аноним 2020/11/24 20:58:58  №1864935 374
>>1864822

> Все работает хорошо, когда у меня в url три параметра (имя контроллера/имя метода/параметр).

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

В студентах роутов мало, их можно вообще проверять через preg_match регуляркой (if ... elseif ... elseif ... else).

Если роут соответствует реглярке1, то ...
Иначе если он соответствует регулярке2, то ...
Иначе выдать ошибку 404

Это один вариант. Тогда можно будет сделать URL вида /students/name/2?query=иван

Также, параметры можно передавать после знака вопроса, например /list/?query=иван&sort=-score&page=2. То есть тут URL состоит из названия контроллера и кучи параметров.

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

Нельзя. Только если писать явно значения, вроде foo($x == 1? $a : $b);
Аноним 2020/11/24 21:58:43  №1864976 375
Анон, а на сколько реально сейчас вообще заработать копеечку на начальном этапе, изучив и закрепив на практике верстку?
Или нахуй это вообще не стоит потраченного времени и лучше сразу идти дальше js изучать?
Ответы: >>1865023
Аноним 2020/11/24 22:39:22  №1865018 376
>>1864323
Спасибо.
>>1864557
>Вообще, тут тебе хорошо бы поучиться использовать джойны.
Задача не на джойны же. Это НАДО сделать с помощью вложенных запросов.
Ответы: >>1865068
Аноним 2020/11/24 22:47:42  №1865023 377
>>1864976
Хороший верстала на фрилансе не пропадет. Только качество давай.
Аноним 2020/11/25 00:42:28  №1865068 378
>>1865018
В твоем запросе как минимум два косяка. Ну с такими задачами и самообучением хули удивляться.
1) Подзапрос в SELECT части выполняется по разу на каждую строку. Так делать нельзя никогда, даже если очень хочется. Тем более что всегда есть нормальный способ.

2) В COUNT(*) всегда считай конкретные вещи, в твоем случае ты считаешь количество пассажиров, значит так и пиши COUNT(passenger).

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

SELECT flights_count.count, p.name
FROM passenger AS p
LEFT JOIN (
SELECT passenger, COUNT(passenger) AS count
FROM pass_in_trip
GROUP BY passenger
) AS flights_count
ON flights_count.passenger = p.id

Теперь у тех кто не летал в колонке count будет NULL. Как превратить NULL в 0 тебе факультативное задание.
Ответы: >>1865097 >>1865498
Аноним 2020/11/25 01:49:32  №1865097 379
>>1865068
Ещё раз: это учебная задача из радела на вложенные запросы. Поэтому по условию задачи, её надо выполнить именно через вложенные запросы и никак иначе. Именно поэтому система отмечает твой монструозный запрос, как неверный, а лаконичный >>1864323, как верный.
Ответы: >>1865104
Аноним 2020/11/25 02:41:18  №1865104 380
subquery.PNG (91, 1495x1381)
1381x1495
>>1865097
Во первых "система" всего-лишь проверяет конечную таблицу. Никто в здравом уме не будет парсить сам запрос и тем более искать в нем подзапросы. Само написание такой системы равноценно созданию своей БД.

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

В третьих без относитьльно "учебности" задачи. Подзапрос в SELECT части это профнепригодность с первой секунды. Это просто перечеркивает все твои дальнейшие усилия.

В это вся беда дистанционного обучения, машине насрать что ты там написал, она просто проверяет результат. А человека, который скажет что ты катишь квадратное рядом нет.
Ответы: >>1865112
Аноним 2020/11/25 03:15:34  №1865112 381
>>1865104
>Подзапрос в SELECT части это профнепригодность с первой секунды.
А авторы учебног курса считают иначе. Вот и кому верить: им, или анону с двача?
Ответы: >>1865115
Аноним 2020/11/25 03:32:59  №1865115 382
>>1865112
С чего ты взял что они считают иначе? Ты где-то в самой статье прочитал что так надо делать? Ну зайди к "авторам" в группу в ВК и спроси там, тебе то же самое скажут.

Если ты пишешь подзапрос в SELECT части, то подзапрос выполнится по разу на каждую строку результата исходного запроса. По сути ты превращаешь один запрос в тридцать.

Это даже не "детская" ошибка, это как если бы тебя попросили проехать на велосепеде десять метров, а ты перевернул его колесами к верху, залез на него и пропрыгал в нужное место. Формально ты справился, но велосипедистом ты от этого не станешь.
Ответы: >>1865147 >>1865531
Аноним 2020/11/25 06:13:17  №1865147 383
>>1865115
Ну не драматизируй прям. Подзапрос в select это конечно не правильно, однако человек все таки пишет запросы, просто не до конца понимает порядок выполнения.
Аноним 2020/11/25 10:11:51  №1865308 384
дорвеисты есть? пишу свой движок под еба сайты, есть вообще годные чатики чтоб пообщаться на тему охуевших автосайтов?
Аноним 2020/11/25 12:19:27  №1865412 385
>>1864822
>Наверное зерово разъясняю, но как получается.
Нормально разьясняешь, просто в этом нет смысла

>Мне сложно понять как обрабатывать когда параметр не один а произвольное количество. Либо мне надо забить на произвольное количество параметров, и напридумывать методы в классе контроллера под всевозможные случаи (например отдельные методы для отображения таблицы под разные условия сортировки)

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

return [
'/' => [
'controller' => HomeController::class,
'action' => 'index',
],

'/students' => [
'controller' => StudentController::class,
'action' => 'index',
],

'/students/create' => [
'controller' => StudentController::class,
'action' => 'create',
],
];

Создай класс роутер который парсит этот конфиг и запускает тот контроллер который тебе нужен. Еще желательно создать что то вроде класса Request, который будет содержать в себе все get и post параметры. И методы которыми ты их легко можешь получить. Это значительно тебе задачу упростит. Ты просто в контроллер будешь передавать этот Request и например методом $request->get('page'), получать параметр страницы гет запроса. То как ты писал выше - чем то похоже на роутинг в Yii, где название контроллера это одна часть урла, название метода - другая. А параметр в твоем случае это например $id студента. т.е ссылка в твоем случае такая /students/show/55.
Этот же параметр можно передать в ГЕТ запросе /students/show?id=55.

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

П.С абу пидорас, нахуя он ебучую кнопку стикеров в поле ввода добавил, не виднно же нихуя что ты там пишешь с новой строки
Аноним 2020/11/25 14:00:57  №1865498 386
>>1865068

> Подзапрос в SELECT части выполняется по разу на каждую строку.

Справедливости ради, это не обязательно так. Оптимизатор СУБД может переписать такой запрос на аналогичный запросу с джойнами (так, что он будет выполняться аналогично). Сама идея SQL в том, что ты только описываешь, что хочешь получить, а не как и в какой последовательности выполнять запрос.

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

Вот мануал MySQL с описанием оптимизаций подзапросов: https://dev.mysql.com/doc/refman/8.0/en/subquery-optimization.html

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

SELECT .. FROM passenger p LEFT JOIN pass_in_trip ... GROUP BY p.id
Ответы: >>1865761
Аноним 2020/11/25 14:39:44  №1865531 387
>>1865115

А вот не факт. Тут все зависит от оптимизатора СУБД, как он будет выполнять запрос.

Вот я сделал простой пример: https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=785fd10b30bd6e507269fee83c3f559c

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

Если тебе не лень, ты можешь у себя создать таблицы с большим числом записей (10 000 - 100 000) и померять время выполнения. По моим прикидкам, оно должно быть примерно одинаковыми для джойна и подзапросов.
Ответы: >>1865761 >>1865761
Аноним 2020/11/25 16:51:58  №1865628 388
Ответы: >>1866369
Аноним 2020/11/25 18:24:21  №1865691 389
Аноны, вопросец такой.
Есть action='/mysite/aticles/1' формы с post запросом. Форма допустим обновляет статью за номером 1 вбазе.
Я же в браузере , в html разметке могу руками поменять на /mysite/aticles/2? И соответственно если да, то данные обновятся на сервере для статьи 2, так ведь?
Как таког избежать, делать в разметке какой то уникальный токен, на сервере его сохранять в базу для каждой формы, и проверять его?



Ответы: >>1865962 >>1866133
Аноним 2020/11/25 20:30:57  №1865761 390
>>1865498
>>1865531
"Не факт", "не обязательно". Наверное у деда хуй стоит в девяносто лет, да только никто этого не видал.

Вот в мариадб оптимизатор вам за шиворот срал. >>1865531 Вроде смотрел в EXPLAIN, а DEPENDENT SUBQUERY нихуя не увидел.
https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=f370a0c52b22ffa3e343112161f6edaa

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

Но писать хуйню, в надежде что оптимизатор переведет её в нормальный код это залупа полная.
Ответы: >>1868980
Аноним 2020/11/26 08:19:24  №1865962 391
>>1865691

Правильнее всего на сервере проверять права: имеет ли данный пользователь право редактировать данную статью. Также, можно использовать и проверять токен в URL (/articles/1/abcdefghi) но это более корявое решение.
Аноним 2020/11/26 11:57:35  №1866112 392
>>1849138
приветствую. Что можешь по поводу в бека с нуля посоветовать для вката в течении полу-года +-. Стоит ли курс в шапке учить или что-то другое мб надо. Что нужно кроме пыхи (ларавэл) для бэка джуна? Как правильно хантить вакансии (ибо если просто писать back end, то выводит всё, что угодно, кроме самого бэка (или я не правильно представляю, чем бэк занимается?))

Заранее спасибо
Ответы: >>1866133
Аноним 2020/11/26 12:18:17  №1866125 393
Бампую вопрос выше, тоже интересно
Ответы: >>1866133
Аноним 2020/11/26 12:39:53  №1866133 394
>>1865691
Проверять программно, если у авторизированого юзера есть возможность только себя менять, или наоборот - менять всех кроме себя. Должен ли не авторизированный пользователь иметь возможность менять данные? Если да, то почему он не может изменить данные с другим айдишником? И так далее

>>1866112
>>1866125

>Стоит ли курс в шапке
Норм курс, можно местами пропускать. Например сделать студентов и потом сразу на ларавел/yii сесть

>(или я не правильно представляю, чем бэк занимается?))
Я когда пришел в контору меня уже продавали как мидла слабого. Чем занимаются джуны - хз. Джуну нужна норм база как в беке, так и в фронте. Поле там поправить какое нибудь, цвет кнопки может поменять - хз.
На чисто бекенд вакансии планка выше всегда, я хз как вы туда попадете. Самый нормальный вариант - искать контору у себя в городе. Если это не говно-подвал, где на вордпрессы шаблоны натягивают - можно за пол года вырасти в мидла (на это и делают упор когда берут джуна)

Ответы: >>1866159
Аноним 2020/11/26 13:25:05  №1866159 395
>>1866133

Обычно, чтобы быть миддлом, нужно иметь опыт от 3 лет.
Ответы: >>1866206 >>1866398
Аноним 2020/11/26 13:49:29  №1866178 396
>>1849078 (OP)
не совсем понял слысла задачки про l33tspeak, это же тоже самое что и предыдущая про шифрование. Да и тот код что по ссылке работает. Или нужно все буквы перевести?
Ответы: >>1868980
Аноним 2020/11/26 14:05:14  №1866195 397
ОП, оцени что я тут накрутил по YodaSpeak. Пойдет?
На мой личный взгляд, самая сложная задача, если сравнивать с предыдущими. Надо прям хорошо понимать как устроены массивы и функции для работы с ними.

https://ideone.com/Uzw8Ao
Ответы: >>1868972
Аноним 2020/11/26 14:20:35  №1866206 398
>>1866159
А синьером 10+? Кто такой мидл, кто такой синьер? А если у меня год опыта, а работаю я на позиции мидла то что? Вселенная дала сбой? хуйню не неси
Ответы: >>1866312 >>1866451
Аноним 2020/11/26 16:09:33  №1866312 399
>>1866206
>если у меня год опыта, а работаю я на позиции мидла
Значит работаешь в макакоконуре с номинальными позициями
Ответы: >>1869287
Аноним 2020/11/26 17:03:39  №1866369 400
>>1865628
Я от этой трансляции приуныл. Пиздец как больно слышать о том, что разработка пыха сейчас так похожа на допиливание костылей к сайту на битриксе, а то и хуже.
>Ну, самые лучшие практики по синтаксису в php никогда использоваться не будут, интерпретируемый язык всё таки, так уж парсер устроен
>Путь пхп был предопределен еще 4000 лет назад, мы следуем в рамках этого пути
>Чего в этой новой фиче такой синтаксис дэбильный? Ну это парсеру так удобней просто
>Ну такого мы сделать не сможем, это ж придется всё ядро переписывать
>Ну такое мы сделать можем, но это будет костыльно и замедлит работу в 20 раз
Ответы: >>1866374
Аноним 2020/11/26 17:05:02  №1866374 401
>>1866369
Трансляция не смотрел и на пыхе не пишу, но пыха с последними релизами приобретает более-менее адекватный вид даже арров функции добавили, охуеть!
Ответы: >>1866400
Аноним 2020/11/26 17:30:57  №1866398 402
>>1866159
>>Обычно, чтобы быть миддлом, нужно иметь опыт от 3 лет.

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

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

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

Аноним 2020/11/26 17:32:49  №1866400 403
>>1866374
И это интересно. Язык явно вырос из ниши цмс-ок, но при этом цмс-ки это основа рынка пхп. Какой то всратый дуализм.
Аноним 2020/11/26 18:47:39  №1866451 404
>>1866206

Это значит, что тебя называют миддлом, чтобы тебе было приятнее. А вообще, в разных конторах градации разные - сеньор из какой-то вебстудии может не потянуть в Яндексе даже на джуна.
Ответы: >>1869287
Аноним 2020/11/26 18:52:22  №1866455 405
image.png (16, 1415x206)
206x1415
Посоны, насколько это хуёвый вариант?
Ответы: >>1866643 >>1869632
Аноним 2020/11/26 19:12:25  №1866468 406
Ответы: >>1866627
АААААААААААААААААААААААААААААААА 2020/11/26 19:46:22  №1866518 407
Делаю посадочную на тильде, на странице нужно сделать СТА, пытаюсь шаблонами сделать - кнопка ходит по пизде, то большая, то маленькая
Пытаюсь сделать кнопку через код, а текст, бэк и остальное в пикче, кнопка ходит отдельно от текста
Пытаюсь сделать через код текст и под ним кнопку- работает либо текст либо кнопка

В програмировании вообще ни бум бум, нагуглил код на css - он вставляет либо кнопку либо текст, и то и то не дает сделать, как решить проблему и где ошибка?

Сам код:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.container {
position: relative;
width: 100%;
max-width: 3000px;
}

.container img {
width: 100%;
height: auto;
}

.container .btn {
position: absolute;
top: 60%;
left: 26.5%;
transform: translate(-75%, -50%);
-ms-transform: translate(-75%, -50%);
background-color: #000000;
color: white;
font-size: 16px;
padding: 18px 24px;
border: none;
cursor: pointer;
border-radius: 10px;
text-align: center;
}

.container .btn:hover {
background-color: gray;
}
</style>
</head>
<body>

<div class="container">
<img src=картинка width="100%" alt="123" >
<button class="btn">Ебануться</button>
</div>

</body>
</html>
Аноним 2020/11/26 22:05:38  №1866622 408
А есть ли какая-нибудь информация, будут ли когда-то в PHP примитивы или как оно там называется, чтобы можно было сделать вот так?:
$a = "foobar";
$b = $a->trim()->toUpper()
А то сейчас очень отвратный дизайн, когда скобки в скобках в скобках в скобках
Ответы: >>1866625 >>1867444
Аноним 2020/11/26 22:15:47  №1866625 409
>>1866622
Это называется autoboxing и unboxing.
Аноним 2020/11/26 22:20:09  №1866627 410
>>1866468
Короче делают из пыхи жабу)
Аноним 2020/11/27 00:45:08  №1866643 411
>>1866455
Внимательно прочитай задачу:
Нужно получить имена пассажиров, у которых длина имени равна максимальной длине имени в таблице.

Соответственно запрос будет состоять из двух частей:
1) Получение максимальной длины имени в таблице
SELECT MAX(LENGTH(name)) FROM Passenger

2) Получение имен пользователей, у которых длина имени равна максимальной:
SELECT name
FROM Passenger
WHERE LENGTH(name) = максимальная длина

Постановка задачи это половина ответа.
Ответы: >>1866921
кто 2020/11/27 00:54:39  №1866644 412
Пацаны, чем существенно ПЭХАПА отличается от ПИТОНА, не в плане фрейворки другие или переменные через доллар, а в плане языка?
Ответы: >>1866690 >>1866694
Аноним 2020/11/27 06:21:30  №1866690 413
>>1866644
Опять кликбэйт на обсуждение хуй пойми чего
Ответы: >>1867516
Аноним 2020/11/27 06:46:41  №1866694 414
>>1866644
Разное количество вакансий и характер этих вакансий.
Аноним 2020/11/27 11:49:25  №1866921 415
>>1866643
но ведь подзапрос в WHERE это плохо. выше по треду обсуждали ведь
Ответы: >>1867133
Аноним 2020/11/27 13:50:29  №1867014 416
IMG2956.JPG (149, 1080x1349)
1349x1080
Салам алейкум, пыхеры. У меня есть приложка на symfony, и еще 2 микросервиса в придачу. Все они пишут логи в файлы в папке ./var/log/prod. Вопрос: Как мне лучше собирать логи в одно место, чтобы с веб морды все просматривать?

На текущей момент в моей голове плавает следующие мысли:
1. Graylog(но мне кажется уж слишком чересчур для трех файлов логов)
2. Самописный скрипт, который распарсит файлы и выведет в вебморду, а на js через регулярку подсветку(INFO, WARN, ERROR, etc..)
3. Какой-то открытый проект(о котором я еще не знаю), который подойдет под мои масштабы бедствия



Ответы: >>1867155
Аноним 2020/11/27 15:46:17  №1867133 417
>>1866921
Ну ты и жопочтец, конечно. Подзапросы в SELECT это плохо.
Что по твоему происходит когда ты пишешь SELECT LENGTH(name) ? Для каждой строки результата выполняется функция LENGTH(). Точно так же для каждой строки результата выполнится подзапрос.

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

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

Про порядок выполнения написано здесь https://sql-academy.org/en/guide/syntax-sql-select.
Ответы: >>1867276
Аноним 2020/11/27 15:49:48  №1867138 418
Аноним 2020/11/27 16:09:03  №1867155 419
>>1867014
Что значит как собрать? Просто пиши логи не в файлы, а в общее хранилище.
Чаще всего этим общим хранилищем выбирают Elastic. Graylog, например, использует именно его для хранения логов. Но хранить можно хоть в мускуле, просто для эластика уже есть куча готовых способов логи визулизировать, как ты написал "веб морд".

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

Опцинально можно заморочиться с очередью, чтобы писать логи асинхронно и не падать если хранилище логов прилегло, но с твоими масштабами это вряд ли нужно.
Аноним 2020/11/27 16:44:03  №1867183 420
где радость от 8й версии?
Ответы: >>1867284
Аноним 2020/11/27 18:34:24  №1867276 421
Аноним 2020/11/27 18:44:19  №1867284 422
>>1867183
Когда будем юзать) Меня больше всего радует сахарок в конструкторе и именованные аргументы
Аноним 2020/11/27 19:03:39  №1867300 423
к слову о 8 пыхе, стоит ли на неё щяс перекатываться если я только учусь/вкатываюсь, или 7,4 для меня пока достаточно будет ?
Ответы: >>1867308 >>1867311 >>1867655
Аноним 2020/11/27 19:12:32  №1867308 424
>>1867300
хотя поздно я только что скачал 8 версию
Аноним 2020/11/27 19:16:13  №1867311 425
>>1867300
Пока лучше 7.3-7.4 (версию где ввели строгую типизацию у переменных классов) они самые актуальные и 8 обратно совместима с ними. У нас некоторые проекты на 7.1 ещё сидят. И один Легаси на 5, но скоро с нуля будем его переписывать. Новые в 7.4 делаем. В проде 8 будет появляться только через годик-полтора.
Аноним 2020/11/27 21:10:13  №1867444 426
>>1866622
Короче, вы мне не ответили, нашел статью от Никиты Попова по этому поводу http://nikic.github.io/2014/03/14/Methods-on-primitive-types-in-PHP.html
Конечно охуеть, статья в 2014 написана, на тот момент он уже выкатил рабочий пример и написал что желает увидеть эту фичу в шестой версии, но пока что ему лень ее доводить до ума. Уже 2021, что за херня? Может они там у себя в шестую версию добавили, а в седьмую забыли?
Аноним 2020/11/28 02:54:57  №1867516 427
Аноним 2020/11/28 09:21:49  №1867655 428
>>1867300
Только после того как вкатишься в 7,4. Фреймворки еще года полтора будут переходить на 8-ку.
Аноним 2020/11/28 10:26:00  №1867683 429
Аноны, есть МООС-курсы на пхп по типу Фрикодкэмп для ЖСа, хиперскила для джавы и юлерна для шарпа? Автотестики, короткие видео, небольшие лекции в текстовом формате - вот это вот все?
Ответы: >>1867799
Аноним 2020/11/28 14:55:08  №1867799 430
Ответы: >>1867803
Аноним 2020/11/28 15:02:49  №1867803 431
>>1867799
Дополню, можешь убрать symfony-pack в конфиге и будет чистый тест на php (массивы, ооп и т.д.)
Аноним 2020/11/28 16:22:08  №1867825 432
6rbq35occu441.jpg (68, 811x642)
642x811
Уважаемые аноны, тупой, но не унывающий в треде. Подскажите, пожалуйста, подойдет ли мне такая конфигурация сервера на первый месяц для видео хостинга с короткими видео 1-3 минуты. Пик онлайна планирую ~1000 человек (с трафиком я дружу)

Процессор: Intel® Xeon® E-2146G 6x3.50 GHz (до 4.50 GHz Turbo Boost) / 12 Threads
Память: 32 GB DDR4
Диск: 240 GB SSD
Канал: 1Gbit/s + 15ТБ траффика.

Сайт сделан на laravel и я так понимаю мне нужно будет поставить библиотеку ffmpeg чтобы уменьшать битрейт у видео и меньше нагружать канал. Если не сложно, то подскажите как лучше уменьшить видео без потери качества. Поправьте, пожалуйста, если вопрос задан не корректно. я же тупой
Ответы: >>1867839 >>1868196 >>1868958
Аноним 2020/11/28 16:38:48  №1867839 433
>>1867825
>Intel® Xeon® E-2146G 6x3.50 GHz (до 4.50 GHz Turbo Boost) / 12 Threads
>Сайт сделан на laravel
Ларавель монолитный если чё
>мне нужно будет поставить библиотеку ffmpeg чтобы уменьшать битрейт у видео и меньше нагружать канал
Нужно просто пережать существующие\уплоадеющиеся юзерами видео?
Ответы: >>1867848
Аноним 2020/11/28 16:52:04  №1867848 434
>>1867839
Скажите, пожалуйста, как монолитность связана с процессором?
Да, нужно пережимать видео которые загружают пользователи.
Ответы: >>1868021
Аноним 2020/11/28 19:59:10  №1868021 435
>>1867848
Архитектурно сложнее реализовать весь потенциал процессора, если всрато написано - вбухивая больше бабла перформанс не улучшить
Монолит нужно грамотно кластерить, шерить базы данных и лоад балансить плюс более громоздкие хендл нон-блокинг ио и прослойка под сервисы
С дивана советую начинать выносить сервисы в отдельные микросервисы, как раз начиная с этого ffmpeg конвертатора (может и весь уплоад эндпоинт)
Ответы: >>1868039 >>1868125 >>1868162
Аноним 2020/11/28 20:18:30  №1868039 436
>>1868021
Информацию принял, записал, спасибо. Посоветуете что-нибудь на счет характеристик сервера?
Ответы: >>1868064
Аноним 2020/11/28 20:36:12  №1868064 437
>>1868039
Ну это целая continuous delivery задача для девопса-программиста, который будет код ревьювить, тестировать, разворачивать и профилировать
Гадая на кофейной гуще: если написано всрато - никакие 6 кор не помогут, если спроектированно и написано заебись - может хватить и меньше, но хз
Аноним 2020/11/28 21:23:01  №1868125 438
>>1868021

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

Ты ошибаешься, думая, что "монолитное" приложение не может использовать несколько ядер процессора. Наоборот, оно прекрасно масштабируется на них из коробки - просто создается нужное число PHP-FPM процессов.

БД также масштабируется из коробки, так как MySQL обрабатывает каждое соединение в отдельном треде.

Для сайта с 1000 посетителей этого вполне достаточно.

> С дивана советую начинать выносить сервисы в отдельные микросервисы, как раз начиная с этого ffmpeg конвертатора (может и весь уплоад эндпоинт)

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

Микросервисы повысят затраты рабочего времени и стоимость разработки и поддержки.

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

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

У монолита огромное число плюсов. Разбиением на микросервисы обычно занимаются в двух случаях:

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

Автору в данном случае с его микроприложением разбивать на части просто нечего. Разбивать можно от объемов в десятки человеколет.

Вообще, с этими микросервисами какое-то помешательство творится.
Аноним 2020/11/28 21:55:29  №1868162 439
>>1868021
>>1868125
Блять, и как вообще нормально вкатываться в этот ваш айти, если даже по таким базовым вопросам можно услышать настолько разные ответы?
мимо
Ответы: >>1868347
Аноним 2020/11/28 22:05:48  №1868169 440
>>1868125
Про немасштабируемость монолитов наверное я и вправду написал куйню
Но фсные операции с видео я бы всё равно вынес в отдельный сервис, оборачивающий какой-нибудь гринтредовый бинарник, или дописал бы этот гринтредовый бинарник в отдельный эндпоинт и форвардил запрос туда
Ответы: >>1868256
Аноним 2020/11/28 22:33:36  №1868186 441
>>1868125
> Никакой, только с микросервисами архитектура бессмысленно усложняется на ровном месте, нужно возиться с докерами
В случае видео или фото проблема актуальна, чтобы как-то балансировать нагрузку.

Самая грамотная архитектура в данном случае это один или несколько воркеров, которым ты в очередь кладёшь задание "перепаковать что-то", и из другой очереди, например, получаешь ответ.

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

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

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

То есть поднимать отдельный сервис для перепаковки, очередь сообщений и т.п. не нужно. Вроде бы у тебя один процесс, а реально микросервисный подход, при желании быстро в полноценный микросервис переносится.
Ответы: >>1868256 >>1868421 >>1868714
Аноним 2020/11/28 22:53:44  №1868196 442
>>1867825
В твоём случае выносить перепаковку видео в отдельный микросервис необходимо просто.

Ставить брокер очередей-сообщений не обязательно, для твоей задачи можно в качестве очереди использовать БД, это такой типовой подход.

Пользователь загрузил видео, оно копируется в какой-то каталог. В БД в специальную таблицу вносится запись имя файла такое-то, пользователь такой-то, статус "не обработано".

Другой процесс, когда свободен, опрашивает БД, берёт запись оттуда, запускает процесс перекодирования. Как закончит, заносит в БД статус "перекодировано", имя нового файла-размер. После чего принимается за следующее видео.

Более правильный подход это полноценные очереди делать (вроде RabbitMQ), но иногда лучше проще, чем энтерпрайзно.

Главное, для чего это нужно, это чтобы балансировать нагрузку, иначе у тебя очень быстро сервер ляжет.

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

Если ролик в среднем 15Мб, то это всего 1 миллион просмотров.
Ответы: >>1868256 >>1868714
Аноним 2020/11/29 00:55:30  №1868215 443
Вопрос по DI-контейнерам. Может кто нибудь объяснить как работать с зависимостями в проекте, через контейнер, если реализации сильно вариативны. То есть например есть некий класс документа с большим количеством бизнес-правил и для его заполнения используются разные наборы сервисов/серчеров/репозиториев, которые подтягиваются через фабрики и стратегии. Как в таком кейсе правильнее использовать контейнер?
Ответы: >>1868958
Аноним 2020/11/29 06:21:34  №1868256 444
Аноним 2020/11/29 09:18:29  №1868343 445
Где и как лучше взять первый заказ по PHP?
Ответы: >>1868349
Аноним 2020/11/29 09:30:07  №1868347 446
>>1868162
>>Блять, и как вообще нормально вкатываться в этот ваш айти,
Ойти ныне - для смелых. Это со стороны какжется что крутые парни выбирают идеальные решения. ИРЛ все пишут как могут, а холивары бесконечны. Есть некая средняя планка качества которой нужно соответствовать, и то условно. Не мало успешных проектов какторые написаны через сраку, антипаттерн на антипаттерне. И их владельцам поебать чет там камьюнити кукарекает - они бабки поднимают. Как войти - ебашь свои проекты, количество перерастет в качество.
Аноним 2020/11/29 09:31:46  №1868349 447
Аноним 2020/11/29 11:28:24  №1868421 448
>>1868186
так что больше 1 ядра смысла брать без пердолинга нет?
Ответы: >>1868439 >>1868472 >>1868714
Аноним 2020/11/29 11:50:23  №1868439 449
>>1868421
Есть, анон выше же написал, что проект как минимум поспавнит php-fpm процессы + фреймворкные воркеры на нон-блок таски
Но имхо в пыхе нон-блок тасков лучше избегать и вынести вычисления (конвертация видео в этом случае) за пределы вебаппной логики
Аноним 2020/11/29 12:29:31  №1868472 450
>>1868421
Нужно, чем больше, тем лучше.
1) Ты запускаешь много php-воркеров в любом случае.
2) При плохой архитектуре у тебя может работать много ffmpeg процессов одновременно.
3) ffmpeg для перекодирования использует много тредов, по числу ядер, там скорее надо вручную лимитировать через опцию -threads.

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

Самый канонический подход, несложно и надёжно.
Аноним 2020/11/29 15:31:05  №1868645 451
Начал входить в PHP.

Закончил вуз по профильной специальности. Что-то кодил на крестах, Матлабе и прочем разном. Параллельно 1С программистом 3 года уже проработал, так как хотел деньги, а там порог входа был невысокий и платили уже много, дали совмещать с учёбой.

Счас закончил учёбу полностью (магистратура) и хочу в бекенд на полный рабочий день.

Но, блдеать, почему везде написано от 1 года опыта во всех вакансиях ? Тот факт, что я 1Сной разработкой занимался или на других ЯП какие-то штуки пердолил в рамках универских задач и вообще - их не ебёт ?
Этот год опыта должен быть именно пхп-программистом или что имеется ввиду, когда в вакансиях вроде требования низкие, но всё равно год опыта пишут ?

Ответы: >>1868667 >>1868692 >>1869293
Аноним 2020/11/29 15:45:14  №1868667 452
>>1868645
А сходить на собес просто не пробовал?
Ответы: >>1868679
Аноним 2020/11/29 15:50:24  №1868679 453
>>1868667
Пока боюсь, чтоб не подумали, что я лох какой-то. Дрочу базу, ларавел и синтаксис, чтоб от руки отскакивал.
Ответы: >>1868891
Аноним 2020/11/29 15:57:27  №1868692 454
>>1868645
С твоим бэкграундом тебе вкатиться как нехуй делать, не ссы. Прикинь, что было, если бы все писали "без опыта"? Они бы ахуели от толпы Петровичей, которые решил стать пахрамистами. Подтяни знания по стеку и вперёд.
Аноним 2020/11/29 16:13:21  №1868714 455
>>1868186
>>1868196

Для работы с очередями не требуется микросервисов. Один и тот же монолит может как класть задачи в очередь (на основе БД), так и брать их и выполнять. При этом при необходимости можно этот монолит запускать на нескольких серверах и масштабировать хоть до бесконечности.

Разделение на микросервисы не требуется.

>>1868421

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

Ответы: >>1868748
Аноним 2020/11/29 16:40:36  №1868748 456
>>1868714
>Для работы с очередями не требуется микросервисов. Один и тот же монолит может как класть задачи в очередь (на основе БД), так и брать их и выполнять.
Архитектурно это фактически и есть микросервис, просто без физического выделения.

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

Причём я не очень понимаю, как это реализовать на PHP, когда работает много php-fpm процессов. Ведь потребность перекодировать может у любого возникнуть, причём одновременно.
Ответы: >>1868946
Аноним 2020/11/29 18:23:29  №1868891 457
>>1868679
Личные качества: решительность, упорность, дисциплинированность гораздо важнее чем какой угодно скилл. И гораздо тяжелее достигаются. Не ссы и пиздуй на собес.

Корона — дерзновенному, скипетр — смельчакам!
Трон — тому, кто говорит: Возьму и не отдам.
«Черта с два! — вскричал барон, прочь отбросив шлем, —
Хладное железо властвует над всем!

Аноним 2020/11/29 19:34:25  №1868946 458
>>1868748

Это не микросервис. Микросервис - это отдельное приложение с отдельным кодом и зачастую отдельным хранилищем (БД).

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

Нафиг не нужны эти ваши микросервисы.
Ответы: >>1868970
Аноним 2020/11/29 19:42:40  №1868958 459
>>1868215

> используются разные наборы сервисов/серчеров/репозиториев, которые подтягиваются через фабрики и стратегии

Все это и кладется в контейнер. Все сервисы, репозитории и стратегии.

>>1867825

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

Ответы: >>1869143
Аноним 2020/11/29 19:52:50  №1868970 460
image.jpeg (6, 225x225)
225x225
>>1868946
Анон сверху заигрался и ларавельные воркеры и вправду сложно назвать и сервисами, не говоря уже о микросервисе
В чём твоя проблема поймать запрос на операцию с видео монолитом, прокрутить мидалварями чек сессии с пермишеннами и редиректнуть на микросервис, не имеющий представления о юзвере и выполняющий только выделенную операцию (о логике которой, в свою очередь, монолит не обязан знать за пределами роутов веб апи) будучи подключенным к тому же мускельному пулу, если надо
Ответы: >>1869013 >>1869014
Аноним 2020/11/29 19:55:17  №1868972 461
>>1866195

Мне кажется, регулярку для разбиения текста лучше было написать так:

- до текущей позиции знак препинания
- после текущей позиции не знак препинания

То есть использовать не только look back assertion, но и look ahead.

> $wordsArray
Лучше писать просто $words

> [А-Я][а-я]
Надо писать [a-яё], так как ё в Юникоде не входит в диапазон а-я.

Сам код немного переусложнен. Вот как можно сделать чуть короче:

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

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

Также, достаточно использовать один цикл по предложениям.
Ответы: >>1868981
Аноним 2020/11/29 20:08:01  №1868980 462
>>1866178

Вообще да, по сути то же самое.

>>1865761

Я написал, что утверждение "подзапрос всегда менее эффективен, чем джойн" неверно и все зависит от работы оптимизатора БД. Ну да, MariaDB не смогла оптимизировать, может какая-то другая СУБД сможет. Хотя планы выполнения запросов были похожи.

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

Аноним 2020/11/29 20:08:07  №1868981 463
>>1868972
>$words, not words!
— Minsc probably
Аноним 2020/11/29 21:15:31  №1869013 464
>>1868970

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

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

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

Единственная проблема монолита - негативное отношение спикеров на конференциях. Что можно пережить.
Ответы: >>1869025
Аноним 2020/11/29 21:19:43  №1869014 465
>>1868970

Если написанное выше сложно и запутанно, то могу выразить мысль короче:

Для вашего (не-гугла) проекта монолит - идеальное решение в сравнении с микросервисами. Все, кто предлагает его разбить на микросервисы, просто занимаются вредительством и нанесением убытка.
Аноним 2020/11/29 22:00:00  №1869025 466
>>1869013
Ты охуенно переливаешь из пустого в порожнее. При этом еще и выдумал какое-то свое определение микросервисов. Я примерно представляю себе структуру простейшего видеохостинга, я её опишу и некоторые требования к ней, а ты нам конкретно расскажи как это сделать по твоему.

Итак видеохостинг.
У нас есть железный сервер 8 ядер, 32гб оперативы, на 1К пользователей с запасом. На этом железе нужно разместить следующее:
1) Сайт, на который собственно заходят пользователи.
2) Админку, администрация должна иметь возможность управлять содержимым.
3) Реляционную базу, допустим MySql.
4) Memcached для реляционной базы.
5) CDN сервер, собственно с видео.
6) Elastic для поиска.
7) Несколько воркеров, которые перекодируют пользовательские видео.

Теперь требования к работе всего этого добра:
1) Сайт и админка должны работать стабильно всегда. Если не работает, то минус конверсия, или проще минус бабки.
2) Memcached не должен падать если упал любой другой сервис. Упал мемкеш -> все что было в оперативе по пизде -> нагрузка на базу -> сайт не работает -> смотри пункт первый.
3) CDN не должен жрать весь канал, мы не только видео отдаем. Опять смотри пункт первый.
4) У воркеров должно быть максимум доступных ресурсов, но не все, опять пункт первый.

Монолит, хуелит. Расскажи как ты будешь такое реализовывать, с соблюдением требований конечно. Требования типичные, не только к видеохостингу относятся, а к 99% сайтов.
Аноним 2020/11/29 22:56:15  №1869029 467
image.jpg (11, 300x300)
300x300
Нормально я щитпостнул про монолит
Аноним 2020/11/30 06:31:28  №1869109 468
Аноны, кто знает как работает автовайринг в ларавел, или допустим в slim с контейнером php-di? То как разрешаются зависимости для сервиса в контейнере - понятно. Я щас просто хочу переехать в своем приложении со слим 3 на четвертую версию. А там много где используется автовайринг, причем классы которые разрешаются в кострукторе класса на пример в доменном слое - не являются зависимостями которые определены в контейнере.
Типа такого:

Сервис доменного соля

ServiceClass{
//Объект Class1 не находится контейнером, но как то разрешается все равно. В ларавел это в принципе стандартная тема.
__construct( Class1 $class1 ){...}

}
Ответы: >>1869165
Аноним 2020/11/30 08:09:58  №1869143 469
>>1868958
Кладутся все варианиты постороения цепочек? Или просто некий дефолтный вариант, а остальные вариации сетаются уже на app уровне? Либо вообще делать все зависимости nullable и в контейнере складывать только сами экземпляры, как я видел в одном старом проекте, но какой же это тогда DI...
Ответы: >>1869147
Аноним 2020/11/30 08:19:07  №1869147 470
>>1869143
То есть для примера, есть класс Document, у него есть несколько фабрик, которые выбираются исходя из данных в запросе, соответсвенно у каждой фабрики своя генерация полей документа, которые в свою очередь подтягиваются из разных репозиториев через свои сервисные классы. Тупа перечислить все варианты в контейнере не выйдет. Вот я и пытаюсь понять, как в таком кейсе было бы правильно использовать контейнер.
Ответы: >>1869640
Аноним 2020/11/30 09:18:07  №1869165 471
>>1869109
https://www.php.net/manual/ru/book.reflection.php

Програмно можно получить список зависимостей у конструктора с типом зависимости по тайпхинту, и так рекурсивно до конца, а потом создать его. Офк если переменная просто int $a то контейнер не узнает что за инт ей нужен
Ответы: >>1869633
Аноним 2020/11/30 12:41:04  №1869254 472
чем пхп лучше сишарп?
Ответы: >>1869280 >>1869699
Аноним 2020/11/30 12:56:44  №1869264 473
1606741002954.png (4, 241x64)
64x241
Как научить netbeans 12 правильно выводить русский?
Аноним 2020/11/30 13:32:56  №1869280 474
>>1869254
А почему пыха должна быть лучше? (А так количеством работы и лёгкостью вката)
Ответы: >>1869289
Аноним 2020/11/30 13:44:26  №1869287 475
>>1866312
А можно пожалуйста критерии мидлов, синьеров и всех из них вытекающих? Уже ни раз обсуждали и разжевывали вам эту тему

>>1866451
> сеньор из какой-то вебстудии может не потянуть в Яндексе даже на джуна

Я такое вижу, мне вас реально жаль становится. Мидл, синьер и прочее - это по сути вилка зп и ответственность которую ты на себя берешь за эту зп. А то, как это называется и какой у тебя опыт - ебет кого? Чтобы получать мидловскую зп тебе не нужно 3года опыта, как высрал чел сверху. И эти же 3года опыта совсем даже не дают тебе гарантий что ты эту мидловскую зп будешь получать. И мидловская зп это не "макако-конторная", а средняя по рынку

И если я не ошибаюсь в яндексе на пхп не пишут, так что такие мидлы и синьеры нахуй им не сдались (собственно как и сам яндекс нахуй не сдался этим мидлам/синьерам)
Аноним 2020/11/30 13:46:21  №1869289 476
>>1869280
а если меня не интересует ни лёгкость вката, ни поиск работы
тип работа есть не айти
зарабатываю норм, себя по крайней мере без напряга содержу
есть маня идея для проекта
какую технологию выбрать чтоб она была быстрая, масштабируемая?
Ответы: >>1869297
Аноним 2020/11/30 13:51:08  №1869293 477
>>1868645
>Но, блдеать, почему везде написано от 1 года опыта во всех вакансиях ?

Потому что забей на это хуй и просто иди на собес. То что там про опыт где то в вакансии указано - очень часто с действительностью никакого отношения не имеет, разве что в самой вакансии могут написать что то вроде
Требования:
-От одного года коммерческой разработки на фреймворк/язык нейм
-и т.д
Ответы: >>1869670
Аноним 2020/11/30 13:53:11  №1869297 478
>>1869289
>какую технологию выбрать чтоб она была быстрая, масштабируемая?

На чем умеешь на том и пиши. Все равно если выстрелит и разрастется - твой говнокод лучше будет переписать
Аноним 2020/11/30 20:36:09  №1869632 479
>>1866455
Анончик, а что это ты за задания выполняешь? Расскажи пожалуйста.
Ответы: >>1870898
Аноним 2020/11/30 20:40:53  №1869633 480
>>1869165
Да я как то тупопездно спросил, выстрел в небо. Понятно что рефлексией. Сама логика реализации.
Одно дело когда зависимость вызываемая из контейнера требует для самой себя зависимости из контейнера. Все это выполняется внутри условного метода resolve - и понятно что контейнер найдет нужный класс.

А вот когда какой нибудь сервис автовайром тянет зависимость которой нет в контейнере - как вообще в этом случае участвует контейнер? Каким образом он доступен и видит что нужно резолвить эту зависимость. Контейнер это обертка над всем приложением, или где то там контейнер вызывается и его методы срабатывают при вызове зависимости сервиса.
Короче это только код смотреть. Тупой мой вопрос был.
Ответы: >>1869680
Аноним 2020/11/30 20:54:57  №1869640 481
>>1869147
я мимо шел. Щас с этой темой так же пердолюсь.

Есть приложуха на slim3, щас буду на slim 4 переезжать. В нем все несколько иначе.
В slim3 судя по гайдам был DI в виде антипатеррна - сервис-локатор.
Потому что контейнер передавался в конструктор контроллера. Соответственно необходимые зависимости контроллера скрывались.
В slim4 нет встроенного контейнера, но по гайдам самый частый вариант -php-di. Он гораздо богаче pimple из slim3.
Я к чему - php-di - при инициализации в нем можно создать набор зависимостей, этот набор так же попадет в экшен-контроллер или метод контроллера как контейнер доступный из $this. Однако, судя по примерам, по ходу выполнения скрипта другие зависимости, допустим в неком сервисе какой нибудь репозиторий вызывается - все это делается посредством инъекции в мтод или конструктор. И php-di по тайпхинтам как то резолвит эти зависимости.
Из чего такой вывод - если у а нас контейнер без автовайр, то те зависимсоти которые в slim4 автоматически разрешаются - должны быть определены в контейнере. Меня в таком случае это тоже смущает, так как в контейнере будет определено дохрена разных моделей, или репозиториев, всяких хелперов и прочего.
Вероятно в каких то местах инъекции должны быть жесткие, без участия контейнера.

Ответы: >>1869642 >>1869712
Аноним 2020/11/30 20:57:32  №1869642 482
>>1869640
п.с.

>>Вероятно в каких то местах инъекции должны быть жесткие, без участия контейнера.
Что бы уменьшить количество зависимостей в di контейнере
Аноним 2020/11/30 21:31:32  №1869670 483
>>1869293
>почему везде написано от 1 года опыта во всех вакансиях
Потому что в HH работодатель может выбрать только одну из опций, или "без опыта работы", или "от одного до трёх", или "от трёх до шести" ну и ещё другие.

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

Поэтому все указывают от "одного до трёх", даже когда в теле вакансии написано, что можно без опыта.

Короче не надо обращать внимания. Когда действительно хотят опыт, тогда указывают "от трёх лет", что не значит, что с годом коммерческого опыта к ним соваться не надо.
Аноним 2020/11/30 21:36:45  №1869680 484
>>1869633

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

Вот что-то похожее описано в мануале: https://php-di.org/doc/autowiring.html

Но для надежности, конечно, стоит проверить код.

Аноним 2020/11/30 21:53:52  №1869699 485
>>1869254
Только тем, что пых - не виндовое говно.
Аноним 2020/11/30 22:30:34  №1869712 486
>>1869640
Тоже самое тащемто, мигрировал на слим 4 с 3го, тот же php-di. Единственное у меня раньше на проекте di вообще не использовалось почти, вот пытаюсь понять как правильно.

Как кстати решил проблему совместимости старых методов Request/Response, если пришлось?
Ответы: >>1869944
Аноним 2020/12/01 00:06:16  №1869740 487
Дороу, скоро мне 24, стоит ли вообще хоть пытаться вкатиться в программирование, сам имею диплом из шараги тип прогер, даже курсачи писал на пхп, но на чистом.
Ответы: >>1869788 >>1870043
Аноним 2020/12/01 06:05:18  №1869788 488
>>1869740
>стоит ли вообще хоть пытаться вкатиться в программирование
нет конечно
Ответы: >>1869838
Аноним 2020/12/01 06:59:24  №1869812 489
Не знаю, как сделать две задачи:
https://sql-academy.org/ru/trainer/tasks/60
>Выведите идентификаторы преподавателей, которые хотя бы один раз за всё время преподавали в каждом из одиннадцатых классов.
и
https://sql-academy.org/ru/trainer/tasks/64
>Выведите имена всех пар пассажиров, летевших вместе на одном рейсе два или более раз, и количество таких совместных рейсов. В passengerName1 разместите имя пассажира с наименьшим идентификатором.

В первой сделал только общую таблицу всех уроков для всех 11-х классов
SELECT * FROM Schedule
INNER JOIN Class ON Schedule.class=Class.id
WHERE name LIKE '11%'


Во второй вообще не понимаю, как это решать. Явно какие-то джойны.
Ответы: >>1869842 >>1869912 >>1873184
Аноним 2020/12/01 07:58:28  №1869838 490
Ответы: >>1870469
Аноним 2020/12/01 08:05:05  №1869842 491
>>1869812
И ещё
https://sql-academy.org/ru/trainer/tasks/16
>Вывести отсортированный по количеству перелетов (по убыванию) список пассажиров, совершивших хотя бы 1 полет.
Ответ
SELECT name, COUNT(name) AS count FROM Passenger
INNER JOIN Pass_in_trip ON Passenger.id=Pass_in_trip.passenger
GROUP BY name
ORDER BY count DESC

не приняли. Видимо потому, что в таблице Pass_in_trip есть люди, которые купили несколько билетов на один рейс и этот запрос считает каждый билет отдельным вылетом.
То есть, нужно снаала вытащить номера пассажиров, которые вообще летали
SELECT DISTINCT passenger FROM Pass_in_trip
А затем как-то поджойнить что-то. Не понимаю, что и как, ве запросы выводят либо херню, либо не работают вообще.

Меня уже реально подбешивает синтаксис SQL. Вместо
Выполните Пуск->Панель управления->Администрирование->Службы->Superfetch - Отключить
пишешь что-то типа
Панель управления ->IN Пуск-> Отключить WHERE (Службы=Superfetch) FROM Администрирование
Кто вообще такую ебанину придумал? Почему нельзя было НОРМАЛЬНЫЙ синтаксис завезти?
Ответы: >>1869910 >>1869943
Аноним 2020/12/01 09:16:43  №1869910 492
>>1869842
Я уже писал, что реляционные базы это про наборы данных и их объединение. Разделяй свой запрос на отдельные наболры данных, а потом объединяй их.

>Вывести отсортированный по количеству перелетов (по убыванию) список пассажиров, совершивших хотя бы 1 полет.

Сначала считаем полеты у пассажиров:
SELECT passenger, COUNT(trip) AS count
FROM Pass_in_trip
GROUP BY passenger

Потом берем имена вместо идентификаторов:
SELECT p.name, trips.count
FROM (
SELECT passenger, COUNT(trip) AS count
FROM Pass_in_trip
GROUP BY passenger
) AS trips
INNER JOIN Passenger AS p
ON p.id = trips.passenger

Потом сортируем:
SELECT p.name, trips.count
FROM (
SELECT passenger, COUNT(trip) AS count
FROM Pass_in_trip
GROUP BY passenger
) AS trips
INNER JOIN Passenger AS p
ON p.id = trips.passenger
ORDER BY trips.count DESC

Если тебя путает формат записи, когда сначала выполняется то что внутри, то используй CTE. В этом тренажере используется MySql 8 он CTE поддерживает. С CTE запрос будет такой:

WITH passenger_trips AS (
SELECT passenger, COUNT(trip) AS count
FROM Pass_in_trip
GROUP BY passenger
),
named_passenger_trips AS (
SELECT p.name, passenger_trips.count
FROM passenger_trips
INNER JOIN Passenger AS p
ON p.id = passenger_trips.passenger
)

SELECT name, count
FROM named_passenger_trips
ORDER BY count DESC

Понятно что второй шаг можно пропустить, но это нужно чтобы ты понял чем ты вообще занимаешься. Ты берешь набор строк с количеством полетов, и объединяешь его с набором имен пассажиров. Чем меньше эти наборы, тем быстрее все будет работать. Математика уровня пятого класса.
Ответы: >>1871644
Аноним 2020/12/01 09:21:51  №1869912 493
>>1869812
Вот так решается 60 задача:

Получаем у кого вообще вел пары каждый препод:
SELECT teacher, JSON_ARRAYAGG(class) classes
FROM Schedule
GROUP BY teacher

А потом проверяем есть ли среди пар преподов пары одиннадцатых классов
SELECT Teacher
FROM (
SELECT teacher, JSON_ARRAYAGG(class) classes
FROM Schedule
GROUP BY teacher
) AS teacher_classes
WHERE JSON_CONTAINS(
teacher_classes.classes,
(SELECT JSON_ARRAYAGG(id) FROM Class WHERE name LIKE '11%')
)

JSON используется потому что ебучий MySql не поддерживает нормальные массивы, но идея та же самая. Можно список пар хоть в строку засунуть, просто перед проверкой придется эту строку опять разбить.
Ответы: >>1871644
Аноним 2020/12/01 10:06:23  №1869943 494
>>1869842
>>Почему нельзя было НОРМАЛЬНЫЙ синтаксис завезти?
Не тормози. Потому что все это основано на реляционной алгебре. Все это старше чем ты раза в три. sql синтаксим полностью своей задаче и логике удовлетворяет.
Сахар - это про фронтред макак.
Аноним 2020/12/01 10:08:30  №1869944 495
>>1869712
>Как кстати решил проблему совместимости старых методов Request/Response, если пришлось?

А какие там проблемы? Чет не столкнулся пока что. Они же и там и там psr7. Ток для slim4 пакет фабрик теперь отдельно. require slim/psr7 - я поставил и вроде все норм.
Ответы: >>1870194
Аноним 2020/12/01 12:35:41  №1870043 496
>>1869740
какой ты ответ ожидаешь услышать? люди в 30 лет вкатываются без проблем. если есть желание и интерес - просто бери и вкатывайся. гайд с нуля в шапке, но я бы советовал определиться с направлением сначала. фронт энд или бэк энд. так легче будет составить план действия по изучению и поделить задачи на мелкие
Аноним 2020/12/01 15:18:04  №1870194 497
>>1869944
В третьем слимовский вариант Реквеста и респонса был расширен, методами вроде getParam, getParsedBodyParam и тд, в 4м все это снесли для соответсвия psr. Если с респонсом еще нет проблем, просто оборачивается кастомным в фабрике, то чтобы вернуть подобные штуки в реквест, его приходится чуть не сначала пересоздавать. Вообщем я предпочел отрефакторить контроллеры, поменяв только респонс.
Ответы: >>1870741
Аноним 2020/12/01 19:50:00  №1870469 498
>>1869838
24 года это уже поздно, ты слишком старый
Аноним 2020/12/01 22:04:10  №1870565 499
ОП, что можешь посоветовать для изучения rabbitmq? Ну, как архитектурно приложение строить и так далее. Или там все настолько элементарно что просто ставишь php-amqplib и юзаешь? Есть ли смысл смысл в бандле для симфони (php-amqplib/RabbitMqBundle)? В Yii юзал либу для очередей, которая по консольной команде запускалась. Где почитать для чего, как и что делать правильно?
Ответы: >>1873184
Аноним 2020/12/02 09:00:21  №1870741 500
>>1870194
Я пока что не особо понимаю как в php-di работает этот автовайринг.
Я определяю роуты как экшен контроллеры:
Этот контроллер не инстанцирован в контейнер.

$app->get('/main', MainAction::class );

и судя по все в таком случае MainAction в конструкторе резолвит только те зависимости что есть в контейнере.
У меня в контейнере объекты ServerRequestInterface $request и ResponseInterface $response отсутствуют - и выпадает ошибка.
Но при этом при последующем вызове __invoke-метода( ServerRequestInterface $request и ResponseInterface $response ) - эти зависимости автоварятся. Короче пока что для меня все это из магии состоит наполовину. Нужно больше предолиться.



Ответы: >>1870849
Аноним 2020/12/02 11:46:50  №1870849 501
>>1870741
п.с.
Вообще кака то залупа получается. Чет меня этот ебаный php-di подбешивает. Сделал
$app->get('/main', MainController::class . ':main' ); - таким образом.
Мне нужно подтянуть в этот метод main класс MainService как зависимость
mainService - в контейнере изначально не определен. Рассчитываю на awtowiring
и по итогу хуйня получается

class MainController{

//если передать в конструктор MainService
public function __construct(ContainerInterface $container, MainService $mainService){
//то через конструктор зависимость MainService подтянется,
//но при этом, как я выше писал через конструктор нельзя подтянуть ServerRequestInterface $request, ResponseInterface $response.
//будет ошибка Entry "App\Action\MainAction" cannot be resolved: Entry "Psr\Http\Message\ServerRequestInterface" cannot be resolved: the class is not instantiable Full definition:

}

//тут получается хуйня - если я в методе определяю mainService - то выдает ошибку о том что передан нет клдасс а array
public function main( ServerRequestInterface $request, ResponseInterface $response ,MainService $mainSrvice ){
//Argument 3 passed to App\Action\MainController::main() must be an instance of App\Domain\Main\Service\MainService, array given
//с хуев ли array?
}


}


Я как то через жопу настроил, и не могу инъекции в метод контроллера проводить, только в конструктор
Ответы: >>1873172 >>1873174
Аноним 2020/12/02 12:20:38  №1870878 502
Есть один метод. Принимает в себя экземпляр класса Model, например.
Примет ли он экземпляр класса Event, если Event наследует Model?
В онлайн компиляторе работает, локально нет возможности проверить. PHP 7+
Ответы: >>1870893 >>1873172
Аноним 2020/12/02 12:47:22  №1870893 503
Аноним 2020/12/02 12:57:55  №1870898 504
Ответы: >>1871313
Аноним 2020/12/02 13:57:19  №1870973 505
>>1861344
Что это за хуйня вообще, зачем столько конкатенаций?
Аноним 2020/12/02 19:18:29  №1871313 506
Аноним 2020/12/02 22:47:32  №1871485 507
Аноны, кто знает как в связке slim4 + php-di добиться того что бы в контроллере, в нужном методе автовайрились нужные зависимости автоматически?
Чет нихуя красиво не получается, пока что получается что на каждый роут свой ActionController - в который загружается свой отдельный сервис, а в сервисе уже все требуемые зависимости через конструктор автовайрингом подтягиваются. Много файлов классов получается, но хоть прозрачно все.
Ответы: >>1873162
Аноним 2020/12/03 08:01:41  №1871595 508
Никто случаем не в курсе, как в редакторе Geany сделать так, чтобы результат выводился вот здесь?
Ответы: >>1871596 >>1872868
Аноним 2020/12/03 08:02:05  №1871596 509
Аноним 2020/12/03 09:50:25  №1871644 510
>>1869910
Спасибо.
Значит в 16 нужно было джойнить не сами таблицы, а сначала на основе таблицы билетов создать новую таблицу, а потом уже заджойнить её с существующей таблицей пассажиров. А зачем создавать псевдонимы? а многих сайтах вижу примеры сложных запросов, в которых куча псевдонимов. неужели это обязательно? Они же наоборот затрудняют чтение, вводя дополнительные имена.

>>1869912
А вот тут слишком для меня сложно. JSON_ARRAYAGG - это какие-то дальние закоулки документации, в гугле даже мало что с этой командой есть. Если для решения этой задачи нужно знать и помнить вообще все возможные функции (или как эти штуки называются?), то мне становится как-то стрёмно.
Ответы: >>1871773
Аноним 2020/12/03 12:11:57  №1871773 511
>>1871644
>А зачем создавать псевдонимы?
Псевдонимы нужны чтобы отличать какие поля к чему относятся. По умолчанию в качестве псевдонима используется имя таблицы, но оно длинное. Обычно сокражают по первым буквам, а если сокращение уже есть добавляют номер. Это удобно и можно понять почему именно такое название. А для подзапросов наоборот нужно придумать максимально понятное название, чтобы по нему было понятно что внутри.

>А вот тут слишком для меня сложно. JSON_ARRAYAGG - это какие-то дальние закоулки документации
Ты думаешь я помнил какие там функции есть? Я сначала сформулировал что мне нужно: структура в которой для каждого препода есть список классов, где он провел пары, потом сравниваем этот список со списком одиннадцатых классов и вуаля. JSON_ARRAYAGG это просто способ хранения. Первое что мне пришло в голову group_concat и find_in_set, но это совсем уж ебля мозга, поэтому я взял решение посовременней.

Вообще я бы НЕ рекомендовал учиться на MySql, даже 8 версии. Я понимаю что ты нашел пиздатый учебник, но лучше как для нервов так и для карьеры Postgres.
Ответы: >>1874372
Аноним 2020/12/03 18:18:12  №1872193 512
Здравствуйте, можно ли как-то поделить один файл php на ссылки не разделяя его при этом на разные файлы. Чтобы одной части кода задать один адрес, а другой части другой и т.д.
Ответы: >>1872480
Аноним 2020/12/04 04:37:49  №1872480 513
Аноним 2020/12/04 12:03:32  №1872726 514
Может кто-нибудь знает, как шторм откатить до версии 2020.2? Там просто в новой версии баг один очень неприятный с ларавелем. Разрабы написали, что пофиксят в обновлении, но когда оно будет неясно.
Аноним 2020/12/04 13:53:41  №1872837 515
Как вы относитесь к учебнику ОПа? Я вот дошел до задачки про сумму прописью и понял что без сторонней помощи и изучения чужих решений это просто нереально решить. В чем смысл тогда?
Ответы: >>1873084 >>1873162
Аноним 2020/12/04 14:06:51  №1872864 516
Крутая у вас тут шапка.
Аноним 2020/12/04 14:08:24  №1872868 517
>>1871595
К нему есть расширение, которое добавляет в это окошко терминал.
Аноним 2020/12/04 14:59:53  №1872966 518
А на php или хотя бы js есть какая-нибудь библиотека для работы с текстом на русском? То есть есть текст из него нужно составить словарь и посчитать сколько раз то или иное слово там используется, учитывая склонения, спряжения и другие производные формы.
Ответы: >>1873162
Аноним 2020/12/04 16:32:06  №1873084 519
>>1872837
Ссылку на задачу скинь
Ответы: >>1873089
Аноним 2020/12/04 16:37:53  №1873089 520
Ответы: >>1873120 >>1873253
Аноним 2020/12/04 17:25:37  №1873120 521
Аноним 2020/12/04 18:36:00  №1873162 522
>>1872966

Раньше была библиотека phpmorphy для этого.

>>1872837

Эта задача решается разбиением на более мелкие. Делаем функцию, которая умеет выбирать форму слова в зависимости от числа, делаем функцию, которая выводит числа от 1 до 999, и из этого собираем программу.

>>1871485

Ты можешь объявлять зависимости в конструкторе контроллера, для всех методов. Тогда, правда, будет подключаться чуть больше зависимостей, чем требуется для одного роута.
Ответы: >>1873300
Аноним 2020/12/04 18:50:04  №1873172 523
>>1870878

Согласно принципу Лисков, объект-наследник может применяться вместо объекта-предка. Этот принцип во многих случаях соблюдается, например new Event instanceof Model тоже вернет true.

>>1870849

Как мне кажется, для создания объекта-контроллера Слим вызывает php-di, потому в конструктор можно передавать зависимости. При этом php-di ничего не знает о request/response, и не должен знать, так как это не постоянные объекты, а создающиеся на каждый запрос. Их нельзя создать автоматически, так как в том же реквесте тогда не будут прописаны нужные параметры (какой URL, какие GET параметры итд).

Метод main() вызывает не php-di, а Слим, php-di тут никак не участвует, потому в него зависимости не передаются. А объекты request/response - передаются.

Что именно передается в callback, и откуда там 3-м аргументом берется массив, описано тут

- https://www.slimframework.com/docs/v4/objects/routing.html#route-callbacks
- и тут https://www.slimframework.com/docs/v4/objects/routing.html#route-strategies

Ответы: >>1873247
Аноним 2020/12/04 18:52:19  №1873174 524
>>1870849

То есть Слим действует как-то так:

- видит что контроллером указан MainController::class . ':main'
- просит DI контейнер создать сервис с именем MainController::class
- вызывает у объекта метод main и передает в него реквест/респонс.

Ответы: >>1873247
Аноним 2020/12/04 19:06:47  №1873184 525
>>1870565

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

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

>>1869812

С преподавателями есть несколько подходов.

Так как 11-х классов всего два, можно заджойнить таблицу Schedule саму на себя, с условием что справа и слева один и тот же препод (FROM schedule sch1 JOIN schedule sch ON sch1.teacher = sch2.teacher) и искать записи, где слева класс 11A, а справа 11B.

Но, что если классов может быть больше? Хочется более универсальное решение. Оно есть. Мы можем:

- взять таблицу schedule
- выбрать из нее только записи с 11-ми классами (WHERE)
- сгруппировать по преподам
- посчитать число уникальных классов COUNT(DISTINCT)
- оставить только записи, где это число >= 2 (HAVING)

SELECT teacher, COUNT(DISTINCT class) num
FROM schedule sch
WHERE class LIKE '11%'
GROUP BY teacher
HAVING num = 2

И без всяких JSON-ов! Учи SQL получше, это довольно простая задачка. Учись применять джойны и делать группировки.
Ответы: >>1873230 >>1874359
Аноним 2020/12/04 20:17:57  №1873230 526
>>1873184
>И без всяких JSON-ов!
Сильное заявление, проверять ты его конечно не стал.
Ответы: >>1873243
Аноним 2020/12/04 20:54:46  №1873243 527
>>1873230

В чем заявление? Просто написал, что есть решение без использования JSON-функций.
Аноним 2020/12/04 21:07:48  №1873247 528
>>1873172
>>1873174
Ок, спасибо! Я уже втянулся более-менее.
Аноним 2020/12/04 21:18:27  №1873253 529
>>1873089
Ссылку на задачу скинь, а не код. Сам искать не буду.
Ответы: >>1873300
Аноним 2020/12/04 22:47:54  №1873271 530
Привет, есть строка адреса.
В ней может быть что угодно забито юзером, вот пример:
1234 West Groove Street.

Так вот, например в реальности юзер может West написать как W, а Street как St, соответственно получаются следующие комбинации:
1234 W Groove St
1234 W Groove Street
1234 West Groove St
1234 West Groove Street

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

Ответы: >>1873282
Аноним 2020/12/04 23:27:28  №1873282 531
image (5, 504x546)
546x504
>>1873271
Навасянил за пол часа забейте.
Тот неловкий момент когда гоняешь туда-сюда строчки два года уже без перерыва, и уже даже забыл как цикл for() работает, не то что бы какие-то простейшие алгоритмические задачи решать по типу этой :((((
Ответы: >>1873378
Аноним 2020/12/05 02:27:23  №1873300 532
>>1873253
http://phpbook.ga/l1/finals.html
>>1873162
>Эта задача решается разбиением на более мелкие. Делаем функцию, которая умеет выбирать форму слова в зависимости от числа, делаем функцию, которая выводит числа от 1 до 999, и из этого собираем программу.
Я знаю из каких частей состоит программа, я не знаю что использовать для решения.
Ответы: >>1873339
Аноним 2020/12/05 07:18:09  №1873339 533
>>1873300
>я не знаю что использовать для решения
То есть? Реши более маленькую задачу, как перевести в текст цифры от 0 до 10.
Ответы: >>1873390
Аноним 2020/12/05 07:35:45  №1873342 534
Аноны, я дорос наконец до пердолинга с ооп по серьезному. Нужно чето почитать по этой теме.

Мет Зандстра из ОП поста пойдет? Или что то другое нужно?
Аноним 2020/12/05 09:16:59  №1873378 535
>>1873282
Это в чем ты код исполняешь, репл какой то?
Ответы: >>1873907
Аноним 2020/12/05 09:34:29  №1873390 536
>>1873339
Ну к каждому числу нужно в массиве добавить значение с нужным текстом, а что делать с числом типа "123"? Мне же не вручную заполнять массив для каждого числа от 0 до 999 и так далее.
Ответы: >>1873611
Аноним 2020/12/05 13:39:59  №1873611 537
>>1873390

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

Единственное, тут еще надо заморочиться с распознаванием чисел 11-19, для которых алгоритм выше не работает, но это можно добавить позже.
Ответы: >>1873656
Аноним 2020/12/05 14:32:21  №1873656 538
>>1873611
А как на десятки, сотни, единицы разбить? Не нашел это в учебнике.
Ответы: >>1873679
Аноним 2020/12/05 15:06:13  №1873679 539
>>1873656

Чтобы получить старший разряд числа, можно использовать floor($x / 1000). Например, 9876 / 1000 = 9.876, после округления останется 9. Чтобы получить младший разряд, достаточно взять остаток от деления числа на 10. Например, остаток от деления 9876 на 10 равен 6.
Ответы: >>1873705
Аноним 2020/12/05 16:07:37  №1873703 540
Господа, реально ли за вечер научиться писать простенькие юнит-тесты, чтоб хотя бы немного ими код покрыть? (тестовое задание на стажёра)
Ответы: >>1874036
Аноним 2020/12/05 16:10:27  №1873705 541
>>1873679
Ну вот смотри, разбиваем число 973 на (9, 7, 3) , то есть должно получиться прописью "девятьсот семьдесят три", но если начать сравнивать это с элементами массива, то естественно получиться "девять семь три". В чем тут прикол? Я видимо не очень умный.
Ответы: >>1873707 >>1874052
Аноним 2020/12/05 16:14:46  №1873707 542
>>1873705

Тут надо либо сделать 3 разных массива (для сотен, десятков и единиц), либо домножить числа на 100 и 10, чтобы получить не 9,7,3, а 900, 70 и 3 и тогда можно использовать один массив.
Аноним 2020/12/05 22:20:56  №1873907 543
Аноним 2020/12/06 05:27:21  №1874036 544
>>1873703
Реально.
Просто проверяешь что функция выполняет то, что ты от неё ждешь.
Юнит-тесты можешь посмотреть в тех же исходниках Symfony, ну или на ютубе.

Для проверки правильности твоих юнит-тестов можешь попробовать подключить мутационное тестирование (https://github.com/infection/infection) (оно проверит твои тесты, меняя проверки и др., и если тест крашнул - все хорошо)
Ответы: >>1874144
Аноним 2020/12/06 06:23:35  №1874050 545
Здравствуйте, если что-нибудь лучше ffmpeg для работы с видео?
Аноним 2020/12/06 06:35:17  №1874052 546
>>1873705
https://ideone.com/Z13J64

Для трехзначных работает, как теперь перейти к более большим числам и добавлять слова типа "рублей" и "тысяч"?
Ответы: >>1874249
Аноним 2020/12/06 09:47:53  №1874144 547
Аноним 2020/12/06 12:06:42  №1874249 548
>>1874052

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

По коду: цикл по массиву $spelling тут лишний. Чтобы взять из массива слово, достаточно использовать квадратные скобки, например:

$x = 100;
echo $spelling[$x];

Также, надо добавить условие, что если число оканчивается на 11-19, то вместо единиц и десятков по отдельности мы берем одно слово.
Аноним 2020/12/06 14:21:16  №1874359 549
>>1873184
>SELECT teacher, COUNT(DISTINCT class) num
>FROM schedule sch
>WHERE class LIKE '11%'
>GROUP BY teacher
>HAVING num = 2
Спасибо.
Аноним 2020/12/06 14:24:42  №1874372 550
>>1871773
>лучше как для нервов так и для карьеры Postgres.
С карьерой понятно, его сейчас каждый первый требует. А что насчёт нервов с майскулом не так, а с постгресом так?
Ответы: >>1874613 >>1874690
Аноним 2020/12/06 15:03:15  №1874420 551
Schedule.png (38, 1065x513)
513x1065
Можно ли как-то автоматически визуализировать БД в виде инфографики, типа пикрелейтед?
Ответы: >>1874510 >>1874558
Аноним 2020/12/06 15:58:06  №1874510 552
>>1874420
ER diagram называется, часто инструменты для построения такой штуки встроены в тулзы для работы с бд, вроде того же phpmyadmin.
Аноним 2020/12/06 17:22:48  №1874558 553
>>1874420
Аноны, вы тоже хуй забиваете на все эти связи между таблицами? Нигде в работе не видел что бы чет связывали.

Наверное в теории все это круто и заебись, но на практике рот все ебали когда все так жестко связано. Типа нельзя почистить одну таблицу без другой итд. Других объяснений я не нахожу.
Аноним 2020/12/06 18:12:52  №1874613 554
>>1874372
>Postgres
Я так понимаю что Postgres это подмножестово SQL.
sql и в африке sql, если в общем.
Аноним 2020/12/06 20:35:15  №1874690 555
>>1874372
да много чего не так.
Нет табличных выражений, не поддерживаются DDL запросы в транзакциях, не поддерживаются курсоры (точнее поддерживаются только внутри хранимых процедур), добавить колонку на таблицу под нагрузкой без блокировок нельзя.
Учи сразу PostgreSQL, дока на русском, курсов много.
Если знаешь PostgreSQL, а в вакансии MySQL, то не расстроятся, а если работал с MySQL, а в вакансии PostgreSQL, то напрягутся.
Аноним 2020/12/07 12:26:56  №1874952 556
>>1874558
На моей галере все проекты к каскадами. Хз как без ограничений внешних ключей. Это же каша а не бд получается.
Аноним 2020/12/07 12:46:08  №1874966 557
>>1874558
Ты что далбаёб совсем ? Я пока в PHP зелёный, но до этого оч много с SQL работал.
Как ты себе представляешь БД без связей ? Всё чистится, есть специальные алгоритмы, которые проверяют целостность БД и могут рекурсивно очищать в зависимых таблицах связи. Только думать надо - чтобы ничего не удалилось лишнего.
Ответы: >>1876014
Аноним 2020/12/07 13:31:25  №1875000 558
Как записать в куки сначала массив, а потом этот массив удалить? Хочу в функции получать только определенный набор значений из Кук и работать с ними, чтобы не тащить все говно туда.
Аноним 2020/12/07 14:18:22  №1875033 559
>>1874558
Бывает что нужно изменить связь (другой родитель, другая дочка) и в большой таблице это делать долго. Поэтому связи через классы описывают, а поля которые используются в таких связях просто добавляют в индекс.
Аноним 2020/12/07 16:51:51  №1875124 560
>>1874558
>Нигде в работе не видел что бы чет связывали.
пиздец, сваливай с такой работы. Это какое то дно
У меня прямо противоположная ситуация. Уже хер знает сколько лет не видел проектов без связей.

>Типа нельзя почистить одну таблицу без другой итд
ON DELETE CASCASE\SET NULL, в зависимости от бизнес-логики.
Аноним 2020/12/08 04:42:56  №1875540 561
https://stackoverflow.com/questions/65193082/custom-guard-attempt-always-returns-false-laravel-8

Пытаюсь прикрутить к Laraver-8 авторизацию через вторую таблицу. Не могу залогиниться в контроллере.

Auth::guard('manager')->attempt(['email' => $request->get('email'), 'password' => $request->get('password')]) всегда возвращает false,
хотя в то же время
Hash::check($request->get('password'), DB::table('managers')->where('email', $request->get('email'))->first()->password) возвращает true
Аноним 2020/12/08 06:56:16  №1875571 562
Аноны, кто знает, как пхп выполняется в контексте "потоков".
Вот у меня комп, 4 ядра, 4 гига. Допустим шиндовс.

Как это работает? Создается процесс на одном ядре-> и если все четыре ядразабились - то все, сервер лег ? Или в одном процессе создается что то типа потока , в котором выполняется скрипт, и потоков на одном ядре могут сразу выполняться тысячи?
Чет я на хабре прочел и нихуяч не понял.
Ответы: >>1875622 >>1876083
Аноним 2020/12/08 08:39:11  №1875622 563
>>1875571
п.с.
Т.е. пхп умеет паралельно выполнять разные скрипты на одном ядре? Или на каждом ядре все скрипты выполняются по очереди?
Ответы: >>1875632
Аноним 2020/12/08 09:02:59  №1875632 564
>>1875622
п.п.с.
Или вэб-сервер создает какое то количество потоков в (10 или 20 или 500), в соответствии с количеством запросов, и в рамках каждого потока запускае5тся скрипт пхп, ну и выполняется?
Ответы: >>1875757
Аноним 2020/12/08 12:09:05  №1875757 565
>>1875632
this
Упрощенно, на каждый запрос порождается отдельный поток, в котором и выполняется скрипт. После выполнения поток закрывается.
Алсо, потоков на компе может выполняться очень много параллельно. Не обязательно по числу ядер. Почитай про многопоточность
Ответы: >>1876018
Аноним 2020/12/08 14:37:04  №1875947 566
Ребят. У меня к вам вопрос.
Делаю туду. И пришел к моменту, когда нужно данные сохранять.
Так как меня больше интересует жыес а писание на пхп хочу свести к минимуму. А скьюел вообще лень. То подскажите мне.

Сейчас у меня сохранение происходит записью хтмл кода в блокнот по клику на кнопочку. Тупо берется контейнер и его детей записываются в блокнот. Сразу задам вопрос. Насколько это тупо? И делают ли так нормальные люди?

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

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

Приклейтед когда думаю об нормальной БД.
Ответы: >>1876022 >>1876023
Аноним 2020/12/08 15:40:21  №1876014 567
>>1874966
>в зависимости от бизнес-логики
До тех пор пока не удалится то, что удалять было нельзя. Каскады работают на определенном масштабе. Когда у тебя база перевалит таблиц за пятьдесят каскады превратятся в ромбы и кольца, и ты физически не будешь знать что вообще удалится вместе с твоей мелкой хуйней. А скорее всего не удалится, а выдаст ошибку, что удалять нужно что-то другое или что-то не получается удалить.

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

Ну останутся когда-нибудь где нибудь не удаленные записи, которые никто никогда не увидит - это вообще похую. Главное что у пользователя все происходит мгновенно и не приходится ждать когда там этот каскад отработает, если вообще отработает.
Ответы: >>1880999
Аноним 2020/12/08 15:40:59  №1876018 568
>>1875757
Понял, спасибо. Второй вопрос - opcache он по дефолту выключен получается? Если я для своей приложухи тупо его включу - будет работать из коробки , или что то где то наебнется ?
Аноним 2020/12/08 15:45:34  №1876022 569
16065003212270.jpg (87, 959x932)