«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP #111 Аноним 2019/08/02 18:13:33  №1446969 1
Привет. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

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

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

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

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

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

С чего начать

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

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Visual Studio Code, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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
- Еще более сложная и долгая задача на Yii/Symfony: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- Если ты все решил, переходи к Symfony 3/Doctrine 2
- Почитать про паттерны 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? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Напоминание Аноним 2019/08/02 18:18:30  №1446971 2
grammar.png (56, 500x644)
644x500
1393868234423.jpg (202, 1024x768)
768x1024
Напоминание. Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.

Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492

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

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

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

PSR-1: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md

Аноним 2019/08/02 18:19:49  №1446974 3
Я постараюсь глянуть непроверенные вопросы в предыдущем треде, но если вы о них тут напомните, хуже не будет.
Аноним 2019/08/02 20:08:05  №1447062 4
>>1446974
Да хранят тебя и всех остальных аношек треда Небеса, вы заняты богоугодным делом
Аноним 2019/08/03 14:50:19  №1447478 5
Аноним 2019/08/03 14:52:28  №1447479 6
Аноним 2019/08/04 06:10:44  №1447798 7
Как в Laravel при валидации сделать так, чтобы следующее поле проверялось ТОЛЬКО ЕСЛИ предыдущее было провалидировано успешно?

Как ни странно, такой элементарной хуйни там до сих пор не завезли.
Все поля валидируются одновременно всегда.
Аноним 2019/08/04 07:31:13  №1447810 8
>>1446974
Эта кружка кофе была за твое здоровье, анон.
Аноним 2019/08/04 07:39:02  №1447814 9
>>1447798
Что за задачу ты решаешь? На первый взгляд подход не верный
Аноним 2019/08/04 08:15:26  №1447820 10
>>1447798
Одновременно это как? Можно пример валидаторов?
Аноним 2019/08/04 08:16:39  №1447821 11
Аноним 2019/08/04 09:33:58  №1447852 12
>>1447814
>нинужно
Ну вот пошли мантры
Аноним 2019/08/04 09:35:26  №1447854 13
>>1447821
Хуеил. Это в рамках проверки ОДНОГО параметра запроса.
Если первое правило провалилось, остальные не проверяются.

А мне надо то же самое, только чтобы если валидация предыдущего ПАРАМЕТРА провалилась, то текущий проверяться вообще не будет.
Аноним 2019/08/04 11:26:11  №1447901 14
>>1447854
>первое ПРАВИЛО
>остановить выполнение правил проверки ввода для атрибута после первой ОШИБКИ
Аноним 2019/08/04 11:36:20  №1447910 15
>>1447854
Анон ты тупой?
if (если валидация предыдущего ПАРАМЕТРА провалилась) {
текущий проверяться вообще не будет
};
Аноним 2019/08/04 11:57:00  №1447921 16
>>1447910
Так и сделал, по сути несколько валидаторов. Но это васянщина пиздец.
Аноним 2019/08/04 12:16:43  №1447934 17
>>1447921
А зачем тебе так нужно сделать вообще?
Аноним 2019/08/04 13:23:16  №1447970 18
>>1447934
>А зачем тебе так нужно сделать вообще?
Ну как же, это ведь ЭКОНОМИЯ ПАМЯТИ ДЖУНИОР ПРИШЕЛ УСТРАИВАТЬСЯ НЕ СМОГ ПОМЕНЯТЬ ДВЕ ПЕРЕМЕННЫЕ БЕЗ ТРЕТЬЕЙ ПОВЕСИЛИ В ДВЕРНОМ ПРОХОДЕ ЭКОНОМИМ НА ПАМЯТИ УБИВАЕМ ЗА ЛИШНИЙ IF НА РАБОТЕ ОБЩАЕМСЯ ПОЛУ-СЛОВАМИ СРЕМ В ОДНО ВЕДРО В ЦЕНТРЕ КОМНАТЫ ЧТОБЫ ОПТИМИЗИРОВАТЬ ПОХОДЫ ПО ТУАЛЕТАМ ПРИВЯЗАЛ К ЛОКТЮ ШВАБРУ - ВПЕРЕД - ПЕЧАТАЮ КОД, НАЗАД - ВКЛЮЧАЮ КОФЕ-МАШИНУ ЗА СПИНОЙ ЭКОНОМИЯ МЫШЕЧНОЙ АКТИВНОСТИ 2% ВСЕ ОПТИМИЗИРУЕМ ЧТО МОЖНО ОТРЕЗАЕМ СОТРУДНИКОВ ПО ПОЯС ЧТОБЫ СЫКАНОМИТЬ НА ШТАНАХ РЯЯЯ МЫ СМАЯ АПТИМАЛЬНАЯ КОНТОРА В ВОРОНЕЖЕ
Аноним 2019/08/04 13:52:30  №1447981 19
>>1447970
Истерика на ровном месте. Отлично.
Аноним 2019/08/04 13:53:17  №1447982 20
>>1447921
Твоя идея изначально это васянщина.
someApprentice 2019/08/04 15:29:09  №1448031 21
image.png (267, 500x337)
337x500
Я опять нечаянно запостил в закрытый тред >>1447890 >>1447897


Аноним 2019/08/04 16:50:22  №1448064 22
Есть один проект который отлично работал на моем сервере Apache который я сам смастерил. Когда я сую свой проект в OpenServer, получаю 404. Хуйня в том, что я получаю ответ на /, но когда я хочу например перейти в /categories, он шлет меня. Что делать? Куда копать? Проект на laravel, и папку /public в доменах я прописал.
Аноним 2019/08/04 17:26:15  №1448071 23
>>1447934
В поле1 указывается токен от соц-сети, но он может быть хуевым.
С помощью этого токена делается запрос в соц-сеть, чтобы проверить поле2.

Поле2 не имеет смысла проверять, если токен в поле1 говно
Аноним 2019/08/04 17:26:35  №1448072 24
>>1447982
Да попизди мне тут еще, получше тебя знаю
Аноним 2019/08/04 17:29:53  №1448075 25
Пиздец нахуй пятый год в погромировании, тут какой-то ебанько на форуме в 256000-й раз кукарекает: ДА ЭТ НЕВОЗМОЖНО, ЭТ НИНУЖНО И ВООБЩЕ КОД ПОЛНАЯ ХУИТА))))0) КЕК))

Пиздец блять. Что в манямирок не вписывается - так нинужно или невозможно.
Аноним 2019/08/04 17:51:30  №1448092 26
Screenshot13.png (5, 582x280)
280x582
Будьте осторожны с циклами, пилоты.
Аноним 2019/08/04 19:06:47  №1448142 27
>>1446969 (OP)
йо, товарищи, есть некий проект, в котором нужно реализовать комментирование контента без регистрации и использования сторонних систем комментирования ибо не везжает в концепцию и не хочется приплетать стороннюю верстку по тем же причинам . Так вот, делаю я такое впервые, и вопрос - как это дело контролить модерировать и банить сквернословных залетных, как это происходит, например, на имиджбордах? Алсо целевая аудитория не сильно широкая и плебейская, так что вряд ли будет много грязи, адмитить-модерировать будет от силы пара человек, но какие-то минимальные инструменты контроля нужны
Аноним 2019/08/04 19:26:44  №1448163 28
>>1448071
у валидатора есть метод sometimes

$v->sometimes('reason', 'required|max:500', function ($input) {
return $input->games >= 100;
});

так же у валидатора есть метод after, и то и другое можно вызывать в withValidator в FormRequest например, короче я к тому что способов сделать как тебе надо много, это будет канеш не так K P A C U B O но это похуй
Аноним 2019/08/04 19:54:41  №1448178 29
>>1447852
Ты расскажи нормально что за задача
Аноним 2019/08/04 19:55:20  №1448180 30
>>1448075
>Пиздец нахуй пятый год в погромировании
я тоже пять лет со скейтерами из двора тусовался и думал что я типа продвинутый и могу оли-оли крутить
Аноним 2019/08/04 19:57:13  №1448181 31
>>1448142
делай матерный словарик. Или вообще премодерацию забубень, пусть каждое сообщение отображается только когда твой модер галочку поставит. Они правда офигеют там все читать
Аноним 2019/08/04 20:28:28  №1448203 32
>>1448064
Проверь mod_rewrite, если apache на openсервере используешь
Аноним 2019/08/05 08:36:46  №1448341 33
>>1447970
Бизнесу насрать на экономию памяти - ему важнее скорость разработки и стоимость поддержки. А вот если васянить постоянно, то именно эти два фактора страдают.

Наблюдение такое.
Аноним 2019/08/05 08:41:42  №1448342 34
>>1448075
>пятый год в погромировании
Лол. И что? Все 5 лет говнокодил и вдруг мастером стал?
Аноним 2019/08/05 12:48:23  №1448453 35
>>1448075
Ты как партизан не афишируешь, нахуй тебе это надо.
С лаварелем я не знаком, работаю на симфони.
Аргументирую. В чистом виде такой хуйни нет, так как в принципе нет порядка валидации. Хуй его знает, как и в каком порядке ты будешь передавать поля. А привязывать логику валидации к тому, в каком порядке педрила с фронта расставил поля в формочке - это пиздос.
Я мог бы понять, если бы тебе требовалась кастомная валидация одних полей в зависимости от значения других, но ты упорно пиздел именно про порядок.
Аноним 2019/08/05 12:56:58  №1448462 36
>>1448453
А, нет, я ебусь в глаза. Ты ответил.
Но ты всё равно хуй, так как сформулировал вопрос ты максимально некорректно.
Аноним 2019/08/05 13:00:06  №1448464 37
>>1448341
вот тут ты сам себе противоречишь. Если бы ты не заморачивался надуманной проблемой из разряда "а чому у меня ифы в уже готовой конструкции не такие как я хочу! Надо бы переделоть!", то сыканомил бы уйму времени. По факту соглашусь, заказчику наплевать что там внутри, лишь бы работало. Это ты чистоплюй и перфекционист. Небось еще и моешься чаще чем раз в неделю, педота
Аноним 2019/08/05 16:02:58  №1448540 38
Ковыряюсь тут с шаблонами для БД.
У меня есть соединение на одной библиотеке NotORM и я на её основе хочу сделать Data Mapper. И у меня такой вопрос - мне этот маппер биндить в зависимости или просто вызывать в контроллере, передав ему соединение?
Аноним 2019/08/05 16:51:23  №1448559 39
>>1448540
>мне этот маппер биндить в зависимости
Я бы сбиндил. Он же наверняка и в других контроллерах мелькнет?
Аноним 2019/08/05 16:53:25  №1448563 40
>>1448559
Да наверняка мелькнёт. В той же админке должен ещё быть.
Аноним 2019/08/05 19:11:26  №1448614 41
Аноним 2019/08/06 08:32:43  №1448812 42
Аношки, тоже взялся за студентов, как анины выше, но пока читаю условие и обдумываю. Возник вопрос:
>Список абитуриентов — выводит имя, фамилию, номер группы, число баллов. Выводятся по 50 человек на страницу, сортировка по любому полю делается кликом на заголовок колонки таблицы
а как вообще это реализуется? Мне это делать джаваСкриптом/джиКверри, типа перестраивать ячейки таблицы по клику, или силами пшп-скрипта - по клику отправлять новую ссылку на эту же страницу с новыми параметрами сортировки и перезагружать результат?
Как обычно это делается? Я с аяксом пока не очень знаком
Аноним 2019/08/06 08:32:45  №1448813 43
15642215109570.jpg (18, 437x431)
431x437
>>1446969 (OP)
Cап, анусы. Значит пытаюсь тут запилить себе учебно-портфольный проект и завис на таком моменте - по легенде мне надо сделать простой сайт на php + sql, с регистрацией, логином и сессией, что я уже сделал, но теперь самое важное - как дать возможность залогиненному болванчику загружать изображения на сервер и желательно, чтобы он еще видел только свои хотя уже не суть. Простой аплоад с галереей уж делал без привязки, но тут прям завис в ступоре уже третий час. Хочется уже дропнуть и просто воткнуть на залогиненную страницу форму с аплоадом и кидать картинки так.
инб4 приходи через год
Аноним 2019/08/06 08:41:01  №1448817 44
>>1448813
Создай ещё одну таблицу с полями ид картинки и ид соответствующего пользователя. Потом выгружай оттуда все картинки конкретного пользователя.
Аноним 2019/08/06 08:53:24  №1448823 45
>>1448812
На этом задании джаваскрипт вообще не нужен. Только вёрстка и бэкенд. Сортировка делается по ссылке.
Просто посмотри как у других сделано.
Аноним 2019/08/06 09:08:20  №1448826 46
>>1448823
>Сортировка делается по ссылке
Понял, спасибо
Аноним 2019/08/06 09:11:54  №1448828 47
>>1448812

Заголовок таблицы делается ссылкой, содержащей нужные параметры. Вот старый пост, где это обсуждалось: https://phpclub.tech/pr/res/1331378.html#1351739

Еще можно поискать в архиве по словам "ссылка сортировка", может что-то полезное найдешь? https://phpclub.tech/search/?q=%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0+%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0

Аякс ту не нужен, хотя с ним можно было бы сделать сортировку без перезагрузки страницы. Аякс желательно прикручивать поверх обычных ссылок (по принципу progressive enhancement), чтобы по-прежнему можно было скопировать и сохранить ссылку на страницу в определенном состоянии. Есть (была) библиотека pajax , которая большую часть работы берет на себя.

Задавай уточняющие вопросы, если что-то непонятно.
Аноним 2019/08/06 09:12:55  №1448829 48
>>1448828
Спасибо, попробую разобраться
Аноним 2019/08/06 12:48:24  №1448932 49
Котаны, подскажите. Не понимаю как сверять хеши с рандомной солью с тем паролем что вводит пользователь.
Без использования функций пхп.
Например:
Пользователь регистрируется и вводит пароль - "pass"
Я хеширую его - хэш("pass") и склеиваю с некоей уникальной каждый раз рандомной строкой random(str)
И все это пишу в базу - хэш("pass").random(str)

Но как потом ручками проверить когда пользователь снова зайдет на сайт? Он ведет "pass", но откуда к этому pass прицепить соль, если соль у меня получается из функции которая каждый раз рандомную строку возвращает?
Или соль берем из какой нибудь связки id+login+фамилия?

Аноним 2019/08/06 14:51:14  №1449022 50
>>1448932
Соль в бд сохраняй и все
Аноним 2019/08/06 16:39:25  №1449075 51
zdohzvitvorite.jpg (77, 1200x1021)
1021x1200
Может у кого есть идеи для php проекта?
Аноним 2019/08/06 16:56:24  №1449085 52
>>1449075
Не уверен что ты верно понял то о чем я спрашиваю.
В базе у меня хэш + рандомная соль.
Когда пользователь авторизуется и вводит свой пароль - от этого пароля вычисляется хэш, но как вычислится рандомная соль которая у меня хранится в базе?
Тоесть по факту я должен сравнить хэш от пароля что передал пользователь, с хэшем который у меня в базе. Но в базе у меня хэш + соль из рандомной строки. Как происходит сравнение.

Вот из доки инфа по password_hash()

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

Как эту случайная соль появляется в пароле который вводит пользователь.
Если что сорр за мою тупость.

Аноним 2019/08/06 17:01:56  №1449089 53
Аноним 2019/08/06 17:04:34  №1449090 54
Аноним 2019/08/06 17:26:58  №1449101 55
>>1449085
из мануала:

password_hash()

Использованный алгоритм, стоимость и соль будут возвращены как часть хеша. Таким образом, информация, необходимая для проверки хеша будет в него включена. Это позволит функции password_verify() проверять хеш без необходимости отдельного хранения информации о соли и алгоритме.
Аноним 2019/08/06 18:20:58  №1449131 56
>>1449075
У меня есть парочка. Но я не скажу.
Аноним 2019/08/06 20:38:08  №1449172 57
>>1449085

Соль это не часть пароля. Это случайно сгенерированная посл-ть символов. Ее назначение описано в моем уроке: https://github.com/codedokode/pasta/blob/master/security/password-hashing.md

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

Задавай уточняющиевопросы, если что.

Аноним 2019/08/07 01:21:41  №1449215 58
sql.JPG (26, 934x91)
91x934
Снимок.JPG (25, 479x157)
157x479
delete.JPG (50, 693x369)
369x693
index.JPG (32, 1052x307)
307x1052
>>1448813
>>1448817
В общем я вчера чудовищно наговнокодил, но сейчас хотя бы все загружается и выводится. Теперь надо разобраться с удалением - оно не работает и похоже я нихуя не понимаю чего делаю неправильно пишу запрос на удаление. да, мне стыдно, что я такой тупой
Аноним 2019/08/07 05:11:38  №1449252 59
Аноним 2019/08/07 05:34:33  №1449258 60
>>1449252
У меня был опыт общения, еще плоховато понимаю. А вообще уже все переписал и теперь все удаляется. Магия - стоит сюда написать, как все само собой решается.
Аноним 2019/08/07 05:44:57  №1449263 61
Аноним 2019/08/07 08:33:21  №1449318 62
>>1449215
>Теперь надо разобраться с удалением - оно не работает
Анон, есть хороший способ проверять запрос на работоспособность - просто берешь и выполняешь его в phpмайадмине. Тупо копируешь запрос из кода и вставляешь в поле/вкладку "запрос" пшпмайадмина. Если ошибка в запросе, то майадмин сразу тебе это напишет. Так ты хотя бы будешь знать где проблема - в коде пшп или в коде sql
Аноним 2019/08/07 09:29:26  №1449339 63
>>1449318
>Тупо копируешь запрос из кода
Лучше включить логирование запросов в mysql и брать из лога. Особенно если пользуешься каким-нибудь фреймворком который запрос сам формирует.
Аноним 2019/08/07 11:36:58  №1449381 64
>>1449318
Я поначалу вообще все запросы из пхпмайадмина тянул, только условия менял. Так и научился.
Аноним 2019/08/07 15:55:55  №1449478 65
Пытаюсь написать бота для вайбера на пхп.
Есть библиотка https://github.com/Bogdaan/viber-bot-php
Если просто использовать её по инструкции, то всё работает: клиент пишет в вайбер сообщение, оно парсится ботом и если есть совпадение, то выдаётся стандартный ответ. А мне нужно, чтобы этот процесс разился на две фазы: приём сообщения из вайбера и отправка сообщения в вайбер. И чтобы и то и то были простыми функциями. С приёмом проблем нет, просто разбираем, что там пришло в webhook. А вот отправку я не понимаю, как сделать. Я засунул это всё в метод, метод в класс, но ничего не работает. И не пишет никаких ошибок, просто умирает, как только достигает команды $botSender = new Sender .
Честно говоря, я запутался в этих методах, вызовах, пространствах имён и прочем ооп. Посмотрите пожалуйста на код, что именно я там организовал не так? И как ловить и отлаживать такие ошибки? Даже когда я оборачиваю всё (вообще всё) в try, никаких эксепшенов не ловится.

https://pastebin.com/bMxDPt0y
Аноним 2019/08/07 16:31:02  №1449498 66
>>1449075
Можешь зарегатьться на ютубе и вести блок обучающий пхп
Аноним 2019/08/07 16:37:31  №1449503 67
>>1449478
Уточнение: я таки отловил ошибку Class 'Viber\Api\Sender' not found, но WTF? При подключении иде не ругается, значит видит этот класс. А если убрать use Viber\Api\Sender; или подключать левый класс Sender2, то сразу предупреждает, что такого нет. А на сервере не работает.
Аноним 2019/08/07 16:57:03  №1449526 68
>>1449075
Создай бота который будет скачивать видео из webm тредов и переделывать их под void. А затем автоматически постить пока капча не заебет.
Аноним 2019/08/07 17:00:29  №1449527 69
>>1449503
На сервер библиотеку-то закинул?
Аноним 2019/08/07 17:38:26  №1449538 70
>>1449527
Закинул. Если просто сделать, как в примере и расположить этот код в webhook, на который приходит сообщение из вайбера, то всё отлично работает.
Аноним 2019/08/07 19:24:11  №1449568 71
>>1449075
Есть уже живущий проект - архив PHP тредов по годам: https://phpclub.tech/
У него открытый код и есть issues, которые любой желающий может попытаться исправить: https://github.com/richBlueElephant/phpClub/issues

Отлично если работали с поисковым движком Sphinx, там 3 задачи только по нему одному.
Аноним 2019/08/07 23:19:56  №1449619 72
image.png (25, 477x188)
188x477
Боже, какую же хуйню приходится писать, чтобы типы работали как надо.
Аноним 2019/08/08 00:28:34  №1449622 73
У меня встал вопрос. Пробую использовать slim 4 для апи. Отправляю response json, и зачем-то отправляется favicon. Может это зависит от метода get, post? Проблема в том, что Vue не читает ответ запроса, в то время как с других api успешно получает данные. Как запретить передачу favicon.ico?)
Аноним 2019/08/08 00:53:55  №1449623 74
zxcccc
Аноним 2019/08/08 06:59:03  №1449683 75
Зачем нужны пространства имен?
Аноним 2019/08/08 09:50:26  №1449760 76
cat1.png (310, 512x512)
512x512
>>1446969 (OP)
Сап котаны. Закончил шарагу, проходил практику в ВУЗе там изучил Symfony и сделал проект на нем. Не потому что хотел, а потому что это в программе практики у них было.

В общем суть проблемы в том что у меня нет опыта работы, а вакансии где требуется Symfony большинство с опытом. Что делать?
Стоит ли вкатиться в laravel?

Город ДС2

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

Если интересен мой проект: http://relevantsearch.ru/
Аноним 2019/08/08 09:56:55  №1449765 77
cat1.png (310, 512x512)
512x512
>>1449760
Алсо реквестирую специалиста Symfony знакомого с компонентом Messenger. Воркеры создаются, но асинхронность не работает.

Гуглил проблему, там все пишут, что: "Я просто обновил Symfony и все заработало)))))))))". НО блять У меня версия НОВЕЕ чем у тебя дебил и всеравно ничего не работает.

Кароче доработка проекта встала только из-за этого. Пробовал еще с другими бандлами поддерживающими очередь работать, но вечно лажа происходила.
Аноним 2019/08/08 10:29:57  №1449773 78
>>1449765
Так объяснишь зачем нужны пространства имен?
Аноним 2019/08/08 11:52:34  №1449821 79
>>1449773
за тем что бы при установки доп пакетов , библиотек и тд , классы с 1 и тем же именем не переопределяли друг друга.
Аноним 2019/08/08 11:52:53  №1449822 80
Аноним 2019/08/08 11:56:23  №1449824 81
>>1449760
в рф как и в всём пост совке (СНГ) весма мало продуктовых контор , потому симфони не нужно , а для средне малых подделок хорошо заходят RAD фреймы типа лары , потому их и юзают , так что да в неё вкатываться есть смысл
Аноним 2019/08/08 12:20:21  №1449840 82
>>1449824
Ща звонили с собеседования про битрикс и Yii2. Что расскажешь по поводу него? Какие подводные?
Аноним 2019/08/08 12:35:45  №1449855 83
>>1449622
Решил проблему добавлением такого заголовка: header("Access-Control-Allow-Origin: *");
Аноним 2019/08/08 13:36:47  №1449874 84
>>1449840
>про битрикс
даже если будешь с голоду умирать даже не думай , прям вот совсем , лучше уже сдохнуть.
>Yii2
не плох как RAD фрейм , но монолитен прям от слова совсем , хорошо генерит код ля админок всяких (так нормальной альтернативы для лары и не нашёл) , довольно популярен в СНГ (скорее всего и только тут) , можно стартануть на нём.
Аноним 2019/08/08 13:37:24  №1449876 85
>>1449855
осталось теперь почитать про CORS , и узнать чтож за заголовок такой магический
Аноним 2019/08/08 13:44:43  №1449881 86
>>1449876
Поиск проблемы был максимально непонятным. Как написано на вики - "браузер поддерживающий технологию CORS, передаст ошибку вместо данных." Chrome - выдавал ошибку, просто ошибку на этот запрос. Firefox - дал ответ с кодом 200.
Аноним 2019/08/08 13:45:46  №1449882 87
Что нужно знать для бэкэнд разработки?
Аноним 2019/08/08 13:46:55  №1449884 88
>>1449882
извиняюсь и иду нахуй, если в шапке всё написано
Аноним 2019/08/08 14:23:28  №1449910 89
>>1449881
вполне реально ибо у них разные двежки очевидно правила CORS по умолчанию по разному ставят
Аноним 2019/08/08 14:56:59  №1449926 90
>>1449910
Попробуй вместо звездочки перечислить методы, в одном проекте у меня так решилось проблема
Аноним 2019/08/08 16:47:25  №1449991 91
Аноним 2019/08/08 17:00:52  №1450005 92
>>1449991
Это не я ебанутый, а тот инцел, который решил сделать передачу значения в функцию settype по ссылке.
Аноним 2019/08/08 17:02:50  №1450010 93
>>1449773
В передыдущем треде пережёвывали - посмотри архив.
Аноним 2019/08/08 17:04:59  №1450016 94
>>1449840
>битрикс
Легаси и костыли от 1С.
Аноним 2019/08/08 17:34:27  №1450048 95
Предыдущий тред все-таки утонул, а вопросы остались. Попробуем ответить:

>>1445583

> Какие минимальные требования нужны чтоб взяли на работу ?
Открой hh.ru, поищи вакансии без опыта и сделай выводы.

>>1445953

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

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

> Еще ты можешь использовать трейты, чтобы "разгружать" жирные классы и выносить связанные блоки логики в кирпичики-трейты.
> Например, я так разгрузил класс в 1000 строк, раскидав по трейтам связанные методы.

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

>>1446336

> Делаю задачку по Slim, возник такой вопрос по фреймворкам - нужно ли абсолютно все зависимости пихать в контейнер, или некоторые классы можно подключать по ходу работы контроллера (т.е зависимости зависимостей не обязательно в контейнере держать)?

Удобнее все сервисы описывать к контейнере. И брать их из контейнера, чтобы не копипастить код создания объекта. Для контроллеров есть два подхода:

- описываем контроллер и его зависимости в контейнере
- не описываем контролллер в контейнере, но передаем ему контейнер в конструктор или метод. И уже там берем из контейнера нужные нам классы
Аноним 2019/08/08 17:37:02  №1450051 96
Ответы на вопросы из прошлого треда (тред есть в архиве и тут: https://phpclub.tech/pr/res/1415604.html ):

>>1446397

> Решил я тут посмотреть уроки по VueJS. ... Шоб оно все работало, надо написать в терминале: npm run dev
> Как это автоматизируется на практике? Например на линуксовом сервере?

Команда npm run dev скорее всего запускает сервер для разработки, который не годится для продакшена. Скорее всего она запускает какой-нибудь webpack в режиме отслеживания изменений в файлах, это нужно только на время разработки. В продакшене это не нужно, потому эта команда тоже не нужна.

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

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

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

Если у твоего приложения еще есть бекенд, то конечно, тебе надо как-то запустить на сервере программу-сервер. Сейчас почти все на systemd, потому логично сделать для этого systemd-юнит. Раньше, во времена syvinit, добавляли скрипт запуска сервера в /etc/init.d/, сервер запускали под супервизором, который перезапускает его в случае падения, а также ведет логи.

>>1446608

> пытаюсь заюзать get_browser(),
> но выдает ошибку "browscap.ini directive not set in <путь>"
> Прописал путь до нее в php.ini следующим образом
> [browscap]
> browscap = "F:\OpenServer\new_edition\OSPanel\modules\php\PHP_7.3-x64\browscap.ini" (без ковычек тоже пробовал)
> сохранил. Перезапустил openserver. обновляю страницу - опять та же самая ошибка.

Сделай файл с кодом <?php phpinfo(); и открой его через веб-сервер и браузер. Откроется большая синяя таблица, в ней найди browscap и посмотри, какое реально значение там выводится. Также в начале таблицы изучи список прочитанных ini-файлов. Есть несколько вариантов:

- ты неправильно назвал файл или поместил не в ту папку, и он не прочелся
- надо было использовать прямые слеши, а не обратные
Аноним 2019/08/08 17:37:51  №1450054 97
>>1446666
>>1447478

> \tpublic function __construct($rate, $litresOfCoffee, $pgsOfDocs, $rank, $boss = false){
Это мы не проходили, но стоит использовать тайп-хинты, они защищают от ошибок и делают код читабельнее: https://www.php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration

>\tprivate function setRateWithRank(){
>\t\tif ($this->rank == 2) {
>\t\t\t$this->rate = $this->rate * 1.25;
>\t\t}

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

> \tprivate function setBossPrivelege(){

Тут та же проблема: начальные данные затираются.

> \t\tforeach ($this->employees as list($num, $position)) {

Этот способ хранения списка работников не очень-то ООП. С точки зрения ООП, наверно было бы правильнее сделать класс EmployeeGroup с полями "образец работника" и "кол-во". Но и такой подход будет плохо работать во второй части задачи, где надо менять зарплату и ранги людям.

Также, этот формат хранения не описан и трудно догадаться, глядя на конструктор класса Department, какой массив в него надо передать.

В общем, пока неплохо, делай тогда вторую часть про кризис, там недостатки кода, если они есть, вылезут наружу.
Аноним 2019/08/08 17:38:54  №1450056 98
>>1447890

>>- зачем нужна таблица participant, если есть conference_reference? Я не понимаю, чем таблица participant отличается от conference_reference.
> Это денормализация чтобы получить конференцию по собеседнику, в случае приватных конференций

Тут мне кажется, непонимание. Я вижу, что в таблице conference_reference есть поля-ссылки:

- "user" -> на таблицу users
- "participant" -> на таблицу users
- conference -> на таблицу conference

А еще есть таблица participant с такими полями:

- user -> на таблицу users
- conference -> на таблицу conference

Соответственно вопрос, чем таблица participant отличается от conference_reference? Они обе содержат поля user и conference, и не хранят ли они одно и то же?

В моем понимании диалог выглядит так: есть conference, есть 2 ссылающихся на него conference_reference (вид на диалог со стороны каждого собеседника). Что тут делает таблица participant? На нее нет внешних ключей, то есть никто на нее не ссылается.

Вот определение этой таблицы: https://github.com/someApprentice/Crypter/blob/master/schema.sql#L152

Что касается денормализации для поиска существующего диалога, то поля user + participant в таблице conference_reference вполне решают эту проблему, как я понимаю.

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

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

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

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

Логгировать можно выводом в stderr, или попробовать разобраться с модулем logging: https://docs.python.org/3/library/logging.html

У тебя в коде есть комментарий:

> builtins.TypeError: catching classes that do not inherit from BaseException is not allowed
> except (InvalidSignatureError, UserNotFoundError, WrongTokenError, Exception) as e:

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

> Тогда пришлось бы генерировать токен так как он генерируется в функции регистрации/логина. Не будет ли это положением теста на знание о том как генерируется токен?

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

- "аутентификатор принимает валидный JWT токен, имеющий такую структуру: ...."
- или же "аутентификатор принимает токен неизвестного типа и структуры, выданный данной командой/функцией/методом API в PHP-приложении"

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

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

Еще один вариант - попробовать "мокнуть" для тестов функцию декодирования токена (jwt.decode), заменив ее на свою функцию, возвращающую заранее известный результат для данного токена, вроде такого:

def mock_jwt_decode(token):
if token == 'token_for_alice':
return {"name": "Alice", "email": "alice@example.com"}
...

То есть убрать из теста JWT. Но в этом случае мы полагаемся на знание того, что токен является JWT токеном, знаем его структуру и знаем, что тестируемый код использует jwt.decode.

Проблема с вписанным вручную токеном в том, что непонятно, откуда он взят. Как мне проверить вручную, что он корректен? Как поменять что-то в нем? Код теста должен быть читабелен, и проверяем, а тут я не могу разобраться в нем. Та же проблема, кстати, с прописанными хешами паролей пользователей вот тут: https://github.com/someApprentice/Crypter/blob/57b4ce3025053507a6b65aeac81fdd07149445fc/wamp/tests/conftest.py#L19 - непонятно, как они получены. Такой тест трудно будет отлаживать другому разработчику. Может, в тестируемом коде ошибка, а может ты просто опечатался при копировании токена - как понять?

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

>>Что касается исключений при авторизации, мне кажется, их правильнее ловить в обработчике авторизации, а не тут:
> Делать блок try/catch?

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

Вот, например, у тебя есть код в ExceptionListener:

> if ($exception instanceof UniqueConstraintViolationException) {
> $response = new Response('Bad Request', Response::HTTP_BAD_REQUEST);

Как я должен понять, к какому контроллеру относится этот код? Наверно можно попробовать поискать по коду, где используется ограничение на уникальность, но это какой-то очень странный подход. Также, этот код ловит исключения отовсюду. Ты писал его для какого-то своего контроллера, но исключения ловятся и со всех других контроллеров, что может быть неожиданно для их авторов, которые этого не хотели.
Аноним 2019/08/08 17:39:50  №1450060 99
>>1447890

>>Так писать не стоит, это не keyword arguments из Питона и имена переменных не учитываются никак.
> А как понимать что за аргумент был передан?

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

> Нужно тогда заранее определять переменные и передавать их?

Можно и так.

> Разве не нужно проверить что выдаются кукисы? Они ведь нужно для правильной работы приложения.

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

> Проверка авторизации выполняется тестом проверки доступа к разлогиниванию

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

>>Также, не надо копипастить огромные полотна кода, можно было сделать вспомогательную функцию для отправки запросов.
> Я как раз хотел спросить где хранить вспомогательные для тестов функции делать класс tests/Utils.php?
Можно сделать папку tests/Support/ или tests/Helper/

>>Соответственно тесты будут вида canLoginWithValidPassword, cannotLoginWithWrongPassword.
> Нужно разбить одну функцию на две?
Да, можно сделать два теста.

>>Далее, это ненадежный способ проверки, ведь речь тут о безопасности:
>>> if 'private.message.to.' in uri:
> Почему тот метод не надёжный?

Я немного ошибся, в данном случае уязвимости не возникает. Она бы могла возникнуть в таком случае:

if 'private.message.to.' in uri and is_anonymous:
return True

так как тут аноним мог бы получить доступ к методам вроде admin.view.private.message.to...

Потому лучше не использовать in вместо starts_with.

>>Микрооптимизация: регулярку можно скомпилировать один раз в начале скрипта и использовать скомпилированную версию.
> Зачем компилировать регулярку в начале скрипта?

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

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

Да, тут надо подумать. Допустим, у нас есть 10 больших конференций, в каждой 1М пользователей:

- когда мы шлем уведомления каждому участнику, мы имеем 1М коннектов к wamp серверу и 1М подписок, а при обновлении в одной конференции шлем с PHP-приложения WAMP-демону 1М сообщений, которые он передает пользователям.
- когда мы используем свой канал обновлений для каждой конференции, мы имеем 1М коннектов и 10М подписок, а при обновлении в конференции PHP-код шлет единственное сообщение, которое демон разошлет 1М подписчиков

Но теперь представим, что из 1М участников онлайн только 100K:

- в первой схеме мы имеем 100k коннектов и 100k подписок, но при обновлении PHP-код по прежнему шлет 1М сообщений демону, так как PHP код не знает число подключенных пользователей
- во второй схеме PHP-код шлет одно сообщение демону, а тот рассылает его в 100K копий.

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

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

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

Но у Телеграма полностью самописный сервер.

> Только мне кажется что менять ключ не обязательно, потому что пользователь всё равно не сможет ни получить ни отправить сообщения, потому что API/WAMP его не авторизует для этого.

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

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

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

> Да, это неудобно когда что-то редиректиться или выдается пустая страница.

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

> и если её ещё не существует, то мы просто не запрашиваем сообщения, а после отправки сообщения и её создания нас уведомит об этом WAMP и мы её реактивно подхватим.

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

>>Единственное, я не советую привязываться к текущей директории, чтобы ничего не ломалось, ...
> Текущая директория это какая?
Это та, что возвращается вызовом os.getcwd(), текущая директория процесса. В linux/win с каждым процессом связана "текущая" директория.

> Чтобы зашифровать голосовое/видео сообщение и сохранить его на сервер. Или не только сам контент сообщения, но и приложения к нему, например фотографию. Любая информация должна быть зашифрована.

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

> Зашифрованные файлы весят больше?

Если мы отправляем файл с локального диска на сервер, то нам незачем создавать на диске зашифрованную копию этого же файла. Так как он у нас есть в расшифрованном виде.
Аноним 2019/08/08 18:40:11  №1450109 100
>>1449683
Чтобы изолировать код, который в него входит, от другого кода.
Аноним 2019/08/08 19:25:18  №1450129 101
Аноны, смогу ли я перекатиться к вам в похапе за месяц, чтобы устроиться хотя бы стажером за 15к, учитывая что хорошо знаю питон и немного джангу? А то чет ахуел с действительности, что питонистом невозможно устроится в моем миллионике, 1 вакансия на джуна и несколько на сеньоров-помидоров.
Аноним 2019/08/08 20:05:20  №1450167 102
>>1450129
Смотри на вакансии в своем миллионнике.
Аноним 2019/08/08 20:10:49  №1450169 103
>>1450129
Как же хорошо, что я вовремя одумался и не покатился в пиздон наслушавшись советов с двача
Аноним 2019/08/08 20:43:46  №1450176 104
>>1450167
Да я уже посмотрел вакансии, требования уровня php/js/sql/html/css, знаю все кроме пхп, вот и спрашиваю за сколько можно дойти до уровня, что могу работать.и вакансий в 10 раз больше чем на питониста
Аноним 2019/08/08 20:56:59  №1450180 105
Дошли руки с докером разобраться. Какаяже годнота скажу я вам
Аноним 2019/08/09 06:19:44  №1450247 106
>>1450180
Скажи мне скажи мне
в чем годнота?
Ладно если у тебя контейнер - весь проект - Изи - но я так же могу и в xampp сунуть его и не пизди мне что у тебя клиент по сто раз на дню меняет окружение. Это редкость редкая когда тебе надо скакать между на столько рознящимися окружениями
Аноним 2019/08/09 07:46:28  №1450306 107
>>1450247
Я не тот анон, но суть же не столько в вопросе смены окружения, сколько в лёгкости деплоя (используя Swarm или Kubernetes). Представь, что ты собрал какой-то проект у себя на сервере, и теперь тебе его нужно перенести на сервер заказчика. Без контейнеров тебе придётся поднимать сервер дважды - у себя и у него. А так - просто воткнул контейнер и всё сразу работает.
Аноним 2019/08/09 08:33:34  №1450335 108
>>1446969 (OP)
1) ЕОБ (есть одна борда), в процессе написания. Пользователь может загружать файлы картинок. Обработчик формы присваивает имена файлам с помощью microtime() или time() (какую функцию выбрать кстати?). Эти значения будут уникальными? Что будет, если два или более пользователя одновременно запостят картинки? Не существует шанса распидорасить сервер?

2) Есть исходные коды блога и форума, и два sql-файла к ним. Как правильно объединить базы для одного сайта? Слить sql-файлы в один (и это будет одна база, имена таблиц у блога и форума не совпадают), или подключаться одновременно к двум разным базам (это нормально?)? Как делают опытные люди?
Аноним 2019/08/09 08:42:11  №1450343 109
>>1450335
>1
У тебя же есть посты с айдишниками - вот и прикрепляй к ним эти картинки.

>2
Неебу. Может миграции помогут.
Аноним 2019/08/09 08:48:54  №1450346 110
>>1450247
Я только разобрался и поэтому не юзал. Но по опыту было не раз например так: мне дается сервер, на котором стоит сайт писаный под пыху 7.0. Повышать ее версию мне нельзя, но в тоже время имеется мой бот, написанный на 7.3. Обычно перепиливал бота под 7.0, сейчас бы мог использовать докер.

Но мне больше нравится не это, а то, что я могу по щелчку пальцев менять составляющие, локально, при разработке. Например быстро сменить мускуль на мариюдб и т.д.
Аноним 2019/08/09 08:53:01  №1450348 111
>>1450343
Прикрепляю. Но мой вопрос про имена файлов. Вот как тут:
https://2ch.hk/pr/src/1446969/15647696144140.png
microtime() или time() генерируют уникальные значения при использовании в обработчике формы?
Аноним 2019/08/09 08:59:36  №1450354 112
bear.png (1166, 944x708)
708x944
>>1446969 (OP)
есть скрипт который должен мне на почту через форму письмо отправлять
а он ничего не отправляет
даже в спам
https://ideone.com/RLlKiz
Аноним 2019/08/09 09:04:42  №1450357 113
>>1450348
Как вариант делать хэш из микротайма и айдишника поста - коллизии будут минимальны.
Аноним 2019/08/09 09:08:15  №1450359 114
>>1450348
К тому же никто не мешает те же айдишники и к файлам делать, которые с автоинкрементом. И не городить огород.
Аноним 2019/08/09 09:12:21  №1450360 115
>>1450354
>// Email address verification, do not edit.
function isEmail($email) {
\treturn(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
}Аж обои отклеиваться стали. У пхп есть функция filter_var($email, FILTER_VALIDATE_EMAIL) для таких вещей.
Аноним 2019/08/09 09:28:27  №1450377 116
>>1450306
Я тоже так подумал и радовался что не придется ебаться. Но админ на тесте каждый из микросервисов собрал в отдельные контейнеры тоесть уже различие с локалью где каждый сервис в контейнере. А у заказчика на серверах Винда.
Аноним 2019/08/09 10:15:34  №1450431 117
>>1449765

Опиши проблему подробнее. Как ты устанавливал этот компонент, какой код добавил, что запускаешь, что ожидаешь, что получается. Какая ОС и веб-сервер.
Аноним 2019/08/09 10:17:38  №1450435 118
Аноним 2019/08/09 10:18:34  №1450440 119
>>1449619

Не сталкивался с такой проблемой. Увы, кроме кода, никаких пояснений ты не дал.
Аноним 2019/08/09 10:21:44  №1450444 120
>>1450335

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

И, кстати, ты можешь сделать поддержку в коде для 2 баз, но использовать одну и ту же.
Аноним 2019/08/09 12:08:35  №1450503 121
>>1450176
Зависит от целого ряда факторов, в первую очередь от умения пиздеть с умным видом и быстро как понос учиться.
Голый ПХП на самом деле нужен либо совсем ньюфагам, которым важнее на данном этапе пощелкать, как работает веб, либо матерым олдфагам пишущим какую-нибудь экзотику.
Реально все работают на фреймфорках-CMS. И у каждого фреймворка есть своя логика, в рамках которой и следует ебашить. Поищи, знания каких фреймворков требуются у тебя. Это у питона по факту один Джанго, у пыха цветущих и пахнущих (в разных смыслах) штук 20. Один из вариантов - сделать за неделю задачу со студентами и устроиться стажером за еду, уча то, что используется в конторе.
Главный совет - избегай БИТРИКСА. Он сука популярен в рашке и его использует куча студий. Данная хуйня представляет из себя достаточно мощный, но извращенный как половая ориентация Слаанеш фреймворк/CMS, который не научит тебя ничему хорошему. Связывайся, только если альтернативы ну совсем нет а жрат хочется.
Аноним 2019/08/09 12:20:07  №1450511 122
>>1450503
А вот смотри, такой пример.
Я знаю все основы языка, включая ООП, понимаю, как работать с базами данных, умею писать базовые запросы и составлять структуру БД. Но при этом у меня совершенно нет опыта в создании каких-то рабочих проектов на пыхе, потому что, как ты и говоришь, я всегда пилил все на CMS/CMF (преимущественно MODX). Но сейчас я хочу свои навыки поднять на рыночный уровень, чтобы найти нормальную работу, возможно даже завести трактор в перспективе. Нужно ли мне для этого пробовать реализовывать какие-то либо проекты на чистой пыхе, так сказать, для опыта и набивания скиллов? Или сразу сосредоточиться на каком-нибудь Ларавеле, попутно восполняя пробелы в знании самого языка?
Аноним 2019/08/09 12:34:09  №1450521 123
>>1450511
Возможно, меня сейчас обоссут, но это
>Или сразу сосредоточиться на каком-нибудь Ларавеле, попутно восполняя пробелы в знании самого языка?
лучше.
Поясняю. Делая что-то на чистой пыхе, ты получаешь абстрактный некоммерческий опыт. В силу твоей неопытности - негативный, на своей жопе путем ошибок выясняя откуда растут ноги у современных паттернов проектирования. Я бы сделал задачу про студентов (она содержит необходимый минимум для ознакомления), посмотрел какой фреймворк используется в твоем города и устроился туда джуном, подтягивая недостающее.
Аноним 2019/08/09 16:48:04  №1450602 124
>>1450503
Спасибо за ответ, сейчас проштудировал вакансии, в одних нужен ларавел, в других yii в третьих битрикс, в четвертых еще какие-то но самые популярные первые 2, битрикс я так понял сразу отпадает и что тогда учить лучше laravel или yii?
Аноним 2019/08/09 17:40:31  №1450628 125
>>1450602
laravel. он сейчас самый популярный.
По нему советовали "Дмитрий Елисеев Сайт объявлений на Laravel". Сам не проверял, там 70 часов видео.
Аноним 2019/08/09 19:59:55  №1450682 126
>>1450628
И от того же Елисеева есть интернет магазин на yii2, у него можешь еще и симфони посмотреть =)
Аноним 2019/08/09 20:55:36  №1450710 127
Что лучше использовать: наследование или декоратор с инъекцией?
Аноним 2019/08/09 20:57:55  №1450711 128
>>1450521
>В силу твоей неопытности - негативный
Зато увереннее себя чувствуешь с инструментом. когда пальцы им поотшибаешь
Слыхал про совсем тупых макак, которые задрочили один фреймворк и не могут ни налево, ни направо.
Аноним 2019/08/10 08:30:49  №1450808 129
>2019
>просить совета у двача

Какой посоветуете хостинг для домашнего проекта? Какой сами используете?
Аноним 2019/08/10 09:15:07  №1450829 130
>>1450808
Они одинаковые все по-большому счёту. Можешь ещё на облачные платформы посмотреть.
Аноним 2019/08/10 10:44:46  №1450864 131
image.png (32, 586x409)
409x586
>>1450431
Разрабатывал используя OPEN SERVER докер не преподавали.
На хостинге используется юбунта 16.04 и LAMP.
Устанавливал composer require messenger
В качестве шины была Doctrine MESSENGER_TRANSPORT_DSN=doctrine://default
Все настройки выставил по дефолту как в документации.
При попытке запустить воркера командой php bin/console messenger:consume async -vv
Аноним 2019/08/10 10:50:40  №1450867 132
>>1450864
Не дописал:
Нихуя не работает, то одна ошибка вылетает, то другая. Почему другая? Потому что умники на гитхабе посоветовали редактрировать сам компонент. В итоге одну ошибку исправил, сразу появлялась другая. В конечном итоге проблема с сериалайзером была. Он почему то не работал. И вот я оказался тут.

Самое интересное что БЕЗ ШИНЫ и без настроек месенджера. Тоесть как показано в самом начале документации https://symfony.com/doc/current/messenger.html
Все сообщения хендлятся и воркер запускается.

Хотя по сути это уже не воркер, а обычный сервис. Потому что он выполняется синхронно.
Аноним 2019/08/10 14:26:49  №1450950 133
blade runner 2.jpg (15, 428x424)
424x428
Тест на PHP-IQ
Хочу вам вкинуть задачку и посмотреть, как быстро аноны додумаются до того, до чего я додумался за 1 час.
Как только прозвучит решение, до которого я дошел, или же близкое к нему - я сообщу, как сделал я.
Чисто для интереса, может я гораздо более тупой, чем думаю я до этого додумаются все за 5 мин или вовсе предложат лучшее, чем у меня.
Если будете постить решения хуже, чем у меня - я скажу, в чем минусы каждого решения.

Задача:
Юзеры могут создавать задания, которые запускаются по времени на сервере.
Формат - любой, который поддерживает CRON, но с точностью не более минуты.
Ориентируемся на то, что заданий может быть много, в районе 10к. (но не миллионы, это уже йоба-хайлоад, туда лезть не будем).
Задание - некий процесс, который может длиться от 0 до 1 секунды.
Дело происходит на пыхе. Задания хранятся в БД в отдельной таблице (в каком формате хранить - тоже подумай, хуле. Это может быть тупо cron-строка или же какие-то столбцы, смотри сам).

Как организовать запуск заданий, чтобы это жрало минимум ресурсов (оперативка, проц, время)?
Аноним 2019/08/10 14:32:35  №1450953 134
>>1450950
Код никакой не нужен, просто описать словами, как бы вы что сделали
Аноним 2019/08/10 15:06:32  №1450972 135
>>1450950
Лень долго думать (к тому же ты не описал возможную структуру задач).
В БД хранятся: строчка, описывающая задание (это может быть хоть eval код хоть ссылка на php скрипт), галочка выполнено/нет и время следующего выполнения.
Отдельный процесс (самое простое - крон) обходит базу, выбирает процессы, которые необходимо выполнить, и отрабатывает их. Самое простое - обходить их в цикле, если проблемы со скоростью - заводить подпроцессы на отдельные задачи (или группировать по 10 штук в процессе).
Аноним 2019/08/10 15:36:38  №1450999 136
>>1450972
>время следующего выполнения
Бинго, ты понял самое главное. Надо хранить время следующего запуска.

Какие были еще варианты:
1. Добавлять пользовательские задания прямо в crontab. Можно с модификатором "&", чтобы они запустились одновременно. Минус в том, что каждое задание будет заново загружать все зависимости приложения, все классы фреймворка, вся эта хуйня будет происходить для каждого задания. Очень скоро тупо оперативки начнет не хватать, плюс эти манипуляции будут жрать процессор. Плюс - не надо дрочить всю таблицу заданий.
2. Хранить в базе задание крон в виде строки, каждый раз обходить всю таблицу и смотреть, надо ли выполнить это задание в данную минуту. Минус - надо дрочить КАЖДОЕ задание КАЖДУЮ минуту, очень долго и жрет процессор.

А если хранить в таблице время следующего запуска задания, то можно тупо sql-запросом выбрать сразу те задания, что нужно запустить в данный момент, не обдрачивая cron-строку каждого задания.
После выполнения обновляем время следующего выполнения.
Таким образом, всегда загружаются только те задания, которые действительно должны быть выполнены + зависимости загружаются только 1 раз.

Ну и да, можно всегда прикрутить, чтобы они в мультитрединге запускались, если есть такая необходимость.
Например, в моем случае это будет даже минус, ибо хоть задания и будут выполнены "более одновременно", но это увеличит нагрузку на сторонние сервисы.
А когда они выполняются последовательно, хоть точность и меньше, но и нагрузка на сервисы меньше.
Аноним 2019/08/11 11:20:09  №1451347 137
Не понял.
Эта установка только для Linux? На Windows никак не поставить?
Аноним 2019/08/11 11:59:14  №1451371 138
>>1451347

Вообще, правильный URL - это вот этот: https://github.com/richBlueElephant/phpClub

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

- php, composer под виндой работают
- cp - команда копирования, можно скопировать файл вручную через Проводник или командой copy, если ты предпочитаешь командную строку
- что касается make - эта команда выполняет команды, записанные в файле Makefile (почитать на русском про команду make можно тут: https://www.google.com/search?client=firefox-b-d&q=%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B+make)

Makefile - это вот этот файл: https://github.com/richBlueElephant/phpClub/blob/master/Makefile

Из него видно, что make migrate выполняет команду vendor/bin/doctrine-migrations migrations:migrate --no-interaction

Я думаю, что под винду там надо немного подправить ее вид, вроде vendor/bin/doctrine-migrations.cmd или может быть php vendor/doctrine/doctrine/something.php или как-то так

- sphinx под винду работает
- разрешения на папки ставить не требуется

В качестве сервера ты можешь использовать встроенный в PHP веб-сервер.

------

Также, есть еще 3 варианта:

- в Windows 10 есть WSL, WSL2 - это поддержка запуска линуксовых приложений в консоли. Ставим ubuntu и запускаем все, что надо
- в более ранних Windows можно установить msys или cygwin . Это линуксовые утилиты (bash, ls, cp, make итд), портированные под Windows. С ними, конечно, надо разбираться, и может придется немного подправить команды, но они позволяют в том числе запускать команду make.
- использовать виртуальную машину с линуксом. Придется немного повозиться с настройкой, а также, в ней программа будет работать немного медленнее

------

В помощь тебе - набор минимальных знаний о командной строке: https://github.com/codedokode/pasta/blob/master/soft/cli.md

------

Если что-то еще непонятно, задавай уточняющие вопросы.

Аноним 2019/08/11 14:01:47  №1451448 139
>>1451371
Я лучше сдохну в мучениях чему буду пытаться запустить Makefile на Windows. Спасибо за ответ.
Аноним 2019/08/11 14:05:17  №1451449 140
>>1451371
Спасибо, поправил URL репозитория (хотя гитхаб умеет редиректить со старого URL на новый). Добавил в README больше словесных описаний, объясняющих что делают консольные команды. К сожалению, нет возможности проверить как проект работает под виндой.

>>1450808
У AWS есть EC2, первый год пользования бесплатно. Только это не хостинг, а VPS, что даёт больше свободы. Нужно привязать данные кредитной карты, откуда снимут 1 доллар для проверки.

>>1451448
Использование утилиты make не обязательно, в Makefile просто сокращения для консольных команд, которые можно выполнить и без make.

Аноним 2019/08/12 00:26:50  №1451759 141
15617059045170.jpg (25, 300x300)
300x300
>>1446969 (OP)
Подскажите ньюфагу, где можно почитать или посмотреть на проект, идеально было бы пхп-sql-js, где реализовано разделение юзеров на разные сессии и аккаунты, т.е каждый работает в своем аккаунте и сессии. Если там еще будет crud, то я помру от счастья.
Аноним 2019/08/12 04:50:20  №1451769 142
Аноним 2019/08/12 04:55:19  №1451770 143
>>1451769
Спасибо, но я еще во фреймворках понимаю чуть более, чем нихуя. Насколько по сравнению с ванильным пхп там сложнее восприятие кода?
Аноним 2019/08/12 05:03:18  №1451771 144
>>1451770
Если тебе сделать нужно то намного проще, потому что все готово. Если если разобраться как сделано то все хуево, нужно разгребти кучи магии. С опытом там становится понятно как все работает внутри, но со старта разобраться это пиздец.
Аноним 2019/08/12 05:21:46  №1451774 145
>>1451771
>если если разобраться как сделано то все хуево, нужно разгребти кучи магии
Зис, к сожалению. Гуглить\копипастить типовые решения я уже хорошо научился и так, но мой вкат сейчас застопорился именно на понимании работы в глубину процесса. Блядь, дошел до стадии, когда надо либо на практике учиться, либо искать наставника, но на работу не берут никуда, требований какой-то вагон, ну а наставники сами уже все заебались.
Аноним 2019/08/12 05:44:09  №1451777 146
>>1451774
Ну если у тебя есть время, то самый простой способ: ставить себе задачу вроде той, что ты обрисовал, и садиться ее реализовывать. То, что непонятно - гуглишь, и потихоньку по кирпичикам собираешь решение своей задачи и получаешь знания.
Когда я начинал, я умел только верстать и натягивать верстку на MODX - там пэхэпэ вообще не нужен для базовых задач. А потом однажды получил заказ на кастомное решение, и сел писать, при том, что из PHP знал только echo(). В общем, когда я эту задачу решил, я уже знал все основы языка. После ещё нескольких таких задач я разобрался достаточно для того, чтобы сесть за документацию и изучить все нормально.
Аноним 2019/08/12 08:49:44  №1451841 147
Сап двощь, я немного не понял по теме бд миграций. Например стоит задача изменить что-то очень важное в архитектуре бд, это изменение ломает например немного кода, но чтобы не ломало надо обойти всю таблицу и что-то апдейтнуть в ней. Как происходит вот этот весь воркфлоу с гитом и миграциями? Я не думаю что будет правильно сразу в файле миграций писать скл код который обходит таблицы и что-то с ними делает, наверное стоит это сделать какой-то консольной командой?
Аноним 2019/08/12 09:23:52  №1451878 148
Анинки, изучаю гит, но никак не возьму в толк: я могу клонировать проект с локального компьютера на удаленный сервер, например, сервер провайдера, если там НЕ установлен гит? Тут же просто как бы копирование идет, я же там не буду репозиторий делать. И если на сервере провайдера стоит пароль, мне гит это окошко выведет, или надо в команде прописывать как-нито? Понимаю вопрос детский, но для меня все это вновинку
Аноним 2019/08/12 09:32:32  №1451884 149
>>1451878
Раз у тебя есть хостинг не проще ли туда задеплоить проект свой через админку или ssh? Гит это не про то, что тобой описано.
Аноним 2019/08/12 09:41:56  №1451891 150
>>1451884
Я не совсем понимаю конечную процедуру. Вот я доделал проект на локальном комьютере. Раньше я думал, что теперь мне надо сделать клон через гит и отправить его на сервер. Выходит, тут гит мне не поможет, и все тупо копировать вручную? А гит - это просто аз изменениями следить?
Аноним 2019/08/12 09:52:44  №1451895 151
Аноним 2019/08/12 09:56:44  №1451897 152
>>1451895
Большое спасибо, анончик
Аноним 2019/08/12 10:28:51  №1451915 153
>>1451841
Тебе понадобилось новое поле в таблице, ты написал в коде вывод этого поля во вьюхе (например) и написал миграцию с добавлением этого поля. Закомитил и отправил в репозиторий. Скрипт делоя увидел новый коммит спулил его и запустил миграцию. Конец истории.
Аноним 2019/08/12 11:35:35  №1451940 154
>>1451915
Я немного про другое, например я добавил новое поле, но по логике приложения это поле computed из каких-то других полей, и нужно старые записи обновить каким-то масс апдейтом. Я вот и спрашиваю где лучше писать код этого масс апдейта, прямо в файле с миграциями?
Аноним 2019/08/12 12:11:49  №1451949 155
>>1451940
Логически - да в файле миграций.
Пример: Ты ведешь разработку с кем то в команде, у каждого своя локальная база соответственно. Ты решил привнести свое сложное изменение базы - для других локально надо будет так же только запустить миграцию.
Но есть нюанс если у тебя на бою Большие данные и обработка всей базы по твоим новым правилам не влезет в 10 минут (или сколько там живет cli) то естественно тут будет другое решение.
Аноним 2019/08/12 12:28:24  №1451955 156
>>1451759
бумп, вопрос еще акутален
Аноним 2019/08/12 13:36:23  №1452003 157
Аноним 2019/08/12 13:43:47  №1452005 158
Можно ли как-то задать свойство класса с помощью метода? Ну или ещё как-то вынести значение из текста программы в иное место?

Вот код: https://pastebin.com/VYB6rxjP
Там токен = 666666666. Но мне нужно, чтобы этот токен брался вообще не из кода, а из конфига, который в базе (достаётся из неё через getToken() ). Но если написать вместо protected $token = "666666666"; что-то типа protected $token =$this->getToken();, то пхп на меня смотрит очень укоризненно.
Аноним 2019/08/12 13:46:01  №1452006 159
>>1452005
В конструктор инициализацию полей вынеси, он затем и нужен
Аноним 2019/08/12 14:49:33  №1452047 160
Пытался написать, но макак не пропускает, в общем вот мой высер https://pastebin.com/Mf6j8QnR
Суть в чем: тайпскрипт хорошая штука, но меня вымораживает, что любые внешние данные творят что хотят в моих строго типизированных для компиляции скриптах. Пришел null вместо числа? Ну все пизда тебе.
Как?! Как это всё правильно отрабатывать? Где проверять, преобразовывать, надо ли вообще. Как это делается в PHP? Опушка, помоги! SomeApprentice, ты нырнул глубоко в это дерьмо, может сможешь помочь?
Аноним 2019/08/12 15:13:36  №1452056 161
>>1452006
Там в исходном классе уже есть конструктор (я просто его не показал). И когда вставляю в него $token =$this->getToken();, код не работает. Получается, это у меня где-то там косяк и так и надо было делать?
Аноним 2019/08/12 15:46:28  №1452070 162
>>1452056
>$token =$this->getToken()
может всё такие $this->token?
или вообще сделай метод initToken() и вызывай его в конструкторе. Если ты наследуешь то не забывай про parent::__construct()
Аноним 2019/08/12 16:05:52  №1452078 163
>>1452047
Тайпскрипт не занимается валидацией в рантайме и никогда не будет, так как это повлечёт изменение скомпилированного JS. Валидировать пришедшие данные из внешнего мира нужно вручную, однако есть библиотеки, облегчающие эту задачу. Ты описываешь правила валидации, а библиотека выведет TS тип, чтобы в коде не делать 2 раза похожую работу: описывать тип, а потом дублировать его правилами валидации. Примеры:
- https://github.com/pelotom/runtypes#example
- https://medium.com/@ottoki/runtime-type-checking-with-io-ts-in-typescript-14465169fb02

Вот тут на хабре люди рассказывают как борятся с проблемой:
- https://habr.com/ru/post/453502/
- https://habr.com/ru/post/450238/
У нас есть проект, где для рантайм валидации используется typestack/class-validator + typestack/class-transformer. Проблему решает, но код на декораторах получается перегруженным.
Аноним 2019/08/12 17:31:16  №1452115 164
>>1452005
Если доступ к полю происходит через метод-геттер (в твоем примере aa() ) то просто переопределяешь этот метод в наследуемом классе чтобы он возвращал то что нужно (это одна из причин почему желательно использовать геттеры а не напрямую поля дергать). Если поле используется напрямую $this->token тогда нужно добавлять магии __get https://ideone.com/TPS1f7
Аноним 2019/08/12 18:07:32  №1452130 165
>>1452070
>может всё такие $this->token?
Да, точно. Вызываю в конструкторе вот так:
$this->token = $this->getToken();
И в тестовом примере оно работает. А вот в коде, который модифицирую - нет. Завтра буду много думать.
Аноним 2019/08/12 18:19:58  №1452133 166
>>1452115
Спасибо, завтра попробую.
Аноним 2019/08/12 18:25:04  №1452134 167
А как написать палиндром для кирилицы? Я понял что использовать функцию strrev() нельзя, но решаю через цикл, mb_substr() тоже хуйню возвращает, нихуя не понимаю, вот код: https://ideone.com/xSGVI4
Аноним 2019/08/12 18:52:28  №1452137 168
>>1452134
Напиши в 20 строке echo "$symbol1 $symbol2\n"; и посмотри что получается
Аноним 2019/08/12 19:43:13  №1452160 169
>>1452137
Понял что у меня $symbol1 выводит что нужно, а $symbol2 весь текст так как выборка подстроки от 0 до -1, ну получается надо переписывать это по другому совсем, хули тут это ебка с этими кодировками, в питоне в одну строчку простейшую решается этот палиндром, какой же сложный язык.
Аноним 2019/08/12 20:23:07  №1452174 170
>>1452160
Вообщем я сделал, но выглядит страшно, мне кажется очень всратое решение, если есть лаконичней и проще, прошу скинуть, вот мой:
https://ideone.com/tmn3Fh
Аноним 2019/08/12 21:39:50  №1452185 171
Аноним 2019/08/12 23:23:45  №1452199 172
>>1452185
Так.. Решил я значит прочитать в учебнике анона про задачу. Написано что земля пухом, если через strrev решать. Поэтому держи другой вариант =) http://ideone.com/PUpD1t
Аноним 2019/08/13 00:09:33  №1452201 173
Простите за тупой вопрос, но что означает символ ^ в версии пакета composer?
Аноним 2019/08/13 07:22:15  №1452237 174
>>1451915
>Скрипт деплоя увидел новый коммит спулил его и запустил миграцию.

А можно об этом чуть подробнее? Что почитать, чтобы разобраться в этой теме?
Аноним 2019/08/13 08:27:57  №1452273 175
Аноним 2019/08/13 08:45:30  №1452284 176
Знающий анон, подскажи позязя, я должен у каждой функции, класса и метода писать вот такую конструкцию:

мой код
@какая-то штучка

Я понимаю, что это дает подсказки для эклипсов и нетбинов и позволяет проще писать документацию, но это общепринятый стандарт или что? И нужно ли соблюдать табуляцию, чтобы звездочка на второй строчке шла обязательно ниже второй звездочки с первой строки? Или просто две звезды, одна, одна и две?
Аноним 2019/08/13 08:46:27  №1452286 177
>>1452284
Извините, облажался. Там звездочки и камменты к коду
Аноним 2019/08/13 08:52:15  №1452291 178
>>1452237
>А можно об этом чуть подробнее? Что почитать, чтобы разобраться в этой теме?

Тут разные варианты.

Например ваш админ повесил на крон скрипт который каждые 10 минут делает
git pull origin develop
php artisan migrate

Или другой вариант через gitlab ci
https://m.habr.com/ru/company/softmart/blog/309380/
Аноним 2019/08/13 09:04:43  №1452298 179
>>1452284

Это phpDoc (вдохновлен и скопирован с JavaDoc). Это стандарт документирования, который позволяет автоматически парсить комментарии и создавать из них текстовую документацию, ну и как бонус, подсказки в IDE.

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

Описание стандарта:

- кратко - https://ru.wikipedia.org/wiki/PhpDocumentor
- полный мануал со всеми аннотациями на англ: https://docs.phpdoc.org/

Вот какая документация получается на выходе: https://devdocs.io/symfony~2.8/symfony/component/filesystem/filesystem

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

function x(): string

То не надо писать в документации второй раз @return string.

Аноним 2019/08/13 09:08:23  №1452299 180
Аноним 2019/08/13 13:16:04  №1452457 181
Привет аноны. Дайте подсказку, что там еще можно написать?
http://ideone.com/FFFpnc#stdin
Уже всё там прочесал, ошибок вроде нет, руководство тоже не помогает да, я тупенький в таких делах
Аноним 2019/08/13 13:27:15  №1452471 182
Аноним 2019/08/13 13:30:36  №1452475 183
>>1452471
Кажется, понял, спасибо. Я в коде указал "как бы очевидное"
Аноним 2019/08/13 17:58:56  №1452701 184
Привет, анон. Только вкатываюсь и пытаюсь разобраться.
https://ideone.com/r10PWb
Не могу понять как мне без 3-х инструкций echo сделать адекватный код. Всегда получается через 3 строки, даже если брать обычное умножение переменной на себя.
Аноним 2019/08/13 18:26:48  №1452718 185
Аноним 2019/08/13 18:39:33  №1452726 186
>>1452718
Ага, все дело в точках, которые я вижу впервые. Либо я читал как раздолбай, либо по гайдам еще рано для этого. Но в любом случае, спасибо
Аноним 2019/08/13 20:10:04  №1452791 187
>>1452726
О, анон с моей проблемой. Думал минут 40 над этим, точек в гайде тоже не видел это который от ОПа. Решил отдохнуть, пока голова остынет
Аноним 2019/08/14 08:59:48  №1453019 188
Кто-нибудь из знатоков может своими словами кратенько разжевать новичку, что такое компосер? Я так понимаю, это какая-то линуксовская программа типа гита, которая сидит в папке с дистрибутивом твоего фреймворка, и , при установке, куда-то лезет, забирает последние версии каких-то файлов, обновляет, загружает и вообще доминирует
Аноним 2019/08/14 09:21:30  №1453042 189
Как проверить ТИП файла в php?
Не разрешение, мне вообще похуй на его разрешение.
Тип.

Есть какой аналог линухового file?
Аноним 2019/08/14 09:31:35  №1453059 190
>>1453019
Она есть под любую ось.
Устанавливает пакеты по конфигурации composer.json
Основная идея в указании зависимостей:
Например пакет а версии 1.1 работает только с пакетом б версии 2.3 это указано в конфигурации пакетов по сему композер скачает тебе только совместимые версии.
Аноним 2019/08/14 11:27:39  №1453190 191
>>1453019

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

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

Он подбирает совместимые версии библиотек, записывает их в файл composer.lock, скачивает, установливает в папку vendor. Также, если этим библиотекам нужны другие библиотеки (зависимости), он подбирает их версии и тоже устанавливает. Затем он настраивает автозагрузку (автоматическое подключение файлов) для этих библиотек так, что тебе достаточно в своем коде подключить единственный файл (vendor/autoload.php).

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

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

Композер работает в командной строке, потому, чтобы им пользоваться, надо сначала освоить её. У меня есть урок для начинающих: https://github.com/codedokode/pasta/blob/master/soft/cli.md
Аноним 2019/08/14 12:56:16  №1453241 192
>>1453190
>>1453059
Как все умно сделано-то, спасибо, аноны
Аноним 2019/08/14 13:34:04  №1453267 193
>>1453241
Не умно. Если в пакете A зависимость от пакета B с версией 1.0.0, тогда установив пакет A ты хуй установишь пакет B другой версии
Аноним 2019/08/14 13:47:14  №1453276 194
>>1452199
О вот за это спасибо, очень красивое решение.
Аноним 2019/08/14 13:47:30  №1453277 195
Котаны, вопрос с .htaccess

Делаю тупейшую вещь, просто ридерекчу любой запрос на один конкретный php-файл. Сервер - openserver.
Такое правило
RewriteEngine On
RewriteRule ^.$ /public/test.php приводит к ошибке 500
а такое
RewriteRule ^[a-z0-9]
$ /public/test.php редиректит на test.php который и запускается.
Почему так?
Аноним 2019/08/14 13:48:35  №1453278 196
>>1453277
бля, звездочки сожрались
Аноним 2019/08/14 13:54:26  №1453285 197
Аноним 2019/08/14 14:12:59  №1453291 198
>>1453285
>>1453277
а если точку в квадратные скобочки засунуть?
Аноним 2019/08/14 14:18:44  №1453294 199
Аноним 2019/08/14 14:20:50  №1453296 200
>>1453277

Надо смотреть лог ошибок вебсервера (если под виндой, то в папке Апача logs, если в Линуксе. то /var/log/httpd или /var/log/apache2).

Под линусом для чтения файла надо быть админом или входить в группу adm.

Посмотри лог и поищи там ошибки, заодно нам расскажешь, в чем была проблема.
Аноним 2019/08/14 14:44:02  №1453317 201
Пилю лайфхак, посаны.

Зачастую бывают такие участки кода:
if (\file_exists($mediafile)) {
unlink($mediafile);
}

Можно писать их в одну строку гораздо короче:
\file_exists($mediafile) && unlink($mediafile);

Охуенная тема, примерно как с аннигиляцией скобочек с помощью return;
Аноним 2019/08/14 14:44:59  №1453318 202
>>1453291
Если точку обернуть в квадратные скобки то перестает падать в ошибку 500.
Но
Из корня редиректит на нужный файл. Но стоит добавить хоть один символ и пишет ошибку "Объект не найден".

>>1453296
На этой же версии опенсервера у меня крутится по кускам содранный из разных мест фреймворк
https://ideone.com/LK3A5l
и там все работает
Я решил получше разобраться в .htaccess и сразу обосрался


Аноним 2019/08/14 14:50:08  №1453325 203
>>1453318
пс
а если такое правило написать :
RewriteRule ^([a-zA-Z0-9/-]"тут звездочка")$ /public/test.php?id=$1 - то норм редиректит и $_GET заполняет
Аноним 2019/08/14 15:39:50  №1453367 204
15354457200090.png (698, 540x720)
720x540
Аноним 2019/08/14 17:16:12  №1453413 205
>>1453367
Что то более чущественное сказать можешь?
на Апаче 70% вэбсерверов. Остальные 30 это ngnix.

Аноним 2019/08/14 21:17:53  №1453528 206
15654764142170.jpg (7, 480x360)
360x480
Как правильно подключать библиотеки без поддержки пространства имён? И где именно - при инициализации приложения, или прямо в конструктор класса-оболочки его подключить?
И что за мода у некоторых разработчиков этих библиотек делать классы через статик?
Аноним 2019/08/14 23:51:07  №1453551 207
>>1453019
Композер это годнота, базарю. Один раз попробуешь - больше не сможешь без него.
Аноним 2019/08/15 00:27:07  №1453558 208
Млп
Аноним 2019/08/15 06:04:33  №1453615 209
ПАМАГИТИ111 Решил научиться PHP. изначально юзал онлайн редакторы - все получалось нормально. А теперь решил попробовать тоже самое в phpstorm. Все сделал по феншую скачал php 7 к нему соответствующий дебагер. Прописал в переменные срады место где лежит php. В php.ini добавил следующие строчки
zend_extension = C:\php\ext\php_xdebug-2.7.2-7.3-vc15-x86_64.dll
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.profiler_enable=1
xdebug.profiler_output_dir="c:\php\tmp"
extension=php_mbstring.dll
Итог! Половина задач работает нормально, половина 502 Bad Gateway, хотя в самом phpstorm в консоли снизу ни одного замечания и решение выдается так как и нужно. Причем если задачи раскидать по файлам аля одна задача один файл - работать начинает практически все шо не работало за исключением некоторых, но у меня то все в одном файлике лежит одна задача под другой. Вроде бы разницы не должно быть, но нет. Вопрос ШО ЗА НАХ?!??!?! КАК ИСПРАИТЬ?!?!!?!?1
Аноним 2019/08/15 06:05:17  №1453616 210
>>1453267
В этом весь смысл дурилка
Аноним 2019/08/15 07:28:40  №1453649 211
>>1453616
Например мне надо поставить пакет A и B. Оба зависят от пакета С, но разных версий. Из-за этого я не смогу одновременно поставить A и B.

Это специально сделано?
Аноним 2019/08/15 07:50:24  №1453656 212
Скажите, а как в апаче запретить доступ ко всем каталогам, кроме public?

Аноним 2019/08/15 10:14:38  №1453745 213
>>1453656
Я просто посылаю все реквесты в \public\index.php
Аноним 2019/08/15 12:45:17  №1453859 214
>>1453745
то есть в .htaccesse правилами не отсеиваешь файлы и папки.
А как тогда подгружаются стили и прочее барахло из public?
Аноним 2019/08/15 13:08:04  №1453867 215
Аноним 2019/08/15 16:21:02  №1454021 216
>>1453649
Ты вьелся в частный случай. Хочешь пакет каждый в свою среду окружения и тд и все это ради одного частного случая. Цель именно в строгости зависимости а ты хочешь все усложнить
Аноним 2019/08/15 18:39:17  №1454104 217
image.png (124, 416x226)
226x416
Этот опен сервер пойдет для создания локалки?
Аноним 2019/08/15 19:22:50  №1454117 218
pepereee.jpg (137, 900x900)
900x900
>>1454104
ОН ДЛЯ ЭТОГО И СОЗДАННН!!!!
Аноним 2019/08/15 19:44:03  №1454129 219
>>1454117
Мало-ли какой-то другой получше есть
Аноним 2019/08/15 22:26:33  №1454210 220
Объясните мне как решить проблему при выводе символа строки через квадратные скобки, если строка написана кирилицей, кодировка слетает и выводит какую-то хуйню, вот пример: https://ideone.com/wMhDPb
Аноним 2019/08/16 00:17:38  №1454243 221
>>1454210
Квадратные скобки выводят байт, а не символ. Из-за этого возникает проблема, потому что utf это многобайтовая кодировка. Используй mb_substr()
Аноним 2019/08/16 01:32:15  №1454251 222
>>1454243
Спасибо, теперь разобрался.
Аноним 2019/08/16 05:00:13  №1454278 223
Аноним 2019/08/16 07:33:04  №1454313 224
>>1454278
Много ли профита от разных опенсерверов?

Вкину еще гайд хороший. Предлагаю в шапку добавить на перекатном
https://www.youtube.com/watch?v=a6xtQQqx1tg
(У него еще 2 части-продолжения есть)
Аноним 2019/08/16 08:00:41  №1454326 225
Возникла такая проблема - в админке сайта нужно сделать загрузку больших файлов (>100 мб).

Я с помощью js разбиваю файл на части по 5мб (chunks), а потом собираю их все вместе уже на сервере. У меня возникла проблема с авторизацией. Доступ к загрузчику файлов должен быть только у админа, поэтому перед загрузкой каждой части я проверяю куки пользователя и делаю запрос в бд перед отправкой файла, чтобы убедиться, что загрузку осуществляет админ.

Это нормальное решение в плане нагрузки на сервер? Меня очень смущает, что на каждую часть файла приходится sql запрос, можно как-то иначе решить этот вопрос? Как можно осуществить контроль к загрузчику без использования sql каждый раз? надеюсь понятно расписал
Аноним 2019/08/16 08:55:42  №1454365 226
>>1454326
Возьми tus как готовое решение загрузки файлов по частям. Каждый блок там подписан хэшем. Так что кинешь проверку кук только на самый первый запрос загрузки дальше у тебя в очередь кусков уже никто не сможет влезть так что можно не проверять
Аноним 2019/08/16 09:05:12  №1454368 227
image.png (35, 873x395)
395x873
Привет, аноны.
На пикриле и задал значение Джонни синтаксу нейм.
Далее по условиям понятно, что если имя равно Пидар, то выводится хуидар и т.д. Почему вывелся хуидар, если имя не Пидор?
Аноним 2019/08/16 09:06:03  №1454370 228
>>1454368
На пикриле я задал*
Быстрофикс
Аноним 2019/08/16 09:10:24  №1454371 229
>>1454370
У тебя присвоение а не сравнение
Аноним 2019/08/16 09:13:53  №1454373 230
>>1454371
Всё, понял, спасибо
до сих пор даже через раз точку запятую пропускаю
Аноним 2019/08/16 09:19:45  №1454376 231
>>1454373
Поставь phpmd глобально и пакет для sublime соответствующий. Он будет тебе подсвечивать такие косяки
Аноним 2019/08/16 09:29:26  №1454383 232
>>1454376
>Поставь phpmd глобально и пакет для sublime соответствующий
Что за зверь такой и где искать?
Аноним 2019/08/16 09:33:07  №1454387 233
Аноним 2019/08/16 09:40:05  №1454390 234
>>1454387
Спасибо!
А что насчет пакета для саблайм?
Аноним 2019/08/16 10:10:18  №1454415 235
Аноним 2019/08/16 10:14:14  №1454419 236
Аноним 2019/08/16 10:18:09  №1454424 237
>>1454415
Но ведь я не толстил
Аноним 2019/08/16 10:25:09  №1454429 238
>>1454424
Когда более-менее разберёшься, то поймёшь, что этих ютубных хайпожоров лучше обходить стороной, а их уроки и подавно - это не программисты.
Аноним 2019/08/16 10:27:27  №1454432 239
>>1454429
Понял. Ну, я не разобрался еще хорошо в этой теме, смотрю, т.к. более-менее рассасывает всё. Со мной ничего не случится плохого?
Аноним 2019/08/16 10:36:53  №1454437 240
>>1454432
Да смотри что хочешь, только другим не рекомендуй ничего, тем более если мало опыта.

>Со мной ничего не случится плохого?
Ничего. Там же совсем ясли показывают.
Но я бы поискал что-то менее гнилое.
Аноним 2019/08/16 10:37:47  №1454438 241
>>1454437
>Но я бы поискал что-то менее гнилое
Ты использовал какие-то видео-уроки сам?
Аноним 2019/08/16 10:43:15  №1454444 242
>>1454438
Поначалу вполне норм, но потом слишком медленно уже - читать быстрее. Сейчас только статьи всякие читаю интересные да доки посматриваю.
Аноним 2019/08/16 10:49:21  №1454451 243
Аноним 2019/08/16 11:21:47  №1454473 244
image.png (31, 511x480)
480x511
Анончики, как подключить эту хрень?
Аноним 2019/08/16 11:35:51  №1454482 245
>>1454473
Я нагуглил. Если кто-то не знает пароль от этого, то просто в логине пишите root и можно логиниться
Аноним 2019/08/16 11:39:16  №1454483 246
Аноним 2019/08/16 11:42:21  №1454486 247
Аноним 2019/08/16 16:02:40  №1454601 248
>>1453317
@unlink($mediafile) еще проще
Аноним 2019/08/16 16:16:16  №1454616 249
Аноним 2019/08/16 16:39:25  №1454631 250
Анончики, объясните, пожалуйста, где в задаче про список абитуриентов нужно использовать класс Абитуриент?

Вот получаю я информацию из БД, мне нужно её занести в массив экземпляров класса и потом уже передавать в контроллер?
Аналогично и с внесение данных в БД?

Зачем нужен класс Абитуриент, если можно сразу использовать данные полученные в классе таблицы?
Аноним 2019/08/16 17:49:54  №1454671 251
>>1454631
Ты можешь из бд сразу экземпляры класса получать, это очень удобно. Гугли pdo fetch class
Аноним 2019/08/16 18:00:00  №1454677 252
Пытаюсь загрузить файл на telegra.ph/upload через curl, ошибка то Failure when receiving data from the peer, то SSL connect error.
Попробовал на imgur грузить - без проблем, любые страницы (и сам файл) получаю тоже. А на телеграфе проблема. Что делать?
Аноним 2019/08/16 19:41:13  №1454727 253
>>1454313
>Учим PHP за 1 час
@
Видео идёт полтора
Аноним 2019/08/16 20:35:10  №1454746 254
>>1454727
Не, там почти 4 выходит
Аноним 2019/08/17 01:12:49  №1454814 255
>>1454677

Тебе надо разобраться, в чем может быть проблема. Цепочка тут довольно сложная: твоя программа использует расширение php_curl, а это расширение является прокладкой между php и сишной библиотекой curl (файл libcurl.dll или libcurl.so).

Соответственно, один из способов диагностировать проблему - это попробовать отправить тот же запрос утилитой командной строки curl, которая обычно идет в комплекте с библиотекой curl. У утилиты есть флаг -v, который заставляет ее писать подробности, например, вот команда для выполнения GET запроса:

curl -v https://example.com

Она выводит в том числе подробности установки зашифрованного SSL-соединения, и этап, на котором произошла ошибка.

Если ты используешь Линукс, то утилита curl может быть уже установлена, или ее надо будет установить менеджером пакетов. Если WIndows, то она скорее всего есть в том архиве, в котором была библиотека libcurl.dll.

Также, попробуй открыть https://telegra.ph из браузера - если он не открывается, то возможно, поработал Роскомнадзор, можешь обратиться к ним за решением.

Если сайт открывается в браузере, с большой вероятностью дело в том, что библиотека curl не содержит корневого сертификата для проверки сертификата telegra.ph. Некоторые в таких случаях отключают проверку сертификатов, но гораздо правильнее скачать/установить набор корневых сертификатов и в опциях curl в твоей программе указать путь к ним. В композере, например, есть библиотека https://packagist.org/packages/composer/ca-bundle которая автоматически скачивает набор сертификатов от Мозиллы, а в ридми написано, как ее подключить.

Ты мог бы тут заметить, что в той же Windows уже есть корневые сертификаты, почему curl их не использует? В мануале написано, что для этого нужна сборка curl с поддержкой библиотеки schannel: https://curl.haxx.se/docs/sslcerts.html

Аноним 2019/08/17 04:30:35  №1454823 256
>>1454601
Он не про это вовсе
Аноним 2019/08/17 11:00:14  №1454970 257
как сука убрать из формы старые запросы?чтобы при перезагр страницы их там не было
Аноним 2019/08/17 11:25:18  №1454989 258
>>1454814
>библиотека https://packagist.org/packages/composer/ca-bundle
Установил, подключил, результат тот же.
>Роскомнадзор
Прокси есть.
api.telegra.ph и api.telegram.org открываются. telegram.org/ открывается, telegra.ph/ - SSL ошибка.
>Некоторые в таких случаях отключают проверку сертификатов
CURLOPT_SSL_VERIFYPEER, 0 cтавил - всё равно Failure when receiving data from the peer или SSL connect error. Откуда вообще SSL error, если я отключил проверку? Снова пробовал telegram.org/ и telegra.ph/ открывать - всё так же.
>используешь Линукс
Винда.

Что делать дальше, мастер? Думал на imgur перейти, разобрался с api, а там, оказывается, ограничение на кол-во загрузок.
Аноним 2019/08/17 11:46:02  №1455005 259
>>1454970
Не нажимай кнопку назад. Можешь сделать редирект =)
Аноним 2019/08/17 11:51:41  №1455009 260
>>1455005
а нет к-л скрипта чтобы чистил?
Аноним 2019/08/17 11:52:16  №1455010 261
>>1454989

Нужно проверять утилитой curl. Как ты устанавливал библиотеку curl? Если скачивал какой-то архив, то там наверняка есть утилита curl.exe. Ее надо поместить в одну папку с libcurl.dll и выполнить команду

curl -v https://telegra.ph/

Вот гайд по использованию консоли: https://github.com/codedokode/pasta/blob/master/soft/cli.md

Также, в PHP можно попробовать включить опцию для отладки:

curl_setopt($curlhandle, CURLOPT_VERBOSE, true);

Она пишет данные в поток ошибок (stderr), потому PHP скрипт надо запускать из консоли (командой вроде php myscript.php), а не через веб-сервер. Если запускать из-под веб-сервера, это либо пойдет в лог ошибок, либо неизвестно куда.

Если вдруг она ничего не выведет, то ты можешь попробовать перенаправить отладочную информацию в файл:

$verbose = fopen('c:/tmp/debug.txt', 'w+');
curl_setopt($handle, CURLOPT_STDERR, $verbose);

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

Аноним 2019/08/17 11:52:37  №1455011 262
Есть пхп господа из столиц? Подскажите, по работе для новичков все ок или уже не очень?
Аноним 2019/08/17 11:54:24  №1455013 263
Аноним 2019/08/17 11:57:34  №1455016 264
>>1455013
а если так?
<input type="reset" value="Сбросить">
Аноним 2019/08/17 11:59:39  №1455017 265
>>1455016
Я тебе дал всю инфу, остальное уже ты проверяй пока не получится =) И эта кнопка тебя не спасет от сохраненных данных при обновлении. На неё же еще нажать надо.
Аноним 2019/08/17 12:13:20  №1455024 266
>>1454989

Дополню еще. Если ты никак не можешь найти curl.exe (что плохо), просто скачай архив отсюда https://curl.haxx.se/windows/ , распакуй в отдельную папку, зайди в нее из консоли и запускай curl.exe из нее.

Если ты хочешь заставить курл использовать прокси, добавь опцию -proxy, например:

curl.exe -v -proxy http://1.2.3.4:12345 https://telegra.ph

Если что, полный список опций доступен при выполнении curl --help, или описан тут: https://curl.haxx.se/docs/manpage.html

Возможно, что курл не выведет особых подробностей, а просто напишет что не удалось установить SSL-соединение. Тогда нам нужен инструмент для тестирования SSL соединений, он тебе может пригодиться и в других случаях. Иди сюда https://indy.fulgan.com/SSL/ и скачай там один из архивов, например, openssl-1.0.2s-i386-win32.zip

Раскакуй его в новую папку, зайди в нее из консоли. Далее набери команду тестирования SSL соединения:

openssl.exe s_client -debug -connect telegra.ph:443

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

GET / HTTP/1.0 (Enter)
Host: telegra.ph (Enter)
(Enter)
(Ctrl + Z, Enter чтобы завершить ввод)

Если что-то непонятно, то скидывай, что выведут эти утилиты. Увы, openssl прокси не использует.
Аноним 2019/08/17 12:15:28  №1455027 267
>>1454970

Что ты имеешь в виду? Данные, введенные в форму, снова показывают после перезагрузки страницы? Или при вводе появляется список с ранее введенными данными?

Также, в любом случае тебе надо использовать паттерн Post/Redirect/Get. Про этот паттерн и другие вещи я написал в уроке про обработку данных форм: https://github.com/codedokode/pasta/blob/master/forms.md

Аноним 2019/08/17 12:16:40  №1455029 268
Аноним 2019/08/17 12:47:08  №1455061 269
Анон, хватит себя мучать. Иди плати денежку на Хекслет и ищи норм работу.
Я устроился на 35к, щас 55 (полгода опыта)
Аноним 2019/08/17 13:00:23  №1455063 270
Screenshot9.jpg (117, 816x245)
245x816
Screenshot10.jpg (221, 525x654)
654x525
extension=php_openssl.dll в php.ini включено.
>>1455024
Вот вывод после как я понял авторизации проксей.
И вывод openssl s_client -connect telegra.ph:443 -msg

>>1455010
Тут немного иначе:

successfully set certificate verify locations:
CAfile: D:\------------------\composer\ca-bundle\src/../res/cacert.pem
CApath: none
Unknown SSL protocol error in connection to telegra.ph:443
Curl_http_done: called premature == 1
* Closing connection 0
Аноним 2019/08/17 13:31:21  №1455070 271
>>1455061
Иди-ка ты нахуй со своими курсами.
Аноним 2019/08/17 13:35:26  №1455073 272
>>1455063

Скорее всего дело в РКН. Вот как у меня выглядит соединение без VPN:

wine /d/tmp/openssl.exe s_client -debug -connect telegra.ph:443

CONNECTED(00000048)
write to 0x4afff0 [0x4b0778] (307 bytes => 307 (0x133))
0000 - 16 03 01 01 2e 01 00 01-2a 03 03 cc 01 5a f5 0d ........*....Z..
....
read from 0x4afff0 [0x4b5cd8] (7 bytes => 7 (0x7))
0000 - 48 54 54 50 2f 31 2e HTTP/1.
9:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:.\ssl\s23_clnt.c:827:

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

А с VPN - соединение устанавливается.

У тебя curl успевает отправить один пакет (ClientHello), после чего получает, что соединение было закрыто. Тут может быть несколько причин:

- серверу telegra.ph ты не нравишься и он тебя банит (хотя тогда он бы наверно не давал даже установить соединение)
- прокси прочитал твой пакет ClientHello и решил закрыть соединение
- DPI прочитал пакет ClientHello и решил закрыть соединение

То, что соединение сначала устанавливается и дается возможность отправить ClientHello, указывает на то, что вероятнее всего 2 или 3 вариант. Если банят, то обычно не дают даже соединиться с сервером.

На дампе видны байты 74 65 6C 65. Это коды символов "tele" (таблица http://www.asciitable.com/ ), у тебя в пакете ClientHello указано имя telegra.ph (видимо это поле SNI - Server name indication), и это позволяет блокировать соединение. Надо переходить на TLS1.3 и ESNI, где имя сервера шифруется. Правда, для ESNI нужна поддержка со стороны сервера.

Что касается прокси - если это HTTP-прокси, то в нем обмен идет в открытом виде (примеры есть тут https://stackoverflow.com/questions/7577917/how-does-a-http-proxy-utilize-the-http-protocol-a-proxy-rfc). Клиент посылает к прокси HTTP-запрос вроде CONNECT 1.2.3.4:1234 или даже CONNECT telegra.ph:1234 и DPI может его перехватить, как и пересылаемый через прокси пакет ClientHello.

Ты можешь попробовать соединиться с другим сервером, например, https://example.com, и увидишь, как должен выглядеть трафик при успешном соединении.

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

Отфильтровать лишний трафик можно, указав фильтр, вроде такого ip.addr == 1.2.3.4 (адрес прокси), про фильтры написано тут: https://wiki.wireshark.org/DisplayFilters

Также, DPI может перехватывать твои DNS запросы, когда ты делаешь запрос на разрешение адреса telegra.ph, он может подменять ответ и присылать IP сервера-заглушки (в твоем случае это не происходит, IP правильный).

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

Аноним 2019/08/17 13:41:10  №1455078 273
Аноним 2019/08/17 13:48:30  №1455079 274
>>1455070
Ну давай, осиливай свои регулярочки еще полгода. А потом на завод иди
Аноним 2019/08/17 13:49:37  №1455080 275
>>1455078
Если появляются, зарегистрируйся, пройди бесплатные уроки. Я же не кидаю реф. ссылку, а делюсь годнотой.
Аноним 2019/08/17 13:58:50  №1455082 276
Screenshot9.jpg (126, 967x230)
230x967
>>1455073
>Скорее всего дело в РКН.
Но почему любые другие заблокированные сайты открываются без проблем? Через эти же прокси. Вот сейчас для теста рутрекер открыл.

>Wireshark
Понятнее не становится.
Попробовал установить curl_setopt($curl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_3'); - Wireshark всё еще показывает соединение по TLSv1. Открыл опять рутрекер - там уже TLSv1.2. Кажется, ничего не меняется от этой опции.
Аноним 2019/08/17 14:05:20  №1455090 277
>>1455079
Зачем ты платишь за бесплатную информацию?
Аноним 2019/08/17 14:08:00  №1455094 278
>>1455082
Попробовал через бесплатные прокси коннектиться к заблокированным сайтам - все редиректит на сайт провайдера. Хм.
Аноним 2019/08/17 14:14:58  №1455095 279
>>1455094
А вот через socks5 прокси получается. Какой вывод делать-то? Мой провайдер настроил DPI исключительно на telegra.ph?
Аноним 2019/08/17 14:25:31  №1455099 280
Перенастроил прокси на socks5, опять коннектится ко всему, кроме телеграфа. Может, дело реально в проксе?
Попробовал зайти через браузер, использую эту проксю. Не заходит. Блядь, а я еще и деньги за неё платил, чтобы получать вот это вот.

Спасибо, ОП! Без тебя бы не справился.
Аноним 2019/08/17 14:38:39  №1455114 281
>>1455082

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

- программа устанавливает TCP-соединение с HTTP-прокси (пакеты SYN/ACK)
- программа шлет запрос CONNECT, прося прокси соединиться с сервером, сервер отвечает 200 Ok
- программа шлет пакет ClientHello для установки соединения
- приходит в ответ TCP-пакет ACK (подтверждение), а затем FIN (закрытие соединения)

Следовательно это либо прокси (но странно что он отправил 200 Ok), либо DPI работает. Причем заметь, что для DPI тут нет разницы, используешь ты прокси или нет, так как в любом случае пакет ClientHello шлется одинаковый.

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

TLS1.3 должен поддерживаться с обоих сторон, для ESNI тоже нужна поддержка с обоих сторон.

> А вот через socks5 прокси получается. Какой вывод делать-то?

А ты посмотри трафик. В socks5 по идее нет шифрования.

Тебе нужен либо VPN, либо прокси, к которому ты подключаешься по HTTPS.

Аноним 2019/08/17 14:46:11  №1455121 282
>>1455099

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

То есть попробуй в WireShark посмотреть содержимое пакетов, точное время их прихода, и разные заголовки IP/TCP - есть ли там какие-то различия между первым пакетом SYN от прокси, пакетом с 200 Ok от прокси и пакетом с FIN.

Можешь также сюда запостить их содержимое из WireShark.

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

Но в общем тебе нужен если и прокси, то не HTTP, а HTTPS, к которому ты подключаешься по SSL, с шифрованием. Иначе он ничего не скрывает.
Аноним 2019/08/17 15:01:12  №1455130 283
Screenshot10.jpg (69, 554x343)
343x554
>>1455114
Но прокси вроде https. Вон, зашифровано же, нет? Я в это разбираюсь еще меньше, чем во всем остальном.
Аноним 2019/08/17 15:03:29  №1455131 284
>>1455078
Все курсы на торрентах есть.

>>1455079
Лучше вам заплатить, чтобы вы про эти регулярочки пропердели в микрофон, да? А потом - иди нахуй. Вся суть этих курсов.
Аноним 2019/08/17 15:17:01  №1455140 285
>>1455131
Ну если ты такой умный и прошел все курсы мира на торрентах, то покажи свой охуенный код на гитхабе
Аноним 2019/08/17 15:27:30  №1455144 286
>>1455140
>прошел все курсы мира
Нахрен мне все курсы мира проходить?
Но да - я учился по курсам с торрентов. Поначалу. Потом уже самому пора уметь.

>покажи свой охуенный код
Зачем?
Аноним 2019/08/17 15:38:59  №1455151 287
>>1455144
Чтобы сэкономить время людей, которые хотят войтивайти самым безболезненным способом (через Хекслет).
Ведь если ты макакер уровня подписчиков Марлина, то тебе нельзя верить
Аноним 2019/08/17 15:47:29  №1455156 288
>>1455151
>войтивайти самым безболезненным способом
Заплатив вам за ваши говнокурсы, делающие говокодеров.
Если нет технического бэкграунда и мозгов, то никакие курсы не помогут, а тем у кого это всё есть - никакие курсы не нужны.

>если ты макакер уровня
А ты что за хуй важный чтобы мой уровень оценивать?
Аноним 2019/08/17 15:53:10  №1455158 289
>>1455156
>>1455151
Хватит ругаться, джуниоры, не позорьте себя перед префессионалами.
Мимо-5-пет-проектов-на-штмл
Аноним 2019/08/17 16:26:13  №1455197 290
>>1455130

Протоколы, конечно, стоило бы тоже немного подучить.

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

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

У тебя HTTP-прокси. Ты по протоколу HTTP (в отрытую) соединяешься с прокси, шлешь ему в открытую запрос CONNECT с открытым именем сервера и портом, он устанавливает TCP-соединение с запрошенным сервером и ты шлешь по нему что хочешь (в данном случае - пакеты SSL, внутри которых спрятан HTTP).

Так как прокси использует HTTP, данные передаются в открытом виде и начальный SSL-пакет ClientHello, содержащий имя сервера telegraph, передается в открытую. Так как на этом этапе SSL-канал еще не установлен. На твоем дампе это имя сервера видно.

Тебе надо HTTPS-прокси, то есть прокси, к которому ты подключаешься по HTTPS (SSL), делаешь не видимый снаружи запрос CONNECT, и внутри SSL-канала устанавливаешь второе SSL-соединение к telegraph.
Аноним 2019/08/17 17:51:21  №1455252 291
Привет, ОП, я когда-то делал твои задачи по вёрстке, на работе пишу бекенд, но внезапно понравилось верстать, возникли вопросы по которым очень интересно твоё мнение:
- Какой смысл в семантических тегах (section, article, menu) для закрытых SPA, которые не будут индексироваться? Почему иногда в статьях по-прежнему используют ul/li для меню, а потом перекрывают дефолтные padding/margin у этих тегов, вместо того, чтобы просто сверстать на div/span и flexbox? Вёрстка проще, поддержку IE просят очень редко.
- Для ретины рекомендуется использовать изображения с более высоким расширением. Я не очень понимаю как это работает на уровне железа. Что значит "повышенная плотность пикселей". Если на ретине с разрешением 1920x1200 и обычном дисплее 1920x1200 открыть одну и ту же картинку, то она будет отображена одинаково? Как-то можно эмулировать ретину на обычном дисплее, чтобы видеть вёрстку на маке, не имея мака?
- Что порекомендуешь для pixel perfect вёрстки, может есть расширения для браузера или удобные линейки под линукс?
Аноним 2019/08/18 00:52:51  №1455459 292
>>1453413
>2020
>Apache
Апач это лютый депрекейт. Годится только для локалки - течёт по памяти пиздец.

>>1453528
Фу блядь, фу нахуй. Используй неймспейсы и не еби себе мозги.
Аноним 2019/08/18 01:17:56  №1455466 293
доброй ночи
есть задача, исходные:
знаю базовые вещи вроде html, css, javascript, sql, ооп, очень поверхностно mvс, на php писал скрипты к всяким вордпрессам и джумлам и ковырялся в плагинах
собственно нужно сделать что-то вроде облачного хранилища фоток: юзеры грузят фотки на сервер, в личном кабинете могут просматривать их, создавать "альбомы" и раскидывать по ним фотки, делиться ссылкой с кем-попало или давать доступ к альбомам другим юзерам
стоит ли с такой задачей влезать в php фреймворки (если да, то какой?) или проще лепить код самому? быстрее ли будет разобраться с функционалом фреймворка или же писать и собирать phpные куски?
в приоритете время разработки, защищенность и правильная архитектура не интересует
Аноним 2019/08/18 01:34:49  №1455471 294
>>1455252

> Какой смысл в семантических тегах (section, article, menu)

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

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

> Почему иногда в статьях по-прежнему используют ul/li для меню,

Потому что в HTML4 не было тега menu, а список вполне подходит.

> а потом перекрывают дефолтные padding/margin у этих тегов

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

> Что значит "повышенная плотность пикселей".

Плотность пикселей = число пикселей поделить на ширину экрана в дюймах. Типичная плотность обычного монитора - это порядка 72-96 DPI (точек на дюйм). Это очень крупные пиксели, например, я на своем экране, приблизившись, вижу сетку между пикселями. Из-за крупных пикселей изображение с мелкими детялями, например, текст, смотрится размытым или искаженным.

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

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

Если мы на экран с 2-й плотностью пикселей попробуем вывести обычный HTML документ, то он будет слишком мелкий, в 2 раза мельче привычного. Потому браузеры делают адаптацию таким образом: один CSS-пиксель занимает 2 реальных пикселя. Квадрат с width: 50px занимает 100 реальных пикселей, текст размером 16px рендерится высотой в 32 пикселя. То есть по сути браузер ставит масштаб 200% для такого экрана.

Если мы на таком сайте используем картинку размером 300x300, то браузер тоже ее увеличит до 600x600, при этом картинка будет слегка размытой, так как в ней нет лишних пикселей и браузеру приходится их получать интерполяцией (взятием среднего). Пользователь, привыкший к тонким четким линиям букв, будет разочарован "мыльностью" картинки.

(еще одна проблема таких экранов - так как на них в 4 раза больше пикселей, нужна более мощная видеокарта)

Чтобы решить эту проблему, ты можешь поставить на сайт картинку 600x600, но задать ей размер для вывода как 300x300:

<img width="300" height="300" src="image600x600.jpeg">

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

https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images

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

> нием 1920x1200 и обычном дисплее 1920x1200 открыть одну и ту же картинку, то она будет отображена одинаково? Как-то можно эмулировать ретину на обычном дисплее, чтобы видеть вёрстку на маке, не имея мака?

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

В Firefox (и наверно в Хроме) в инструментах разработчика есть опции для имитации другой плотности пикселей: https://developer.mozilla.org/en-US/docs/Tools/Responsive_Design_Mode

Также, если у тебя есть смартфон с большим разрешением, можно смотреть на нем.

> Что порекомендуешь для pixel perfect вёрстки, может есть расширения для браузера или удобные линейки под линукс?

Не знаю, есть какие-то расширения, которые позволяют поверх сайта наложить полупрозрачную картинку-образец.
Аноним 2019/08/18 02:09:51  №1455474 295
>>1455466

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

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

Также, посмотри owncloud, не подходит?

>>1455459

Есть пруфы, что течет? Апач не используют по другой причине. Статику лучше раздает нгинкс, потому его ставят впереди. PHP запускают под php-fpm, так как это удобнее. В такой ситуации Апач просто становится лишним промежуточным звеном.

Раньше же Апач и отдавал статику, и запускал PHP код с помощью mod_php.

>>1455079

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

>>1455029

Показ выпадающего списка можно отключить HTML-атрибутом autocomplete. Это стоит делать для полей, содержащих приватные данные (вроде номера карты или паспорта), чтобы браузер их не сохранял.
Аноним 2019/08/18 02:10:55  №1455475 296
>>1454631

Работать с формой регистрации/обновления данных будет в разы удобнее при наличии объекта. Ты хочешь хранить данные в массиве, но давай сравним эти 2 подхода:

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

Таким образом, код будет удобнее читать.

>>1454326

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

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

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

>>1454210

Вот на всякий случай урок по строкам и utf-8: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

>>1453649

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

>>1453656

Сделать каталог public корневым (DocumentRoot). Это самый надежный способ.
Аноним 2019/08/18 02:12:03  №1455476 297
>>1453656

Сделать каталог public корневым (DocumentRoot). Это самый надежный способ.

>>1453615

Увы, подробностей в посте мало. По поводу ошибок - они по идее должны писаться в какой-то лог, и надо там смотреть подробности. Также, ты можешь запустить тот же скрипт из консоли (командой вроде c:\php\php.exe d:\tmp\script.php) и там выведутся ошибки, если они есть.

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

Также, в конфигах PHP лучше писать прямые слеши, c:/tmp/php/.

>>1453317

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

Аноним 2019/08/18 05:21:23  №1455492 298
как вы смотрите на текущее состояние php в реалиях 2019 года и его развитие?
Аноним 2019/08/18 05:45:29  №1455496 299
Аноним 2019/08/18 05:49:58  №1455498 300
Аноним 2019/08/18 13:02:27  №1455647 301
image.png (26, 1024x768)
768x1024
>>1446969 (OP)
Помогите решить тестовые задания (одно из тестовых на собеседовании кстать):
Нужно сверстать календарь используя списки

Дан исходный код нужно его немножко изменить(как правило прописать имя классов соответствующим тегам, добавить свойства селекторам и тп) что бы получился результат (Pic related)

Если кому интересно покидаю другие
Аноним 2019/08/18 13:03:37  №1455649 302
Аноним 2019/08/18 13:14:18  №1455656 303
Добрый день. Меня гложит следующая мысль: имеет ли основания джавист или например шарпист смотреть на пхп-программиста свысока и считать последнего "недопрограммистом", потому что "написание скриптиков" - это якобы что-то несерьёзное. А вот они, работающие на компилируемых языках, работающие в энтерпрайзе со всякими банками и прочими крупными заказчиками, это кто-то, кто стоит на уровнь выше и является "настоящим" программистом.
Это не троллинг, я серьёзно спрашиваю, и точно не хочу начинать срач. Я вроде бы понимаю, что язык - это просто инструмент, и сам по себе он не должен быть мерилом профессионализма. Мне хотелось бы услышать какие-то аргументы не для спора с кем-то, а для самого себя, чтобы избавиться от некоторых комплексов.
Аноним 2019/08/18 13:21:53  №1455657 304
>>1455656
Полное право имеют. Потому что даже самый высоконагруженгый сайтик с гиганстким стеком технологий не сравнится с написанием приложения для, например, банковской сферы.
Аноним 2019/08/18 14:37:46  №1455681 305
>>1455656
Всё зависит от того, какой у тебя уровень и какими технологиями ты владеешь.

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

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

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

Хотя многие реально клепают круд-говно, просто на других языках, шлёпают какие-нибудь формы к БД, которую даже и не они проектируют.
Аноним 2019/08/18 14:55:44  №1455687 306
Аноним 2019/08/18 15:04:43  №1455692 307
>>1455687
Хотя немного грустно стало от ваших ответов, честно говоря.
Аноним 2019/08/18 15:07:16  №1455693 308
>>1455692
А какая нахуй разница, если бабки платят? Ну грустно и хуй с ним, зато сытно.
Аноним 2019/08/18 15:18:53  №1455697 309
>>1455693
Хмм, а в этом есть логика, ведь если платят, то видимо не просто так платят.

И кстати, на Хабре в какой-то теме про ПХП я читал, что работа на Симфони в целом по сложности и приятности не многим отличается от работы на той же Джаве, это правда так?
Аноним 2019/08/18 15:21:32  №1455699 310
>>1455681
> В ПХП тоже есть, где развернуться и что изучить. Но обычно это уже дополнительные сервисы и коммуникация с ними.

Вот это спорный тезис. Какие-то +/- серьёзные проекты на чистом рнр не напишут. Как прослойка для чего-то ещё может быть. Вся разработка на рнр в 95% сводится к оптимизации запросов к БД и обработке данных полученных из форм. Написание плагинов для WP/1C-Битрикс. Серьёзный проект не написать.

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

Коли уж заговорил про WP, то это адская говнина, которую 24/7 надо мониторить на предмет уязвимостей. Короче тезис таков, что у рнр были шансы, но ребята всё пребали. Сейчас с 0 писать какой-то высоконагруженный проект не имеет смысла.
Аноним 2019/08/18 15:22:37  №1455701 311
>>1455697
На голой джаве так-то тоже не пишут. Spring и иже с ним. Понятное дело, что либа навороченная и в неё надо вникать.
Аноним 2019/08/18 15:42:59  №1455714 312
>>1455699
Много есть каких-то больших проектов на PHP, не только мелочь. Если годами пишешь на ПХП и хорошо владеешь всеми инструментами, то почему бы и для нового проекта не взять привычный инструмент? Точно ли альтернативы плюсы дадут?

Всё-таки ПХП как-то развивается. Я давно с ним серьёзно дела не имел, не в курсе, но что-то там есть. Там сам язык мощный, и поддержка мультитредов-процессов, что-то мутят с асинхронностью.

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

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

Но я уже к другим инструментам привык, у меня такой потребности нет.

Аноним 2019/08/18 15:44:19  №1455716 313
>>1455699

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

Гораздо важнее тут соблюдение определенных стандартов, соглашений. Ява, да, в этом плане хороша тем, что там с давних времен есть отлаженный процесс стандартизации (JSR).

Пример утилиты observium вообще ни о чем не говорит. Это же open source - кто-то делал для себя и поделился. Может быть, эта утилита решила требуемую задачу. А если ее сесть писать на Яве с тщательным проектированием, составлением спецификаций, тестированием, это займет в 3 раза больше времени и даст такой же результат.

Open source - это не "а ну напишите мне бесплатно качественный продукт", это "смотрите, я это для себя делал, если интересно, присоединяйтесь". Взял бы и исправил косяки.

И насколько я знаю, фейсубк и вконтакте именно на PHP писать начинали. А на Яве написаны одноклассники.
Аноним 2019/08/18 15:50:55  №1455722 314
>>1455716
>И насколько я знаю, фейсубк и вконтакте именно на PHP писать начинали.
Это было 15 лет назад, другая эпоха. Кто-нибудь сейчас стартует большие проекты на ПХП? На самом деле кажется, что всё-таки да, но сейчас явных преимуществ ПХП над другими языками нет, на ПХП уже не принято писать, как 15 лет назад.
Аноним 2019/08/18 15:55:47  №1455727 315
>>1455722

Делал ли ты выборку по hh.ru по языкам или же твое мнение базируется на сообщениях анонимных безработных экспертов с двачей? Потому что про смерть PHP (и Windows) я слышу уже лет 5 если не больше.
Аноним 2019/08/18 17:58:06  №1455803 316
>>1455699
Диван не отлежал ещё? PHP используется в разработке в том числе и новых проектов, например тут искали симфониста в новое направление Яндекса: https://moikrug.ru/vacancies/1000049016
Сейчас вакансии не мониторю, когда полгода назад мониторил - наткнулся на эту. Попробуй и ты поискать - поймёшь, что не прав.

>>1455657
> Полное право имеют.
Джависты ничем от отличаются от PHP-разработчиков. Клепают такие же формы, пишут такие же REST/GraphQL API по общепринятым спецификациям в веб-разработке, интегрируют такие же инструменты для поиска и очередей (Elasticsearch, RabbitMQ), пользуются теми же облачными сервисами. Ладно если бы они ракеты в космос запускали или писали ПО для беспилотных автомобилей, но нет - такие же формошлёпы, как и PHP-шники. Есть подозрение, что ты далёк как от PHP, так и от современной Java- разработки.
Аноним 2019/08/18 18:31:36  №1455826 317
>>1455716
При чём тут open source? Опен сурс проекты так-то пишет не 1 человек. Взять, например, арч или дебиан. Целая ОС, которую создавали на голом энтузиазме.

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

Сколько написнно на явк и си решетке и сколько на рнр =) пример с легаси в банках глупость полная, там от такого уже ушли. Есть конечно какие-то исключения, но то единичные случаи. Если бы вы это лет 10 назад написали, я согласился бы.
Аноним 2019/08/18 18:35:36  №1455828 318
>>1455803
Не отлежал. Пишут не с 0 на рнр, а на либе. Это как бы 2 разные вещи. Ну и от души посмеялся от знания го и змеи, это значит, что рнр в этом резюме как прокладка между чем-то. Собственно о чём я выше и писал. Бекэнд на рнр уже изживает себя. Я не отрицаю, что сайт легко и просто развернуть на рнр, но что-то более серьёзное, увы.

Бекэнд у вашего резюме даже не рнр обрабатывает, я больше чем уверен.
Аноним 2019/08/18 18:38:04  №1455829 319
>>1455803
У тебя кругозор слишком узкий, видимо студент или крутишься в вебе. Джава как и змея используются для форма клепства сопру нет, но спектр задач гораздо шире. На рнр ты кое как бекэнд обработаешь да json оаспарсишь, а на джаве сервер напишешь, а на питоне вообще всё что угодно сделаешь, только пиздец как медленно.
Аноним 2019/08/18 18:45:00  №1455831 320
>>1455656
Подобными вопросами задавался и я год-два назад.

На самом деле ПХП мне нравится. Пробовал питон - не зашел, нода - тоже. У ПХП есть какое-то ощущение чтоли прочности (как и у питона) и наличие си-подобного синатксиса (как у ЖС). Писал на нем все на свете.

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

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

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

хз зачем я это высрал
похуй, всеравно анонимная борда
Аноним 2019/08/18 18:50:10  №1455835 321
Аноны нужна помощь.
Вообщем столкнулся я с задачей по ООП, где нужно написать функцию padLeft и padRight используя функции mbstring, но вот беда, модуль этот по стандарту не включен, нагуглил что нужно раскомментировать строку отвечающий за этот модуль в файле php.ini, но в папке php у меня его нет, а phpinfo() пишет что ini файл находиться в c:\windows, но там его тоже нет. Что делать?
Аноним 2019/08/18 18:51:19  №1455837 322
>>1455831
Наобот спасибо, что высрал написал.
Аноним 2019/08/18 18:58:16  №1455842 323
>>1455835

В phpinfo() надо смотреть не "место, где ищется php.ini", а строку, где написано "использованные ini-файлы" или как-то так. Скинь скриншот верхней части таблицы, если найти не можешь.
Аноним 2019/08/18 19:04:27  №1455850 324
Всем привет

Прошу прощения за платиновый вопрос и то, что не читаю в гугле.
МОжет подскажете, как дела в европе с PHP? через пару месяцев меня ждет релокация в Чехию или, менее вероятно, но есть шанс, в Гермашку (скорее первое) по основной работе, которую после дропну нахуй. Понимаю, что там своим спецов дохуя , и я буду нубом, но с финаносовой подушкой есть полгода-год, чтобы поуизучать + по текущей работе есть реальные примеры, что могу поделать (допилить аддоны в облаке, могу просто попросится проверять и помогать коллегам)
Аноним 2019/08/18 19:08:31  №1455860 325
image.png (158, 1366x768)
768x1366
>>1455842
Судя по Loaded Configuration File (none) ini файла у меня попросту не существует.
Аноним 2019/08/18 19:10:14  №1455861 326
>>1455835
Раскомментировать подойдет если у тебя стоит пыха такая как ее делали разрабы пыхи, что на большинстве дистрибутивов врядли. Скорее всего надо просто поставить нужный модуль. Но поскольку ты на винде - хз как это сделать
Аноним 2019/08/18 19:14:42  №1455869 327
>>1455861
Нужный модуль у меня находиться в папке php\ext, но для его включения нужен ini файл, вот я и ищу его.
Аноним 2019/08/18 19:15:54  №1455870 328
>>1455869
У тебя опен сервер?
Аноним 2019/08/18 19:22:35  №1455873 329
>>1455870
Нет, я использую встроенный php сервер.
Аноним 2019/08/18 19:24:33  №1455876 330
>>1455860
У тебя же написано что Configuration file (php.ini) path - находится в C:\Windows
Аноним 2019/08/18 19:25:31  №1455878 331
>>1455876
Так в том то и дело, что его нет там.
Аноним 2019/08/18 19:26:54  №1455879 332
>>1455878
Советую тебе поставить apache или nginx, чтобы ты все смог настраивать, там то они (конф. файлы) точно будут
Аноним 2019/08/18 19:27:33  №1455880 333
>>1455879
Ладно, попробую, спасибо за помощь.
Аноним 2019/08/18 19:54:46  №1455905 334
>>1455860

У тебя все ясно написано: PHP ищет конфиг в c:\windows\, но там его нет. Ну так создай файл php.ini (нужны права админа) и положи туда.

Обычно установщик при установке прописывает в реестр расположение папки PHP, и он ищет конфиг в ней.

Вот мануал, объясняющий где PHP ищет конфиг: https://www.php.net/manual/en/configuration.file.php

Ты можешь либо создать конфиг и положить в c:\windows\php.ini, либо создать в другом месте и указывать путь к нему опцией -c при запуске PHP (php.exe -c d:\php\php.ini )

Аноним 2019/08/18 20:26:37  №1455923 335
Доктрина или елокуент?
Аноним 2019/08/19 00:06:39  №1455977 336
>>1455459
>Используй неймспейсы
Жопой читаем?
Аноним 2019/08/19 00:29:29  №1455980 337
>>1453528

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

Чтобы подключить - надо смотреть мануал по библиотеке. Если там надо просто подключить файл (например, библиотека предоставляет файл-загрузчик), то его можно прописать в composer.json в секцию autoload.files, мануал тут: https://getcomposer.org/doc/04-schema.md#files

Если такого файла нет, можно использовать classmap в composer.json, который просканирует файлы и создаст автозагрузчик для классов сам.

Если нужно выполнить какой-то кастомный код, то делаешь функцию в своем приложении и вызываешь в bootstrap-файле (при запуске приложения).

Если подключение библиотеки требует много ресурсов, то делаешь функцию для подключения и вызываешь только когда это нужно.
Аноним 2019/08/19 03:33:09  №1456004 338
>>1455923
елокуент и в пизду этот падающий от любого ика менеджера сущностей
Аноним 2019/08/19 08:22:34  №1456059 339
Аноны, привет, на связи пидораха. Хочу стать человеком. А точнее программистом который хочет глубже познать суть.
Так что мне видимо требуется открыть для себя волшебный мир структур данных и алгоритмов, я прав?
Подскажите книгов пожалуйста.
Аноним 2019/08/19 08:56:27  №1456087 340
В последнее время всё чаще думаю, что все попытки демонизировать php - это ошибка. Постоянно встречается говно с тем, что память течёт, системный io блокирующий, нормальных инструментов для ассинхронной работы нет, возникает необходимость в супервизоре, хелсчеках, таймаутах на операцию и т.п. Да и зачем, если php под это тупо не задизайнён?
Та же связка nginx-phpfpm (а теперь ещё и в php7.4 пред-загрузка появилась) дают огромную производительность, в которую ты уже не упрешься практически никогда (потому что узкое место - это обычно база данных, а приложения на php масштабировать очень просто), если написано нормально, а не через жопу.
Даже если задача такова, что нужно вычитывать из вебсокета или очереди, то есть куча инструментов (тот же nginx), которые умеют вычитывать данные и слать http-запросы, позволяя php работать as designed, а не как сова на глобусе.
Аноним 2019/08/19 09:33:56  №1456133 341
>>1456087
так и есть , или ждать пхп8 когда сделают асинхронность из коробки на низком уровне ядра , всё остальное ReactPHP и тд шняги для бенчмарков + пет проекты уровня хелло ворлд
Аноним 2019/08/19 09:35:21  №1456136 342
>>1455923
2 разных подходи , вопрос сорт оф автомобиль или лодка
Аноним 2019/08/19 09:37:45  №1456140 343
>>1455850
подтягивай тогда лучше англ , джуны без нетива на уровне б1 не нужны , по работе она есть , не так много как например в укропском ДС но есть.

мимо варшава кун
Аноним 2019/08/19 10:11:12  №1456164 344
>>1456140
Спасибо
С ним как раз проблем нет
Аноним 2019/08/19 10:56:04  №1456191 345
>>1455980
Спасибо.
Всегда пишу через неймспейсы + композер, не хочется напрямую инклюдить, в обход общей структуры приложения.
Аноним 2019/08/19 11:08:42  №1456201 346
>>1456087
Так возьми ту же ноду, чё как фуфел? Или ты из тех чуваков, что пхп - ван лав?
Аноним 2019/08/19 11:20:28  №1456213 347
Аноним 2019/08/19 13:26:26  №1456283 348
Пачаны, где искать задачки на подобие ОПовых? Одна мука в инете, сосчитать 2 + 2 и прочее гавно из жопы.
Аноним 2019/08/19 13:49:06  №1456305 349
Аноним 2019/08/19 14:08:45  №1456316 350
>>1456087
Расскажи что за задачи ты решаешь? Личный интерес
Аноним 2019/08/19 15:47:17  №1456376 351
как сделать личный кабинет?
Аноним 2019/08/19 16:35:18  №1456452 352
Аноним 2019/08/19 16:39:29  №1456458 353
Подскажите как можно реализовать такую логику mysql. Есть таблица с полями id/user_id/token. При регистрации в этой таблице создается поле для пользователя. Если он решит выйти и снова авторизироваться, вместо новой записи в таблице должна обновляться старая запись. Я пробовал сделать это через
INSERT INTO t8rv0_mobile_tokens (user_id, token) VALUES (:user_id, :token) ON DUPLICATE KEY UPDATE user_id = values(user_id), token = values(token)
Но, видимо из-за того, что токены различаются, оно создает новую запись вместо обновления старой. Спасибо
Аноним 2019/08/19 16:45:24  №1456472 354
>>1456452
не могу,потому что не понимаю
Аноним 2019/08/19 16:51:23  №1456485 355
>>1456458
Появилась идея. При создании линковоной таблицы создаются пустые записы под слинковую колонку? Просто сам объект пользователя сохраняется в другой таблице. Если слинковать и создать шаблонные записи под каждого созданного пользователя и создавать новые при создании новой записи пользователя и использовать UPDATE
Аноним 2019/08/19 17:50:58  №1456579 356
>>1456201
Этот вопрос уже 100500 раз обсосан. Это тебе в твоём манямирке на 2 с половиной юзера и полтора формошлёпа всё заебись, можешь хоть каждый день всё на новый язык переписать. А когда у тебя 50 разработчиков и кодовая база в несколько десятков тысяч строк, то ты каждый раз будешь думать, тащить ли новую технологию или сделать на старой. Потому что любой новый стек, это разработчики, которые должны уметь на этом кодить, девопсы, которые должны уметь это поддерживать, ещё одна экосистема, от которой ты зависишь и так далее. Для тебя это может быть пустой звук - но для бизнеса - нет, и дописать лишнюю точку входа в существующий монолит (или не совсем монолит, не суть) оказывается проще, чем тащить что-то новое.
Поэтому пхп не ван лав, просто нужно оценивать риски и профит. Та же нода - норм, но это если у тебя есть минимум 2 девелопера и 2 девопса, чтобы это готовить. И задача подходящая.
Во всех прочих случаях отдельный гейтвей для сокетов и обычный бекенд за ним решает 99% проблем, не принося новых.
А на пет проектах я сам на чём только не пишу.

>>1456316
У текущей компании много продуктов, в большинстве бекенд написан на php. В основном, всякие сервисы по работе с хостингом, доменами и прочими сертификатами. Но я - выходец с аутсорса и работал в том числе над сайтами для компаний из fortune-500 (в-основном интранеты, интернет-магазины, прочие веб-приложени). Почти везде и почти всегда связка cron + php решала все проблемы и мне не приходилось изобретать велосипеды.
Аноним 2019/08/19 18:54:36  №1456630 357
>>1456579
>Почти везде и почти всегда связка cron + php решала все проблемы
Я наверное не понял тебя сначала извини. Думал ты как раз расскажешь про те задачи что не решить этой связкой
Аноним 2019/08/19 19:42:22  №1456671 358
>>1456630
А. Классическая задача - это запускать что-то раз в 10-15 секунд, кроном принципиально не решается.
Из реальных задач - у меня была задача максимально ускорить доставку писем клиентам (они содержали подтверждение платежей). Крон, который рассылал письма клиентам из очереди раз в минуту бизнес не устраивал. Решается такое как раз набором демонов, вычитывающих всё из очереди в тот же момент, когда оно туда попадает.
Ещё, у меня была задача подгружать много данных из разных источников, компоновать их, и возвращать в едином списке. Понятно, что кэшировалось, но изначально-то это была композиция ассинхронных запросов. Решал через по тем временам модный Gearman.
С сокетами тоже была задача, как раз нужно было слать пуши на девайс и обратно, причём быстро. Вообще на php есть Ratchet, который вроде как умеет в сокеты, но я тогда (уже не помню, по какой причине) написал простенький прокси на socket.io, который умел принимать http-запросы из php и пересылать их на девайс, принимать запросы с девайса и пинать php по http. Тут могла бы быть проблема в случае добавления новых нод (потому что пришлось бы как-то узнавать, к какому из инстансов ноды прицеплен конкретный пользователь), но там трафика было достаточно мало, чтобы этим пока что не заморачиваться. Если бы понадобилось, то, наверное, хранил бы в каком-нибудь хранилище (редисе, к примеру) связку пользователь-девайс-нода.
Аноним 2019/08/19 21:00:28  №1456709 359
>>1456283
codewars. Там вроде уже есть клан двачеров, но лучше не вступай туда.
Аноним 2019/08/19 21:03:22  №1456711 360
>>1456579
>Этот вопрос уже 100500 раз обсосан
Только не рвись, дружок.
Аноним 2019/08/19 23:00:36  №1456733 361
У меня небольшой вопрос twig и slim. Делаю сайт, на каждой странице сайта нужно выводить список категорий из бд. Я поместил код получения из бд в middleware и там же добавляю массив категорий как сервис twig, чтобы каждый раз не писать это в контроллерах. Все правильно делаю? Мне кажется, что это сложное решение, и можно как-то проще сделать...
Аноним 2019/08/20 01:42:22  №1456747 362
>>1456733
в контроллере собирай массив и передавай во вью
Аноним 2019/08/20 04:08:13  №1456760 363
>>1456671
Интересно. Спасибо
Аноним 2019/08/20 06:22:01  №1456785 364
>>1456747
А если у меня 100 вью, то каждый раз в ручную передавать?
Аноним 2019/08/20 08:50:23  №1456817 365
Анонче, помоги с апачем. Делаю автоматические поддомены.

Сейчас мой htaccess выглядит так:

RewriteEngine On
RewriteBase /
RewriteRule ^([-\w]+)?$ index.php?p1=$1
RewriteRule ^([-\w]+)/([-\w]+)?$ index.php?p1=$1&p2=$2
RewriteRule ^([-\w]+)/([-\w]+)/([-\w]+)?$ index.php?p1=$1&p2=$2&p3=$3

Каким кодом я могу также в GET передавать тот параметр, что идет вначале домена в виде поддомена?

Тоесть есть много адресов acer.domain.ru - нужно передать acer в скрипт, но при этом открывать тот же скрипт, что и domain.ru

На сколько я понял нужно как-то VirtualHost править
Аноним 2019/08/20 11:58:30  №1456876 366
>>1456817
Тысячу лет не имел дел с апачем, но вообще поддомен выглядит, как отдельный виртуальный хост. Может, там можно плейсхолдер херануть, чтобы у тебя, к примеру, было два виртуальных хоста, *.domain.com и domain.com
Аноним 2019/08/20 12:56:58  №1456914 367
>>1456817

А ты не хочешь просто смотреть оригинальный домен в $_SERVER['HTTP_HOST'] ? https://www.php.net/manual/en/reserved.variables.server.php

А так, открой мануал и изучи внимательно: https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

> In addition to plain text, the Substitution string can include
>
> back-references ($N) to the RewriteRule pattern
> back-references (%N) to the last matched RewriteCond pattern
> server-variables as in rule condition test-strings (%{VARNAME})

Список "server-variables" есть на этой же странице выше.
Аноним 2019/08/20 13:10:51  №1456917 368
>>1456733

middleware не для этого, это для работы на уровне HTTP-протокола вроде логгирования, сжатия, кеширования, зашифровки кук.

middleware не позволяет нормально передать переменные во view, как я понял.

У тебя есть такие варианты:

- наследовать все контроллеры (если это классы) от базового и в базовом генерировать "общие" данные и добавлять их в массив при рендеринге
- перед вызовом $app->run() сделать вызов своей функции, которая получит нужные данные и передаст в твиг как глобальные переменные:

function prepareLayoutData(...) {
$x = ....
$container->get('view')->getEnvironment()->addGlobal(...);
}

...

prepareLayoutData($app);
$app->run();

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

{% for layoutService.getMenu() as menuItem %}
....



И да, названия у меня ужасные, придумай что-нибудь получше.
Аноним 2019/08/20 13:13:06  №1456918 369
>>1456785

Так-то добавить их можно одной строчкой:

$viewData = addCommonViewData($app, $viewData);
Аноним 2019/08/20 14:46:32  №1456953 370
>>1456472
Декомпозируй задачу
Аноним 2019/08/20 15:36:27  №1456997 371
>>1456917
Спасибо большое! У меня теперь ещё один вопрос последний: ещё в middleware я ограничиваю доступ неавторизованных пользователей к некоторым разделам сайта. Это правильно, или фильтрацию надо в другом месте делать?
Аноним 2019/08/20 16:41:13  №1457051 372
>>1456785
Ты создай контроллер а остальных наследуй от него
Аноним 2019/08/20 19:48:59  №1457174 373
>>1456997

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

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

Можно комбинировать оба подхода: требовать авторизации при входе в закрытый раздел на уровне middleware, а на уровне контроллера делать дополнительные проверки.

>>1456458

А тебя не устраивает вариант с 2 запросами? Проверить наличие записи, и если надо, послать запрос UPDATE для обновления.

Если тебя беспокоит проблема "гонки" (за промежуток между 2 запросами другой процесс что-то поменяет в таблице, например, удалит юзера), то можно использовать транзакции и пессимистичные блокировки с использованием SELECT ... FOR SHARE / FOR UPDATE: https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html

Ты можешь попробовать поискать ответ в мануале (он очень подробный), но скорее всего, решения там не будет: https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

Поведение запроса INSERT ... UPDATE зависит от наличия уникальных ключей, по каким колонкам они сделаны. У тебя наверно ключ по (user_id, token) отсюда и такое поведение.
Аноним 2019/08/20 19:50:07  №1457176 374
>>1456283

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

Если есть время, я бы посоветовал codeforces https://codeforces.com/problemset - тут, правда, задачи в основном вроде олимпиадных, на алгоритмы. Не бойся сложности: там есть простые задачи, которые легко увидеть по количеству решивших: если это несколько тысяч человек, то и ты, наверно, решишь (пример простой задачи, я додумался до решения за 5 минут: https://codeforces.com/problemset/problem/1206/A ). Если что, я готов дать подсказку.

>>1456376

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

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

- идентифицировать пользователя, то есть указывать, кто это. Например, это может быть id пользователя. Но этот вариант позволяет злоумышленнику самому поставить себе куку с любым id, и не защищен.

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

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

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

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

Если ты не знаешь, что такое куки, то изучи сначала. Тебе может быть придется также прочесть про протокол HTTP, у меня есть урок: https://github.com/codedokode/pasta/blob/master/network/http.md
Аноним 2019/08/20 19:51:00  №1457179 375
>>1456059

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

>>1456004

"менеджер сущностей" имеет свои плюс: он умеет сам искать изменения. Ты изменил (или создал) сущность и несколько связанных с ней, и одной командой все изменения находятся и сбрасываются в БД в нужном порядке. Хотя, конечно, это можно реализовать и в ActiveRecord.
Аноним 2019/08/21 08:03:02  №1457371 376
>>1456917
>И да, названия у меня ужасные, придумай что-нибудь получше.
Поясни, знающий анон, как функции называть? Почему prepareLayoutData это плохо? Я думал плохо это TovarTyt() или VzatVelichiny()
Аноним 2019/08/21 09:33:46  №1457430 377
>>1457176
> Или ты имел в виду простые задачки по основам?
Так точно.
Аноним 2019/08/21 11:00:37  №1457560 378
Аноны, приведите позязя простейшую реализацию защиты от XSRF. Если я просто создам кукиесу с рандомными цифрами, вставлю ее в хидден поле формы, а потом при получении данных с этой формы буду проверять текущую куки и присланную - это прокатит?
Аноним 2019/08/21 11:14:49  №1457586 379
>>1455476
>Нет это плохо с точки зрения читабельности кода
Да ты охуел там, с точностью до наоборот.
Визуальный мусор от скобочек и большего числа строк гораздо сильнее влияет на читаемость и восприятие кода, чем одна строчка.

Вот записывать так сложные условия - уже не очень.
А строка типа
hui && pizda читается изи.
Аноним 2019/08/21 11:16:06  №1457589 380
>>1453317
Правда, жалко, это не работает с конструкциями языка. Только с функциями.
Например, unset () так не сделаешь
Аноним 2019/08/21 11:18:10  №1457595 381
>>1455474
>Апач не используют по другой причине.
А более вменяемая и легкая настройка - это недостаточная причина?
Всегда люто блевал с этого апача, прежде чем научился настраивать это говно.
Nginx освоил за неделю, ибо там все в полторы строки делается.
Аноним 2019/08/21 11:21:48  №1457600 382
>>1457586
я другой анон, но тоже не понимаю зачем вы if в сточку пишите. Мне читабельности не добавляет. Зачем экономить? Может ты еще и туалетную бумагу бережешь и пакетик три раза завариваешь? Смотри какая экономия выходит
Аноним 2019/08/21 14:42:35  №1457769 383
>>1457600
>Зачем экономить?
Затем, чтобы методы по 500 строк не были
Аноним 2019/08/21 14:43:35  №1457771 384
14166852016920.jpg (11, 480x270)
270x480
Как изменить ключи во время итерации по многомерному массиву?
Аноним 2019/08/21 16:35:40  №1457859 385
>>1457769
>методы по 500 строк
Неправильно декомпозируешь скорее всего. Ещё и на читабельности начинаешь экономить.

Много коротких строк лучше чем мало длинных.
Аноним 2019/08/21 19:06:30  №1457981 386
70916971.png (213, 1861x2008)
2008x1861
Table_1

Name\tName_id
===================
Eva\t\t222222
Joe\t\t333333

Table_2

Id\tValue\tUnique_id
===================
88\t80\t\t222222
99\t100\t\t333333

Card

Card_name\tCard_value\tCard_id
===============================
Eva\t\t\t20\t\t\t88

Логика такая:

Table_1.Name = Card.Card_name
Table_1.Name_id = Table_2.Unique_id
Table_2.Id = Card.Card_id
Table_2.Value = Card.Card_value

В пустое поле "Card.Card_name" посылается только имя
UPDATE `Card` SET `Card`.`Card_name` = 'Eva'
Как сделать так, чтоб за один UPDATE не только имя посылалось, но и
значение из "Card.Card_value" прибалялось к "Table_2.Value"?

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

Только начал про подключение PHP к таблицам через PDO и пришёл к этому, сильно не бейте.

Сами таблицы http://sqlfiddle.com/#!9/5b279e
Аноним 2019/08/21 19:14:31  №1457987 387
Аноним 2019/08/21 20:08:11  №1458027 388
>>1457987
Спасибо, я уже это вчера читал. Это совсем не то, кстати.
У меня не обновление множества форм за раз, а отправка имени в пустое поле уже готовой формы и (самое сложное, из-за чего проблема-то) нужно с налёта сверить это имя с именем в 1й таблице и только потом скопировать уже имеющиеся значения в 3й таблице, сверив айди имени 1й таблицы с айди мени во 2й. Здесь вроде триггер нужен, но это пока сложно для меня.
Аноним 2019/08/22 01:41:23  №1458144 389
>>1457981

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

Ты разобрался с джойнами в запросе SELECT? Если нет, я бы советовал изучить:

- JOIN (INNER JOIN)
- LEFT JOIN
- связи один-к-одному, один-ко-многим, многие-ко-кногим

Далее. твоя схема таблиц странная:

> Table_1.Name = Card.Card_name

Какой смысл дублировать имя в 2 таблицах? Если у тебя имена хранятся в Table1, то в Card достаточно сделать ссылку (внешний ключ) на поле Table1.Name_id . Так, как у тебя, обычно не делают (ну или может есть какая-то причина?).

Я бы советовал тебе прочесть еще мой урок про нормализацию, чтобы такого не допускать: https://github.com/codedokode/pasta/blob/master/db/normalization.md

Если тебе надо обновить 2 таблицы, самым простым способом будет открыть транзакцию, сделать 2 UPDATE, закоммитить транзакцию.

> UPDATE `Card` SET `Card`.`Card_name` = 'Eva'

Ты учел, что это обновит не одну строчку, а во всей таблице во всех строчках обновит поле?

Аноним 2019/08/22 04:53:48  №1458178 390
Аноним 2019/08/22 07:36:23  №1458246 391
Заказал хостинг от GoDaddy. В phpinfo() выводит вот это.

Как жить дальше? Можно ли поменять api на apache или nginx?
Аноним 2019/08/22 09:19:47  №1458314 392
>>1458144
>Джойны применяются обычно при выполнении выборки, SELECT.
Что нужны джоины это я сам себе придумал, разбирая другие примеры из инета. это была попытка создать логику отношений, чтоб обновлялись нужные данные на основе имени и айди, а не вся таблица. После твоих слов я попробовал без них:

UPDATE `Card`,
`Table_2`,
`Table_1`
SET
`Card`.`Card_name` = 'Eva',
`Table_2`.`Value` = `Table_2`.`Value` + `Card`.`Card_value`

Как ты и написал, заполняются именем Eva вся таблица "Card" и прибавляются все значения во всей таблице "Table_2".

Вообще я думаю, что это что-то нужно в WHERE
WHERE
`Table_2`.`Unique_id` = `Table_1`.`Name_id`

Или AFTER UPDTE `Card`.`Card_name` ...

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

>Я бы советовал тебе прочесть
Спасибо, почитаю.
Аноним 2019/08/22 09:51:08  №1458343 393
>>1458246

Надо смотреть документацию, но обычно shared hosting подразумевает, что ты просто получаешь папку на диске, а веб-сервер настраиваешь не ты. Но тебе надо посмотреть, может быть у них есть какие-то опции, это все-таки известный хостер.
Аноним 2019/08/22 09:56:11  №1458346 394
Аноним 2019/08/22 11:02:03  №1458405 395
>>1458144
>Ты учел, что это обновит не одну строчку, а во всей таблице во всех строчках обновит поле?
Сделал
WHERE
`Card`.`Card_id` = 88
Теперь обновляет только нужную строчку, но всё ещё
>прибавляются все значения во всей таблице "Table_2"
а не к нужной айди имени...
Аноним 2019/08/22 13:37:27  №1458550 396
Снимок.PNG (32, 568x439)
439x568
Пока самое чистое, что я >>1457981 родил:

UPDATE `Card`,
`Table_2`,
`Table_1`
SET
`Card`.`Card_name` = 'Eva',
`Table_2`.`Value` = `Table_2`.`Value` + `Card`.`Card_value`
WHERE
`Card`.`Card_id` = 88
AND `Table_2`.`Unique_id` = `Table_1`.`Name_id`
AND `Table_1`.`Name` = `Card`.`Card_name`;

Без ошибок, но ничего не посылается, т.к. не проходит проверку `Table_1`.`Name` = `Card`.`Card_name` из-за того, что `Card`.`Card_name` пустое. Если вручную вписать `Card`.`Card_name` , то в `Table_2` происходит всё как надо. Всё логично, т.к. SET и WHERE пыполняются одновременно, а не последовательно, но куда рыть тогда? Всё же CREATE PROCEDURE и триггер AFTER UPDATE А может всё же можно как-то без них? ?
Аноним 2019/08/22 15:08:39  №1458617 397
Аноны, тут можно вопрос по фремворкам задавать?
Аноним 2019/08/22 15:19:31  №1458624 398
Аноним 2019/08/22 15:28:42  №1458634 399
>>1458343
Спасибо за ответ.
В теъ. поддержке ответили что поменять api можно только на выделенном сервере.
Аноним 2019/08/22 17:02:24  №1458747 400
>>1458617
Конечно, не стесняйся.
Аноним 2019/08/22 17:45:34  №1458774 401
/ Братишки, помогите разобраться.
Вот такой код. Выдаёт синтаксическую ошибку. Хотя синтаксической ошибки вроде как нет.
Не могу понять, тут какая-то неверная конструкция или что-то действительно не так с синтаксисом.
Пытался спросить у Гугла, не нашел ответ
/

<?php
public static function get_all_versions() : array {
global $CFG;

self::init();

$versions = array();

$versions['core'] = self::fetch_core_version();

$usecache = false;
if (CACHE_DISABLE_ALL or (defined('IGNORE_COMPONENT_CACHE') and IGNORE_COMPONENT_CACHE)) {
$usecache = true;
}
?>
Аноним 2019/08/22 19:03:59  №1458814 402
Аноним 2019/08/22 21:28:40  №1458888 403
>>1458774
У тебя не поддерживает указание типа возвращаемого значения. Возможно ты пишешь на php 5. Просто убери ": array". Должно заработать
Аноним 2019/08/23 07:19:38  №1459010 404
27HJ-yAEPNU.jpg (242, 1014x1024)
1024x1014
>>1458814
>>1458888
Спасибо, няши. Добра. Несовместимость версий, действительно.
Аноним 2019/08/23 08:04:51  №1459021 405
Аноним 2019/08/23 08:06:29  №1459025 406
Аноним 2019/08/23 08:14:26  №1459037 407
Григории, только начинаю разбираться в гите. Поясните, если я пушнул свой проект на гитхаб, то туда скопировались ВСЕ коммиты и изменения? То-есть если в первых версиях у меня реальный пароль к базе данных сохранен был, то все на гитхабе его увидят? И это фиксится только удалением проекта на гитхабе, удалением папки гит на локалке, initом нового проекта на локалке уже без пароля в файлах и пушем в гитхаб? А можно как-нито сказать "удалите пожалуйста историю до такого-то коммита"?
Аноним 2019/08/23 08:42:46  №1459075 408
Аноним 2019/08/23 08:47:39  №1459084 409
>>1459075
Благодарю, то что нужно
Аноним 2019/08/23 09:03:34  №1459108 410
Совсем никаких подсказок по этому >>1458550
? Эх...
Аноним 2019/08/23 12:00:16  №1459306 411
Уже не надо. Всё решил одним апдейтом, как и хотел.
>>1459108
Аноним 2019/08/23 12:17:11  №1459317 412
image.png (173, 1440x900)
900x1440
image.png (116, 1440x900)
900x1440
ПАМАГИТИ

Смотрю вот это обучающее видео и повторяю практически все, как там есть:
https://www.youtube.com/watch?v=xihMCwARRpk

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

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

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

Я запоролся на том моменте, где надо в конфиге прописать require, чтобы подключить db.php.

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

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

Может кто-нибудь оценить актуальность и полезность этого ролик? А то вдруг я хуитой занимаюсь? Те туториалы, которые выложены в этом треде в шапке, я решил потом чекнуть. До этого учил html и css на сайтах codecademy и htmlacademy(по сути русский аналог предыдущего).









Аноним 2019/08/23 13:02:14  №1459340 413
>>1459317
Не надо смотреть всяких ютубных професси-аналов, тем более учиться по их хайповым высерам. Достань нормальные курсы с подачей и структурой материала, нормальным преподавателем и лабораторками. И не брезгуй задачами из ОПпоста.

Хуетой занимаешься.
Аноним 2019/08/23 13:12:53  №1459344 414
>>1459317

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

MariaDB обратно совместима с MySQL и на ней все запросы должны работать нормально. Если что, список различий:

https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/
https://mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/
Аноним 2019/08/23 14:51:05  №1459384 415
>>1459340
Кстати, а какие есть действительно годные курсы для новичка по php? Чтобы при этом не разжевывали по 50 минут мелочи, потому что я немного в теме.

мимо
Аноним 2019/08/23 15:40:39  №1459414 416
Смотрю исходники вордпресса - ну там и ад. Всё валится в кучу - и шаблоны, и пхп-код, функции отдают на вывод когда захочется автору. Осспаде, что за продукт говнокодера? Похерено очень многое из принципов разработки - никаким солидом там и не пахнет даже рядом.
Узнал, что можно жс-код прямо в пхп-функциях прописывать, а потом выводить на страничку. У автора наверняка была шизофрения.
Аноним 2019/08/23 15:47:07  №1459424 417
>>1459344
Спасибо, анон. Ну я и даун. Удивительно, что я так долго не замечал этой опечатки. Хотя не исключено, что траблы со зрением сыграли свою роль.
Аноним 2019/08/23 16:28:44  №1459452 418
>>1459414
>вордпресса
Всегда было поделием для пиндосских домохозяек. Сорт оф эпл в мире бложиков. Чего ты ожидал?
Аноним 2019/08/23 16:41:29  №1459458 419
как работает такая махина,как фейсбук?
Аноним 2019/08/23 17:22:01  №1459494 420
>>1459458
На реактивной тяге Цукера.
Аноним 2019/08/23 17:38:46  №1459505 421
>>1459452
По крайней мере теперь понятно откуда у пхпшников слава обезян за клавиатурой - благодаря таким вот мартыханским поделиям.
Я бы и сам так считал, если бы не знал, что это дикое легаси.
Аноним 2019/08/23 17:44:37  №1459508 422
Аноним 2019/08/23 17:53:52  №1459513 423
Аноним 2019/08/23 18:14:41  №1459521 424
там ларавел 6 вышел!
Аноним 2019/08/23 19:29:05  №1459603 425
>>1457771
Делай новый массив
Аноним 2019/08/23 20:10:28  №1459626 426
Анонче, вкатываюсь в пыху дабы вкатиться в ойти любыми способами, закончить вышку и перекатиться в ПМы. Годный план?
Аноним 2019/08/23 23:06:16  №1459702 427
Аноним 2019/08/24 06:23:10  №1459760 428
Аноним 2019/08/24 10:16:42  №1459900 429
Аноним 2019/08/24 11:07:01  №1459944 430
>>1453317
Пилю еще пару лайфаков.

Лайфак №2. List.
[$year, $month, $day] = $this->getCurrentCalendarDate($_calendar_name);
Иногда функции надо вернуть несколько значений, но городить отдельный объект данных зачастую лень, долго и нецелесооразно.
Тогда просто в функции возвращаем массив с нужными значениями, а потом распаковываем его в переменные с помощью list.

Лайфак №3. Общепогромистский.
Когда надо сформировать таблицу из N строк и K столбцов, то, как правило, делают 2 вложенных цикла.

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

$cols = 4;
$result = [];

foreach ($array as $index => $value) {
$row = (int)\floor($index / $cols);
$col = $index % $cols;
$result[$row][$col] = $value;
}

Этот код сформирует таблицу из 4 столбцов и нужного количества строк.
Охуенно простая формула, целочисленное деление (с округлением вниз) + остаток от деления всегда дают точные номер строки и столбца для данных.
Во многих случаях облегчает жизнь.
Аноним 2019/08/24 12:20:29  №1459983 431
режим обработки ошибок обязательно пихать в пдо?
Аноним 2019/08/24 12:25:31  №1459986 432
Уважаемые пхписты, правда, что именно на пхп удобнее и выгоднее фрилансом заниматься?
Аноним 2019/08/24 12:47:55  №1460011 433
>>1459986
в мыВамПерезвоним тредах писали что платят за пшп меньше, но вакансий/работы в разы больше
Аноним 2019/08/24 13:04:49  №1460026 434
Аноним 2019/08/24 13:09:33  №1460031 435
>>1460011
Платят меньше по сравнению с чем?
Аноним 2019/08/24 13:20:39  №1460036 436
image.png (41, 815x497)
497x815
>>1446969 (OP)
ДА КАКОГО ХУЯ БЛЯТЬ. Я В РЕЗЮМЕ НЕ ПИСАЛ ЧТО ЗНАЮ ВОРДПРЕСС ОНИ ЕБАНУТЫЕ?????
Аноним 2019/08/24 13:23:43  №1460039 437
>>1460036
Опарыш-неосилятор, ты?
Аноним 2019/08/24 13:41:35  №1460042 438
Аноним 2019/08/24 13:52:32  №1460051 439
>>1459944
только что вышел из спячки
>[$year, $month, $day] = $this
Теперь можно без list($year, $month, $day) ?
Пили еще мне нравится.
Аноним 2019/08/24 14:06:02  №1460067 440
>>1460036
А что ты хотел, уча пхп?
Аноним 2019/08/24 14:09:27  №1460070 441
>>1460042
Припекло попочку рукожопу-неумехе, лол
Аноним 2019/08/24 14:09:36  №1460071 442
>>1460067
Я хотел создавать сайты. А не разбираться в готовых плагинах.
Помимо пхп я знаю кучу других языков. К тому же ПХП был в учебной программе, а вот вордпресс нихуя.

Пускай бухгалтерш сажают за вордпресс какого хуя программистов в этом разбираться заставляют?

Аноним 2019/08/24 14:10:42  №1460072 443
>>1460070
хочешь срать иди в б там посри. Здесь успешные люди сидят.
Аноним 2019/08/24 14:12:36  №1460074 444
image.png (629, 1913x680)
680x1913
>>1460067
>>1460070
Лучше объясните как эту ебалу всунуть в вордпресс. Мне самому компонент создавать придется? Я нихуя с CRM не работал ктонибудь ХЕЕЕЕЕЕЛП
Аноним 2019/08/24 14:18:01  №1460076 445
>>1460074
Нахуй ты берёшься за эту работу, если нихуя не имеешь опыта в вп? Дальше на дваче по каждому кейсу будешь помощи просить?
Аноним 2019/08/24 14:18:21  №1460078 446
>>1460072
Угу. Успех уровня /зк.
Аноним 2019/08/24 14:25:41  №1460082 447
>>1460076
>Нахуй ты берёшься за эту работу, если нихуя не имеешь опыта в вп?
ВО 1) вакансия без опыта работы. Т.к. я сам без него. Там были скилы php js mysql и тд стандартный набор. Я откликнулся потому что думал меня там азам научат, что логично, потому что вордпрессу в учебных заведениях не обучают.
ВО 2) в резюме указан гитхаб аккаунт с моими проектами. Смысла в тестовых заданиях я не вижу по этой причине.

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

Аноним 2019/08/24 14:27:14  №1460083 448
>>1460074
Моё лицо когда попросили запихать верстку в вордпресс.
Аноним 2019/08/24 14:30:30  №1460086 449
>>1460083
Верстка (спизженый слайдер) без футера и хедера. Но даже так я не ебу как это сделать. Реквестирую хоть малейшую помощь.

Мне было бы проще сделать это задание на голой пыхе в десятки тысяч раз.
Аноним 2019/08/24 15:37:14  №1460119 450
Аноним 2019/08/24 15:54:21  №1460140 451
Что помимо php необходимо знать, чтобы можно было откликаться на вакансии и не быть посланным из-за того, что знаешь недостаточно или вообще нихуя?
Аноним 2019/08/24 17:04:20  №1460190 452
>>1460086

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

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

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

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

Еще там есть виджеты - они добавляются в сайдбар блога.

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

Вот документация по ВП: https://wordpress.org/support/

Вот документация по теме customizing: https://wordpress.org/support/category/customizing/

И тут, смотри, как много всего: https://codex.wordpress.org/Plugin_Resources

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

> Я откликнулся потому что думал меня там азам научат,

Ты с дуба рухнул? Учат в школе, колледже, на курсах. Коммерческой компании нужно зарабатывать, а не благотворительностью заниматься. Есть такая вещь, как internship (стажировка), но это в больших компаниях, которые могут себе это позволить, и там, я думаю, они учат каким-то специфичным внутрикорпоративным штукам (которым нигде в другом месте не учат). Так как учить вордпрессу нет особого смысла, его можно изучить самому или на курсах.
Аноним 2019/08/24 17:06:10  №1460193 453
>>1460074

Также, ты путаешь CMS и CRM. CRM - это штука со списком клиентов и заказов, которая помогает принимать звонки или делать обзвоны.
Аноним 2019/08/24 17:23:30  №1460202 454
>>1459317
ЗАМЕЧУ!
>localhost то же что 127.0.0.1
В свое время сильно погорел на этом на Винде. Пока писал везде localhost думал что код тормозит, искал где мог лохануться. Потом попросил друга запустить, а у него Линукс. И все залетало. Когда руки дошли это поменять у меня в коде, и все стало нормально, жопа хорошо так сгорела. До этого думал что программирование прямое как стрела, а оказалось рекой с камнями.
Аноним 2019/08/24 18:14:17  №1460231 455
>>1460193
опечатался соре. но все и так поняли что я имел ввиду
Аноним 2019/08/24 18:18:43  №1460233 456
>>1460190
>Ты с дуба рухнул? Учат в школе, колледже, на курсах.
Конкретно вордпресс учат на курсах либо дома за компом. Тогда нахуя требовать ПХП джс и тд, если максимум это натягивание верстки.

Я смотрю ты спец, можешь посоветовать, что делать человеку без опыта в индустрии? Стоит ли идти буквально за копейки работать ради опыта или стоит сидеть дома, ебаться с тестовыми заданиями?
Аноним 2019/08/24 18:23:44  №1460240 457
>>1460086
Анон, я сам новичок, ничего дельного не посоветую. Но вот смотри, тебе же надо:
1.Инструмент, который бы в админке вордпресса давал возможность добавлять картинки для твоего слайдера
2.Выводить этот слайдер на страницу.

Скачал дистрибутив вордпресса:
https://ru.wordpress.org/download/
Установил его локально. Заходишь в админку - слева будет меню. В меню есть пункт "Медиафайлы" (\wordpress\wp-admin\upload.php). Этот компонент уже позволяет загружать файлы. Можешь грузить файлы через него, только добавляешь какую-нибудь галочку чтобы как-то различать просто файлы и свои - галерейные. Если хочешь - можешь вообще сделать копию этой страницы, переименовать в test.php, и перепрограммировать ее немножко, типа внутри путь к своей собственной папке поставить. Вывести твою новую страницу можно через файл menu-header.php, он выводит левое меню, я топорно вставил после 255 строки код
echo '<a href="test.php?post_type=page" class="menu-icon-page" aria-haspopup="false"><div class="wp-menu-arrow"><div></div></div><div class="wp-menu-image dashicons-before dashicons-admin-page"><br></div><div class="wp-menu-name">моя страница, скопированная с уплоад.пшп</div></a>';
и вроде работает. Если эту страницу подредактировать, поменять пути какие-нибудь, у тебя будет инструмент в админке для загрузки/редактирования твоих картинок. Останется в шаблоне главной страницы вывести загруженные файлы в верстку. Это очень топорный способ, по уму надо читать документацию, которую аноны выше предложили по созданию всяких модулей/плагинов. Но это может хоть как-нито помочь. Другой путь - сходить на рутрекер или другой ресурс, скачать плагин для вордпресса с каруселью и на его основе свой сделать
Аноним 2019/08/24 19:20:52  №1460274 458
как на swoole делать сайт?
Аноним 2019/08/24 20:37:37  №1460312 459
Привет
Решил что одному учиться грустно и ищe единомышленников, желательно адекватных с которыми можно обсудить проблемы/вместе писать проекты. Наверно это нужно писать в /soc но тем не менее.
Если что почта для связи korzinadlyamusora@gmail.com
Аноним 2019/08/24 20:46:33  №1460317 460
Как мимокрокодил, хочу сообщить вам, что php - говно.
Аноним 2019/08/24 20:50:09  №1460319 461
>>1460071
Как раз программист и разберётся, даже начинающий. А вот крикливое хуйло без скиллов будет бегать по форумам и просить чтобы ему всё разжевали.
Аноним 2019/08/24 21:03:29  №1460325 462
>>1460071

А что ты хотел?
Php в России сейчас на 90%+ ВП, Юми и Битрикс.
Либо ращуй глаза перед отправкой резюме, либо пиздуй в другие языки, раз уж ты много их знаешь.
Аноним 2019/08/24 21:10:45  №1460327 463
>>1460312
>одному учиться грустно и ищe единомышленников
В смысле - всей кучей тех же студентов из ОПпоста писать? Зачем?
Тебе ментора искать надо, а не единомышленников.
Аноним 2019/08/24 21:27:10  №1460331 464
>>1460325
С другими языками сложности. Так как у меня все проекты веб, либо чисто фронтенд, либо пыха. Курсач и игру спейс инвайдерс на сишарпе делал. Мб их залить на гитхаб показать работодателю.

Как думаешь стоит ли на сишарпе поискать работу раз в рашке только вп, битрикс вместо пыхи?
Аноним 2019/08/24 21:28:00  №1460332 465
>>1460325
Алсо проблема в том что мне очень нравится веб-разработка, но и программирование тоже. Что делать собственно?
Аноним 2019/08/24 21:33:20  №1460335 466
>>1460331

На шарме тоже докуя веба.
Кури net core.
Аноним 2019/08/24 22:11:28  №1460342 467
>>1460335
Но жалко что в рашке это нихуя не популярно. Я же сидел на апворке ахуел сколько там заказов на сишарпе. Эх ну почему так?

+ я тока десктопные приложения умею пилить + немного асинхронных процессов изучил. Но нашему пынябизнесу это офк нинужна
Аноним 2019/08/24 23:51:20  №1460357 468
>>1460342

Ты чо баба?
Хватит ныть.
Просто найди любую работу программиста. Любую. Хоть ВордПресс, хоть сап, не к вечеру помянут.

А там уже учись дальше и сможешь найти любой проект/стек/коллектив/условия.
Аноним 2019/08/25 00:01:07  №1460359 469
>>1460071
Как же я тебе двачую блядь. Как заебали эти битриксы блядские.

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

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

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

Все cms это готовая хуйня для клиента - прогеру там делать нехуй. Есть готовые темы и плагины - пиздую в админку и кликай, пердолится с этим - это не программирование.

Отдельное горение возникает от того, когда клиенту надо поменять чтобы что-то готовое было другим блядь. ЕСЛИ ТЕБЕ НЕ ПОДХОДЯТ ГОТОВЫЕ РЕШЕНИЯ - ПРОСИ МЕНЯ НАПИСАТЬ СВОЮ ПРОГРУММУ НА ФРЕЙМВОРКЕ ИЛИ ВАНИЛЬНЫМ КОДОМ, А НЕ ПЕРДОЛИТЬСЯ С ЭТИМ ГОВНОМ
Аноним 2019/08/25 00:12:46  №1460360 470
>>1460140
очевидный mysql
html/css - это мастхэв для любого ЯП в принципе
js - тоже мастхэв для всех, но достаточно знать его по верхам

Зависит от того что за работа. Если написано, что надо знать Laravel, то надо его знать хуле.

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

Так например когда я устраивался я вообще толком не шарил в линупсах и администрировании серверов, расчехлился начал уметь это все настраивать - ЗП подняли, а я и не против - мне интересно.
Аноним 2019/08/25 00:49:46  №1460364 471
>>1460359
>Отдельное горение возникает от того, когда клиенту надо поменять чтобы что-то готовое было другим блядь.

Люто двачую. Это говно вообще за гранью моего понимания. Помню как-то знакомый подкинул работку добавить какой-то блять новый тип(?) для комерс плагина, я вп никогда не трогал(так и не трогаю) но деньги были норм и решил посмотреть что там. Короче у этого плагина есть своя архитектура и главный тип Product везде захардкожен как строка, просто по всему коду. Я, если честно, так и не понял что от меня хотят и почему нельзя использовать дефолтные значения, как это задумывалось авторами, но потом нашел платную версию за 30$ и скинул ссылку.

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

Мне это напоминает какое-то болото, клиент использует какой-то популярный продукт, который не всегда к месту(интернет магазин на вп это сильно конечно), а потом на фрилансе заказы в стиле "всего лишь добавить один дропдаун, если вы ебать охуенный спец то дело на 5 мин" а там на самом деле чтобы этот дропдаун добавить раком пол дня стоять потому что везде спагетти из говна и палок, и "разработчик" вместо того, чтобы написать 10-20 строк кода за 30 минут, пол дня сидит и кликает мышкой по настройкам, что-то руками вбивает в бд, хакает кор фреймворка и т.д.
Аноним 2019/08/25 03:58:27  №1460379 472
>>1460364
И чем фреймворк так сильно от цмс-ки отличается, кроме количества готового кода?
Аноним 2019/08/25 05:58:41  №1460392 473
>>1460379
Тем что в популярных цмсках лютый древний непролазный говнокод. А современные цмски с нормальным кодом как правило малопопулярны. Ну и в цмсках в большинстве случаев все зависимости захардкожены под друг друга, а в фреймворках с DI можно поменять все, даже небо...
Аноним 2019/08/25 05:59:35  №1460393 474
Manga4you
- добавил пару сайтов
- починила автозум
- сделал кэширование страничек
В планах:
- Запоминать позицию на странице
- отправлять главу в кэш
Аноним 2019/08/25 06:17:27  №1460396 475
Аноним 2019/08/25 06:24:13  №1460399 476
>>1460082
Пидораха как есть. Идёт на работу, чтобы его научили. Качаешь вп и изучаешь.
Аноним 2019/08/25 06:25:20  №1460400 477
>>1460392
> современные цмски с нормальным кодом
это какие?
Аноним 2019/08/25 06:45:42  №1460405 478
Аноним 2019/08/25 07:40:34  №1460413 479
>>1460392
Это не говнокод, это НАСЛЕДИЕ доООПшных времён.
Аноним 2019/08/25 08:11:58  №1460418 480
>>1460360
Сколько зарабатываешь?

мимо
мимо Дудь
Аноним 2019/08/25 08:59:52  №1460445 481
>>1460379
>цмс-ки
Работают на уровне пользователя - чтобы быстренько навасянить что-то из готовых плагинов и тем. Обычно довольно сильно ограничены по функционалу и заточены под что-то одно. Часто является морально устаревшей хуйней.
Много откровенных говнокодеров и плохая безопасность как следствие.

>фреймворк
Более низкий уровень - каркас приложения для программиста. Часто требуют некоторых умений и знаний для использования. Ограничений нет - можно писать хоть собственную цмс, форум, магазин, лэндос, твою мать, и аллаха.
Приложения на них являются чем-то вроде костюма по личной мерке, а не штамповкой из украденных на рынке цветных тряпок.
Разработка стоит дороже, но программисты, обычно, на них лучше + безопасность выше.
Аноним 2019/08/25 09:01:44  №1460446 482
>>1460445
а если писать на чистом пхп-это какая категория?
Аноним 2019/08/25 09:12:37  №1460453 483
>>1460445
>>цмс-ки
Алсо, являются сильно условно-бесплатными. Как только захочется сделать что-то большее чем стандартный шаблон с парой правок - для интернет-вывески, то сразу начнут доить по каждому пункту. Причём получишь за свои деньги штампованный продукт, который ещё и доводить до ума надо, опять же деньги.
Из бесплатного там только самый минимум.

Ковырял как-то модный у васянов элементор и охуел от того факта, что вообще все хедеры и футеры у них платные - это где они сайт без хедеров и футеров видели? То есть вообще все 10 штук. И далее везде такое.
Аноним 2019/08/25 09:17:17  №1460456 484
как связать два кода,что бы результат одного перешел в другой и отобр на странице?
Аноним 2019/08/25 09:20:57  №1460460 485
>>1460446
Джун.
Никто вменяемый не будет писать коммерческие вещи на чистой пыхе - долго и дорого. Потом ещё и поддерживать это задолбаешься.
Аноним 2019/08/25 09:23:42  №1460461 486
>>1460456
1 Коды в одном файле - используй переменную
2 Коды в разных файлах - используй include
3 Коды в разных файлах и помещены в классы - используй автозагрузку классов. Например композером.
Аноним 2019/08/25 09:44:10  №1460474 487
а как обезопасить то,что я передаю из формы в код?
Аноним 2019/08/25 09:46:37  №1460475 488
>>1460474
intval(), strval() и подготовленные выражения в pdo.
Аноним 2019/08/25 09:54:20  №1460479 489
Аноним 2019/08/25 09:55:57  №1460480 490
>>1460379
Основное отличие, с точки зрения разраба - фреймворки сделаны для того, чтобы можно было писать расширяемый/дополняемый/изменяемый код. ЦМС - чтобы подключать готовые решения из админки, править тамошний код - побочная хуйня.

Все дело в том, что клиентам почему-то кажется, что раз цмс - это почти готовая хуйня то ее и пилить меньше, в то время как больше времени ты проебешь на разбор того, как устроен очередной говноплагин, чтобы поменять там цвет какой-то залупы
Аноним 2019/08/25 09:58:01  №1460483 491
вам нравиться работать с пхп?
Аноним 2019/08/25 10:02:58  №1460485 492
Аноним 2019/08/25 10:31:29  №1460502 493
Интересная фича в Sublime Text 3:
Можно выделить всю строку если нажать на ее номер. Так-же можно выделять несколько строк.
Аноним 2019/08/25 10:33:49  №1460506 494
>>1460502
И еще одну фичу нашел — можно создавать новый файл при двойном клике на поле с вкладками.
Список студентов Аноним 2019/08/25 11:14:29  №1460537 495
Оп, доделал твоё задание со списком студентов, проверь пожалуйста.
Чувствую наговнокодил.. но вроде всё работает..
Правда поиск только по одному слову ищет, так и не понял как сделать поиск по нескольким словам(а нужен ли он вообще?).
https://github.com/hikkej/student_list
Аноним 2019/08/25 11:24:58  №1460540 496
>>1460506
>>1460502
Абалдеть. А блоки кода можно схлопывать?
Аноним 2019/08/25 13:32:50  №1460614 497
>>1460399
А где по твоему опыт я буду брать? Из онлайн туториола? Чтобы потом работодатель говорил "мы нитак делаем пошел нахуй"?

И вообще что значит научили? Программировать я умею а вот в сраном ВП не шарю. Здесь нет моей вины.
Аноним 2019/08/25 13:37:32  №1460617 498
>>1460357
Да было бы все так просто. У меня фобия что из-за того что нет военника меня никуда не возьмут. + все вакансии это вп ебучий.
Аноним 2019/08/25 13:43:46  №1460623 499
>>1460453
Посмотри сколько Битрикс стоит
Аноним 2019/08/25 13:59:09  №1460636 500
>>1460399
>Качаешь вп и изучаешь
я не он, но кто его кормить будет пока он учится? И кстати да, вп скачать можно, а вот битрикс...
Аноним 2019/08/25 14:02:47  №1460639 501
>>1460636
Бля с биртиксом делал тестовое неделю назад. HR говорит сделай за день ну я и сделал в итоге он начал пиздеть что нихуя не может проверить. Завтра типа сможет. Но завтра он не написал и вообще нихуя не ответил.
Наес тестовые задания))))))))
Алсо реквестирую способы борьбы с такими пидорасами.
Аноним 2019/08/25 14:09:53  №1460644 502
>>1460639
Вангую что они уже нашли кого то.
Аноним 2019/08/25 14:32:25  №1460649 503
>>1460636
Битрикс тоже можно скачать.
Мимо, ковыряюсь в нем
Аноним 2019/08/25 15:12:04  №1460660 504
>>1460623
Доплачивать всё равно придётся.
Аноним 2019/08/25 15:13:25  №1460661 505
>>1460636
>кто его кормить будет пока он учится?
А кого это ебёт? Работодатель ему мамочка что ли? Повзрослейте уже.
Аноним 2019/08/25 15:32:04  №1460668 506
>>1460661
>Повзрослейте уже
по твоей логике выходит, что ты сразу из роддома работать пошел? Тебя самого родители не обеспечивали?
Аноним 2019/08/25 15:32:20  №1460669 507
>>1446969 (OP)
Какую зп джуну просить в дс2 без опыта работы?
Аноним 2019/08/25 15:38:50  №1460674 508
>>1460669
Людям из дс-ов вообще платить не надо. Они - кровопийцы и сосут последнее из наших регионов.
Аноним 2019/08/25 15:40:48  №1460676 509
>>1460668
>по твоей логике выходит
>сразу из роддома работать пошел
У тебя проблемы с пониманием контекста?
Речь о работодателе идёт.
Аноним 2019/08/25 15:45:09  №1460679 510
>>1460674
Все деньги Москва сжирает, а потом перераспределяет по регионам. Так в чем виноват я житель дс2?
Аноним 2019/08/25 16:07:31  №1460688 511
>>1460669
50-55 если ты хорош в пет-проектах и тех интервью.
Аноним 2019/08/25 17:06:21  №1460710 512
Может тупой вопрос, но можно ли как-то сделать так, чтобы при создании какой-то новой хуйни в базе данных на phpmyadmin ей, согласно автоинкрименту давался айди не в зависимости от того, какой она по счету в принципе создается, а в зависимости от того, какой самый большой айди уже имеется в базе данных?
Не очень понятно сформулировал, наверное. Суть в том, что, допустим, если я удаляю из базы данных что-то с айди 7, к примеру, то при создании следующего объекта ему будет присвоен 8-ой, в то время как я хочу, чтобы был 7-ой айди, потому что он не занят после удаления старого. В общем, как сделать, чтобы так сделать? Сорри за косноязычность.
Аноним 2019/08/25 17:09:53  №1460711 513
>>1460710
Это делается тригерами.
Аноним 2019/08/25 17:19:48  №1460714 514
>>1460710
Анон, а зачем тебе так делать? Если ты хочешь в таблице, например, фамилий вывести слева столбец с красивыми числами по-порядку, то это не айдишники надо выводить, а тупо сделать какой-нибудь $num-плюс-плюс. Зачем еще такая штука может понадобиться?
Аноним 2019/08/25 17:24:44  №1460718 515
>>1460714
Я вывожу статьи. У каждой свой айди. Мне не нравится, что после удаления некоторых "тестовых" статей из базы данных, их айди уходят в небытие, а остаются только те, которые не удалялись, но при этом айди для новой статьи выводится в зависимости от того, сколько уже статей создавалось, а не отсчитывается от последнего созданного айди с прибавкой единицы.
Аноним 2019/08/25 17:26:18  №1460719 516
>>1460711
Вот этими?
https://habr.com/ru/post/37693/
Спасибо. Еще бы какой-нибудь гайд по этим триггерам исчерпывающий.

Я пока что совсем новичок в программировании.
Аноним 2019/08/25 17:47:24  №1460731 517
image.png (55, 670x520)
520x670
Аноны, простите за тупой вопрос. Учу ларавель по скачаному видеоуроку про форум на английском. Так вот парень который снимал один раз использовал be(), а в другом уроке начал юзать actingAs(). Собсна вопрос: а какая разница между ними, если один метод просто вызывает другой. Если так, то зачем он нужен?
Аноним 2019/08/25 17:53:04  №1460736 518
>>1460688
Бля стояло 50к и ни одна сука не взяла на работу. Такое ощущение что туда приходят додики за 35к. В итоге рыночек решает что я не рентабелен. Может такое быть?

Стоит ли мне понизить планку до 35-45к ради опыта работы?
Аноним 2019/08/25 17:53:51  №1460737 519
>>1460718
Да и нормально. У тебя какой-то нездоровый перфекционизм.
Аноним 2019/08/25 18:04:45  №1460747 520
>>1460736
Что значит стояло? На собесе обсуждали зарплату?
Что умеешь вообще?
Аноним 2019/08/25 18:08:58  №1460748 521
Сап, анон, нужно завернуть xml с рандомного сайта, как сделать не используя curl?
Аноним 2019/08/25 18:20:58  №1460756 522
>>1460614
Опыта набираются во воемя учебы. Скачал виртуалку, развернул вордпресс, открыл вакансии с вордпрессом, откликаешься на заявки и клянчишь тестовое задание, делаешь их, самые мнтересные в гитхаб. Вот тебе и опыт.

Дебил ты ебаный ну сколько тебе лет? Залупа ты дроченая, ну хуле ты такой тупорылый?
Аноним 2019/08/25 18:22:23  №1460757 523
>>1460636
Волка ноги кормят. Ещё один даун блядь. Учится надо в перерывах между работой. Хоть грузчиком, хоть таксистом, а в свободное время учеба.
Аноним 2019/08/25 18:24:04  №1460761 524
>>1460747
>Что значит стояло?
Значит что я сейчас думаю делать ли ниже ЗП в резюме на хх.ру.
В данный момент стоит 50к рублей. Изначально в начале августа при создании резюме я столько указал.

>На собесе обсуждали зарплату?
С одной hr-кой в пулково 3. Она сказала что устраивает. Еще один "бос" Михаил Грохотов игнорщик с битриксом сказал что устраивает.

>Что умеешь вообще?
Умею PHP, Symfony, MySQL, JS ES6, HTML5, CSS.
Хорошо владею C# + изучали в шараге С/С++, Delphi, pascal, assembler.
Сам я дипломированный специалист.

>>1460756
Мне 20 лет. А вообще пошел нахуй с таким общением.
Аноним 2019/08/25 18:49:43  №1460773 525
>>1460761
Ты очень "душный тип", судя по постам. Возможно отлетаешь из-за people skills.
По частям:
>Умею PHP, Symfony, MySQL, JS ES6, HTML5, CSS.
На гитхабе есть что показать сложнее круда?

Все упирается в код, техническое собеседование и общую адекватность.

>Хорошо владею C# + изучали в шараге С/С++, Delphi, pascal, assembler.
Это в резюме не клади. Оно сразу в корзину улетит.
>Сам я дипломированный специалист.
"имею профильное образование"

Как ты в 20 лет уже с дипломом, поступил в 15?
Аноним 2019/08/25 18:59:30  №1460777 526
>>1460773
Я же писал что в шараге учился "изучали в шараге". Конкретно ФСПО.
Мне люди никогда не говорили что я душный. Наоборот веселый позитивный.

Хорошо уберу лишнее из резюме.

Но как поступить с заработной платой? Ты сам с какого города?
Аноним 2019/08/25 19:01:50  №1460779 527
>>1460761
> Мне 20 лет. А вообще пошел нахуй с таким общением.

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

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

Ох блядь и дуры вы дурные.
Аноним 2019/08/25 19:12:23  №1460786 528
>>1460614
>Программировать я умею а вот в сраном ВП не шарю
Значит не умеешь.
Что за нытьё вообще? Либо умеешь и делаешь, либо идёшь нахуй с поезда.
Аноним 2019/08/25 20:58:51  №1460850 529
>>1460757
Ты лицемер. Уверен, тебя все детство содержали родители, кормили, одевали. И что-то я не думаю, что ты отвергал их помощь, крича "Я ВОЛК МЯМЯ РЫЫЫ!" И мат тебя не красит, ты не выглядишь взрослее и мужественней, наоборот, мат - это показатель идиота
Аноним 2019/08/25 21:02:36  №1460852 530
>>1460748
а через file_get_contents не получается?
Аноним 2019/08/25 21:19:00  №1460859 531
>>1460850
С чего ты решил, что работодатель должен к тебе относиться как родитель? Ты у начальника ещё сисю попроси в обед - быстро трудовую на руки получишь.
Аноним 2019/08/25 21:35:59  №1460869 532
>>1460859

Прекращайте бесполезный флуд, тут не тред перезванивающих.

>>1460773

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

>>1460756

Не умеешь нормально общаться, лучше ничего не пиши.

>>1460736

Жалобы на работодателей в тред перезвонивших.

>>1460731

С виду смысла нет.

Аноним 2019/08/25 21:42:23  №1460872 533
>>1460869
>Прекращайте бесполезный флуд
А то что?
Аноним 2019/08/25 22:10:18  №1460883 534
>>1460850
Я изрекаю мысль как хочу, обилие мата доставляет мне эстетическое удовольствие.

Касаемо твоего высера - я с 15 лет работаю. К слову мне сейчас 32. Начинал я как принеси, подай, пошёл нахуй, не мешай. И не разрабом, а в сраном автосервисе. Среди моих знакомых не было ни одного человека, кто бы увлекался вебом. Даже в местной шараге, в которой я учился, я единственный кто писал диплом про веб разработку. Преподы вообще нихуя не поняли про что диплом.

>>1460869
Я умею общаться, но когда вижу инфантильных мальчиков меня аж клинить начинает. Жаль, что мы не спартанцы. Тебя бы сразу с обрыва сбросить нахуй надо было бы.
Аноним 2019/08/26 01:17:30  №1460927 535
>>1460718
Пользователь сохранил в избранном на статью с большими хуями, ты ту статью удалил, а id теперь принадлежит статье с сиськами. И вот хочет пользователь подрочить вслатсть, открывает избранное, переходит по автоматически сгенерированной ссылке, а ты ему вместо хуёв сиськи подсовываешь. Плохо, нельзя так делат.
Аноним 2019/08/26 02:01:13  №1460931 536
Сап, аноны. Как в 2к19 стоит писать интернет-магазины и прочие порталы с регистрацией и активностью пользователей? Сам я рачелло еще тот и склоняюсь к тому,чтобы все ручками клепать. Собственно я и хочу узнать как кто пишет подобные проекты.
Аноним 2019/08/26 02:12:54  №1460933 537
>>1460718
Так и должно быть, иначе у тебя получается не удаление статьи, а замена одной статьи на другую.

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

Для урл наверное лучше генерировать какой-то уникальный slug из названия статьи, так ты скрываешь сколько у тебя в общем статей на сайте, это вроде как лучше для сео и т.п.
Аноним 2019/08/26 02:17:46  №1460934 538
>>1460931

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

Хороший разработчик способен разобраться и в том, и в том.
Аноним 2019/08/26 04:40:13  №1460948 539
>>1446971
Ставлю ; после }, отбиваю вложения табуляцией.
Аноним 2019/08/26 04:56:18  №1460950 540
>>1460934
Я вкатывальщик 19 лвла, есть заказ на автомобильный магазин. Клиент не шарит вообще и был найден по сарафанному радио ( т.е не крупная какая-то сеть, а частник). Последние два дня повкатывался в CMS (Modx,WP). В целом я как программист могу и обойтись без этого. Но хочется с этим проектом продвинутся в теме современного веба, А то мне подумалось что самописы это изобретение велосипедов, поправь мои рассуждения, если я не прав.
Аноним 2019/08/26 06:13:04  №1460959 541
>>1460931
Интернет-магазины сейчас не нужно писать, это глупо. Там до жопы фич нужно, заказы, корзины, интеграции с платёжными системами, выгрузки, купоны, акции, скидки, витрины, напоминания, dwh и прочая и прочая.
Полноценно писать такую систему очень долго (несколько лет) и сложно (потому что это коммерц, там много нетривиальных задач), и написать её хорошо сразу не получится (те системы, что уже есть на рынке, развиваются и пишутся последние лет 10, множеством программистов).
Конечно, можно начать с нуля и потихоньку наворачивать одну фичу над другой, но во-первых это будет обрекать тебя на цикл разработки сразу же, как захочется хоть что-нибудь изменить, а во-вторых некоторые вещи вроде event sourcing'а закладываются в архитектуру сразу же и я не верю в то, что ты сумеешь заложить сразу всё правильно.
Да и бизнесу это всё не нужно.
Короче, если у тебя рядом (или ты сам) сидит мамкин бизнесмен и хочет себе интернет-магазин - бусть башляет 1000 рублей любой онлайн-платформе для этого и получает сразу вообще всё готовое. Максимум, потратится на дизайнера и фронтендщика. Зато ему не придётся думать о хостинге, бекапах и прочем.
Если есть твёрдое решение хоститься у себя - берите уже готовое решение, магенту, друпал коммерц (есть сборка commerce kickstart), вордпресс (у него должны быть плагины) и т.п.
Аноним 2019/08/26 07:58:48  №1461002 542
>>1460872
угомонись, матершинник. Ты не вписываешься в тред. Советы дельные не даешь, всех оскорбляешь. Здесь новичкам помогают, а не матерят их. Поищи себе другую доску, уверен в /au ты найдешь единомышленников. Там и тачки можно обсудить, и свою зазнобу, и тугосерю, и спорт - все, что интересно человеку, начавшему трудовой пусть в пятнадцать лет с разгрузки товорняков с зеками
Аноним 2019/08/26 08:08:52  №1461009 543
image.png (95, 1360x768)
768x1360
Двачик помоги в пхп слаб!
Аноним 2019/08/26 08:26:55  №1461024 544
image.png (96, 1360x768)
768x1360
Аноним 2019/08/26 08:39:37  №1461032 545
1.jpg (35, 800x375)
375x800
>>1461009
анон, я сам слаб в пшп, вот сам код, который уже работает, но без запроса командной строки о вводе твоих чисел. Погугли как это делается
Аноним 2019/08/26 08:56:22  №1461048 546
Здравствуйте, тред как всегда фиг найдешь. Пусть и не релейтед но мб кто знает ответ на мой вопрос. Все таки мой родной тред.

Есть старый сайт который пилится уже 10 лет, на нем обычная перезагрузка страниц, никакого спа. Заказчику нужно прикрутить на сайт систему звонков и прочего. У сторонней системы которую интегрируем есть виджет звонков, не вездесущее "мы_вам_перевозним_через_2_минуты_вы_только_оставьтетелефон-говно" , а реальное voip на js'e, который как я понимаю заточен под спа и работает на реакте (в доках написано, сам я не знаю что там на самом деле).

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

По сути вопрос в том, что есть ли какой-то механизм, когда пользователь ливает со страницы на другую, то какой-то окуклить js и перенести его на другую страницу?
Аноним 2019/08/26 09:09:03  №1461054 547
Поздно вкатываться в пхп в 25 лет? Если на сях пишу, прошиваю микроконтроллеры.
Аноним 2019/08/26 09:10:48  №1461057 548
>>1461054
Зачем? Хз смотря что хочешь делать.Так же можно легко угодить не в программирование на пхп а в разработку на вордпрессе, модх, опенкартах и прочем дерьме. Будешь не прогать а васянить одну херню к другой.
Аноним 2019/08/26 09:20:30  №1461064 549
>>1461057
>Будешь не прогать а васянить одну херню к другой.
Не понял.
Аноним 2019/08/26 09:36:22  №1461076 550
>>1461002
Шизоид, ты сейчас с другим человеком переписываешься.
В тред не вписываешься именно ты, со своими дружбой и понями. Вали на свой доброчан, двуличная скотина - заебал со своим нытьём.
Кто тебе вообще право дал - других одёргивать? У тебя гондурас опух выше всякой меры и хуесосят тебя тут по делу.
Аноним 2019/08/26 09:37:30  №1461077 551
>>1461048
Пытаться делать стабильный js внутри перезагружающейся веб-страницы противречит логике работы браузеров и, поэтому, бессмысленно.
Просто открывай по клику на это говно новое окно/вкладку, в которой уже и будет колл. Google так же делает в своём Hangouts по той же самой причине - при клике на видеозвонок открывается новое окно.
Аноним 2019/08/26 09:42:24  №1461082 552
>>1461064
Он про то, что есть куча вакансий, заключающихся в формошлёпстве, где ты двумя заученными клацами по веб-интерфейсу в CMS-ке будешь накликивать примерно то же самое день за днём. Такое сайт-кликерство - это низшая квалификация "веб-разработки" и потому презирается.

По теме, вкатываться никогда не поздно, но, как и всегда, лучше приложить максимум усилий для поиска достойного работодателя. Тебе потребуется работадатель с современным стеком (только symphony / laravel, всех васянов с yii/вордпрессом/самописками/прочим говном посылай сразу нахер), поставленным процессом(git, dev-stage-prod, код-ревью, ci/cd, докер и всё такое) и системой наставничества, чтобы ты мог получать знания от компетентных людей.
В противном случае влезешь в говноконтору и там и залипнешь на неопределённый срок, да ещё и плохих практик нахватаешься (а узнать, плохие они или хорошие не сможешь, т.к. опыта нет).
Аноним 2019/08/26 09:57:43  №1461097 553
>>1461076
>Кто тебе вообще право дал - других одёргивать?
это ты, дурачок залетный, закатился в тред и начал всех оскорблять.
>и хуесосят тебя тут по делу
Почему во множественном числе? Ты типичная слабовольная овца, что ищет поддержки и апеллирует к какому-то стаду? Повторяю, тред создан для помощи новичкам, помощь не предполагает оскорблений и флуда. А ты только флудишь и оскорбляешь. Для тридцатилетнего ты слишком глуп
Аноним 2019/08/26 10:06:02  №1461107 554
>>1461097
>залетный
Я тут довольно давно уже. Всем нормально, только один дурачок постоянно других разговаривать учит. Как бабка при церкви.

>Почему во множественном числе?
Потому, что не я один так считаю.

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

>только флудишь и оскорбляешь
Тебя ебать это не должно, полицай.
Аноним 2019/08/26 10:16:58  №1461120 555
>>1461082
кех

>только symphony / laravel
>yii

пора бы уже давно выкатываться из интерпрайз медленного говна
https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=query&l=zik073-f

>самописками
тот же баду самописка сомнительно что это плохая контара

>поставленным процессом(git, dev-stage-prod, код-ревью, ci/cd, докер и всё такое)

тут +

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

алсо в ПХП сейчас эра аутсорса , аутсорс бизнес постраоин чем быстрее тем лучше , потому на рынке сейчас 70% в СНГ подобных котор

Аноним 2019/08/26 10:44:14  №1461136 556
>>1461120
Бенчмарк нерепрезентативен, потому что узкое место в 99% это либо база, либо крайне плохой код.
Тем более, slim, phalcon, reactphp и симфони в одном месте - это что-то совсем странное. Одно - микрофреймворки и наборы компонентов для написания ассинхронного кода, а второе - это, блин, полноценный фреймворк.
Симфоня же пропагандирует принципы хорошей архитектуры и компонентного подхода, за что ей плюс. Да и я бы не сказал, что она медленная.

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

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

> алсо в ПХП сейчас эра аутсорса , аутсорс бизнес постраоин чем быстрее тем лучше , потому на рынке сейчас 70% в СНГ подобных котор
Я работал на аутсорсе до недавнего времени. Симфони-компоненты (за счёт того, что все проекты были построены на одном стеке - очень легко было шарить знания и просить помощи), dev-stage-prod, ci/cd, и т.п. Не сказал бы, что плохо или что был слишком большой перевес в сторону скорости в ущерб качеству.

> нтерпрайз медленного говна
Ну и да, этой теме уже лет 10, но я всё же выскажусь. Такие вещи, как симфони, дают небольшой оверхед в начале перед тупым кастомным кодом, но очень быстро начинают себя оправдывать за счёт грамотного структурирования кодовой базы и архитектуры, позволяя строить сложные приложения большим командам разработчиков. А вот те, кто начинают разрабатывать с принципом "нахер всё, делаем максимально просто на кастомном коде" очень быстро с нарастанием кодовой базы превращают проект в огромный неподдерживаемый сгусток кода (как-то так: https://www.bangkokpost.com/media/content/dcx/2018/05/04/2749833_620x413.jpg).
Далее, "медленный" - это понятие относительное. быстрее почти всегда будет код на си - но мы же что-то не нём разрабатываем, правильно? Бизнесу не нужно оптимизировать микросекунды, ему нужна примемлемая скорость разработки с приемлемой скоростью отдачи данных пользователям. Своего рода компромисс.
Учитывая пред-загрузку файлов, кэширование на самых разных слоях (включая грядущий JIT), современные компьютерные мощности и производительность современного PHP - писать код можно во вполне широких пределах, жертвуя миллисекундами в угоду читаемости кода и его поддерживаемости.
Уточню, я не имею ввиду "говнокодим и пофиг, оперативка дешёвая", я имею ввиду - слой абстракции, котороый структурирует код, упростив какие-то вещи, но будет требовать создания одного-двух объектов в рантайме - это неплохой компромисс.
Но всегда нужно руководствоваться критерием разумности и оправданности, конечно.
Аноним 2019/08/26 10:44:54  №1461137 557
Аноним 2019/08/26 11:19:11  №1461161 558
>>1461136
так то посыл все верен , только как пользоваться молотком (фреймом) ломать головы или бить гвозди дело сугубо пользователя , по сему как строить грамотную архитектуру это уже к разработчикам а не фреймам , асинк фреймы всё больше набирают обороты , и это очевидно логично в эру микросервисной архитектуры потому на всякие swoole я бы обращал по более внимания. Но в основном с картинкой да ты прав, хотя опять таки это если мы пишем монолит.
Аноним 2019/08/26 11:38:14  №1461179 559
>>1461161
> Монолит
Я за весь свой опыт не видел годно организованных микросервисов.
Пришёл к выводу, что правильно написанный монолит можно расширять почти бесконечно, а если пишешь говно, то и микросервисы не помогут.

> Асинк
Просто по статистике с сайтов вакансий, асинк пока не особо популярен. Да и никто не мешает делать асинк и симфони одновременно.
Тем более, что асинк сам-по-себе в пхп сделан через костыли. Я бы писал на обычном классическом php-fpm с симфоней обычный монолит, а узкие части писал бы на golang.
Аноним 2019/08/26 12:39:39  №1461230 560
>>1461179
Дико извиняюсь за тупой вопрос а как использовать php с другими языками на одном сервере?
Аноним 2019/08/26 12:52:30  №1461244 561
>>1461179
пожалуй под всем подпишусь анончик , спасибо за лайтовый конструктивный разговор ,

разве что асинк должен появиться как стандарт в языке 8 пхп
Аноним 2019/08/26 12:53:13  №1461245 562
>>1461230
нечего не мешает делить запросы через тот же nginx между разными софтинами на разных языках
Аноним 2019/08/26 12:53:42  №1461246 563
>>1461230
>>1461245
так же ещё вполне возможно через очереди например
Аноним 2019/08/26 13:57:06  №1461266 564
>>1461230
В итоге у тебя получаются несколько приложений, одно центральное - это монолит, а прочие - это сервисы, которые отвечают за отдельные аспекты функциональности, требующие производительности или специфических фич (вебсокеты, нейронки, многопоточная обработка).
В итоге у тебя возникнет три задачи, обеспечения этих сервисов, доступа к ним и поддержки.
Первое решается множеством способов в зависимости от стека, требований и просто вкусов создающих. Самый тупой и сомнительный вариант - запускать прямо из php через shell_exec. Самый простой из нормальных - поднимать всё ручками, рядом или на соседнем сервере. Самый хайповый - это kubernetes и прочие системы оркестрации.
По поводу второго камрады из
>>1461245
>>1461246
уже высказались. Тут нужно определиться с двумя вещами, типом взаимодействия и транспортом. Тип - это синхронные вызовы (по сути rpc, например, jsonrpc) или ассинхронные (событийность, подписка/отписка). Транспорт же может быть любым, это могут быть сетевые вызовы (http-запросы), может быть брокер сообщений (отдельная система по доставке, например, rabbitmq) или твои сервисы могут просто пользоваться одной и той же базой данных (сомнительный вариант, но иногда встречается).
Третье - это поддержка, и связан он с тем, что такие распределённые (состоящие из нескольких узлов) системы не так просто поддерживать, например, дебажить. Из очевидного, каждая из этих систем должна писать свои логи и ты должен понимать, как ты будешь их деплоить (потому что они будут разворачиваться не одновременно, что вызовет временные отказы в связанных компонентах). Из неочевидного, это какие-то общие конфигурации и трасировка: ты должен предусмотреть возможность понять, к какому запросу в монолит у тебя относится твоя задача в стороннем сервисе. Делается не особо сложно, генерируешь на уровне входящего запроса случайный идентификатор REQUEST_ID, прокидываешь его во все последующие запросы и пишешь во всех логах. Таким образом, поискав по всем логам всех сервисов по этому REQUEST_ID, ты поймешь кто и что вызвал, и почему.
Ну и в принципе, правильное логирование - залог стабильной системы.
Аноним 2019/08/26 14:08:34  №1461275 565
>>1461266
А, ну и главное забыл. Ключ к правильной структуре приложения - это правильное разделение областей ответственности между компонентами (это не только в SOA, это в принципе так).
Соответственно, 95% логики должно быть в монолите, а в другие компоненты нужно выносить то и только то, что слишком тяжёлое/сложное/долгое для монолита. В идеале оно не должно быть связано с другими частями, будучи "чистой функцией": получает аргументы, возвращает результат, без вызовов в другие компоненты.
К примеру, у нас был монолит и нужно было генерировать огромные PDF'ки, что сильно выжирало процессор и оперативную память. Мы в тот раз написали отдельный маленький сервис, который получал данные для документа, генерировал pdf и слал её назад отдельным запросом. В итоге, мы вынесли тяжелый процесс в отдельное место (и он перестал влиять на производительность пользовательских запросов), сохранив неизменной бизнес-логику внутри монолита (методы "создай отчёт", "дай отчёт" остались в монолите, как и раньше).
Аноним 2019/08/26 15:10:31  №1461339 566
Так аноны, знаю что я ахуевший, но все таки, собираюсь найти работу через 1 месяц, теперь расскажите что мне делать учитывая, что знаю неплохо питон и чучуть жс, то есть напишите план как вы бы с нуля в пхп до работы дошли, буду очень признателен и будет интересно почитать.
someApprentice 2019/08/26 15:22:20  №1461363 567
https://phpclub.tech/pr/res/1415604.html#1440220
>Вопросы по схеме БД:
>- что за URL указывается в поле message.content? URL на стороннем сервере? На своем? Если на своем, не логичнее ли вместо URL указать внешних ключ на таблицу файлов, либо какой-то идентификатор файла, из которого строится URL? Идентификатор удобен тем, что позволяет в будущем менять вид URL файла.

https://github.com/someApprentice/Crypter/blob/master/schema.sql#L93

А как составлять URL на основе идентификатора?

Изначально я хотел чтобы URL хранил в себе относительную ссылку от сервера, а в клиенте (то есть в html версии где строится ссылка), если меняется адрес хранилища, просто менять адрес хранилища в ссылках.

То есть, в БД message.url = "path/to/file.jpg", а при выдаче html версии склеивать эту ссылку с адресом хранилища.

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


А ещё вопрос.

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

Лучше сразу на будущее делать таблицу, или можно оставить просто? А если потом всё таки делать реализацию нескольких ключей, то придётся переносить все ключи из user в новую таблицу? А если пользователей миллионы, это не будет времяёмкой задачей? Как обычно поступают в таких ситуациях?


>>1450056
>>>- зачем нужна таблица participant, если есть conference_reference? Я не понимаю, чем таблица participant отличается от conference_reference.
>> Это денормализация чтобы получить конференцию по собеседнику, в случае приватных конференций
>
>Тут мне кажется, непонимание. Я вижу, что в таблице conference_reference есть поля-ссылки:
>
>- "user" -> на таблицу users
>- "participant" -> на таблицу users
>- conference -> на таблицу conference
>
>А еще есть таблица participant с такими полями:
>
>- user -> на таблицу users
>- conference -> на таблицу conference
>
>Соответственно вопрос, чем таблица participant отличается от conference_reference? Они обе содержат поля user и conference, и не хранят ли они одно и то же?
>
>В моем понимании диалог выглядит так: есть conference, есть 2 ссылающихся на него conference_reference (вид на диалог со стороны каждого собеседника). Что тут делает таблица participant? На нее нет внешних ключей, то есть никто на нее не ссылается.

>Соответственно вопрос, чем таблица participant отличается от conference_reference? Они обе содержат поля user и conference, и не хранят ли они одно и то же?
Нет, они хранят разные значения.

В случае conference_reference:
"user" - это пользователь которому принадлежит ссылка на конференцию

В случае с participant:
"user" - это конкретный получатель в конференции

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

>В моем понимании диалог выглядит так: есть conference, есть 2 ссылающихся на него conference_reference (вид на диалог со стороны каждого собеседника). Что тут делает таблица participant? На нее нет внешних ключей, то есть никто на нее не ссылается.
Таблица собеседников нужна для хранения всех собеседников в той или иной конференции. Это нужно для публичных конференций, а приватные представлены так же как и публичные, но только всего из двух собеседников.


>> builtins.TypeError: catching classes that do not inherit from BaseException is not allowed
>> except (InvalidSignatureError, UserNotFoundError, WrongTokenError, Exception) as e:
>
>Это скорее всего из-за того, что классы не импортированы или импортированы неправильно и Питон путает их с какими-то другими классами. Для надежности можно отркыть исходный код, где они определены, и проверить, что они действительно наследуются от базового класса исключений.
Да, они действительно наследуется от базового класса исключений https://github.com/jpadilla/pyjwt/blob/d25c92ca5e9980ca7bc8b31420bf36e3f4a9e3f0/jwt/exceptions.py#L16
Аноним 2019/08/26 15:23:42  №1461364 568
>>1461339
А добавлю что html/css знаю.
Аноним 2019/08/26 16:42:25  №1461412 569
можно ли на пхп замутить такое?
1 пользователь двигает объект с помощью жс
2 юзер видит это передвижение
Аноним 2019/08/26 18:18:20  №1461461 570
>>1461364
Я сделал пару пет проджектов: "музыку вконтакте", где можно было грузить треки и проигрывать их и ещё аналог гисметео, карту России с прогнозами погоды по городам (тянул из какого-то апи). Ну и вроде классический туду лист слепил.
Приходил на собесы с ноутом, говорил, что джуниор, но вот смотрите, что сделал.
Потом было тестовое в одну контору, сделать блог без использования фреймворков. Я написал свой mvc фреймворк и уже на нём сделал тестовое.
В итоге взяли.
Но это было уже лет 6 назад, если не больше.
Аноним 2019/08/26 19:36:43  №1461491 571
Аноним 2019/08/26 19:42:42  №1461497 572
>>1461461
Спасибо за ответ, вот я тоже думаю запилить петпрожект, думал пару сайтов сделать, это лучшая практика, да и на собесе покажу сразу.
Аноним 2019/08/26 19:57:15  №1461504 573
>>1461461
Делал бота в телеграм, копался в темах вордпресса, парсил всякое говно, игрался разными с апи, лепил калькуляторы на жикуери и жс, тыкал палочкой ноду, есть гитхаб с собственной приватной помойкой на парочку проектов. MVC, паттерны, сотни статей в одно лицо и 60 часов лекций на старте. Дома давно уже стоит серверная убунта из старого нетбука на которой собираю всякое под нужду.

На работу не пробовался ещё. Стрёмно как-то.
Аноним 2019/08/26 20:14:26  №1461517 574
Тест.
Аноним 2019/08/27 05:30:54  №1461633 575
>>1461491
Будучи совсем ничего не знающим джуном работал за еду 20к, но довольно быстро зп выросла до 50к, а потом и до 70к (с бонусами иногда переваливало за 100к). В моём мухосранске это вполне себе деньги, но в итоге я через несколько лет после первого найма поменял работу и там уже в районе 150к начал получать.
Аноним 2019/08/27 05:39:17  №1461635 576
>>1461497
>>1461504
Советую запилить хотя бы один high-quality проджект, потому что
> Делал бота в телеграм, копался в темах вордпресса, парсил всякое говно, игрался разными с апи, лепил калькуляторы на жикуери и жс, тыкал палочкой ноду, есть гитхаб с собственной приватной помойкой на парочку проектов.
звучит, как "пробовал 100500 разных технологий, но всегда получалось говно". Ты пойми, как это будет выглядеть для работодателя. Твоё резюме будет смотреть сеньор (например, я). Он получит от HRа ссылку на твой гитхаб с просьбой оценить. Зайдёт на один проджект, посмотрит, поморщиться. Зайдёт на другой, блеванёт. На третий уже не зайдёт, напишет "чувак знатный говнокодер, в разработке не разбирается от слова совсем" и hr пойдёт писать тебе отказ (или тупо заигнорит, если овца).
Лучше собрать один эталонный проект по бест-практикам, который ты и будешь совать под нос всем работодателям.
Я бы взял laravel и реакт, прочитал бест практики, посмотрел примеры приложений и прочие скелетоны и написал бы, к примеру, двач. С анонимными постами, картиночками, тредами, цитатами, капчой и админкой. Ну и сверстал бы под мобилки его отдельно, конечно же.
Чтобы ревьювер (всё ещё, например, я) начал смотреть и такой: "Ага, паттерны. Ага, структура. Ага, конфиги. Ага, докер. Ага. Всё понятно, всё красиво, всё по стандартам. Ну вот тут шероховатости, но джуниор же, не страшно. Берём!"
Аноним 2019/08/27 06:47:12  №1461669 577
>>1461633
для 6 лет назад вполне себе знания нет?
Аноним 2019/08/27 06:55:28  №1461671 578
Аноним 2019/08/27 08:06:11  №1461705 579
>>1461635
>ТЫ ГАВНО А Я СИНЬЕР-РЕВЬЮЕР
Читаю такие высеры, и в очередной раз убеждаюсь, какое же среди прогеров высокомерное говно бывает. У нас на заводе был Дядьпаша такой же вахтер, который новичкам не помогал, а отбивал охоту работать. "Я бетон по часовой мешаю и вы мешайте, это технология!"
>ВОТ ТЫ СДЕЛОЛ МАЛЕНЬКИЙ ПРОЕКТ - Я ПОМОРЩЮСЬ И НИВАЗЬМУ ТИБЯ, А ВОТ КАК ТЫ ДВАЧ СДЕЛОИШЬ - Я СРАЗУ УВИЖУ СПИЦА!
А ты, дурачок, в его мелких проектах паттерны, структуру, конфиги не увидишь? Там стандарты какие-то другие? У тебя стандарты и красивый код от скольки-размерных-проектов начинаются?
Ты пойми, что ты мудак и отбиваешь человеку желание программировать. Почитает тебя ньюфаг и подумает вон "специалист" советует сразу большие проджекты писать, чтобы меня признали, сделаю как я фейсбук. И закономерно соснет, потому что он не знает как две переменные складывать, а ты его за большой проект сажаешь.
Аноним 2019/08/27 09:46:13  №1461754 580
>>1461635
Так-то у меня есть вещь, которую я 4 месяца на голом пхп задротил и 2 раза переписывал - там и паттерны и практики, и жопа с ручкой.
Обязательно фейсбук надо писать, чтобы очередной великий мастер оценил?
Про говно - ты сам придумал, а на деле за два дня это всё поднимается, если через композеровские либы делать. Да и дохуя как-то негатива у тебя в посте только на выдумке + какой-то подростковый максимализм.

Вчера вот на google cloud platform туторы проходил. Годно зделоли. Местными хостерами уже пользовался, теперь с этим хочу попробовать.
Аноним 2019/08/27 10:10:33  №1461764 581
>>1461705
Чувак, у тебя явно пригорает и/или ты обижен на кого-то, поэтому взрываешься тут на адекватные советы.
Я анону сказал правдивую вещь: засылай на ревью хороший код, потому что небольшой качественно сделанный проект в глазах ревьювера (например моих) будет весить больше, чем 10 некачественно сделанных проектов. Увы, мир так работает, что людей оценивают по результатам и показывать нужно лучшее, что можешь вообще продемонстрировать.
Стандарты и паттерны у меня начинаются сразу, я в принципе стараюсь плохой код не писать, даже если нужно по-быстрому наговнякать - чтобы не страдать при поддержке и не отвечать за плохой код в будущем (когда спришвают "что за плохой код годичной давности" обычно аргумент "эээ, ну там сроки горели" не проканывает).
Далее, про большие проекты я не писал, как и не отбивал охоту. что-то делать. Я сказал чуваку выбрать стек, изучить бест-практики (в которых будут и конфиги, и паттерны и всё такое) и сделать настолько хороший проект, насколько он сможет. К слову, "написать двач" - довольно изичный пет проджект, не виду ничего "большого", где новичок "соснёт".
> сделаю как я фейсбук
> не знает как две переменные складывать
Вот и узнает. Ты забываешь, что мы не в детский сад играем, и чем меньше джун знает, тем сильнее он сядет мне на шею, если я его возьму. Если он будет знать, что нужно использовать конфиги, нельзя писать весь код в одном классе и нужно использовать ORM вместо кастомных запросов, то это значит, что мне можно будет больше времени объяснять ему, как сделать задачу, нежели как пользоваться инструментами и как складывать переменные.
Соответственно да, я ожидаю от джуна понимания на начальном уровне, как пользоваться языком программирования (чтобы он понимал, что такое "отнаследуй класс" и "реализуй интерфейс") и то, как следует пользоваться фреймворком (всё ещё на начальном уровне, что конфиги нужно выносить вот сюда, база данных описывается вот в таких классов и так далее). Я считаю это справедливым требованием, тем более, что изучать это действительно просто, заходишь в любой мануал "пишем блог на XXX" и там тебе всё распишут.
Аноним 2019/08/27 10:10:50  №1461765 582
>>1461635
>написал бы, к примеру, двач
Я бы не стал работать с чуваком, который выпячивает тот факт, что он двачер. Мне местных раковых рвотных конфочек хватило. Тайный двачер лучше явных трёх.
Аноним 2019/08/27 10:40:12  №1461792 583
>>1461765
Да какая разница. Двач, форчан, реддит, блог - это зависит от вкуса того, кто делать будет, его же пет-проект.
Просто он должен быть достаточно подъёмным для новичка, но при этом достаточно большим, чтобы можно было хоть на что-то посмотреть (потому что я видел тестовый в которых был 1 контроллер, 1 модель и 3 метода которые эту модель сохраняли, или удаляли).
Советовать сделать бложег как-то скучно, имиджборда - хотя бы оригинально.
Аноним 2019/08/27 10:40:43  №1461793 584
>>1461764
Отчасти потому и стрёмно устраиваться - вдруг на такого как ты попаду. Ты мне ничего нового не сказал, но ЧСВ у тебя определённо большое.
Аноним 2019/08/27 10:54:58  №1461810 585
>>1461792
>потому что я видел тестовый в которых был 1 контроллер, 1 модель и 3 метода
Падажжи. Наличие контроллера, модели и методов говорит о том, что человек понимает в ООП и MVC. А что должно говорить наличие пяти контроллеров и трёх моделей? Это просто количественная характеристика - всегда можно напилить ещё больше.
Походу ты сам плаваешь в своих же требованиях.
Аноним 2019/08/27 10:59:42  №1461813 586
В любом случае - проект для демонстрации скиллов работодателю это именно целевой проект, а не рабочее приложение. И у него не стоит цели быть максимально жирным и обширным - оно просто показывает скиллы соискателя.
В конце-концов, если у меня есть собственный двач, то нахуй ты мне сдался со своей конторой.
Аноним 2019/08/27 11:01:33  №1461814 587
>>1461793
Не устраивайся, мне безразлично.

>>1461810
И тем не менее, 20 строчек кастомного кода в одном файле - это слишком мало. Выводы делаются в конце-концов по кастомному коду, а есои этот кастомый код - это строка
```
function someAction($id) {
return someModel::load($id)
}
```
в минимальных вариациях, то это ничего не говорит о том, какого качества разработчик пишет это. Это несомненно плюс, что он показывает контроллер вместо самописного обращения к $_GET, но всё ещё недостаточно.
Это как принимать на работу чувака, поговорить с ним минуту и выяснить, что он знает русский язык. Знание языка - это необходимое условие, но не достаточное.
Аноним 2019/08/27 11:04:27  №1461817 588
>>1461814
>20 строчек
Давай только про крайности не говорить. Ты который пост уже выдумываешь какие-то вычурные вещи.
Аноним 2019/08/27 11:11:09  №1461820 589
зачем вы изучаете это дерьмо?
Аноним 2019/08/27 11:12:36  №1461821 590
>>1461820
а почему бы собственно им нет ?
Аноним 2019/08/27 11:15:19  №1461822 591
Аноним 2019/08/27 11:16:04  №1461823 592
Аноним 2019/08/27 11:18:32  №1461826 593
>>1461823
ну и зачем вы тогда учите это старье и заним проф деградацией?
Аноним 2019/08/27 11:20:12  №1461828 594
>>1461826
по каким критериям это старьё ?
Аноним 2019/08/27 11:21:25  №1461829 595
>>1461828
как и перл он сдохнет
Аноним 2019/08/27 11:23:44  №1461832 596
>>1461829
Всё сдохнет и даже ты.
Аноним 2019/08/27 11:23:56  №1461833 597
>>1461829
>как и перл он сдохнет
как и Java как и C как и С++ и любой другой язык программирования , дальше то что ?
Аноним 2019/08/27 11:28:11  №1461837 598
>>1461829
алсо в

>Платиновые вопросы
есть твой вопрос
> Почему PHP?
там есть ответ.
Аноним 2019/08/27 11:32:24  №1461842 599
>>1461837
так вы проф деграданты?
Аноним 2019/08/27 11:35:03  №1461844 600
>>1461814
>МОИ 20 строчек крутые, твои - нет
Демагог эз из.
Аноним 2019/08/27 11:36:40  №1461847 601
>>1461842
а как тебе такой ответ
echo "fusk yuo"
Аноним 2019/08/27 11:47:41  №1461853 602
>>1461817
>>1461844
Вы правда считаете утверждения "тестовое задание с использованием паттернов и бест-практик" и "тестовое задание со значимым объёмом кастомного кода" взаимоисключающими, да?
Ну и да, если уже начались придирки к словам, то я ухожу из треда, здесь не будет диалога. Если вам хочется делать как-то по-другому и вы не готовы признавать, что бывает и другое мнение - то пожалуйста, как угодно.
Аноним 2019/08/27 12:31:37  №1461873 603
>>1461853
анон не обращай внимания , верные же вещи пишешь
Аноним 2019/08/27 12:40:47  №1461879 604
>>1461461
Не понимаю чего они к тебе докопались. Все 3 опытных погроммиста с которыми я знаком, говорили мне примерно тоже самое:
- сделай пару мелких
- придумай и сделай большой проект
- начинай ходить по собесам

Аноним 2019/08/27 13:02:47  №1461889 605
>>1461853
Ты с тем шизиком общаешься, который своим нытьем, о том что ему все должны весь тред засрал. Не понял еще?
Аноним 2019/08/27 13:22:03  №1461899 606
Новый тред будет?
Аноним 2019/08/27 13:38:45  №1461914 607
>>1461899
Мы перекатываем в раене 800+ постов. Иначе много большая часть треда оффтоп и срачи. Осенью будет полегче.
Аноним 2019/08/27 14:19:00  №1461940 608
>>1461914
У школьников начнутся уроки просто, лол.
Аноним 2019/08/27 14:47:37  №1461954 609
есть ли чем заменить сраное PDO?
Аноним 2019/08/27 15:09:42  №1461970 610
Аноним 2019/08/27 15:53:49  №1462000 611
>>1461970
устарел,советуют пдо.
есть мож какая библиотека,которая нах между ПДО и монстрами типа доктрины и eloquent?
Аноним 2019/08/27 16:15:55  №1462032 612
>>1462000
Я бы не назвал eloquent монстром, можно свободно отдельно брать и подключать, работает стабильно, хотя и active record. Ещё есть всякие propel, phpixie, зендовские компоненты.. Но я бы всё-таки eloquent взял.
Аноним 2019/08/27 16:33:29  №1462053 613
>>1462032
а где взять его отдельно?
Аноним 2019/08/27 16:54:41  №1462060 614
>>1462053
composer require illuminate/database
Аноним 2019/08/27 16:56:52  №1462061 615
Аноним 2019/08/27 17:00:49  №1462063 616
>>1462061
Почитай про композер.
Аноним 2019/08/27 17:39:02  №1462089 617
Приветствую пыхарея, я загульный из C#. Т.к. в родном треде молчат, спрошу тут. Кто нибудь Trial на Azure деплоил? Трафик платный, я правильно понял?
Аноним 2019/08/27 20:19:18  №1462171 618
>>1461853
Ну ты и камрад чувак.
Аноним 2019/08/28 06:51:57  №1462327 619
Всем привет!
Надеюсь по адресу)
Есть таблица пользователя. (у нее есть расширенные данные в виде профиля)
Есть таблица профиля. (она в свою очередь может и не иметь пользователя)
В профиле есть "возраст", который может принимать 1 из 3х значений. (Для этого я выделил еще 1 табличку?)
В профиле есть "занятость" которая может иметь несколько вариантов из списка.

Собственно вопросы:
1) Как грамотно реализовать вышесказанное, есть ли смысл в отдельной таблице для возраста?
2) После того, как разобрались с представлением, у меня все равно есть вопросы по взаимосвязям в таблицах.(1-к-1? м-к-м??)
3)Да и вообще как это делается? Уникальный-не уникальный, Индекс-хуиндекс
Пик - как я это себе представляю.

Если с третьим пунктом гугл легко справится, то вот насчет первых двух прошу совета! А если не впадлу, можно и за за последний пояснить.
Аноним 2019/08/28 08:33:07  №1462408 620
>>1462327

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

Реализовано ка ку тебя. Также есть вариант не делать таблицу и использовать ENUM.

Другой пример 1-M -это пост и комментарии к нему. У одного поста может быть много комментариев, но не наоборот.

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

Другой пример M-N это теги и статьи. У статьи может быть много тегов, а тегу соответствует много статей.

Реализуется она через таблицу занятостей и связи (из колонок user_id, profession_id и составным первичным ключом по ним).

Пользователь - профиль это отношение один-к-одному. Оно реализуется как и 1-M, через внешний ключ, но с добавлением уникального индекса на внешний ключ (внешний ключ - это поле типа profile_id которое ссылается на другую таблицу).

Также, может быть тебе будет полезна статья про нормализацию, хотя она не очень простая: https://github.com/codedokode/pasta/blob/master/db/normalization.md


Аноним 2019/08/28 08:38:28  №1462411 621
Привет аноны. Посоветуйте что почитать на вот какую тему:
На работке мне нужно написать некий сервис отчетов, определенная выборка из нашей базы. То есть пользователь заходит под своей учеткой, и ему выдается список доступных ему отчетов. Один и тот же отчет может быть доступен всем пользователям.

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





Аноним 2019/08/28 08:40:46  №1462413 622
>>1462408
Вооу, спасибо большое!!
Сейчас подкреплюсь и пойду воплощать в дело тобою сказанное.
Еще раз спасибо!
Аноним 2019/08/28 08:45:02  №1462416 623
>>1461853
>и вы не готовы признавать, что бывает и другое мнение - то пожалуйста
весь дискас как раз и начался с того, что в тред залетел идиот-матершинник и стал оскорблять новичков, безапеляционно верещя "Я ЗНАЮ КАК НАДО, С ПЯТНАДЦАТИ ЛЕТ РАБОТАЛ А ВЫ ВСЕ ДЕРЬМО И ИНФАНТИЛЫ ВЫ МЕНЯ БЕСИТЕ". Ему тактично намекнули, что если не можешь помочь, а только ругаешь - то иди в другой тред
Аноним 2019/08/28 08:46:19  №1462417 624
>>1461940
ага ололо вот они лохи да не то што мы студенты первого курса
Аноним 2019/08/28 10:59:48  №1462541 625
Аноны, у меня на апаче самопальный пхп MVC-фреймворк.
Все это дело работает на http, как переехать на https?
1. Нужно убедиться что модуль отвечающий за https на сервере включен
2. Сделать редирект любого запроса по http на https в .htaccesse?
Все ?
Аноним 2019/08/28 12:19:02  №1462620 626
>>1462541
Тебе нужно подложить ssl-сертификат (если всё локально - то модно самоподписной) и сонфигать сервер, чтобы он через этот сертификат работал.
Редирект не обязателен, делают обычно для удобства, чтобы быть на 100% уверенными, что все юзеры ходят под https.
Аноним 2019/08/28 14:02:56  №1462691 627
Нашёл в исходниках опенкарта оператор ^ и не могу нагуглить что он делает.
Знает кто?
Аноним 2019/08/28 14:57:58  №1462719 628
Аноним 2019/08/28 17:44:51  №1462785 629
image.png (381, 471x604)
604x471
Аноним 2019/08/28 18:28:11  №1462815 630
Аноним 2019/08/29 09:14:08  №1463103 631
Аноним 2019/08/29 20:10:12  №1463542 632
Аноним 2019/08/30 16:09:30  №1464104 633
Аноны есть такой вопрос. Задача конвертировать текстовый файл в эксель. Реализовывать пытаюсь через csv файл дабы избежать использование spreadsheet библиотек. Так вот, при ее решении возникла проблема. Не получается разделить строку на 3 столбика. Дело идет в цикле...
$row = array();
$row[1] = trim(substr($data,0,7));\t
$row[2] = trim(substr($data,7,20));\t
$row[3] = trim(substr($data,27,25));

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

А после я просто переименую .csv в .xls получив экселевский файл
Аноним 2019/08/30 16:21:38  №1464115 634
Аноним 2019/08/30 17:02:13  №1464152 635
>>1464115
Ее тоже находил, но не совсем понял как она работает. В моем примере цикл в котором есть массив построчно делит каждую строку по 3 столбика символами. А в этом не понимаю как использовать.
Аноним 2019/08/30 19:55:29  №1464287 636
>>1464104
Это точно задача для php?
Аноним 2019/08/30 20:54:14  №1464328 637
>>1464287
Чому нет? Распарсить текстовый файл любой современный ЯП может.
Аноним 2019/08/30 21:39:44  №1464370 638
>>1464328
Не, на пыхе можно и десктоп писать, конечно. Но зачем?
Аноним 2019/08/30 21:57:04  №1464388 639
Аноним 2019/08/30 23:47:34  №1464424 640
Аноны, есть ли в php полноценная перегрузка функций? А то гуглил, и чё-т, если она и есть, то очень странная
Аноним 2019/08/31 05:02:11  №1464456 641
>>1464370
Причём тут десктоп? Речь шла о файле.
Да и кому нужен этот десктоп, если есть веб-приложения?
Аноним 2019/08/31 05:02:49  №1464457 642
Аноним 2019/08/31 05:29:36  №1464460 643
>>1464424
Нет и не нужна. Если у тебя у нескольких функций отличается сигнатура, то и назови их по-разному. Для создания объектов частенько применяют static конструкторы, это хорошая практика не только в PHP мире:
$money = Money::parse('$1,200.00')
$money = Money::USD(1200);

Примеры из Symfony:
- https://github.com/symfony/http-foundation/blob/master/Request.php#L283
- https://github.com/symfony/http-foundation/blob/master/Request.php#L313
Аноним 2019/08/31 07:08:57  №1464491 644
Ребята подскажите как в csv файл(открывается в экселе) положить массив во второй столбик?(B1,B2...) обычно все время кладет в столбик А.
Аноним 2019/08/31 09:24:55  №1464547 645
>>1464460
>нинужно
А вот это не факт. Хуже никому от этого не стало бы.
Аноним 2019/08/31 09:50:46  №1464570 646
>>1464547
Перегрузка методов и функций усложняет понимание кода, так как без IDE сложно понять какая версия метода вызывается - нужно сверять типы и сравнивать количество аргументов. Код не только через IDE смотрят - если ты делаешь код-ревью коллеге в гитлабе/гитхабе, то скорее всего будешь искать метод через Ctrl+F на странице и перегрузка будет мешать и отнимать время. Опиши реальную проблему. Есть подозрение, что ты решаешь её не с той стороны.
Аноним 2019/08/31 14:15:50  №1464724 647
>>1464491
а нельзя добавить перед твоим массивом B добавлять сначала массив A с пустыми значениями/пробелами? Или так коряво выйдет?
Аноним 2019/08/31 14:44:46  №1464752 648
Пыханы, вот у меня есть, например, доменный объект с кучей приватных свойств. Можно ли в конструктор передавать массив этих свойств или обязательно поимённо? Как принято делать в таких случаях?
Аноним 2019/08/31 14:59:10  №1464765 649
>>1464724
так коряво выйдет. Планировал по очереди записать информацию в столбики. Сначала первый ,потом второй, потом третий.
Аноним 2019/08/31 15:26:53  №1464788 650
image.png (11, 444x119)
119x444
image.png (33, 537x367)
367x537
image.png (47, 307x469)
469x307
Ребята которые в laravel умеют, помогите пожалуйста. Что это за переменная такая - $query. Где и когда она создается? В методе с использованием scope? А если имя метода без scope - переменная $query задана не будет? Разобрался, что она состоит из информации о sql запросе, где поле from задается по принципу "модель где определена переменная -> таблица этой модели в бд".

Наверное очень плохо обьяснил, да и вопрос нубский. Первый раз в такой тупик зашел.
Аноним 2019/08/31 17:42:05  №1464876 651
>>1464752
Массивы в PHP не типизируются, есть риск какой-то ключ забыть/опечататься, а потом долго искать причину ошибки в другом месте. Вместо кучи аргументов можно группировать данные в объекты, например вместо

$entity = new Entity($dateFrom, $dateTo, $country, $city, $street, $lat, $lan);

писать

$entity = new Entity(
new DateRange(new DateTime('now'), new DateTime('+30 days')),
new Address($country, $city, $street, new Location($lat, $lan)),
);

В БД это будет храниться в одной строке, Доктрина такое может через Embeddable: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/embeddables.html

Плюсы здесь в том, что у Value Object могут быть дополнительные методы, например $dateRange->isOverlapping($dateRange2)
Аноним 2019/08/31 18:45:28  №1464893 652
>>1464788
> это за переменная такая - $query.
Вангую, что строка запроса, которую билдер собирает.
Аноним 2019/08/31 20:57:21  №1464940 653
Что значит "знать" фреймворк. Знать ведь можно на разных уровнях. Нужно от и до все выучить, будто я сам его написал?
Аноним 2019/08/31 23:13:03  №1464970 654
>>1464788
Scope в ларавел это "магический" метод, подозреваю что работает как-то через __call() и scope{MethodName}, который ты можешь чейнить с кверибилдером. Например ты ищешь только публичные посты, вместо того чтобы делать Post::where('public', true)->get(), ты можешь сделать scopePublic(), НО для удобства вызывается этот скоуп просто как Post::public(). Переменная $query это и есть объект текущего билдера, к которому ты вызываешь этот скоуп. Сам билдер возвращается тыщей разных методов, with, where и т.п. У меня всегда были проблемы со слогом.
Аноним 2019/09/01 00:00:38  №1464980 655
>>1464970
Все более-менее понял. Спасибо за ответ!
Аноним 2019/09/01 05:38:45  №1465001 656
Анончики, какие плагины для sublime посоветуете поставить?
Аноним 2019/09/01 09:04:21  №1465069 657
15409879986510.png (185, 576x1024)
1024x576
Ура! Работает!

$thread = "https://2ch.hk/pr/res/1446969.html";

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $thread);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$data = curl_exec($curl);
preg_match_all("/c\/(.)\" class=\"post__image-link\"/", $data, $images);

preg_match('/hk\/(.
)\/r/', $thread, $board);
$board = $board[1];

foreach ($images[1] as $image) {
$image_small = preg_replace('/[^0-9\/]/', "", $image);
print "<a href='https://2ch.hk/$board/src/{$image}'><img src='https://2ch.hk/$board/thumb/{$image_small}s.jpg'></a>";
};
Аноним 2019/09/01 18:44:31  №1465439 658
>>1464940
То и значит, "знать фреймворк на уровне джуниора/миддла/сеньора".
Вообще, как правило, ожидается знание архитектуры, набора компонентов, используемых паттернов и наличие практических навыков работы с ними для решения хотя бы повседневных задач.
Аноним 2019/09/01 21:27:28  №1465498 659
>>1465439
https://badcode.ru/chto-nuzhno-znat-laravel-junior-proghrammistu/

Это нормальные требования для того же джуниора? Я просто недавно начал учить, то что в статье той написано кажется довольно простыми вещами.
Что аноны могут по поводу видео-курсов по 20+ часов сказать? То же создание блога с ларакаста, сайт обьявлений Елисеева. Может быть смотрел кто полностью?
Аноним 2019/09/02 02:06:48  №1465532 660
Аноним 2019/09/02 04:40:31  №1465547 661
YotsugiOnonoki.png (1429, 1920x1080)
1080x1920
>>1465001
A File Icon - чтоб иконки красивые были у файлов и zzz A File Icon zzz
AceJump - быстрое перемещение по коду
Alignment - массив выровнять чтоб приятно смотрелось либо группу объявления переменных
All Autocomplit - автодополнение в текущей вкладке со всех открытых вкладок
BracketHighlighter - подсветка парных скобок
DocBlockr - блоки для функций переменных и тд (ну вот кстати дисскасс имеет ли сейчас смысл писать в описании тип если ты его уже указал в самой функции? зачем дублировать)
Emmet - ну если ты вдруг фулстек или иногда приходится накалякать html+css
Laravel 5 artisan - можно звать команды прям из редактора. Но есть у тебя в проекте несколько микросервисов то поведение довольно рандомное.
Laravel Blade Highlighter - подсветка синтаксиса.
PHP Codebeutifier - приведение к стандарту стиля кода
PHP Companion - основная для меня фича: кликаешь ф5 и он дописывает декларацию класса есть и другие но не особо пользую
PHPUnitKit - удобрый запуск phpunit тестов но если работаешь чередз дохер то не работает и проще написать конфигурацию для билда
QNav - ну иногда когда не хочется alt-0
Requester - тестить апишку можно прям сценарии писать (так как можно обращаться к значениям предыдущего запроса) но зачем они такое ебанутое форматирование сделали для json я не понимаю - хочешь свернуть большой объект - хуй
SidebarEnhancements - дополнительные команды к файлам в основном удобно duplicte
SublimeLinter - основа для линтеров
SublimeLinter-php
SublimeLinter-phpcs
SublimeLinter-phpmd - отключен. он хороший но долго думает
SublimeLinter-phpins - подсветка когда забыл подключить класс или на русском написал букву "c" или забыл указать переменную что используешь
Аноним 2019/09/02 05:38:10  №1465577 662
Аноним 2019/09/02 09:40:09  №1465663 663
>>1465498
> Это нормальные требования для того же джуниора?
Всё зависит от конкретной компании. Не существует эталона требований для джуниора, какие-то компании нанимают совсем никаких студентов, другие ожидают от джуна опыт в несколько лет коммерческой разработки.
Лучше выбрать 2-3 компании, куда хотел бы попасть, посмотреть на их требования + нагуглить сотрудников этих компаний и выспросить с них ожидания от джунов. Тут не стоит стесняться, то, что ты так проактивно подходишь к трудоустройству - будет скорее дополнительным плюсом, потому что любая адекватная компания понимает, что первый условный год джун работает в лучшем случае в 0, потому что учится - и только потом начинает приносить в прибыль. Значит, если чувак сначала выяснил требования, потом потратил месяц на самообучение, потом пришёл на собеседования - значит, он ответственный и целеустремлённый и не сольётся через 6 месяцев, не оправдав вложений в его обучение.

> https://badcode.ru/chto-nuzhno-znat-laravel-junior-proghrammistu/
На мой вкус, данный список выглядит неплохо, лучше, чем 90% дерьмовых советов из интернетов.
Аноним 2019/09/02 10:48:59  №1465695 664
>>1465663
>и не сольётся через 6 месяцев, не оправдав вложений в его обучен