М.Двач / Программирование

Этого треда уже нет.
Это копия, сохраненная 27 сентября 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

Клуб изучающих PHP #111 /php/ 2 авг, 21:13 1446969 В конец треда | Веб

33 Кб, 500x500157 Кб, 1024x683194 Кб, 1024x768504 Кб, 1280x720

Привет. Тут мы изучаем язык 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? — Да, однозначно. Посмотри любую вакансию.

Ответы48142486144881349760503355035451759556476003660669628156791969095

Напоминание 2 2 авг, 21:18 2 1446971

56 Кб, 500x644202 Кб, 1024x768

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

Если тебе лень выравнивать код руками, закачай его на 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

Ответы60948

3 2 авг, 21:19 3 1446974

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

Ответы4706247810

4 2 авг, 23:08 4 1447062

>>1446974
Да хранят тебя и всех остальных аношек треда Небеса, вы заняты богоугодным делом

86 Кб, 499x281
5 3 авг, 17:50 5 1447478

Дублирую
Оп проверь, пожалуйста.
Вектор: https://ideone.com/pEHFGH

Ответы4747950054

6 3 авг, 17:52 6 1447479

>>1447478
>https://ideone.com/pEHFGH
Походу тня, хаха.

Ответы72468

7 4 авг, 09:10 7 1447798

Как в Laravel при валидации сделать так, чтобы следующее поле проверялось ТОЛЬКО ЕСЛИ предыдущее было провалидировано успешно?

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

Ответы478144782047821

8 4 авг, 10:31 8 1447810

>>1446974
Эта кружка кофе была за твое здоровье, анон.

9 4 авг, 10:39 9 1447814

>>1447798
Что за задачу ты решаешь? На первый взгляд подход не верный

Ответы47852

10 4 авг, 11:15 10 1447820

>>1447798
Одновременно это как? Можно пример валидаторов?

11 4 авг, 11:16 11 1447821

>>1447798
https://laravel.com/docs/5.8/validation#rule-bail

Ответы47854

12 4 авг, 12:33 12 1447852

>>1447814
>нинужно
Ну вот пошли мантры

Ответы48178

13 4 авг, 12:35 13 1447854

>>1447821
Хуеил. Это в рамках проверки ОДНОГО параметра запроса.
Если первое правило провалилось, остальные не проверяются.

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

Ответы4790147910

14 4 авг, 14:26 14 1447901

>>1447854
>первое ПРАВИЛО
>остановить выполнение правил проверки ввода для атрибута после первой ОШИБКИ

15 4 авг, 14:36 15 1447910

>>1447854
Анон ты тупой?
if (если валидация предыдущего ПАРАМЕТРА провалилась) {
текущий проверяться вообще не будет
};

Ответы47921

16 4 авг, 14:57 16 1447921

>>1447910
Так и сделал, по сути несколько валидаторов. Но это васянщина пиздец.

Ответы4793447982

17 4 авг, 15:16 17 1447934

>>1447921
А зачем тебе так нужно сделать вообще?

Ответы4797048071

18 4 авг, 16:23 18 1447970

>>1447934
>А зачем тебе так нужно сделать вообще?
Ну как же, это ведь ЭКОНОМИЯ ПАМЯТИ ДЖУНИОР ПРИШЕЛ УСТРАИВАТЬСЯ НЕ СМОГ ПОМЕНЯТЬ ДВЕ ПЕРЕМЕННЫЕ БЕЗ ТРЕТЬЕЙ ПОВЕСИЛИ В ДВЕРНОМ ПРОХОДЕ ЭКОНОМИМ НА ПАМЯТИ УБИВАЕМ ЗА ЛИШНИЙ IF НА РАБОТЕ ОБЩАЕМСЯ ПОЛУ-СЛОВАМИ СРЕМ В ОДНО ВЕДРО В ЦЕНТРЕ КОМНАТЫ ЧТОБЫ ОПТИМИЗИРОВАТЬ ПОХОДЫ ПО ТУАЛЕТАМ ПРИВЯЗАЛ К ЛОКТЮ ШВАБРУ - ВПЕРЕД - ПЕЧАТАЮ КОД, НАЗАД - ВКЛЮЧАЮ КОФЕ-МАШИНУ ЗА СПИНОЙ ЭКОНОМИЯ МЫШЕЧНОЙ АКТИВНОСТИ 2% ВСЕ ОПТИМИЗИРУЕМ ЧТО МОЖНО ОТРЕЗАЕМ СОТРУДНИКОВ ПО ПОЯС ЧТОБЫ СЫКАНОМИТЬ НА ШТАНАХ РЯЯЯ МЫ СМАЯ АПТИМАЛЬНАЯ КОНТОРА В ВОРОНЕЖЕ

Ответы4798148341

19 4 авг, 16:52 19 1447981

>>1447970
Истерика на ровном месте. Отлично.

20 4 авг, 16:53 20 1447982

>>1447921
Твоя идея изначально это васянщина.

Ответы48072

267 Кб, 500x337
someApprentice !EaaiHmIJms 21 4 авг, 18:29 21 1448031

Я опять нечаянно запостил в закрытый тред >>1447890 >>1447897

4 Кб, 349x119
22 4 авг, 19:50 22 1448064

Есть один проект который отлично работал на моем сервере Apache который я сам смастерил. Когда я сую свой проект в OpenServer, получаю 404. Хуйня в том, что я получаю ответ на /, но когда я хочу например перейти в /categories, он шлет меня. Что делать? Куда копать? Проект на laravel, и папку /public в доменах я прописал.

Ответы48203

23 4 авг, 20:26 23 1448071

>>1447934
В поле1 указывается токен от соц-сети, но он может быть хуевым.
С помощью этого токена делается запрос в соц-сеть, чтобы проверить поле2.

Поле2 не имеет смысла проверять, если токен в поле1 говно

Ответы48163

24 4 авг, 20:26 24 1448072

>>1447982
Да попизди мне тут еще, получше тебя знаю

25 4 авг, 20:29 25 1448075

Пиздец нахуй пятый год в погромировании, тут какой-то ебанько на форуме в 256000-й раз кукарекает: ДА ЭТ НЕВОЗМОЖНО, ЭТ НИНУЖНО И ВООБЩЕ КОД ПОЛНАЯ ХУИТА))))0) КЕК))

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

Ответы481804834248453

5 Кб, 582x280
26 4 авг, 20:51 26 1448092

Будьте осторожны с циклами, пилоты.

27 4 авг, 22:06 27 1448142

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

Ответы48181

28 4 авг, 22:26 28 1448163

>>1448071
у валидатора есть метод sometimes

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

так же у валидатора есть метод after, и то и другое можно вызывать в withValidator в FormRequest например, короче я к тому что способов сделать как тебе надо много, это будет канеш не так K P A C U B O но это похуй

29 4 авг, 22:54 29 1448178

>>1447852
Ты расскажи нормально что за задача

30 4 авг, 22:55 30 1448180

>>1448075
>Пиздец нахуй пятый год в погромировании
я тоже пять лет со скейтерами из двора тусовался и думал что я типа продвинутый и могу оли-оли крутить

31 4 авг, 22:57 31 1448181

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

32 4 авг, 23:28 32 1448203

>>1448064
Проверь mod_rewrite, если apache на openсервере используешь

33 5 авг, 11:36 33 1448341

>>1447970
Бизнесу насрать на экономию памяти - ему важнее скорость разработки и стоимость поддержки. А вот если васянить постоянно, то именно эти два фактора страдают.

Наблюдение такое.

Ответы48464

34 5 авг, 11:41 34 1448342

>>1448075
>пятый год в погромировании
Лол. И что? Все 5 лет говнокодил и вдруг мастером стал?

35 5 авг, 15:48 35 1448453

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

Ответы48462

36 5 авг, 15:56 36 1448462

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

37 5 авг, 16:00 37 1448464

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

38 5 авг, 19:02 38 1448540

Ковыряюсь тут с шаблонами для БД.
У меня есть соединение на одной библиотеке NotORM и я на её основе хочу сделать Data Mapper. И у меня такой вопрос - мне этот маппер биндить в зависимости или просто вызывать в контроллере, передав ему соединение?

Ответы48559

39 5 авг, 19:51 39 1448559

>>1448540
>мне этот маппер биндить в зависимости
Я бы сбиндил. Он же наверняка и в других контроллерах мелькнет?

Ответы48563

40 5 авг, 19:53 40 1448563

>>1448559
Да наверняка мелькнёт. В той же админке должен ещё быть.

41 5 авг, 22:11 41 1448614

>>1446969 (OP)
OP проверь пожалуйста.
https://github.com/asdasdasdasddasasdasdas/StudentList

42 6 авг, 11:32 42 1448812

Аношки, тоже взялся за студентов, как анины выше, но пока читаю условие и обдумываю. Возник вопрос:
>Список абитуриентов — выводит имя, фамилию, номер группы, число баллов. Выводятся по 50 человек на страницу, сортировка по любому полю делается кликом на заголовок колонки таблицы
а как вообще это реализуется? Мне это делать джаваСкриптом/джиКверри, типа перестраивать ячейки таблицы по клику, или силами пшп-скрипта - по клику отправлять новую ссылку на эту же страницу с новыми параметрами сортировки и перезагружать результат?
Как обычно это делается? Я с аяксом пока не очень знаком

Ответы4882348828

18 Кб, 437x431
43 6 авг, 11:32 43 1448813

>>1446969 (OP)
Cап, анусы. Значит пытаюсь тут запилить себе учебно-портфольный проект и завис на таком моменте - по легенде мне надо сделать простой сайт на php + sql, с регистрацией, логином и сессией, что я уже сделал, но теперь самое важное - как дать возможность залогиненному болванчику загружать изображения на сервер и желательно, чтобы он еще видел только свои хотя уже не суть. Простой аплоад с галереей уж делал без привязки, но тут прям завис в ступоре уже третий час. Хочется уже дропнуть и просто воткнуть на залогиненную страницу форму с аплоадом и кидать картинки так.
инб4 приходи через год

Ответы488174921558346

44 6 авг, 11:41 44 1448817

>>1448813
Создай ещё одну таблицу с полями ид картинки и ид соответствующего пользователя. Потом выгружай оттуда все картинки конкретного пользователя.

Ответы49215

45 6 авг, 11:53 45 1448823

>>1448812
На этом задании джаваскрипт вообще не нужен. Только вёрстка и бэкенд. Сортировка делается по ссылке.
Просто посмотри как у других сделано.

Ответы48826

46 6 авг, 12:08 46 1448826

>>1448823
>Сортировка делается по ссылке
Понял, спасибо

47 6 авг, 12:11 47 1448828

>>1448812

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

Еще можно поискать в архиве по словам "ссылка сортировка", может что-то полезное найдешь? https://phpclub.tech/search/?q=ссылка+сортировка

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

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

Ответы48829

48 6 авг, 12:12 48 1448829

>>1448828
Спасибо, попробую разобраться

49 6 авг, 15:48 49 1448932

Котаны, подскажите. Не понимаю как сверять хеши с рандомной солью с тем паролем что вводит пользователь.
Без использования функций пхп.
Например:
Пользователь регистрируется и вводит пароль - "pass"
Я хеширую его - хэш("pass") и склеиваю с некоей уникальной каждый раз рандомной строкой random(str)
И все это пишу в базу - хэш("pass").random(str)

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

Ответы49022

50 6 авг, 17:51 50 1449022

>>1448932
Соль в бд сохраняй и все

77 Кб, 1200x1021
51 6 авг, 19:39 51 1449075

Может у кого есть идеи для php проекта?

Ответы4908549131494984952649568

52 6 авг, 19:56 52 1449085

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

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

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

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

Ответы490894910149172

53 6 авг, 20:01 53 1449089

>>1449085
А ты меткий

Ответы49090

54 6 авг, 20:04 54 1449090

>>1449089
Не говори:(

55 6 авг, 20:26 55 1449101

>>1449085
из мануала:

password_hash()

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

56 6 авг, 21:20 56 1449131

>>1449075
У меня есть парочка. Но я не скажу.

57 6 авг, 23:38 57 1449172

>>1449085

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

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

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

58 7 авг, 04:21 58 1449215

26 Кб, 934x9125 Кб, 479x15750 Кб, 693x36932 Кб, 1052x307

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

Ответы492524926349318

59 7 авг, 08:11 59 1449252

>>1449215
а почему не PDO?

Ответы49258

60 7 авг, 08:34 60 1449258

>>1449252
У меня был опыт общения, еще плоховато понимаю. А вообще уже все переписал и теперь все удаляется. Магия - стоит сюда написать, как все само собой решается.

Ответы49263

61 7 авг, 08:44 61 1449263

>>1449215
>код
Я будто помолодел на 15 лет.
>>1449258
>стоит сюда написать, как все само собой решается
https://en.wikipedia.org/wiki/Rubber_duck_debugging

62 7 авг, 11:33 62 1449318

>>1449215
>Теперь надо разобраться с удалением - оно не работает
Анон, есть хороший способ проверять запрос на работоспособность - просто берешь и выполняешь его в phpмайадмине. Тупо копируешь запрос из кода и вставляешь в поле/вкладку "запрос" пшпмайадмина. Если ошибка в запросе, то майадмин сразу тебе это напишет. Так ты хотя бы будешь знать где проблема - в коде пшп или в коде sql

Ответы4933949381

63 7 авг, 12:29 63 1449339

>>1449318
>Тупо копируешь запрос из кода
Лучше включить логирование запросов в mysql и брать из лога. Особенно если пользуешься каким-нибудь фреймворком который запрос сам формирует.

64 7 авг, 14:36 64 1449381

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

65 7 авг, 18:55 65 1449478

Пытаюсь написать бота для вайбера на пхп.
Есть библиотка https://github.com/Bogdaan/viber-bot-php
Если просто использовать её по инструкции, то всё работает: клиент пишет в вайбер сообщение, оно парсится ботом и если есть совпадение, то выдаётся стандартный ответ. А мне нужно, чтобы этот процесс разился на две фазы: приём сообщения из вайбера и отправка сообщения в вайбер. И чтобы и то и то были простыми функциями. С приёмом проблем нет, просто разбираем, что там пришло в webhook. А вот отправку я не понимаю, как сделать. Я засунул это всё в метод, метод в класс, но ничего не работает. И не пишет никаких ошибок, просто умирает, как только достигает команды $botSender = new Sender .
Честно говоря, я запутался в этих методах, вызовах, пространствах имён и прочем ооп. Посмотрите пожалуйста на код, что именно я там организовал не так? И как ловить и отлаживать такие ошибки? Даже когда я оборачиваю всё (вообще всё) в try, никаких эксепшенов не ловится.

https://pastebin.com/bMxDPt0y

Ответы49503

66 7 авг, 19:31 66 1449498

>>1449075
Можешь зарегатьться на ютубе и вести блок обучающий пхп

67 7 авг, 19:37 67 1449503

>>1449478
Уточнение: я таки отловил ошибку Class 'Viber\Api\Sender' not found, но WTF? При подключении иде не ругается, значит видит этот класс. А если убрать use Viber\Api\Sender; или подключать левый класс Sender2, то сразу предупреждает, что такого нет. А на сервере не работает.

Ответы49527

68 7 авг, 19:57 68 1449526

>>1449075
Создай бота который будет скачивать видео из webm тредов и переделывать их под void. А затем автоматически постить пока капча не заебет.

69 7 авг, 20:00 69 1449527

>>1449503
На сервер библиотеку-то закинул?

Ответы49538

70 7 авг, 20:38 70 1449538

>>1449527
Закинул. Если просто сделать, как в примере и расположить этот код в webhook, на который приходит сообщение из вайбера, то всё отлично работает.

71 7 авг, 22:24 71 1449568

>>1449075
Есть уже живущий проект - архив PHP тредов по годам: https://phpclub.tech/
У него открытый код и есть issues, которые любой желающий может попытаться исправить: https://github.com/richBlueElephant/phpClub/issues

Отлично если работали с поисковым движком Sphinx, там 3 задачи только по нему одному.

Ответы59021

25 Кб, 477x188
72 8 авг, 02:19 72 1449619

Боже, какую же хуйню приходится писать, чтобы типы работали как надо.

Ответы4999150440

73 8 авг, 03:28 73 1449622

У меня встал вопрос. Пробую использовать slim 4 для апи. Отправляю response json, и зачем-то отправляется favicon. Может это зависит от метода get, post? Проблема в том, что Vue не читает ответ запроса, в то время как с других api успешно получает данные. Как запретить передачу favicon.ico?)

Ответы49855

74 8 авг, 03:53 74 1449623

zxcccc

75 8 авг, 09:59 75 1449683

Зачем нужны пространства имен?

Ответы50109

310 Кб, 512x512
76 8 авг, 12:50 76 1449760

>>1446969 (OP)
Сап котаны. Закончил шарагу, проходил практику в ВУЗе там изучил Symfony и сделал проект на нем. Не потому что хотел, а потому что это в программе практики у них было.

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

Город ДС2

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

Если интересен мой проект: http://relevantsearch.ru/

Ответы4976549824

310 Кб, 512x512
77 8 авг, 12:56 77 1449765

>>1449760
Алсо реквестирую специалиста Symfony знакомого с компонентом Messenger. Воркеры создаются, но асинхронность не работает.

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

Кароче доработка проекта встала только из-за этого. Пробовал еще с другими бандлами поддерживающими очередь работать, но вечно лажа происходила.

Ответы4977350431

78 8 авг, 13:29 78 1449773

>>1449765
Так объяснишь зачем нужны пространства имен?

Ответы49821498225001050435

79 8 авг, 14:52 79 1449821

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

Ответы49822

80 8 авг, 14:52 80 1449822

>>1449821
>>1449773
мимо другой анон

81 8 авг, 14:56 81 1449824

>>1449760
в рф как и в всём пост совке (СНГ) весма мало продуктовых контор , потому симфони не нужно , а для средне малых подделок хорошо заходят RAD фреймы типа лары , потому их и юзают , так что да в неё вкатываться есть смысл

Ответы49840

82 8 авг, 15:20 82 1449840

>>1449824
Ща звонили с собеседования про битрикс и Yii2. Что расскажешь по поводу него? Какие подводные?

Ответы4987450016

83 8 авг, 15:35 83 1449855

>>1449622
Решил проблему добавлением такого заголовка: header("Access-Control-Allow-Origin: *");

Ответы49876

84 8 авг, 16:36 84 1449874

>>1449840
>про битрикс
даже если будешь с голоду умирать даже не думай , прям вот совсем , лучше уже сдохнуть.
>Yii2
не плох как RAD фрейм , но монолитен прям от слова совсем , хорошо генерит код ля админок всяких (так нормальной альтернативы для лары и не нашёл) , довольно популярен в СНГ (скорее всего и только тут) , можно стартануть на нём.

85 8 авг, 16:37 85 1449876

>>1449855
осталось теперь почитать про CORS , и узнать чтож за заголовок такой магический

Ответы49881

86 8 авг, 16:44 86 1449881

>>1449876
Поиск проблемы был максимально непонятным. Как написано на вики - "браузер поддерживающий технологию CORS, передаст ошибку вместо данных." Chrome - выдавал ошибку, просто ошибку на этот запрос. Firefox - дал ответ с кодом 200.

Ответы49910

87 8 авг, 16:45 87 1449882

Что нужно знать для бэкэнд разработки?

Ответы49884

88 8 авг, 16:46 88 1449884

>>1449882
извиняюсь и иду нахуй, если в шапке всё написано

89 8 авг, 17:23 89 1449910

>>1449881
вполне реально ибо у них разные двежки очевидно правила CORS по умолчанию по разному ставят

Ответы49926

90 8 авг, 17:56 90 1449926

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

91 8 авг, 19:47 91 1449991

>>1449619
Ты шо ебанутый?

Ответы50005

92 8 авг, 20:00 92 1450005

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

93 8 авг, 20:02 93 1450010

>>1449773
В передыдущем треде пережёвывали - посмотри архив.

94 8 авг, 20:04 94 1450016

>>1449840
>битрикс
Легаси и костыли от 1С.

95 8 авг, 20:34 95 1450048

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

>>1445583

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

>>1445953

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

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

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

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

>>1446336

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

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

- описываем контроллер и его зависимости в контейнере
- не описываем контролллер в контейнере, но передаем ему контейнер в конструктор или метод. И уже там берем из контейнера нужные нам классы

95 8 авг, 20:34 95 1450048

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

>>1445583

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

>>1445953

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

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

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

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

>>1446336

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

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

- описываем контроллер и его зависимости в контейнере
- не описываем контролллер в контейнере, но передаем ему контейнер в конструктор или метод. И уже там берем из контейнера нужные нам классы

Показать весь текст

96 8 авг, 20:37 96 1450051

Ответы на вопросы из прошлого треда (тред есть в архиве и тут: 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-файлов. Есть несколько вариантов:

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

96 8 авг, 20:37 96 1450051

Ответы на вопросы из прошлого треда (тред есть в архиве и тут: 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-файлов. Есть несколько вариантов:

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

Показать весь текст

97 8 авг, 20:37 97 1450054

>>1446666
>>1447478

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

>private function setRateWithRank(){
> if ($this->rank == 2) {
> $this->rate = $this->rate * 1.25;
> }

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

> private function setBossPrivelege(){

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

> foreach ($this->employees as list($num, $position)) {

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

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

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

98 8 авг, 20:38 98 1450056

>>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": "alRjiiceANUSeBqCxamplePUNCTUMc1UOom"}
...

То есть убрать из теста 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);

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

98 8 авг, 20:38 98 1450056

>>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": "alRjiiceANUSeBqCxamplePUNCTUMc1UOom"}
...

То есть убрать из теста 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);

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

Показать весь текст
Ответы61363

99 8 авг, 20:39 99 1450060

>>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 с каждым процессом связана "текущая" директория.

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

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

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

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

99 8 авг, 20:39 99 1450060

>>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 с каждым процессом связана "текущая" директория.

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

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

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

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

Показать весь текст

100 8 авг, 21:40 100 1450109

>>1449683
Чтобы изолировать код, который в него входит, от другого кода.

101 8 авг, 22:25 101 1450129

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

Ответы5016750169

102 8 авг, 23:05 102 1450167

>>1450129
Смотри на вакансии в своем миллионнике.

Ответы50176

103 8 авг, 23:10 103 1450169

>>1450129
Как же хорошо, что я вовремя одумался и не покатился в пиздон наслушавшись советов с двача

104 8 авг, 23:43 104 1450176

>>1450167
Да я уже посмотрел вакансии, требования уровня php/js/sql/html/css, знаю все кроме пхп, вот и спрашиваю за сколько можно дойти до уровня, что могу работать.и вакансий в 10 раз больше чем на питониста

Ответы50503

105 8 авг, 23:56 105 1450180

Дошли руки с докером разобраться. Какаяже годнота скажу я вам

Ответы50247

106 9 авг, 09:19 106 1450247

>>1450180
Скажи мне скажи мне
в чем годнота?
Ладно если у тебя контейнер - весь проект - Изи - но я так же могу и в xampp сунуть его и не пизди мне что у тебя клиент по сто раз на дню меняет окружение. Это редкость редкая когда тебе надо скакать между на столько рознящимися окружениями

Ответы5030650346

107 9 авг, 10:46 107 1450306

>>1450247
Я не тот анон, но суть же не столько в вопросе смены окружения, сколько в лёгкости деплоя (используя Swarm или Kubernetes). Представь, что ты собрал какой-то проект у себя на сервере, и теперь тебе его нужно перенести на сервер заказчика. Без контейнеров тебе придётся поднимать сервер дважды - у себя и у него. А так - просто воткнул контейнер и всё сразу работает.

Ответы50377

108 9 авг, 11:33 108 1450335

>>1446969 (OP)
1) ЕОБ (есть одна борда), в процессе написания. Пользователь может загружать файлы картинок. Обработчик формы присваивает имена файлам с помощью microtime() или time() (какую функцию выбрать кстати?). Эти значения будут уникальными? Что будет, если два или более пользователя одновременно запостят картинки? Не существует шанса распидорасить сервер?

2) Есть исходные коды блога и форума, и два sql-файла к ним. Как правильно объединить базы для одного сайта? Слить sql-файлы в один (и это будет одна база, имена таблиц у блога и форума не совпадают), или подключаться одновременно к двум разным базам (это нормально?)? Как делают опытные люди?

Ответы5034350444

109 9 авг, 11:42 109 1450343

>>1450335
>1
У тебя же есть посты с айдишниками - вот и прикрепляй к ним эти картинки.

>2
Неебу. Может миграции помогут.

Ответы50348

110 9 авг, 11:48 110 1450346

>>1450247
Я только разобрался и поэтому не юзал. Но по опыту было не раз например так: мне дается сервер, на котором стоит сайт писаный под пыху 7.0. Повышать ее версию мне нельзя, но в тоже время имеется мой бот, написанный на 7.3. Обычно перепиливал бота под 7.0, сейчас бы мог использовать докер.

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

111 9 авг, 11:53 111 1450348

>>1450343
Прикрепляю. Но мой вопрос про имена файлов. Вот как тут:
https://2ch.hk/pr/src/1446969/15647696144140.png (М)
microtime() или time() генерируют уникальные значения при использовании в обработчике формы?

Ответы5035750359

1,1 Мб, 944x708
112 9 авг, 11:59 112 1450354

>>1446969 (OP)
есть скрипт который должен мне на почту через форму письмо отправлять
а он ничего не отправляет
даже в спам
https://ideone.com/RLlKiz

Ответы50360

113 9 авг, 12:04 113 1450357

>>1450348
Как вариант делать хэш из микротайма и айдишника поста - коллизии будут минимальны.

114 9 авг, 12:08 114 1450359

>>1450348
К тому же никто не мешает те же айдишники и к файлам делать, которые с автоинкрементом. И не городить огород.

115 9 авг, 12:12 115 1450360

>>1450354
>// Email address verification, do not edit.
function isEmail($email) {
return(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) для таких вещей.

116 9 авг, 12:28 116 1450377

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

117 9 авг, 13:15 117 1450431

>>1449765

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

Ответы50864

118 9 авг, 13:17 118 1450435

>>1449773

Есть урок про пространства имен и автозагрузку: https://github.com/codedokode/pasta/blob/master/php/autoload.md

119 9 авг, 13:18 119 1450440

>>1449619

Не сталкивался с такой проблемой. Увы, кроме кода, никаких пояснений ты не дал.

120 9 авг, 13:21 120 1450444

>>1450335

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

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

121 9 авг, 15:08 121 1450503

>>1450176
Зависит от целого ряда факторов, в первую очередь от умения пиздеть с умным видом и быстро как понос учиться.
Голый ПХП на самом деле нужен либо совсем ньюфагам, которым важнее на данном этапе пощелкать, как работает веб, либо матерым олдфагам пишущим какую-нибудь экзотику.
Реально все работают на фреймфорках-CMS. И у каждого фреймворка есть своя логика, в рамках которой и следует ебашить. Поищи, знания каких фреймворков требуются у тебя. Это у питона по факту один Джанго, у пыха цветущих и пахнущих (в разных смыслах) штук 20. Один из вариантов - сделать за неделю задачу со студентами и устроиться стажером за еду, уча то, что используется в конторе.
Главный совет - избегай БИТРИКСА. Он сука популярен в рашке и его использует куча студий. Данная хуйня представляет из себя достаточно мощный, но извращенный как половая ориентация Слаанеш фреймворк/CMS, который не научит тебя ничему хорошему. Связывайся, только если альтернативы ну совсем нет а жрат хочется.

Ответы5051150602

122 9 авг, 15:20 122 1450511

>>1450503
А вот смотри, такой пример.
Я знаю все основы языка, включая ООП, понимаю, как работать с базами данных, умею писать базовые запросы и составлять структуру БД. Но при этом у меня совершенно нет опыта в создании каких-то рабочих проектов на пыхе, потому что, как ты и говоришь, я всегда пилил все на CMS/CMF (преимущественно MODX). Но сейчас я хочу свои навыки поднять на рыночный уровень, чтобы найти нормальную работу, возможно даже завести трактор в перспективе. Нужно ли мне для этого пробовать реализовывать какие-то либо проекты на чистой пыхе, так сказать, для опыта и набивания скиллов? Или сразу сосредоточиться на каком-нибудь Ларавеле, попутно восполняя пробелы в знании самого языка?

Ответы50521

123 9 авг, 15:34 123 1450521

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

Ответы50711

124 9 авг, 19:48 124 1450602

>>1450503
Спасибо за ответ, сейчас проштудировал вакансии, в одних нужен ларавел, в других yii в третьих битрикс, в четвертых еще какие-то но самые популярные первые 2, битрикс я так понял сразу отпадает и что тогда учить лучше laravel или yii?

Ответы50628

125 9 авг, 20:40 125 1450628

>>1450602
laravel. он сейчас самый популярный.
По нему советовали "Дмитрий Елисеев Сайт объявлений на Laravel". Сам не проверял, там 70 часов видео.

Ответы50682

126 9 авг, 22:59 126 1450682

>>1450628
И от того же Елисеева есть интернет магазин на yii2, у него можешь еще и симфони посмотреть =)

127 9 авг, 23:55 127 1450710

Что лучше использовать: наследование или декоратор с инъекцией?

128 9 авг, 23:57 128 1450711

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

129 10 авг, 11:30 129 1450808

>2019
>просить совета у двача

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

Ответы5082951449

130 10 авг, 12:15 130 1450829

>>1450808
Они одинаковые все по-большому счёту. Можешь ещё на облачные платформы посмотреть.

32 Кб, 586x409
131 10 авг, 13:44 131 1450864

>>1450431
Разрабатывал используя OPEN SERVER докер не преподавали.
На хостинге используется юбунта 16.04 и LAMP.
Устанавливал composer require messenger
В качестве шины была Doctrine MESSENGER_TRANSPORT_DSN=doctrine://default
Все настройки выставил по дефолту как в документации.
При попытке запустить воркера командой php bin/console messenger:consume async -vv

Ответы50867

132 10 авг, 13:50 132 1450867

>>1450864
Не дописал:
Нихуя не работает, то одна ошибка вылетает, то другая. Почему другая? Потому что умники на гитхабе посоветовали редактрировать сам компонент. В итоге одну ошибку исправил, сразу появлялась другая. В конечном итоге проблема с сериалайзером была. Он почему то не работал. И вот я оказался тут.

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

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

15 Кб, 428x424
133 10 авг, 17:26 133 1450950

Тест на PHP-IQ
Хочу вам вкинуть задачку и посмотреть, как быстро аноны додумаются до того, до чего я додумался за 1 час.
Как только прозвучит решение, до которого я дошел, или же близкое к нему - я сообщу, как сделал я.
Чисто для интереса, может я гораздо более тупой, чем думаю я до этого додумаются все за 5 мин или вовсе предложат лучшее, чем у меня.
Если будете постить решения хуже, чем у меня - я скажу, в чем минусы каждого решения.

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

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

Ответы5095350972

134 10 авг, 17:32 134 1450953

>>1450950
Код никакой не нужен, просто описать словами, как бы вы что сделали

135 10 авг, 18:06 135 1450972

>>1450950
Лень долго думать (к тому же ты не описал возможную структуру задач).
В БД хранятся: строчка, описывающая задание (это может быть хоть eval код хоть ссылка на php скрипт), галочка выполнено/нет и время следующего выполнения.
Отдельный процесс (самое простое - крон) обходит базу, выбирает процессы, которые необходимо выполнить, и отрабатывает их. Самое простое - обходить их в цикле, если проблемы со скоростью - заводить подпроцессы на отдельные задачи (или группировать по 10 штук в процессе).

Ответы50999

136 10 авг, 18:36 136 1450999

>>1450972
>время следующего выполнения
Бинго, ты понял самое главное. Надо хранить время следующего запуска.

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

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

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

18 Кб, 605x306
137 11 авг, 14:20 137 1451347

Не понял.
Эта установка только для Linux? На Windows никак не поставить?

Ответы51371

138 11 авг, 14:59 138 1451371

>>1451347

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

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

- php, composer под виндой работают
- cp - команда копирования, можно скопировать файл вручную через Проводник или командой copy, если ты предпочитаешь командную строку
- что касается make - эта команда выполняет команды, записанные в файле Makefile (почитать на русском про команду make можно тут: https://www.google.com/search?client=firefox-b-d&q=описание+команды+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

------

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

138 11 авг, 14:59 138 1451371

>>1451347

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

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

- php, composer под виндой работают
- cp - команда копирования, можно скопировать файл вручную через Проводник или командой copy, если ты предпочитаешь командную строку
- что касается make - эта команда выполняет команды, записанные в файле Makefile (почитать на русском про команду make можно тут: https://www.google.com/search?client=firefox-b-d&q=описание+команды+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

------

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

Показать весь текст
Ответы5144851449

139 11 авг, 17:01 139 1451448

>>1451371
Я лучше сдохну в мучениях чему буду пытаться запустить Makefile на Windows. Спасибо за ответ.

Ответы51449

140 11 авг, 17:05 140 1451449

>>1451371
Спасибо, поправил URL репозитория (хотя гитхаб умеет редиректить со старого URL на новый). Добавил в README больше словесных описаний, объясняющих что делают консольные команды. К сожалению, нет возможности проверить как проект работает под виндой.

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

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

25 Кб, 300x300
141 12 авг, 03:26 141 1451759

>>1446969 (OP)
Подскажите ньюфагу, где можно почитать или посмотреть на проект, идеально было бы пхп-sql-js, где реализовано разделение юзеров на разные сессии и аккаунты, т.е каждый работает в своем аккаунте и сессии. Если там еще будет crud, то я помру от счастья.

Ответы5176951955

142 12 авг, 07:50 142 1451769

>>1451759
https://github.com/yiisoft/yii2-app-advanced

Ответы51770

143 12 авг, 07:55 143 1451770

>>1451769
Спасибо, но я еще во фреймворках понимаю чуть более, чем нихуя. Насколько по сравнению с ванильным пхп там сложнее восприятие кода?

Ответы51771

144 12 авг, 08:03 144 1451771

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

Ответы51774

145 12 авг, 08:21 145 1451774

>>1451771
>если если разобраться как сделано то все хуево, нужно разгребти кучи магии
Зис, к сожалению. Гуглить\копипастить типовые решения я уже хорошо научился и так, но мой вкат сейчас застопорился именно на понимании работы в глубину процесса. Блядь, дошел до стадии, когда надо либо на практике учиться, либо искать наставника, но на работу не берут никуда, требований какой-то вагон, ну а наставники сами уже все заебались.

Ответы51777

146 12 авг, 08:44 146 1451777

>>1451774
Ну если у тебя есть время, то самый простой способ: ставить себе задачу вроде той, что ты обрисовал, и садиться ее реализовывать. То, что непонятно - гуглишь, и потихоньку по кирпичикам собираешь решение своей задачи и получаешь знания.
Когда я начинал, я умел только верстать и натягивать верстку на MODX - там пэхэпэ вообще не нужен для базовых задач. А потом однажды получил заказ на кастомное решение, и сел писать, при том, что из PHP знал только echo(). В общем, когда я эту задачу решил, я уже знал все основы языка. После ещё нескольких таких задач я разобрался достаточно для того, чтобы сесть за документацию и изучить все нормально.

147 12 авг, 11:49 147 1451841

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

Ответы51915

148 12 авг, 12:23 148 1451878

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

Ответы51884

149 12 авг, 12:32 149 1451884

>>1451878
Раз у тебя есть хостинг не проще ли туда задеплоить проект свой через админку или ssh? Гит это не про то, что тобой описано.

Ответы51891

150 12 авг, 12:41 150 1451891

>>1451884
Я не совсем понимаю конечную процедуру. Вот я доделал проект на локальном комьютере. Раньше я думал, что теперь мне надо сделать клон через гит и отправить его на сервер. Выходит, тут гит мне не поможет, и все тупо копировать вручную? А гит - это просто аз изменениями следить?

Ответы51895

151 12 авг, 12:52 151 1451895

>>1451891
https://www.youtube.com/watch?v=qGYNbrT9P6Y
Вот, я кажется понял, что ты хотел. Но и про деплой на хостинги посмотри отделано и изучи.

Ответы51897

152 12 авг, 12:56 152 1451897

>>1451895
Большое спасибо, анончик

153 12 авг, 13:28 153 1451915

>>1451841
Тебе понадобилось новое поле в таблице, ты написал в коде вывод этого поля во вьюхе (например) и написал миграцию с добавлением этого поля. Закомитил и отправил в репозиторий. Скрипт делоя увидел новый коммит спулил его и запустил миграцию. Конец истории.

Ответы5194052237

154 12 авг, 14:35 154 1451940

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

Ответы51949

155 12 авг, 15:11 155 1451949

>>1451940
Логически - да в файле миграций.
Пример: Ты ведешь разработку с кем то в команде, у каждого своя локальная база соответственно. Ты решил привнести свое сложное изменение базы - для других локально надо будет так же только запустить миграцию.
Но есть нюанс если у тебя на бою Большие данные и обработка всей базы по твоим новым правилам не влезет в 10 минут (или сколько там живет cli) то естественно тут будет другое решение.

156 12 авг, 15:28 156 1451955

>>1451759
бумп, вопрос еще акутален

Ответы52003

157 12 авг, 16:36 157 1452003

>>1451955
что то типа такого ?
http://phprbac.net/

158 12 авг, 16:43 158 1452005

Можно ли как-то задать свойство класса с помощью метода? Ну или ещё как-то вынести значение из текста программы в иное место?

Вот код: https://pastebin.com/VYB6rxjP
Там токен = 666666666. Но мне нужно, чтобы этот токен брался вообще не из кода, а из конфига, который в базе (достаётся из неё через getToken() ). Но если написать вместо protected $token = "666666666"; что-то типа protected $token =$this->getToken();, то пхп на меня смотрит очень укоризненно.

Ответы5200652115

159 12 авг, 16:46 159 1452006

>>1452005
В конструктор инициализацию полей вынеси, он затем и нужен

Ответы52056

160 12 авг, 17:49 160 1452047

Пытался написать, но макак не пропускает, в общем вот мой высер https://pastebin.com/Mf6j8QnR
Суть в чем: тайпскрипт хорошая штука, но меня вымораживает, что любые внешние данные творят что хотят в моих строго типизированных для компиляции скриптах. Пришел null вместо числа? Ну все пизда тебе.
Как?! Как это всё правильно отрабатывать? Где проверять, преобразовывать, надо ли вообще. Как это делается в PHP? Опушка, помоги! SomeApprentice, ты нырнул глубоко в это дерьмо, может сможешь помочь?

Ответы52078

161 12 авг, 18:13 161 1452056

>>1452006
Там в исходном классе уже есть конструктор (я просто его не показал). И когда вставляю в него $token =$this->getToken();, код не работает. Получается, это у меня где-то там косяк и так и надо было делать?

Ответы52070

162 12 авг, 18:46 162 1452070

>>1452056
>$token =$this->getToken()
может всё такие $this->token?
или вообще сделай метод initToken() и вызывай его в конструкторе. Если ты наследуешь то не забывай про parent::__construct()

Ответы52130

163 12 авг, 19:05 163 1452078

>>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. Проблему решает, но код на декораторах получается перегруженным.

164 12 авг, 20:31 164 1452115

>>1452005
Если доступ к полю происходит через метод-геттер (в твоем примере aa() ) то просто переопределяешь этот метод в наследуемом классе чтобы он возвращал то что нужно (это одна из причин почему желательно использовать геттеры а не напрямую поля дергать). Если поле используется напрямую $this->token тогда нужно добавлять магии __get https://ideone.com/TPS1f7

Ответы52133

165 12 авг, 21:07 165 1452130

>>1452070
>может всё такие $this->token?
Да, точно. Вызываю в конструкторе вот так:
$this->token = $this->getToken();
И в тестовом примере оно работает. А вот в коде, который модифицирую - нет. Завтра буду много думать.

166 12 авг, 21:19 166 1452133

>>1452115
Спасибо, завтра попробую.

167 12 авг, 21:25 167 1452134

А как написать палиндром для кирилицы? Я понял что использовать функцию strrev() нельзя, но решаю через цикл, mb_substr() тоже хуйню возвращает, нихуя не понимаю, вот код: https://ideone.com/xSGVI4

Ответы52137

168 12 авг, 21:52 168 1452137

>>1452134
Напиши в 20 строке echo "$symbol1 $symbol2\n"; и посмотри что получается

Ответы52160

169 12 авг, 22:43 169 1452160

>>1452137
Понял что у меня $symbol1 выводит что нужно, а $symbol2 весь текст так как выборка подстроки от 0 до -1, ну получается надо переписывать это по другому совсем, хули тут это ебка с этими кодировками, в питоне в одну строчку простейшую решается этот палиндром, какой же сложный язык.

Ответы52174

170 12 авг, 23:23 170 1452174

>>1452160
Вообщем я сделал, но выглядит страшно, мне кажется очень всратое решение, если есть лаконичней и проще, прошу скинуть, вот мой:
https://ideone.com/tmn3Fh

Ответы52185

171 13 авг, 00:39 171 1452185

>>1452174
Держи. Про utf8 strrev успешно гуглится. http://ideone.com/S7Pzbs

Ответы52199

172 13 авг, 02:23 172 1452199

>>1452185
Так.. Решил я значит прочитать в учебнике анона про задачу. Написано что земля пухом, если через strrev решать. Поэтому держи другой вариант =) http://ideone.com/PUpD1t

Ответы53276

173 13 авг, 03:09 173 1452201

Простите за тупой вопрос, но что означает символ ^ в версии пакета composer?

Ответы52273

174 13 авг, 10:22 174 1452237

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

А можно об этом чуть подробнее? Что почитать, чтобы разобраться в этой теме?

Ответы52291

175 13 авг, 11:27 175 1452273

>>1452201

Изучай мануал https://getcomposer.org/doc/articles/versions.md#caret-version-range-

176 13 авг, 11:45 176 1452284

Знающий анон, подскажи позязя, я должен у каждой функции, класса и метода писать вот такую конструкцию:

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

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

Ответы5228652298

177 13 авг, 11:46 177 1452286

>>1452284
Извините, облажался. Там звездочки и камменты к коду

178 13 авг, 11:52 178 1452291

>>1452237
>А можно об этом чуть подробнее? Что почитать, чтобы разобраться в этой теме?

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

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

Или другой вариант через gitlab ci
https://m.habr.com/ru/company/softmart/blog/309380/

179 13 авг, 12:04 179 1452298

>>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.

Ответы52299

180 13 авг, 12:08 180 1452299

>>1452298
Благодарю аноний

181 13 авг, 16:16 181 1452457

Привет аноны. Дайте подсказку, что там еще можно написать?
http://ideone.com/FFFpnc#stdin
Уже всё там прочесал, ошибок вроде нет, руководство тоже не помогает да, я тупенький в таких делах

Ответы52471

182 13 авг, 16:27 182 1452471

>>1452457
http://ideone.com/p1zefW

Ответы52475

183 13 авг, 16:30 183 1452475

>>1452471
Кажется, понял, спасибо. Я в коде указал "как бы очевидное"

184 13 авг, 20:58 184 1452701

Привет, анон. Только вкатываюсь и пытаюсь разобраться.
https://ideone.com/r10PWb
Не могу понять как мне без 3-х инструкций echo сделать адекватный код. Всегда получается через 3 строки, даже если брать обычное умножение переменной на себя.

Ответы52718

185 13 авг, 21:26 185 1452718

>>1452701
https://ideone.com/DoBjm5
Так что ли?

Ответы52726

186 13 авг, 21:39 186 1452726

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

Ответы52791

187 13 авг, 23:10 187 1452791

>>1452726
О, анон с моей проблемой. Думал минут 40 над этим, точек в гайде тоже не видел это который от ОПа. Решил отдохнуть, пока голова остынет

188 14 авг, 11:59 188 1453019

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

Ответы530595319053551

189 14 авг, 12:21 189 1453042

Как проверить ТИП файла в php?
Не разрешение, мне вообще похуй на его разрешение.
Тип.

Есть какой аналог линухового file?

Ответы53294

190 14 авг, 12:31 190 1453059

>>1453019
Она есть под любую ось.
Устанавливает пакеты по конфигурации composer.json
Основная идея в указании зависимостей:
Например пакет а версии 1.1 работает только с пакетом б версии 2.3 это указано в конфигурации пакетов по сему композер скачает тебе только совместимые версии.

Ответы53241

191 14 авг, 14:27 191 1453190

>>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

Ответы53241

192 14 авг, 15:56 192 1453241

>>1453190
>>1453059
Как все умно сделано-то, спасибо, аноны

Ответы53267

193 14 авг, 16:34 193 1453267

>>1453241
Не умно. Если в пакете A зависимость от пакета B с версией 1.0.0, тогда установив пакет A ты хуй установишь пакет B другой версии

Ответы53616

194 14 авг, 16:47 194 1453276

>>1452199
О вот за это спасибо, очень красивое решение.

195 14 авг, 16:47 195 1453277

Котаны, вопрос с .htaccess

Делаю тупейшую вещь, просто ридерекчу любой запрос на один конкретный php-файл. Сервер - openserver.
Такое правило
RewriteEngine On
RewriteRule ^.$ /public/test.php приводит к ошибке 500
а такое
RewriteRule ^[a-z0-9]$ /public/test.php редиректит на test.php который и запускается.
Почему так?

Ответы53278532855329153296

196 14 авг, 16:48 196 1453278

>>1453277
бля, звездочки сожрались

197 14 авг, 16:54 197 1453285

>>1453277
фикс

https://ideone.com/v78D2B

Ответы53291

198 14 авг, 17:12 198 1453291

>>1453285
>>1453277
а если точку в квадратные скобочки засунуть?

Ответы53318

199 14 авг, 17:18 199 1453294

>>1453042
https://www.php.net/manual/en/function.mime-content-type.php

200 14 авг, 17:20 200 1453296

>>1453277

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

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

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

Ответы53318

201 14 авг, 17:44 201 1453317

Пилю лайфхак, посаны.

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

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

Охуенная тема, примерно как с аннигиляцией скобочек с помощью return;

Ответы54601554765758959944

202 14 авг, 17:44 202 1453318

>>1453291
Если точку обернуть в квадратные скобки то перестает падать в ошибку 500.
Но
Из корня редиректит на нужный файл. Но стоит добавить хоть один символ и пишет ошибку "Объект не найден".

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

Ответы5332553367

203 14 авг, 17:50 203 1453325

>>1453318
пс
а если такое правило написать :
RewriteRule ^([a-zA-Z0-9/-]"тут звездочка")$ /public/test.php?id=$1 - то норм редиректит и $_GET заполняет

698 Кб, 540x720
204 14 авг, 18:39 204 1453367

>>1453318
>2020
>.htaccess

Ответы53413

205 14 авг, 20:16 205 1453413

>>1453367
Что то более чущественное сказать можешь?
на Апаче 70% вэбсерверов. Остальные 30 это ngnix.

Ответы55459

7 Кб, 480x360
206 15 авг, 00:17 206 1453528

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

Ответы5545955980

207 15 авг, 02:51 207 1453551

>>1453019
Композер это годнота, базарю. Один раз попробуешь - больше не сможешь без него.

208 15 авг, 03:27 208 1453558

Млп

209 15 авг, 09:04 209 1453615

ПАМАГИТИ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

Ответы5386755476

210 15 авг, 09:05 210 1453616

>>1453267
В этом весь смысл дурилка

Ответы53649

211 15 авг, 10:28 211 1453649

>>1453616
Например мне надо поставить пакет A и B. Оба зависят от пакета С, но разных версий. Из-за этого я не смогу одновременно поставить A и B.

Это специально сделано?

Ответы5402155475

212 15 авг, 10:50 212 1453656

Скажите, а как в апаче запретить доступ ко всем каталогам, кроме public?

Ответы537455547555476

213 15 авг, 13:14 213 1453745

>>1453656
Я просто посылаю все реквесты в \public\index.php

Ответы53859

214 15 авг, 15:45 214 1453859

>>1453745
то есть в .htaccesse правилами не отсеиваешь файлы и папки.
А как тогда подгружаются стили и прочее барахло из public?

215 15 авг, 16:08 215 1453867

>>1453615
Не занимайся херней. Пиши на Sublime Text 3 и запускай локалку на OpenServer.
https://www.sublimetext.com/3
https://ospanel.io/

216 15 авг, 19:21 216 1454021

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

124 Кб, 416x226
217 15 авг, 21:39 217 1454104

Этот опен сервер пойдет для создания локалки?

Ответы54117

137 Кб, 900x900
218 15 авг, 22:22 218 1454117

>>1454104
ОН ДЛЯ ЭТОГО И СОЗДАННН!!!!

Ответы54129

219 15 авг, 22:44 219 1454129

>>1454117
Мало-ли какой-то другой получше есть

Ответы54278

220 16 авг, 01:26 220 1454210

Объясните мне как решить проблему при выводе символа строки через квадратные скобки, если строка написана кирилицей, кодировка слетает и выводит какую-то хуйню, вот пример: https://ideone.com/wMhDPb

Ответы5424355475

221 16 авг, 03:17 221 1454243

>>1454210
Квадратные скобки выводят байт, а не символ. Из-за этого возникает проблема, потому что utf это многобайтовая кодировка. Используй mb_substr()

Ответы54251

222 16 авг, 04:32 222 1454251

>>1454243
Спасибо, теперь разобрался.

223 16 авг, 08:00 223 1454278

>>1454129
Есть xampp

Ответы54313

224 16 авг, 10:33 224 1454313

>>1454278
Много ли профита от разных опенсерверов?

Вкину еще гайд хороший. Предлагаю в шапку добавить на перекатном
https://www.youtube.com/watch?v=a6xtQQqx1tg
(У него еще 2 части-продолжения есть)

Ответы544155461654727

225 16 авг, 11:00 225 1454326

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

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

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

Ответы5436555475

226 16 авг, 11:55 226 1454365

>>1454326
Возьми tus как готовое решение загрузки файлов по частям. Каждый блок там подписан хэшем. Так что кинешь проверку кук только на самый первый запрос загрузки дальше у тебя в очередь кусков уже никто не сможет влезть так что можно не проверять

35 Кб, 873x395
227 16 авг, 12:05 227 1454368

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

Ответы54370

228 16 авг, 12:06 228 1454370

>>1454368
На пикриле я задал*
Быстрофикс

Ответы54371

229 16 авг, 12:10 229 1454371

>>1454370
У тебя присвоение а не сравнение

Ответы54373

230 16 авг, 12:13 230 1454373

>>1454371
Всё, понял, спасибо
до сих пор даже через раз точку запятую пропускаю

Ответы54376

231 16 авг, 12:19 231 1454376

>>1454373
Поставь phpmd глобально и пакет для sublime соответствующий. Он будет тебе подсвечивать такие косяки

Ответы5438354419

232 16 авг, 12:29 232 1454383

>>1454376
>Поставь phpmd глобально и пакет для sublime соответствующий
Что за зверь такой и где искать?

Ответы54387

233 16 авг, 12:33 233 1454387

>>1454383
https://www.google.com/search?q=phpmd

Ответы54390

234 16 авг, 12:40 234 1454390

>>1454387
Спасибо!
А что насчет пакета для саблайм?

Ответы54483

235 16 авг, 13:10 235 1454415

>>1454313
Толсто.

Ответы54424

236 16 авг, 13:14 236 1454419

>>1454376
>phpmd
Полезно.

237 16 авг, 13:18 237 1454424

>>1454415
Но ведь я не толстил

Ответы54429

238 16 авг, 13:25 238 1454429

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

Ответы54432

239 16 авг, 13:27 239 1454432

>>1454429
Понял. Ну, я не разобрался еще хорошо в этой теме, смотрю, т.к. более-менее рассасывает всё. Со мной ничего не случится плохого?

Ответы54437

240 16 авг, 13:36 240 1454437

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

>Со мной ничего не случится плохого?
Ничего. Там же совсем ясли показывают.
Но я бы поискал что-то менее гнилое.

Ответы54438

241 16 авг, 13:37 241 1454438

>>1454437
>Но я бы поискал что-то менее гнилое
Ты использовал какие-то видео-уроки сам?

Ответы54444

242 16 авг, 13:43 242 1454444

>>1454438
Поначалу вполне норм, но потом слишком медленно уже - читать быстрее. Сейчас только статьи всякие читаю интересные да доки посматриваю.

Ответы54451

243 16 авг, 13:49 243 1454451

>>1454444
Понял

31 Кб, 511x480
244 16 авг, 14:21 244 1454473

Анончики, как подключить эту хрень?

Ответы54482

245 16 авг, 14:35 245 1454482

>>1454473
Я нагуглил. Если кто-то не знает пароль от этого, то просто в логине пишите root и можно логиниться

246 16 авг, 14:39 246 1454483

>>1454390
https://github.com/SublimeLinter/SublimeLinter-phpmd

Ответы54486

247 16 авг, 14:42 247 1454486

>>1454483
Пасиба

248 16 авг, 19:02 248 1454601

>>1453317
@unlink($mediafile) еще проще

Ответы54823

249 16 авг, 19:16 249 1454616

>>1454313
Сальный в треде

250 16 авг, 19:39 250 1454631

Анончики, объясните, пожалуйста, где в задаче про список абитуриентов нужно использовать класс Абитуриент?

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

Зачем нужен класс Абитуриент, если можно сразу использовать данные полученные в классе таблицы?

Ответы5467155475

251 16 авг, 20:49 251 1454671

>>1454631
Ты можешь из бд сразу экземпляры класса получать, это очень удобно. Гугли pdo fetch class

252 16 авг, 21:00 252 1454677

Пытаюсь загрузить файл на telegra.ph/upload через curl, ошибка то Failure when receiving data from the peer, то SSL connect error.
Попробовал на imgur грузить - без проблем, любые страницы (и сам файл) получаю тоже. А на телеграфе проблема. Что делать?

Ответы54814

253 16 авг, 22:41 253 1454727

>>1454313
>Учим PHP за 1 час
@
Видео идёт полтора

Ответы54746

254 16 авг, 23:35 254 1454746

>>1454727
Не, там почти 4 выходит

255 17 авг, 04:12 255 1454814

>>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

Ответы54989

256 17 авг, 07:30 256 1454823

>>1454601
Он не про это вовсе

257 17 авг, 14:00 257 1454970

как сука убрать из формы старые запросы?чтобы при перезагр страницы их там не было

Ответы5500555027

258 17 авг, 14:25 258 1454989

>>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, а там, оказывается, ограничение на кол-во загрузок.

Ответы5501055024

259 17 авг, 14:46 259 1455005

>>1454970
Не нажимай кнопку назад. Можешь сделать редирект =)

Ответы55009

260 17 авг, 14:51 260 1455009

>>1455005
а нет к-л скрипта чтобы чистил?

Ответы55013

261 17 авг, 14:52 261 1455010

>>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 скрипт, который содержит только единственный запрос к серверу. И включи в нем опции для отладки, запусти его из консоли и посмотри, что получится.

Ответы55063

262 17 авг, 14:52 262 1455011

Есть пхп господа из столиц? Подскажите, по работе для новичков все ок или уже не очень?

263 17 авг, 14:54 263 1455013

>>1455009
Это же браузер сохраняет. Погуглил - решается редиректом. Там чел еще ссылку приложил - https://en.wikipedia.org/wiki/Post/Redirect/Get

Ответы55016

264 17 авг, 14:57 264 1455016

>>1455013
а если так?
<input type="reset" value="Сбросить">

Ответы55017

265 17 авг, 14:59 265 1455017

>>1455016
Я тебе дал всю инфу, остальное уже ты проверяй пока не получится =) И эта кнопка тебя не спасет от сохраненных данных при обновлении. На неё же еще нажать надо.

266 17 авг, 15:13 266 1455024

>>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 прокси не использует.

Ответы55063

267 17 авг, 15:15 267 1455027

>>1454970

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

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

Ответы55029

268 17 авг, 15:16 268 1455029

>>1455027
и то и другое

Ответы55474

269 17 авг, 15:47 269 1455061

Анон, хватит себя мучать. Иди плати денежку на Хекслет и ищи норм работу.
Я устроился на 35к, щас 55 (полгода опыта)

Ответы5507055078

270 17 авг, 16:00 270 1455063

117 Кб, 816x245221 Кб, 525x654

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

Ответы55073

271 17 авг, 16:31 271 1455070

>>1455061
Иди-ка ты нахуй со своими курсами.

Ответы55079

272 17 авг, 16:35 272 1455073

>>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. Можешь глянуть, если интересно. Ты можешь так убедиться, что моя версия правильная и проблема не в твоем коде, а в сетевых проблемах.

272 17 авг, 16:35 272 1455073

>>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. Можешь глянуть, если интересно. Ты можешь так убедиться, что моя версия правильная и проблема не в твоем коде, а в сетевых проблемах.

Показать весь текст
Ответы55082

273 17 авг, 16:41 273 1455078

>>1455061

У нас посты про этот сайт появляются почти в каждом треде:

https://phpclub.tech/search/?q=hexlet
https://phpclub.tech/search/?q=хекслет

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

Ответы5508055131

274 17 авг, 16:48 274 1455079

>>1455070
Ну давай, осиливай свои регулярочки еще полгода. А потом на завод иди

Ответы550905513155474

275 17 авг, 16:49 275 1455080

>>1455078
Если появляются, зарегистрируйся, пройди бесплатные уроки. Я же не кидаю реф. ссылку, а делюсь годнотой.

126 Кб, 967x230
276 17 авг, 16:58 276 1455082

>>1455073
>Скорее всего дело в РКН.
Но почему любые другие заблокированные сайты открываются без проблем? Через эти же прокси. Вот сейчас для теста рутрекер открыл.

>Wireshark
Понятнее не становится.
Попробовал установить curl_setopt($curl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_3'); - Wireshark всё еще показывает соединение по TLSv1. Открыл опять рутрекер - там уже TLSv1.2. Кажется, ничего не меняется от этой опции.

Ответы5509455114

277 17 авг, 17:05 277 1455090

>>1455079
Зачем ты платишь за бесплатную информацию?

278 17 авг, 17:08 278 1455094

>>1455082
Попробовал через бесплатные прокси коннектиться к заблокированным сайтам - все редиректит на сайт провайдера. Хм.

Ответы55095

279 17 авг, 17:14 279 1455095

>>1455094
А вот через socks5 прокси получается. Какой вывод делать-то? Мой провайдер настроил DPI исключительно на telegra.ph?

280 17 авг, 17:25 280 1455099

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

Спасибо, ОП! Без тебя бы не справился.

Ответы55121

281 17 авг, 17:38 281 1455114

>>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.

Ответы55130

282 17 авг, 17:46 282 1455121

>>1455099

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

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

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

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

Но в общем тебе нужен если и прокси, то не HTTP, а HTTPS, к которому ты подключаешься по SSL, с шифрованием. Иначе он ничего не скрывает.

69 Кб, 554x343
283 17 авг, 18:01 283 1455130

>>1455114
Но прокси вроде https. Вон, зашифровано же, нет? Я в это разбираюсь еще меньше, чем во всем остальном.

Ответы55197

284 17 авг, 18:03 284 1455131

>>1455078
Все курсы на торрентах есть.

>>1455079
Лучше вам заплатить, чтобы вы про эти регулярочки пропердели в микрофон, да? А потом - иди нахуй. Вся суть этих курсов.

Ответы55140

285 17 авг, 18:17 285 1455140

>>1455131
Ну если ты такой умный и прошел все курсы мира на торрентах, то покажи свой охуенный код на гитхабе

Ответы55144

286 17 авг, 18:27 286 1455144

>>1455140
>прошел все курсы мира
Нахрен мне все курсы мира проходить?
Но да - я учился по курсам с торрентов. Поначалу. Потом уже самому пора уметь.

>покажи свой охуенный код
Зачем?

Ответы55151

287 17 авг, 18:38 287 1455151

>>1455144
Чтобы сэкономить время людей, которые хотят войтивайти самым безболезненным способом (через Хекслет).
Ведь если ты макакер уровня подписчиков Марлина, то тебе нельзя верить

Ответы5515655158

288 17 авг, 18:47 288 1455156

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

>если ты макакер уровня
А ты что за хуй важный чтобы мой уровень оценивать?

Ответы55158

289 17 авг, 18:53 289 1455158

>>1455156
>>1455151
Хватит ругаться, джуниоры, не позорьте себя перед префессионалами.
Мимо-5-пет-проектов-на-штмл

290 17 авг, 19:26 290 1455197

>>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.

291 17 авг, 20:51 291 1455252

Привет, ОП, я когда-то делал твои задачи по вёрстке, на работе пишу бекенд, но внезапно понравилось верстать, возникли вопросы по которым очень интересно твоё мнение:
- Какой смысл в семантических тегах (section, article, menu) для закрытых SPA, которые не будут индексироваться? Почему иногда в статьях по-прежнему используют ul/li для меню, а потом перекрывают дефолтные padding/margin у этих тегов, вместо того, чтобы просто сверстать на div/span и flexbox? Вёрстка проще, поддержку IE просят очень редко.
- Для ретины рекомендуется использовать изображения с более высоким расширением. Я не очень понимаю как это работает на уровне железа. Что значит "повышенная плотность пикселей". Если на ретине с разрешением 1920x1200 и обычном дисплее 1920x1200 открыть одну и ту же картинку, то она будет отображена одинаково? Как-то можно эмулировать ретину на обычном дисплее, чтобы видеть вёрстку на маке, не имея мака?
- Что порекомендуешь для pixel perfect вёрстки, может есть расширения для браузера или удобные линейки под линукс?

Ответы55471

292 18 авг, 03:52 292 1455459

>>1453413
>2020
>Apache
Апач это лютый депрекейт. Годится только для локалки - течёт по памяти пиздец.

>>1453528
Фу блядь, фу нахуй. Используй неймспейсы и не еби себе мозги.

Ответы5547455977

293 18 авг, 04:17 293 1455466

доброй ночи
есть задача, исходные:
знаю базовые вещи вроде html, css, javascript, sql, ооп, очень поверхностно mvс, на php писал скрипты к всяким вордпрессам и джумлам и ковырялся в плагинах
собственно нужно сделать что-то вроде облачного хранилища фоток: юзеры грузят фотки на сервер, в личном кабинете могут просматривать их, создавать "альбомы" и раскидывать по ним фотки, делиться ссылкой с кем-попало или давать доступ к альбомам другим юзерам
стоит ли с такой задачей влезать в php фреймворки (если да, то какой?) или проще лепить код самому? быстрее ли будет разобраться с функционалом фреймворка или же писать и собирать phpные куски?
в приоритете время разработки, защищенность и правильная архитектура не интересует

Ответы55474

294 18 авг, 04:34 294 1455471

>>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 вёрстки, может есть расширения для браузера или удобные линейки под линукс?

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

294 18 авг, 04:34 294 1455471

>>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 вёрстки, может есть расширения для браузера или удобные линейки под линукс?

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

Показать весь текст

295 18 авг, 05:09 295 1455474

>>1455466

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

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

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

>>1455459

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

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

>>1455079

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

>>1455029

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

Ответы57595

296 18 авг, 05:10 296 1455475

>>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). Это самый надежный способ.

296 18 авг, 05:10 296 1455475

>>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). Это самый надежный способ.

Показать весь текст

297 18 авг, 05:12 297 1455476

>>1453656

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

>>1453615

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

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

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

>>1453317

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

Ответы57586

298 18 авг, 08:21 298 1455492

как вы смотрите на текущее состояние php в реалиях 2019 года и его развитие?

Ответы55496

299 18 авг, 08:45 299 1455496

>>1455492
как на говно

Ответы55498

300 18 авг, 08:49 300 1455498

>>1455496
почему?

26 Кб, 1024x768
301 18 авг, 16:02 301 1455647

>>1446969 (OP)
Помогите решить тестовые задания (одно из тестовых на собеседовании кстать):
Нужно сверстать календарь используя списки

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

Если кому интересно покидаю другие

Ответы55649

302 18 авг, 16:03 302 1455649

>>1455647
https://mega.nz/#!tPoVkY5K!MMN8W99oGieCUACM0y_gOtmONZyFLBKpXviurOKkYzs
сам код

303 18 авг, 16:14 303 1455656

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

Ответы556575568155831

304 18 авг, 16:21 304 1455657

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

Ответы5568755803

305 18 авг, 17:37 305 1455681

>>1455656
Всё зависит от того, какой у тебя уровень и какими технологиями ты владеешь.

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

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

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

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

Ответы5568755699

306 18 авг, 17:55 306 1455687

>>1455657
>>1455681
Спасибо за ответы, котаны.

Ответы55692

307 18 авг, 18:04 307 1455692

>>1455687
Хотя немного грустно стало от ваших ответов, честно говоря.

Ответы55693

308 18 авг, 18:07 308 1455693

>>1455692
А какая нахуй разница, если бабки платят? Ну грустно и хуй с ним, зато сытно.

Ответы55697

309 18 авг, 18:18 309 1455697

>>1455693
Хмм, а в этом есть логика, ведь если платят, то видимо не просто так платят.

И кстати, на Хабре в какой-то теме про ПХП я читал, что работа на Симфони в целом по сложности и приятности не многим отличается от работы на той же Джаве, это правда так?

Ответы55701

310 18 авг, 18:21 310 1455699

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

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

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

Коли уж заговорил про WP, то это адская говнина, которую 24/7 надо мониторить на предмет уязвимостей. Короче тезис таков, что у рнр были шансы, но ребята всё пребали. Сейчас с 0 писать какой-то высоконагруженный проект не имеет смысла.

Ответы557145571655803

311 18 авг, 18:22 311 1455701

>>1455697
На голой джаве так-то тоже не пишут. Spring и иже с ним. Понятное дело, что либа навороченная и в неё надо вникать.

312 18 авг, 18:42 312 1455714

>>1455699
Много есть каких-то больших проектов на PHP, не только мелочь. Если годами пишешь на ПХП и хорошо владеешь всеми инструментами, то почему бы и для нового проекта не взять привычный инструмент? Точно ли альтернативы плюсы дадут?

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

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

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

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

313 18 авг, 18:44 313 1455716

>>1455699

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

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

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

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

И насколько я знаю, фейсубк и вконтакте именно на PHP писать начинали. А на Яве написаны одноклассники.

Ответы5572255826

314 18 авг, 18:50 314 1455722

>>1455716
>И насколько я знаю, фейсубк и вконтакте именно на PHP писать начинали.
Это было 15 лет назад, другая эпоха. Кто-нибудь сейчас стартует большие проекты на ПХП? На самом деле кажется, что всё-таки да, но сейчас явных преимуществ ПХП над другими языками нет, на ПХП уже не принято писать, как 15 лет назад.

Ответы55727

315 18 авг, 18:55 315 1455727

>>1455722

Делал ли ты выборку по hh.ru по языкам или же твое мнение базируется на сообщениях анонимных безработных экспертов с двачей? Потому что про смерть PHP (и Windows) я слышу уже лет 5 если не больше.

316 18 авг, 20:58 316 1455803

>>1455699
Диван не отлежал ещё? PHP используется в разработке в том числе и новых проектов, например тут искали симфониста в новое направление Яндекса: https://moikrug.ru/vacancies/1000049016
Сейчас вакансии не мониторю, когда полгода назад мониторил - наткнулся на эту. Попробуй и ты поискать - поймёшь, что не прав.

>>1455657
> Полное право имеют.
Джависты ничем от отличаются от PHP-разработчиков. Клепают такие же формы, пишут такие же REST/GraphQL API по общепринятым спецификациям в веб-разработке, интегрируют такие же инструменты для поиска и очередей (Elasticsearch, RabbitMQ), пользуются теми же облачными сервисами. Ладно если бы они ракеты в космос запускали или писали ПО для беспилотных автомобилей, но нет - такие же формошлёпы, как и PHP-шники. Есть подозрение, что ты далёк как от PHP, так и от современной Java- разработки.

Ответы5582855829

317 18 авг, 21:31 317 1455826

>>1455716
При чём тут open source? Опен сурс проекты так-то пишет не 1 человек. Взять, например, арч или дебиан. Целая ОС, которую создавали на голом энтузиазме.

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

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

318 18 авг, 21:35 318 1455828

>>1455803
Не отлежал. Пишут не с 0 на рнр, а на либе. Это как бы 2 разные вещи. Ну и от души посмеялся от знания го и змеи, это значит, что рнр в этом резюме как прокладка между чем-то. Собственно о чём я выше и писал. Бекэнд на рнр уже изживает себя. Я не отрицаю, что сайт легко и просто развернуть на рнр, но что-то более серьёзное, увы.

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

319 18 авг, 21:38 319 1455829

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

320 18 авг, 21:45 320 1455831

>>1455656
Подобными вопросами задавался и я год-два назад.

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

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

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

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

хз зачем я это высрал
похуй, всеравно анонимная борда

Ответы55837

321 18 авг, 21:50 321 1455835

Аноны нужна помощь.
Вообщем столкнулся я с задачей по ООП, где нужно написать функцию padLeft и padRight используя функции mbstring, но вот беда, модуль этот по стандарту не включен, нагуглил что нужно раскомментировать строку отвечающий за этот модуль в файле php.ini, но в папке php у меня его нет, а phpinfo() пишет что ini файл находиться в c:\windows, но там его тоже нет. Что делать?

Ответы5584255861

322 18 авг, 21:51 322 1455837

>>1455831
Наобот спасибо, что высрал написал.

323 18 авг, 21:58 323 1455842

>>1455835

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

Ответы55860

324 18 авг, 22:04 324 1455850

Всем привет

Прошу прощения за платиновый вопрос и то, что не читаю в гугле.
МОжет подскажете, как дела в европе с PHP? через пару месяцев меня ждет релокация в Чехию или, менее вероятно, но есть шанс, в Гермашку (скорее первое) по основной работе, которую после дропну нахуй. Понимаю, что там своим спецов дохуя , и я буду нубом, но с финаносовой подушкой есть полгода-год, чтобы поуизучать + по текущей работе есть реальные примеры, что могу поделать (допилить аддоны в облаке, могу просто попросится проверять и помогать коллегам)

Ответы56140

158 Кб, 1366x768
325 18 авг, 22:08 325 1455860

>>1455842
Судя по Loaded Configuration File (none) ini файла у меня попросту не существует.

Ответы5587655905

326 18 авг, 22:10 326 1455861

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

Ответы55869

327 18 авг, 22:14 327 1455869

>>1455861
Нужный модуль у меня находиться в папке php\ext, но для его включения нужен ini файл, вот я и ищу его.

Ответы55870

328 18 авг, 22:15 328 1455870

>>1455869
У тебя опен сервер?

Ответы55873

329 18 авг, 22:22 329 1455873

>>1455870
Нет, я использую встроенный php сервер.

330 18 авг, 22:24 330 1455876

>>1455860
У тебя же написано что Configuration file (php.ini) path - находится в C:\Windows

Ответы55878

331 18 авг, 22:25 331 1455878

>>1455876
Так в том то и дело, что его нет там.

Ответы55879

332 18 авг, 22:26 332 1455879

>>1455878
Советую тебе поставить apache или nginx, чтобы ты все смог настраивать, там то они (конф. файлы) точно будут

Ответы55880

333 18 авг, 22:27 333 1455880

>>1455879
Ладно, попробую, спасибо за помощь.

334 18 авг, 22:54 334 1455905

>>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 )

335 18 авг, 23:26 335 1455923

Доктрина или елокуент?

Ответы5600456136

336 19 авг, 03:06 336 1455977

>>1455459
>Используй неймспейсы
Жопой читаем?

337 19 авг, 03:29 337 1455980

>>1453528

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

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

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

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

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

Ответы56191

338 19 авг, 06:33 338 1456004

>>1455923
елокуент и в пизду этот падающий от любого ика менеджера сущностей

Ответы57179

339 19 авг, 11:22 339 1456059

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

Ответы5621357179

340 19 авг, 11:56 340 1456087

В последнее время всё чаще думаю, что все попытки демонизировать php - это ошибка. Постоянно встречается говно с тем, что память течёт, системный io блокирующий, нормальных инструментов для ассинхронной работы нет, возникает необходимость в супервизоре, хелсчеках, таймаутах на операцию и т.п. Да и зачем, если php под это тупо не задизайнён?
Та же связка nginx-phpfpm (а теперь ещё и в php7.4 пред-загрузка появилась) дают огромную производительность, в которую ты уже не упрешься практически никогда (потому что узкое место - это обычно база данных, а приложения на php масштабировать очень просто), если написано нормально, а не через жопу.
Даже если задача такова, что нужно вычитывать из вебсокета или очереди, то есть куча инструментов (тот же nginx), которые умеют вычитывать данные и слать http-запросы, позволяя php работать as designed, а не как сова на глобусе.

Ответы561335620156316

341 19 авг, 12:33 341 1456133

>>1456087
так и есть , или ждать пхп8 когда сделают асинхронность из коробки на низком уровне ядра , всё остальное ReactPHP и тд шняги для бенчмарков + пет проекты уровня хелло ворлд

342 19 авг, 12:35 342 1456136

>>1455923
2 разных подходи , вопрос сорт оф автомобиль или лодка

343 19 авг, 12:37 343 1456140

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

мимо варшава кун

Ответы56164

344 19 авг, 13:11 344 1456164

>>1456140
Спасибо
С ним как раз проблем нет

345 19 авг, 13:56 345 1456191

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

346 19 авг, 14:08 346 1456201

>>1456087
Так возьми ту же ноду, чё как фуфел? Или ты из тех чуваков, что пхп - ван лав?

Ответы56579

347 19 авг, 14:20 347 1456213

>>1456059
Ты тредом ошибся.

348 19 авг, 16:26 348 1456283

Пачаны, где искать задачки на подобие ОПовых? Одна мука в инете, сосчитать 2 + 2 и прочее гавно из жопы.

Ответы563055670957176

349 19 авг, 16:49 349 1456305

>>1456283
кстати да + вопрос

350 19 авг, 17:08 350 1456316

>>1456087
Расскажи что за задачи ты решаешь? Личный интерес

Ответы56579

351 19 авг, 18:47 351 1456376

как сделать личный кабинет?

Ответы5645257176

352 19 авг, 19:35 352 1456452

>>1456376
берешь и делаешь

Ответы56472

sage 353 19 авг, 19:39 353 1456458

Подскажите как можно реализовать такую логику 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)
Но, видимо из-за того, что токены различаются, оно создает новую запись вместо обновления старой. Спасибо

Ответы5648557174

354 19 авг, 19:45 354 1456472

>>1456452
не могу,потому что не понимаю

Ответы56953

sage 355 19 авг, 19:51 355 1456485

>>1456458
Появилась идея. При создании линковоной таблицы создаются пустые записы под слинковую колонку? Просто сам объект пользователя сохраняется в другой таблице. Если слинковать и создать шаблонные записи под каждого созданного пользователя и создавать новые при создании новой записи пользователя и использовать UPDATE

356 19 авг, 20:50 356 1456579

>>1456201
Этот вопрос уже 100500 раз обсосан. Это тебе в твоём манямирке на 2 с половиной юзера и полтора формошлёпа всё заебись, можешь хоть каждый день всё на новый язык переписать. А когда у тебя 50 разработчиков и кодовая база в несколько десятков тысяч строк, то ты каждый раз будешь думать, тащить ли новую технологию или сделать на старой. Потому что любой новый стек, это разработчики, которые должны уметь на этом кодить, девопсы, которые должны уметь это поддерживать, ещё одна экосистема, от которой ты зависишь и так далее. Для тебя это может быть пустой звук - но для бизнеса - нет, и дописать лишнюю точку входа в существующий монолит (или не совсем монолит, не суть) оказывается проще, чем тащить что-то новое.
Поэтому пхп не ван лав, просто нужно оценивать риски и профит. Та же нода - норм, но это если у тебя есть минимум 2 девелопера и 2 девопса, чтобы это готовить. И задача подходящая.
Во всех прочих случаях отдельный гейтвей для сокетов и обычный бекенд за ним решает 99% проблем, не принося новых.
А на пет проектах я сам на чём только не пишу.

>>1456316
У текущей компании много продуктов, в большинстве бекенд написан на php. В основном, всякие сервисы по работе с хостингом, доменами и прочими сертификатами. Но я - выходец с аутсорса и работал в том числе над сайтами для компаний из fortune-500 (в-основном интранеты, интернет-магазины, прочие веб-приложени). Почти везде и почти всегда связка cron + php решала все проблемы и мне не приходилось изобретать велосипеды.

Ответы5663056711

357 19 авг, 21:54 357 1456630

>>1456579
>Почти везде и почти всегда связка cron + php решала все проблемы
Я наверное не понял тебя сначала извини. Думал ты как раз расскажешь про те задачи что не решить этой связкой

Ответы56671

358 19 авг, 22:42 358 1456671

>>1456630
А. Классическая задача - это запускать что-то раз в 10-15 секунд, кроном принципиально не решается.
Из реальных задач - у меня была задача максимально ускорить доставку писем клиентам (они содержали подтверждение платежей). Крон, который рассылал письма клиентам из очереди раз в минуту бизнес не устраивал. Решается такое как раз набором демонов, вычитывающих всё из очереди в тот же момент, когда оно туда попадает.
Ещё, у меня была задача подгружать много данных из разных источников, компоновать их, и возвращать в едином списке. Понятно, что кэшировалось, но изначально-то это была композиция ассинхронных запросов. Решал через по тем временам модный Gearman.
С сокетами тоже была задача, как раз нужно было слать пуши на девайс и обратно, причём быстро. Вообще на php есть Ratchet, который вроде как умеет в сокеты, но я тогда (уже не помню, по какой причине) написал простенький прокси на socket.io, который умел принимать http-запросы из php и пересылать их на девайс, принимать запросы с девайса и пинать php по http. Тут могла бы быть проблема в случае добавления новых нод (потому что пришлось бы как-то узнавать, к какому из инстансов ноды прицеплен конкретный пользователь), но там трафика было достаточно мало, чтобы этим пока что не заморачиваться. Если бы понадобилось, то, наверное, хранил бы в каком-нибудь хранилище (редисе, к примеру) связку пользователь-девайс-нода.

Ответы56760

359 20 авг, 00:00 359 1456709

>>1456283
codewars. Там вроде уже есть клан двачеров, но лучше не вступай туда.

360 20 авг, 00:03 360 1456711

>>1456579
>Этот вопрос уже 100500 раз обсосан
Только не рвись, дружок.

361 20 авг, 02:00 361 1456733

У меня небольшой вопрос twig и slim. Делаю сайт, на каждой странице сайта нужно выводить список категорий из бд. Я поместил код получения из бд в middleware и там же добавляю массив категорий как сервис twig, чтобы каждый раз не писать это в контроллерах. Все правильно делаю? Мне кажется, что это сложное решение, и можно как-то проще сделать...

Ответы5674756917

362 20 авг, 04:42 362 1456747

>>1456733
в контроллере собирай массив и передавай во вью

Ответы56785

363 20 авг, 07:08 363 1456760

>>1456671
Интересно. Спасибо

364 20 авг, 09:22 364 1456785

>>1456747
А если у меня 100 вью, то каждый раз в ручную передавать?

Ответы5691857051

365 20 авг, 11:50 365 1456817

Анонче, помоги с апачем. Делаю автоматические поддомены.

Сейчас мой 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 править

Ответы5687656914

366 20 авг, 14:58 366 1456876

>>1456817
Тысячу лет не имел дел с апачем, но вообще поддомен выглядит, как отдельный виртуальный хост. Может, там можно плейсхолдер херануть, чтобы у тебя, к примеру, было два виртуальных хоста, *.domain.com и domain.com

367 20 авг, 15:56 367 1456914

>>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" есть на этой же странице выше.

368 20 авг, 16:10 368 1456917

>>1456733

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

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

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

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

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

...

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

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

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

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

368 20 авг, 16:10 368 1456917

>>1456733

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

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

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

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

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

...

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

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

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

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

Показать весь текст
Ответы5699757371

369 20 авг, 16:13 369 1456918

>>1456785

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

$viewData = addCommonViewData($app, $viewData);

370 20 авг, 17:46 370 1456953

>>1456472
Декомпозируй задачу

371 20 авг, 18:36 371 1456997

>>1456917
Спасибо большое! У меня теперь ещё один вопрос последний: ещё в middleware я ограничиваю доступ неавторизованных пользователей к некоторым разделам сайта. Это правильно, или фильтрацию надо в другом месте делать?

Ответы57174

372 20 авг, 19:41 372 1457051

>>1456785
Ты создай контроллер а остальных наследуй от него

373 20 авг, 22:48 373 1457174

>>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) отсюда и такое поведение.

374 20 авг, 22:50 374 1457176

>>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

374 20 авг, 22:50 374 1457176

>>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

Показать весь текст
Ответы57430

375 20 авг, 22:51 375 1457179

>>1456059

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

>>1456004

"менеджер сущностей" имеет свои плюс: он умеет сам искать изменения. Ты изменил (или создал) сущность и несколько связанных с ней, и одной командой все изменения находятся и сбрасываются в БД в нужном порядке. Хотя, конечно, это можно реализовать и в ActiveRecord.

376 21 авг, 11:03 376 1457371

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

377 21 авг, 12:33 377 1457430

>>1457176
> Или ты имел в виду простые задачки по основам?
Так точно.

378 21 авг, 14:00 378 1457560

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

379 21 авг, 14:14 379 1457586

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

Вот записывать так сложные условия - уже не очень.
А строка типа
hui && pizda читается изи.

Ответы57600

380 21 авг, 14:16 380 1457589

>>1453317
Правда, жалко, это не работает с конструкциями языка. Только с функциями.
Например, unset () так не сделаешь

381 21 авг, 14:18 381 1457595

>>1455474
>Апач не используют по другой причине.
А более вменяемая и легкая настройка - это недостаточная причина?
Всегда люто блевал с этого апача, прежде чем научился настраивать это говно.
Nginx освоил за неделю, ибо там все в полторы строки делается.

382 21 авг, 14:21 382 1457600

>>1457586
я другой анон, но тоже не понимаю зачем вы if в сточку пишите. Мне читабельности не добавляет. Зачем экономить? Может ты еще и туалетную бумагу бережешь и пакетик три раза завариваешь? Смотри какая экономия выходит

Ответы57769

383 21 авг, 17:42 383 1457769

>>1457600
>Зачем экономить?
Затем, чтобы методы по 500 строк не были

Ответы57859

11 Кб, 480x270
384 21 авг, 17:43 384 1457771

Как изменить ключи во время итерации по многомерному массиву?

Ответы59603

385 21 авг, 19:35 385 1457859

>>1457769
>методы по 500 строк
Неправильно декомпозируешь скорее всего. Ещё и на читабельности начинаешь экономить.

Много коротких строк лучше чем мало длинных.

213 Кб, 1861x2008
386 21 авг, 22:06 386 1457981

Table_1

NameName_id
===================
Eva 222222
Joe 333333

Table_2

IdValueUnique_id
===================
8880 222222
99100 333333

Card

Card_nameCard_valueCard_id
===============================
Eva 20 88

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

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

213 Кб, 1861x2008
386 21 авг, 22:06 386 1457981

Table_1

NameName_id
===================
Eva 222222
Joe 333333

Table_2

IdValueUnique_id
===================
8880 222222
99100 333333

Card

Card_nameCard_valueCard_id
===============================
Eva 20 88

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

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

Показать весь текст
Ответы57987581445817858550

387 21 авг, 22:14 387 1457987

>>1457981
https://stackoverflow.com/questions/4361774/mysql-update-multiple-tables-with-one-query

Ответы58027

388 21 авг, 23:08 388 1458027

>>1457987
Спасибо, я уже это вчера читал. Это совсем не то, кстати.
У меня не обновление множества форм за раз, а отправка имени в пустое поле уже готовой формы и (самое сложное, из-за чего проблема-то) нужно с налёта сверить это имя с именем в 1й таблице и только потом скопировать уже имеющиеся значения в 3й таблице, сверив айди имени 1й таблицы с айди мени во 2й. Здесь вроде триггер нужен, но это пока сложно для меня.

389 22 авг, 04:41 389 1458144

>>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'

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

Ответы5831458405

390 22 авг, 07:53 390 1458178

>>1457981
Если я правильно тебя понял то http://sqlfiddle.com/#!9/ef7058/1 (update в левой панели).

5 Кб, 623x75
391 22 авг, 10:36 391 1458246

Заказал хостинг от GoDaddy. В phpinfo() выводит вот это.

Как жить дальше? Можно ли поменять api на apache или nginx?

Ответы58343

392 22 авг, 12:19 392 1458314

>>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 в момент её заполнения и тут же выполнять другие действия, основываясь на этом имени и уникальном айди на лету за раз.

>Я бы советовал тебе прочесть
Спасибо, почитаю.

393 22 авг, 12:51 393 1458343

>>1458246

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

Ответы58634

394 22 авг, 12:56 394 1458346

>>1448813
Metanit.com

395 22 авг, 14:02 395 1458405

>>1458144
>Ты учел, что это обновит не одну строчку, а во всей таблице во всех строчках обновит поле?
Сделал
WHERE
`Card`.`Card_id` = 88
Теперь обновляет только нужную строчку, но всё ещё
>прибавляются все значения во всей таблице "Table_2"
а не к нужной айди имени...

32 Кб, 568x439
396 22 авг, 16:37 396 1458550

Пока самое чистое, что я >>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 А может всё же можно как-то без них? ?

Ответы59108

397 22 авг, 18:08 397 1458617

Аноны, тут можно вопрос по фремворкам задавать?

Ответы5862458747

398 22 авг, 18:19 398 1458624

>>1458617
Нет.

399 22 авг, 18:28 399 1458634

>>1458343
Спасибо за ответ.
В теъ. поддержке ответили что поменять api можно только на выделенном сервере.

400 22 авг, 20:02 400 1458747

>>1458617
Конечно, не стесняйся.

147 Кб, 832x680
401 22 авг, 20:45 401 1458774

/ Братишки, помогите разобраться.
Вот такой код. Выдаёт синтаксическую ошибку. Хотя синтаксической ошибки вроде как нет.
Не могу понять, тут какая-то неверная конструкция или что-то действительно не так с синтаксисом.
Пытался спросить у Гугла, не нашел ответ
/

<?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;
}
?>

Ответы5881458888

402 22 авг, 22:03 402 1458814

>>1458774
Версия пхп какая?

Ответы59010

403 23 авг, 00:28 403 1458888

>>1458774
У тебя не поддерживает указание типа возвращаемого значения. Возможно ты пишешь на php 5. Просто убери ": array". Должно заработать

Ответы59010

242 Кб, 1014x1024
404 23 авг, 10:19 404 1459010

>>1458814
>>1458888
Спасибо, няши. Добра. Несовместимость версий, действительно.

405 23 авг, 11:04 405 1459021

>>1449568

406 23 авг, 11:06 406 1459025

♥

407 23 авг, 11:14 407 1459037

Григории, только начинаю разбираться в гите. Поясните, если я пушнул свой проект на гитхаб, то туда скопировались ВСЕ коммиты и изменения? То-есть если в первых версиях у меня реальный пароль к базе данных сохранен был, то все на гитхабе его увидят? И это фиксится только удалением проекта на гитхабе, удалением папки гит на локалке, initом нового проекта на локалке уже без пароля в файлах и пушем в гитхаб? А можно как-нито сказать "удалите пожалуйста историю до такого-то коммита"?

Ответы59075

408 23 авг, 11:42 408 1459075

>>1459037

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

У Гитхаба есть мануал: https://help.github.com/en/articles/removing-sensitive-data-from-a-repository

Ответы59084

409 23 авг, 11:47 409 1459084

>>1459075
Благодарю, то что нужно

410 23 авг, 12:03 410 1459108

Совсем никаких подсказок по этому >>1458550
? Эх...

Ответы59306

411 23 авг, 15:00 411 1459306

Уже не надо. Всё решил одним апдейтом, как и хотел.
>>1459108

412 23 авг, 15:17 412 1459317

173 Кб, 1440x900116 Кб, 1440x900

ПАМАГИТИ

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

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

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

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

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

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

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

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

Ответы593405934460202

413 23 авг, 16:02 413 1459340

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

Хуетой занимаешься.

Ответы59384

414 23 авг, 16:12 414 1459344

>>1459317

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

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

https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/
https://mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/

Ответы59424

415 23 авг, 17:51 415 1459384

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

мимо

Ответы59760

416 23 авг, 18:40 416 1459414

Смотрю исходники вордпресса - ну там и ад. Всё валится в кучу - и шаблоны, и пхп-код, функции отдают на вывод когда захочется автору. Осспаде, что за продукт говнокодера? Похерено очень многое из принципов разработки - никаким солидом там и не пахнет даже рядом.
Узнал, что можно жс-код прямо в пхп-функциях прописывать, а потом выводить на страничку. У автора наверняка была шизофрения.

Ответы59452

417 23 авг, 18:47 417 1459424

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

418 23 авг, 19:28 418 1459452

>>1459414
>вордпресса
Всегда было поделием для пиндосских домохозяек. Сорт оф эпл в мире бложиков. Чего ты ожидал?

Ответы59505

419 23 авг, 19:41 419 1459458

как работает такая махина,как фейсбук?

Ответы59494

420 23 авг, 20:22 420 1459494

>>1459458
На реактивной тяге Цукера.

421 23 авг, 20:38 421 1459505

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

422 23 авг, 20:44 422 1459508

как вам статья?
http://phpfaq.ru/pdo

Ответы59513

423 23 авг, 20:53 423 1459513

>>1459508
Вроде норм.

424 23 авг, 21:14 424 1459521

там ларавел 6 вышел!

425 23 авг, 22:29 425 1459603

>>1457771
Делай новый массив

426 23 авг, 23:10 426 1459626

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

Ответы59702

427 24 авг, 02:06 427 1459702

>>1459626
На кого учишься?

428 24 авг, 09:23 428 1459760

>>1459384
>Кстати, а какие есть действительно годные курсы для новичка по php?
https://www.php.net/manual/ru/langref.php

Ответы59900

429 24 авг, 13:16 429 1459900

>>1459760
А видеокурсы?

430 24 авг, 14:07 430 1459944

>>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 столбцов и нужного количества строк.
Охуенно простая формула, целочисленное деление (с округлением вниз) + остаток от деления всегда дают точные номер строки и столбца для данных.
Во многих случаях облегчает жизнь.

Ответы60051

431 24 авг, 15:20 431 1459983

режим обработки ошибок обязательно пихать в пдо?

432 24 авг, 15:25 432 1459986

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

Ответы60011

433 24 авг, 15:47 433 1460011

>>1459986
в мыВамПерезвоним тредах писали что платят за пшп меньше, но вакансий/работы в разы больше

Ответы60031

434 24 авг, 16:04 434 1460026

Опчик, если у тебя будет время, посмотри, пожалуйста, список студентов https://github.com/baraboolka/StudentList
сайт http://koromiav.beget.tech/students/public/

435 24 авг, 16:09 435 1460031

>>1460011
Платят меньше по сравнению с чем?

41 Кб, 815x497
436 24 авг, 16:20 436 1460036

>>1446969 (OP)
ДА КАКОГО ХУЯ БЛЯТЬ. Я В РЕЗЮМЕ НЕ ПИСАЛ ЧТО ЗНАЮ ВОРДПРЕСС ОНИ ЕБАНУТЫЕ?????

Ответы6003960067

437 24 авг, 16:23 437 1460039

>>1460036
Опарыш-неосилятор, ты?

Ответы60042

438 24 авг, 16:41 438 1460042

>>1460039
твой батя

Ответы60070

439 24 авг, 16:52 439 1460051

>>1459944
только что вышел из спячки
>[$year, $month, $day] = $this
Теперь можно без list($year, $month, $day) ?
Пили еще мне нравится.

440 24 авг, 17:06 440 1460067

>>1460036
А что ты хотел, уча пхп?

Ответы6007160074

441 24 авг, 17:09 441 1460070

>>1460042
Припекло попочку рукожопу-неумехе, лол

Ответы6007260074

442 24 авг, 17:09 442 1460071

>>1460067
Я хотел создавать сайты. А не разбираться в готовых плагинах.
Помимо пхп я знаю кучу других языков. К тому же ПХП был в учебной программе, а вот вордпресс нихуя.

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

Ответы603196032560359

443 24 авг, 17:10 443 1460072

>>1460070
хочешь срать иди в б там посри. Здесь успешные люди сидят.

Ответы60078

629 Кб, 1913x680
444 24 авг, 17:12 444 1460074

>>1460067
>>1460070
Лучше объясните как эту ебалу всунуть в вордпресс. Мне самому компонент создавать придется? Я нихуя с CRM не работал ктонибудь ХЕЕЕЕЕЕЛП

Ответы600766008360193

445 24 авг, 17:18 445 1460076

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

Ответы60082

446 24 авг, 17:18 446 1460078

>>1460072
Угу. Успех уровня /зк.

447 24 авг, 17:25 447 1460082

>>1460076
>Нахуй ты берёшься за эту работу, если нихуя не имеешь опыта в вп?
ВО 1) вакансия без опыта работы. Т.к. я сам без него. Там были скилы php js mysql и тд стандартный набор. Я откликнулся потому что думал меня там азам научат, что логично, потому что вордпрессу в учебных заведениях не обучают.
ВО 2) в резюме указан гитхаб аккаунт с моими проектами. Смысла в тестовых заданиях я не вижу по этой причине.

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

Ответы60399

448 24 авг, 17:27 448 1460083

>>1460074
Моё лицо когда попросили запихать верстку в вордпресс.

Ответы60086

449 24 авг, 17:30 449 1460086

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

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

Ответы601196019060240

450 24 авг, 18:37 450 1460119

>>1460086
Попробуй там https://2ch.hk/web/res/109087.html (М) поспрашивать

451 24 авг, 18:54 451 1460140

Что помимо php необходимо знать, чтобы можно было откликаться на вакансии и не быть посланным из-за того, что знаешь недостаточно или вообще нихуя?

Ответы60360

452 24 авг, 20:04 452 1460190

>>1460086

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

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

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

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

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

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

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

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

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

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

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

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

Ответы60233

453 24 авг, 20:06 453 1460193

>>1460074

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

Ответы60231

454 24 авг, 20:23 454 1460202

>>1459317
ЗАМЕЧУ!
>localhost то же что 127.0.0.1
В свое время сильно погорел на этом на Винде. Пока писал везде localhost думал что код тормозит, искал где мог лохануться. Потом попросил друга запустить, а у него Линукс. И все залетало. Когда руки дошли это поменять у меня в коде, и все стало нормально, жопа хорошо так сгорела. До этого думал что программирование прямое как стрела, а оказалось рекой с камнями.

Ответы69880

455 24 авг, 21:14 455 1460231

>>1460193
опечатался соре. но все и так поняли что я имел ввиду

456 24 авг, 21:18 456 1460233

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

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

457 24 авг, 21:23 457 1460240

>>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>';
и вроде работает. Если эту страницу подредактировать, поменять пути какие-нибудь, у тебя будет инструмент в админке для загрузки/редактирования твоих картинок. Останется в шаблоне главной страницы вывести загруженные файлы в верстку. Это очень топорный способ, по уму надо читать документацию, которую аноны выше предложили по созданию всяких модулей/плагинов. Но это может хоть как-нито помочь. Другой путь - сходить на рутрекер или другой ресурс, скачать плагин для вордпресса с каруселью и на его основе свой сделать

458 24 авг, 22:20 458 1460274

как на swoole делать сайт?

459 24 авг, 23:37 459 1460312

Привет
Решил что одному учиться грустно и ищe единомышленников, желательно адекватных с которыми можно обсудить проблемы/вместе писать проекты. Наверно это нужно писать в /soc но тем не менее.
Если что почта для связи korzinadlyamusnd,oraANUSgmaP\0ilPUNCTUMc,8Mom

Ответы60327

460 24 авг, 23:46 460 1460317

Как мимокрокодил, хочу сообщить вам, что php - говно.

Ответы60396

461 24 авг, 23:50 461 1460319

>>1460071
Как раз программист и разберётся, даже начинающий. А вот крикливое хуйло без скиллов будет бегать по форумам и просить чтобы ему всё разжевали.

462 25 авг, 00:03 462 1460325

>>1460071

А что ты хотел?
Php в России сейчас на 90%+ ВП, Юми и Битрикс.
Либо ращуй глаза перед отправкой резюме, либо пиздуй в другие языки, раз уж ты много их знаешь.

Ответы6033160332

463 25 авг, 00:10 463 1460327

>>1460312
>одному учиться грустно и ищe единомышленников
В смысле - всей кучей тех же студентов из ОПпоста писать? Зачем?
Тебе ментора искать надо, а не единомышленников.

464 25 авг, 00:27 464 1460331

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

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

Ответы60335

465 25 авг, 00:28 465 1460332

>>1460325
Алсо проблема в том что мне очень нравится веб-разработка, но и программирование тоже. Что делать собственно?

466 25 авг, 00:33 466 1460335

>>1460331

На шарме тоже докуя веба.
Кури net core.

Ответы60342

467 25 авг, 01:11 467 1460342

>>1460335
Но жалко что в рашке это нихуя не популярно. Я же сидел на апворке ахуел сколько там заказов на сишарпе. Эх ну почему так?

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

Ответы60357

468 25 авг, 02:51 468 1460357

>>1460342

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

А там уже учись дальше и сможешь найти любой проект/стек/коллектив/условия.

Ответы60617

469 25 авг, 03:01 469 1460359

>>1460071
Как же я тебе двачую блядь. Как заебали эти битриксы блядские.

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

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

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

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

Отдельное горение возникает от того, когда клиенту надо поменять чтобы что-то готовое было другим блядь. ЕСЛИ ТЕБЕ НЕ ПОДХОДЯТ ГОТОВЫЕ РЕШЕНИЯ - ПРОСИ МЕНЯ НАПИСАТЬ СВОЮ ПРОГРУММУ НА ФРЕЙМВОРКЕ ИЛИ ВАНИЛЬНЫМ КОДОМ, А НЕ ПЕРДОЛИТЬСЯ С ЭТИМ ГОВНОМ

Ответы60364

470 25 авг, 03:12 470 1460360

>>1460140
очевидный mysql
html/css - это мастхэв для любого ЯП в принципе
js - тоже мастхэв для всех, но достаточно знать его по верхам

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

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

Так например когда я устраивался я вообще толком не шарил в линупсах и администрировании серверов, расчехлился начал уметь это все настраивать - ЗП подняли, а я и не против - мне интересно.

Ответы60418

471 25 авг, 03:49 471 1460364

>>1460359
>Отдельное горение возникает от того, когда клиенту надо поменять чтобы что-то готовое было другим блядь.

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

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

Мне это напоминает какое-то болото, клиент использует какой-то популярный продукт, который не всегда к месту(интернет магазин на вп это сильно конечно), а потом на фрилансе заказы в стиле "всего лишь добавить один дропдаун, если вы ебать охуенный спец то дело на 5 мин" а там на самом деле чтобы этот дропдаун добавить раком пол дня стоять потому что везде спагетти из говна и палок, и "разработчик" вместо того, чтобы написать 10-20 строк кода за 30 минут, пол дня сидит и кликает мышкой по настройкам, что-то руками вбивает в бд, хакает кор фреймворка и т.д.

Ответы60379

472 25 авг, 06:58 472 1460379

>>1460364
И чем фреймворк так сильно от цмс-ки отличается, кроме количества готового кода?

Ответы603926044560480

473 25 авг, 08:58 473 1460392

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

Ответы6040060413

474 25 авг, 08:59 474 1460393

Manga4you
- добавил пару сайтов
- починила автозум
- сделал кэширование страничек
В планах:
- Запоминать позицию на странице
- отправлять главу в кэш

475 25 авг, 09:17 475 1460396

>>1460317
брикинг ньюс!

476 25 авг, 09:24 476 1460399

>>1460082
Пидораха как есть. Идёт на работу, чтобы его научили. Качаешь вп и изучаешь.

Ответы6061460636

477 25 авг, 09:25 477 1460400

>>1460392
> современные цмски с нормальным кодом
это какие?

Ответы60405

478 25 авг, 09:45 478 1460405

>>1460400
https://github.com/pagekit/pagekit
https://github.com/ezsystems/ezplatform

много их

Ответы60479

479 25 авг, 10:40 479 1460413

>>1460392
Это не говнокод, это НАСЛЕДИЕ доООПшных времён.

480 25 авг, 11:11 480 1460418

>>1460360
Сколько зарабатываешь?

мимо
мимо Дудь

481 25 авг, 11:59 481 1460445

>>1460379
>цмс-ки
Работают на уровне пользователя - чтобы быстренько навасянить что-то из готовых плагинов и тем. Обычно довольно сильно ограничены по функционалу и заточены под что-то одно. Часто является морально устаревшей хуйней.
Много откровенных говнокодеров и плохая безопасность как следствие.

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

Ответы6044660453

482 25 авг, 12:01 482 1460446

>>1460445
а если писать на чистом пхп-это какая категория?

Ответы60460

483 25 авг, 12:12 483 1460453

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

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

Ответы60623

484 25 авг, 12:17 484 1460456

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

Ответы60461

485 25 авг, 12:20 485 1460460

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

486 25 авг, 12:23 486 1460461

>>1460456
1 Коды в одном файле - используй переменную
2 Коды в разных файлах - используй include
3 Коды в разных файлах и помещены в классы - используй автозагрузку классов. Например композером.

487 25 авг, 12:44 487 1460474

а как обезопасить то,что я передаю из формы в код?

Ответы60475

488 25 авг, 12:46 488 1460475

>>1460474
intval(), strval() и подготовленные выражения в pdo.

489 25 авг, 12:54 489 1460479

>>1460405
>composer
Ясно.

490 25 авг, 12:55 490 1460480

>>1460379
Основное отличие, с точки зрения разраба - фреймворки сделаны для того, чтобы можно было писать расширяемый/дополняемый/изменяемый код. ЦМС - чтобы подключать готовые решения из админки, править тамошний код - побочная хуйня.

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

491 25 авг, 12:58 491 1460483

вам нравиться работать с пхп?

Ответы60485

492 25 авг, 13:02 492 1460485

>>1460483
без мягкого знака

493 25 авг, 13:31 493 1460502

Интересная фича в Sublime Text 3:
Можно выделить всю строку если нажать на ее номер. Так-же можно выделять несколько строк.

Ответы6050660540

494 25 авг, 13:33 494 1460506

>>1460502
И еще одну фичу нашел — можно создавать новый файл при двойном клике на поле с вкладками.

Ответы60540

Список студентов 495 25 авг, 14:14 495 1460537

Оп, доделал твоё задание со списком студентов, проверь пожалуйста.
Чувствую наговнокодил.. но вроде всё работает..
Правда поиск только по одному слову ищет, так и не понял как сделать поиск по нескольким словам(а нужен ли он вообще?).
https://github.com/hikkej/student_list

496 25 авг, 14:24 496 1460540

>>1460506
>>1460502
Абалдеть. А блоки кода можно схлопывать?

497 25 авг, 16:32 497 1460614

>>1460399
А где по твоему опыт я буду брать? Из онлайн туториола? Чтобы потом работодатель говорил "мы нитак делаем пошел нахуй"?

И вообще что значит научили? Программировать я умею а вот в сраном ВП не шарю. Здесь нет моей вины.

Ответы6075660786

498 25 авг, 16:37 498 1460617

>>1460357
Да было бы все так просто. У меня фобия что из-за того что нет военника меня никуда не возьмут. + все вакансии это вп ебучий.

499 25 авг, 16:43 499 1460623

>>1460453
Посмотри сколько Битрикс стоит

Ответы60660

500 25 авг, 16:59 500 1460636

>>1460399
>Качаешь вп и изучаешь
я не он, но кто его кормить будет пока он учится? И кстати да, вп скачать можно, а вот битрикс...

Ответы60639606496066160757

501 25 авг, 17:02 501 1460639

>>1460636
Бля с биртиксом делал тестовое неделю назад. HR говорит сделай за день ну я и сделал в итоге он начал пиздеть что нихуя не может проверить. Завтра типа сможет. Но завтра он не написал и вообще нихуя не ответил.
Наес тестовые задания))))))))
Алсо реквестирую способы борьбы с такими пидорасами.

Ответы60644

502 25 авг, 17:09 502 1460644

>>1460639
Вангую что они уже нашли кого то.

503 25 авг, 17:32 503 1460649

>>1460636
Битрикс тоже можно скачать.
Мимо, ковыряюсь в нем

504 25 авг, 18:12 504 1460660

>>1460623
Доплачивать всё равно придётся.

505 25 авг, 18:13 505 1460661

>>1460636
>кто его кормить будет пока он учится?
А кого это ебёт? Работодатель ему мамочка что ли? Повзрослейте уже.

Ответы60668

506 25 авг, 18:32 506 1460668

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

Ответы60676

507 25 авг, 18:32 507 1460669

>>1446969 (OP)
Какую зп джуну просить в дс2 без опыта работы?

Ответы6067460688

508 25 авг, 18:38 508 1460674

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

Ответы60679

509 25 авг, 18:40 509 1460676

>>1460668
>по твоей логике выходит
>сразу из роддома работать пошел
У тебя проблемы с пониманием контекста?
Речь о работодателе идёт.

510 25 авг, 18:45 510 1460679

>>1460674
Все деньги Москва сжирает, а потом перераспределяет по регионам. Так в чем виноват я житель дс2?

511 25 авг, 19:07 511 1460688

>>1460669
50-55 если ты хорош в пет-проектах и тех интервью.

Ответы60736

512 25 авг, 20:06 512 1460710

Может тупой вопрос, но можно ли как-то сделать так, чтобы при создании какой-то новой хуйни в базе данных на phpmyadmin ей, согласно автоинкрименту давался айди не в зависимости от того, какой она по счету в принципе создается, а в зависимости от того, какой самый большой айди уже имеется в базе данных?
Не очень понятно сформулировал, наверное. Суть в том, что, допустим, если я удаляю из базы данных что-то с айди 7, к примеру, то при создании следующего объекта ему будет присвоен 8-ой, в то время как я хочу, чтобы был 7-ой айди, потому что он не занят после удаления старого. В общем, как сделать, чтобы так сделать? Сорри за косноязычность.

Ответы6071160714

513 25 авг, 20:09 513 1460711

>>1460710
Это делается тригерами.

Ответы60719

514 25 авг, 20:19 514 1460714

>>1460710
Анон, а зачем тебе так делать? Если ты хочешь в таблице, например, фамилий вывести слева столбец с красивыми числами по-порядку, то это не айдишники надо выводить, а тупо сделать какой-нибудь $num-плюс-плюс. Зачем еще такая штука может понадобиться?

Ответы60718

515 25 авг, 20:24 515 1460718

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

Ответы607376092760933

516 25 авг, 20:26 516 1460719

>>1460711
Вот этими?
https://habr.com/ru/post/37693/
Спасибо. Еще бы какой-нибудь гайд по этим триггерам исчерпывающий.

Я пока что совсем новичок в программировании.

55 Кб, 670x520
517 25 авг, 20:47 517 1460731

Аноны, простите за тупой вопрос. Учу ларавель по скачаному видеоуроку про форум на английском. Так вот парень который снимал один раз использовал be(), а в другом уроке начал юзать actingAs(). Собсна вопрос: а какая разница между ними, если один метод просто вызывает другой. Если так, то зачем он нужен?

Ответы60869

518 25 авг, 20:53 518 1460736

>>1460688
Бля стояло 50к и ни одна сука не взяла на работу. Такое ощущение что туда приходят додики за 35к. В итоге рыночек решает что я не рентабелен. Может такое быть?

Стоит ли мне понизить планку до 35-45к ради опыта работы?

Ответы6074760869

519 25 авг, 20:53 519 1460737

>>1460718
Да и нормально. У тебя какой-то нездоровый перфекционизм.

520 25 авг, 21:04 520 1460747

>>1460736
Что значит стояло? На собесе обсуждали зарплату?
Что умеешь вообще?

Ответы60761

521 25 авг, 21:08 521 1460748

Сап, анон, нужно завернуть xml с рандомного сайта, как сделать не используя curl?

Ответы60852

522 25 авг, 21:20 522 1460756

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

Дебил ты ебаный ну сколько тебе лет? Залупа ты дроченая, ну хуле ты такой тупорылый?

Ответы6076160869

523 25 авг, 21:22 523 1460757

>>1460636
Волка ноги кормят. Ещё один даун блядь. Учится надо в перерывах между работой. Хоть грузчиком, хоть таксистом, а в свободное время учеба.

Ответы60850

524 25 авг, 21:24 524 1460761

>>1460747
>Что значит стояло?
Значит что я сейчас думаю делать ли ниже ЗП в резюме на хх.ру.
В данный момент стоит 50к рублей. Изначально в начале августа при создании резюме я столько указал.

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

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

>>1460756
Мне 20 лет. А вообще пошел нахуй с таким общением.

Ответы6077360779

525 25 авг, 21:49 525 1460773

>>1460761
Ты очень "душный тип", судя по постам. Возможно отлетаешь из-за people skills.
По частям:
>Умею PHP, Symfony, MySQL, JS ES6, HTML5, CSS.
На гитхабе есть что показать сложнее круда?

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

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

Как ты в 20 лет уже с дипломом, поступил в 15?

Ответы6077760869

526 25 авг, 21:59 526 1460777

>>1460773
Я же писал что в шараге учился "изучали в шараге". Конкретно ФСПО.
Мне люди никогда не говорили что я душный. Наоборот веселый позитивный.

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

Но как поступить с заработной платой? Ты сам с какого города?

527 25 авг, 22:01 527 1460779

>>1460761
> Мне 20 лет. А вообще пошел нахуй с таким общением.

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

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

Ох блядь и дуры вы дурные.

528 25 авг, 22:12 528 1460786

>>1460614
>Программировать я умею а вот в сраном ВП не шарю
Значит не умеешь.
Что за нытьё вообще? Либо умеешь и делаешь, либо идёшь нахуй с поезда.

529 25 авг, 23:58 529 1460850

>>1460757
Ты лицемер. Уверен, тебя все детство содержали родители, кормили, одевали. И что-то я не думаю, что ты отвергал их помощь, крича "Я ВОЛК МЯМЯ РЫЫЫ!" И мат тебя не красит, ты не выглядишь взрослее и мужественней, наоборот, мат - это показатель идиота

Ответы6085960883

530 26 авг, 00:02 530 1460852

>>1460748
а через file_get_contents не получается?

531 26 авг, 00:19 531 1460859

>>1460850
С чего ты решил, что работодатель должен к тебе относиться как родитель? Ты у начальника ещё сисю попроси в обед - быстро трудовую на руки получишь.

Ответы60869

532 26 авг, 00:35 532 1460869

>>1460859

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

>>1460773

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

>>1460756

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

>>1460736

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

>>1460731

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

Ответы6087260883

533 26 авг, 00:42 533 1460872

>>1460869
>Прекращайте бесполезный флуд
А то что?

Ответы61002

534 26 авг, 01:10 534 1460883

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

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

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

535 26 авг, 04:17 535 1460927

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

536 26 авг, 05:01 536 1460931

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

Ответы6093460959

537 26 авг, 05:12 537 1460933

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

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

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

538 26 авг, 05:17 538 1460934

>>1460931

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

Хороший разработчик способен разобраться и в том, и в том.

Ответы60950

539 26 авг, 07:40 539 1460948

>>1446971
Ставлю ; после }, отбиваю вложения табуляцией.

540 26 авг, 07:56 540 1460950

>>1460934
Я вкатывальщик 19 лвла, есть заказ на автомобильный магазин. Клиент не шарит вообще и был найден по сарафанному радио ( т.е не крупная какая-то сеть, а частник). Последние два дня повкатывался в CMS (Modx,WP). В целом я как программист могу и обойтись без этого. Но хочется с этим проектом продвинутся в теме современного веба, А то мне подумалось что самописы это изобретение велосипедов, поправь мои рассуждения, если я не прав.

541 26 авг, 09:13 541 1460959

>>1460931
Интернет-магазины сейчас не нужно писать, это глупо. Там до жопы фич нужно, заказы, корзины, интеграции с платёжными системами, выгрузки, купоны, акции, скидки, витрины, напоминания, dwh и прочая и прочая.
Полноценно писать такую систему очень долго (несколько лет) и сложно (потому что это коммерц, там много нетривиальных задач), и написать её хорошо сразу не получится (те системы, что уже есть на рынке, развиваются и пишутся последние лет 10, множеством программистов).
Конечно, можно начать с нуля и потихоньку наворачивать одну фичу над другой, но во-первых это будет обрекать тебя на цикл разработки сразу же, как захочется хоть что-нибудь изменить, а во-вторых некоторые вещи вроде event sourcing'а закладываются в архитектуру сразу же и я не верю в то, что ты сумеешь заложить сразу всё правильно.
Да и бизнесу это всё не нужно.
Короче, если у тебя рядом (или ты сам) сидит мамкин бизнесмен и хочет себе интернет-магазин - бусть башляет 1000 рублей любой онлайн-платформе для этого и получает сразу вообще всё готовое. Максимум, потратится на дизайнера и фронтендщика. Зато ему не придётся думать о хостинге, бекапах и прочем.
Если есть твёрдое решение хоститься у себя - берите уже готовое решение, магенту, друпал коммерц (есть сборка commerce kickstart), вордпресс (у него должны быть плагины) и т.п.

542 26 авг, 10:58 542 1461002

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

Ответы61076

95 Кб, 1360x768
543 26 авг, 11:08 543 1461009

Двачик помоги в пхп слаб!

Ответы61032

96 Кб, 1360x768
544 26 авг, 11:26 544 1461024

еще это плиз https://jsfiddle.net/leomac/agrw5fud/

35 Кб, 800x375
545 26 авг, 11:39 545 1461032

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

546 26 авг, 11:56 546 1461048

Здравствуйте, тред как всегда фиг найдешь. Пусть и не релейтед но мб кто знает ответ на мой вопрос. Все таки мой родной тред.

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

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

По сути вопрос в том, что есть ли какой-то механизм, когда пользователь ливает со страницы на другую, то какой-то окуклить js и перенести его на другую страницу?

Ответы61077

547 26 авг, 12:09 547 1461054

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

Ответы61057

548 26 авг, 12:10 548 1461057

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

Ответы61064

549 26 авг, 12:20 549 1461064

>>1461057
>Будешь не прогать а васянить одну херню к другой.
Не понял.

Ответы61082

550 26 авг, 12:36 550 1461076

>>1461002
Шизоид, ты сейчас с другим человеком переписываешься.
В тред не вписываешься именно ты, со своими дружбой и понями. Вали на свой доброчан, двуличная скотина - заебал со своим нытьём.
Кто тебе вообще право дал - других одёргивать? У тебя гондурас опух выше всякой меры и хуесосят тебя тут по делу.

Ответы61097

551 26 авг, 12:37 551 1461077

>>1461048
Пытаться делать стабильный js внутри перезагружающейся веб-страницы противречит логике работы браузеров и, поэтому, бессмысленно.
Просто открывай по клику на это говно новое окно/вкладку, в которой уже и будет колл. Google так же делает в своём Hangouts по той же самой причине - при клике на видеозвонок открывается новое окно.

552 26 авг, 12:42 552 1461082

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

По теме, вкатываться никогда не поздно, но, как и всегда, лучше приложить максимум усилий для поиска достойного работодателя. Тебе потребуется работадатель с современным стеком (только symphony / laravel, всех васянов с yii/вордпрессом/самописками/прочим говном посылай сразу нахер), поставленным процессом(git, dev-stage-prod, код-ревью, ci/cd, докер и всё такое) и системой наставничества, чтобы ты мог получать знания от компетентных людей.
В противном случае влезешь в говноконтору и там и залипнешь на неопределённый срок, да ещё и плохих практик нахватаешься (а узнать, плохие они или хорошие не сможешь, т.к. опыта нет).

Ответы61120

553 26 авг, 12:57 553 1461097

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

Ответы61107

554 26 авг, 13:06 554 1461107

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

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

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

>только флудишь и оскорбляешь
Тебя ебать это не должно, полицай.

555 26 авг, 13:16 555 1461120

>>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% в СНГ подобных котор

Ответы61136

556 26 авг, 13:44 556 1461136

>>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 - писать код можно во вполне широких пределах, жертвуя миллисекундами в угоду читаемости кода и его поддерживаемости.
Уточню, я не имею ввиду "говнокодим и пофиг, оперативка дешёвая", я имею ввиду - слой абстракции, котороый структурирует код, упростив какие-то вещи, но будет требовать создания одного-двух объектов в рантайме - это неплохой компромисс.
Но всегда нужно руководствоваться критерием разумности и оправданности, конечно.

556 26 авг, 13:44 556 1461136

>>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 - писать код можно во вполне широких пределах, жертвуя миллисекундами в угоду читаемости кода и его поддерживаемости.
Уточню, я не имею ввиду "говнокодим и пофиг, оперативка дешёвая", я имею ввиду - слой абстракции, котороый структурирует код, упростив какие-то вещи, но будет требовать создания одного-двух объектов в рантайме - это неплохой компромисс.
Но всегда нужно руководствоваться критерием разумности и оправданности, конечно.

Показать весь текст
Ответы6113761161

557 26 авг, 13:44 557 1461137

>>1461136
> https://www.bangkokpost.com/media/content/dcx/2018/05/04/2749833_620x413.jpg).
Сорян, разметка поехала. Вот так правильно:
https://www.bangkokpost.com/media/content/dcx/2018/05/04/2749833_620x413.jpg

558 26 авг, 14:19 558 1461161

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

Ответы61179

559 26 авг, 14:38 559 1461179

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

> Асинк
Просто по статистике с сайтов вакансий, асинк пока не особо популярен. Да и никто не мешает делать асинк и симфони одновременно.
Тем более, что асинк сам-по-себе в пхп сделан через костыли. Я бы писал на обычном классическом php-fpm с симфоней обычный монолит, а узкие части писал бы на golang.

Ответы6123061244

560 26 авг, 15:39 560 1461230

>>1461179
Дико извиняюсь за тупой вопрос а как использовать php с другими языками на одном сервере?

Ответы612456124661266

561 26 авг, 15:52 561 1461244

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

разве что асинк должен появиться как стандарт в языке 8 пхп

562 26 авг, 15:53 562 1461245

>>1461230
нечего не мешает делить запросы через тот же nginx между разными софтинами на разных языках

Ответы6124661266

563 26 авг, 15:53 563 1461246

>>1461230
>>1461245
так же ещё вполне возможно через очереди например

Ответы61266

564 26 авг, 16:57 564 1461266

>>1461230
В итоге у тебя получаются несколько приложений, одно центральное - это монолит, а прочие - это сервисы, которые отвечают за отдельные аспекты функциональности, требующие производительности или специфических фич (вебсокеты, нейронки, многопоточная обработка).
В итоге у тебя возникнет три задачи, обеспечения этих сервисов, доступа к ним и поддержки.
Первое решается множеством способов в зависимости от стека, требований и просто вкусов создающих. Самый тупой и сомнительный вариант - запускать прямо из php через shell_exec. Самый простой из нормальных - поднимать всё ручками, рядом или на соседнем сервере. Самый хайповый - это kubernetes и прочие системы оркестрации.
По поводу второго камрады из
>>1461245
>>1461246
уже высказались. Тут нужно определиться с двумя вещами, типом взаимодействия и транспортом. Тип - это синхронные вызовы (по сути rpc, например, jsonrpc) или ассинхронные (событийность, подписка/отписка). Транспорт же может быть любым, это могут быть сетевые вызовы (http-запросы), может быть брокер сообщений (отдельная система по доставке, например, rabbitmq) или твои сервисы могут просто пользоваться одной и той же базой данных (сомнительный вариант, но иногда встречается).
Третье - это поддержка, и связан он с тем, что такие распределённые (состоящие из нескольких узлов) системы не так просто поддерживать, например, дебажить. Из очевидного, каждая из этих систем должна писать свои логи и ты должен понимать, как ты будешь их деплоить (потому что они будут разворачиваться не одновременно, что вызовет временные отказы в связанных компонентах). Из неочевидного, это какие-то общие конфигурации и трасировка: ты должен предусмотреть возможность понять, к какому запросу в монолит у тебя относится твоя задача в стороннем сервисе. Делается не особо сложно, генерируешь на уровне входящего запроса случайный идентификатор REQUEST_ID, прокидываешь его во все последующие запросы и пишешь во всех логах. Таким образом, поискав по всем логам всех сервисов по этому REQUEST_ID, ты поймешь кто и что вызвал, и почему.
Ну и в принципе, правильное логирование - залог стабильной системы.

564 26 авг, 16:57 564 1461266

>>1461230
В итоге у тебя получаются несколько приложений, одно центральное - это монолит, а прочие - это сервисы, которые отвечают за отдельные аспекты функциональности, требующие производительности или специфических фич (вебсокеты, нейронки, многопоточная обработка).
В итоге у тебя возникнет три задачи, обеспечения этих сервисов, доступа к ним и поддержки.
Первое решается множеством способов в зависимости от стека, требований и просто вкусов создающих. Самый тупой и сомнительный вариант - запускать прямо из php через shell_exec. Самый простой из нормальных - поднимать всё ручками, рядом или на соседнем сервере. Самый хайповый - это kubernetes и прочие системы оркестрации.
По поводу второго камрады из
>>1461245
>>1461246
уже высказались. Тут нужно определиться с двумя вещами, типом взаимодействия и транспортом. Тип - это синхронные вызовы (по сути rpc, например, jsonrpc) или ассинхронные (событийность, подписка/отписка). Транспорт же может быть любым, это могут быть сетевые вызовы (http-запросы), может быть брокер сообщений (отдельная система по доставке, например, rabbitmq) или твои сервисы могут просто пользоваться одной и той же базой данных (сомнительный вариант, но иногда встречается).
Третье - это поддержка, и связан он с тем, что такие распределённые (состоящие из нескольких узлов) системы не так просто поддерживать, например, дебажить. Из очевидного, каждая из этих систем должна писать свои логи и ты должен понимать, как ты будешь их деплоить (потому что они будут разворачиваться не одновременно, что вызовет временные отказы в связанных компонентах). Из неочевидного, это какие-то общие конфигурации и трасировка: ты должен предусмотреть возможность понять, к какому запросу в монолит у тебя относится твоя задача в стороннем сервисе. Делается не особо сложно, генерируешь на уровне входящего запроса случайный идентификатор REQUEST_ID, прокидываешь его во все последующие запросы и пишешь во всех логах. Таким образом, поискав по всем логам всех сервисов по этому REQUEST_ID, ты поймешь кто и что вызвал, и почему.
Ну и в принципе, правильное логирование - залог стабильной системы.

Показать весь текст
Ответы61275

565 26 авг, 17:08 565 1461275

>>1461266
А, ну и главное забыл. Ключ к правильной структуре приложения - это правильное разделение областей ответственности между компонентами (это не только в SOA, это в принципе так).
Соответственно, 95% логики должно быть в монолите, а в другие компоненты нужно выносить то и только то, что слишком тяжёлое/сложное/долгое для монолита. В идеале оно не должно быть связано с другими частями, будучи "чистой функцией": получает аргументы, возвращает результат, без вызовов в другие компоненты.
К примеру, у нас был монолит и нужно было генерировать огромные PDF'ки, что сильно выжирало процессор и оперативную память. Мы в тот раз написали отдельный маленький сервис, который получал данные для документа, генерировал pdf и слал её назад отдельным запросом. В итоге, мы вынесли тяжелый процесс в отдельное место (и он перестал влиять на производительность пользовательских запросов), сохранив неизменной бизнес-логику внутри монолита (методы "создай отчёт", "дай отчёт" остались в монолите, как и раньше).

566 26 авг, 18:10 566 1461339

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

Ответы61364

someApprentice !EaaiHmIJms 567 26 авг, 18:22 567 1461363

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

someApprentice !EaaiHmIJms 567 26 авг, 18:22 567 1461363

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

Показать весь текст

568 26 авг, 18:23 568 1461364

>>1461339
А добавлю что html/css знаю.

Ответы61461

569 26 авг, 19:42 569 1461412

можно ли на пхп замутить такое?
1 пользователь двигает объект с помощью жс
2 юзер видит это передвижение

570 26 авг, 21:18 570 1461461

>>1461364
Я сделал пару пет проджектов: "музыку вконтакте", где можно было грузить треки и проигрывать их и ещё аналог гисметео, карту России с прогнозами погоды по городам (тянул из какого-то апи). Ну и вроде классический туду лист слепил.
Приходил на собесы с ноутом, говорил, что джуниор, но вот смотрите, что сделал.
Потом было тестовое в одну контору, сделать блог без использования фреймворков. Я написал свой mvc фреймворк и уже на нём сделал тестовое.
В итоге взяли.
Но это было уже лет 6 назад, если не больше.

Ответы61491614976150461879

571 26 авг, 22:36 571 1461491

>>1461461
на какую зп?

Ответы61633

572 26 авг, 22:42 572 1461497

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

Ответы61635

573 26 авг, 22:57 573 1461504

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

На работу не пробовался ещё. Стрёмно как-то.

Ответы61635

574 26 авг, 23:14 574 1461517

Тест.

575 27 авг, 08:30 575 1461633

>>1461491
Будучи совсем ничего не знающим джуном работал за еду 20к, но довольно быстро зп выросла до 50к, а потом и до 70к (с бонусами иногда переваливало за 100к). В моём мухосранске это вполне себе деньги, но в итоге я через несколько лет после первого найма поменял работу и там уже в районе 150к начал получать.

Ответы61669

576 27 авг, 08:39 576 1461635

>>1461497
>>1461504
Советую запилить хотя бы один high-quality проджект, потому что
> Делал бота в телеграм, копался в темах вордпресса, парсил всякое говно, игрался разными с апи, лепил калькуляторы на жикуери и жс, тыкал палочкой ноду, есть гитхаб с собственной приватной помойкой на парочку проектов.
звучит, как "пробовал 100500 разных технологий, но всегда получалось говно". Ты пойми, как это будет выглядеть для работодателя. Твоё резюме будет смотреть сеньор (например, я). Он получит от HRа ссылку на твой гитхаб с просьбой оценить. Зайдёт на один проджект, посмотрит, поморщиться. Зайдёт на другой, блеванёт. На третий уже не зайдёт, напишет "чувак знатный говнокодер, в разработке не разбирается от слова совсем" и hr пойдёт писать тебе отказ (или тупо заигнорит, если овца).
Лучше собрать один эталонный проект по бест-практикам, который ты и будешь совать под нос всем работодателям.
Я бы взял laravel и реакт, прочитал бест практики, посмотрел примеры приложений и прочие скелетоны и написал бы, к примеру, двач. С анонимными постами, картиночками, тредами, цитатами, капчой и админкой. Ну и сверстал бы под мобилки его отдельно, конечно же.
Чтобы ревьювер (всё ещё, например, я) начал смотреть и такой: "Ага, паттерны. Ага, структура. Ага, конфиги. Ага, докер. Ага. Всё понятно, всё красиво, всё по стандартам. Ну вот тут шероховатости, но джуниор же, не страшно. Берём!"

Ответы617056175461765

577 27 авг, 09:47 577 1461669

>>1461633
для 6 лет назад вполне себе знания нет?

Ответы61671

578 27 авг, 09:55 578 1461671

>>1461669
Не понял вопроса.

579 27 авг, 11:06 579 1461705

>>1461635
>ТЫ ГАВНО А Я СИНЬЕР-РЕВЬЮЕР
Читаю такие высеры, и в очередной раз убеждаюсь, какое же среди прогеров высокомерное говно бывает. У нас на заводе был Дядьпаша такой же вахтер, который новичкам не помогал, а отбивал охоту работать. "Я бетон по часовой мешаю и вы мешайте, это технология!"
>ВОТ ТЫ СДЕЛОЛ МАЛЕНЬКИЙ ПРОЕКТ - Я ПОМОРЩЮСЬ И НИВАЗЬМУ ТИБЯ, А ВОТ КАК ТЫ ДВАЧ СДЕЛОИШЬ - Я СРАЗУ УВИЖУ СПИЦА!
А ты, дурачок, в его мелких проектах паттерны, структуру, конфиги не увидишь? Там стандарты какие-то другие? У тебя стандарты и красивый код от скольки-размерных-проектов начинаются?
Ты пойми, что ты мудак и отбиваешь человеку желание программировать. Почитает тебя ньюфаг и подумает вон "специалист" советует сразу большие проджекты писать, чтобы меня признали, сделаю как я фейсбук. И закономерно соснет, потому что он не знает как две переменные складывать, а ты его за большой проект сажаешь.

Ответы61764

580 27 авг, 12:46 580 1461754

>>1461635
Так-то у меня есть вещь, которую я 4 месяца на голом пхп задротил и 2 раза переписывал - там и паттерны и практики, и жопа с ручкой.
Обязательно фейсбук надо писать, чтобы очередной великий мастер оценил?
Про говно - ты сам придумал, а на деле за два дня это всё поднимается, если через композеровские либы делать. Да и дохуя как-то негатива у тебя в посте только на выдумке + какой-то подростковый максимализм.

Вчера вот на google cloud platform туторы проходил. Годно зделоли. Местными хостерами уже пользовался, теперь с этим хочу попробовать.

581 27 авг, 13:10 581 1461764

>>1461705
Чувак, у тебя явно пригорает и/или ты обижен на кого-то, поэтому взрываешься тут на адекватные советы.
Я анону сказал правдивую вещь: засылай на ревью хороший код, потому что небольшой качественно сделанный проект в глазах ревьювера (например моих) будет весить больше, чем 10 некачественно сделанных проектов. Увы, мир так работает, что людей оценивают по результатам и показывать нужно лучшее, что можешь вообще продемонстрировать.
Стандарты и паттерны у меня начинаются сразу, я в принципе стараюсь плохой код не писать, даже если нужно по-быстрому наговнякать - чтобы не страдать при поддержке и не отвечать за плохой код в будущем (когда спришвают "что за плохой код годичной давности" обычно аргумент "эээ, ну там сроки горели" не проканывает).
Далее, про большие проекты я не писал, как и не отбивал охоту. что-то делать. Я сказал чуваку выбрать стек, изучить бест-практики (в которых будут и конфиги, и паттерны и всё такое) и сделать настолько хороший проект, насколько он сможет. К слову, "написать двач" - довольно изичный пет проджект, не виду ничего "большого", где новичок "соснёт".
> сделаю как я фейсбук
> не знает как две переменные складывать
Вот и узнает. Ты забываешь, что мы не в детский сад играем, и чем меньше джун знает, тем сильнее он сядет мне на шею, если я его возьму. Если он будет знать, что нужно использовать конфиги, нельзя писать весь код в одном классе и нужно использовать ORM вместо кастомных запросов, то это значит, что мне можно будет больше времени объяснять ему, как сделать задачу, нежели как пользоваться инструментами и как складывать переменные.
Соответственно да, я ожидаю от джуна понимания на начальном уровне, как пользоваться языком программирования (чтобы он понимал, что такое "отнаследуй класс" и "реализуй интерфейс") и то, как следует пользоваться фреймворком (всё ещё на начальном уровне, что конфиги нужно выносить вот сюда, база данных описывается вот в таких классов и так далее). Я считаю это справедливым требованием, тем более, что изучать это действительно просто, заходишь в любой мануал "пишем блог на XXX" и там тебе всё распишут.

581 27 авг, 13:10 581 1461764

>>1461705
Чувак, у тебя явно пригорает и/или ты обижен на кого-то, поэтому взрываешься тут на адекватные советы.
Я анону сказал правдивую вещь: засылай на ревью хороший код, потому что небольшой качественно сделанный проект в глазах ревьювера (например моих) будет весить больше, чем 10 некачественно сделанных проектов. Увы, мир так работает, что людей оценивают по результатам и показывать нужно лучшее, что можешь вообще продемонстрировать.
Стандарты и паттерны у меня начинаются сразу, я в принципе стараюсь плохой код не писать, даже если нужно по-быстрому наговнякать - чтобы не страдать при поддержке и не отвечать за плохой код в будущем (когда спришвают "что за плохой код годичной давности" обычно аргумент "эээ, ну там сроки горели" не проканывает).
Далее, про большие проекты я не писал, как и не отбивал охоту. что-то делать. Я сказал чуваку выбрать стек, изучить бест-практики (в которых будут и конфиги, и паттерны и всё такое) и сделать настолько хороший проект, насколько он сможет. К слову, "написать двач" - довольно изичный пет проджект, не виду ничего "большого", где новичок "соснёт".
> сделаю как я фейсбук
> не знает как две переменные складывать
Вот и узнает. Ты забываешь, что мы не в детский сад играем, и чем меньше джун знает, тем сильнее он сядет мне на шею, если я его возьму. Если он будет знать, что нужно использовать конфиги, нельзя писать весь код в одном классе и нужно использовать ORM вместо кастомных запросов, то это значит, что мне можно будет больше времени объяснять ему, как сделать задачу, нежели как пользоваться инструментами и как складывать переменные.
Соответственно да, я ожидаю от джуна понимания на начальном уровне, как пользоваться языком программирования (чтобы он понимал, что такое "отнаследуй класс" и "реализуй интерфейс") и то, как следует пользоваться фреймворком (всё ещё на начальном уровне, что конфиги нужно выносить вот сюда, база данных описывается вот в таких классов и так далее). Я считаю это справедливым требованием, тем более, что изучать это действительно просто, заходишь в любой мануал "пишем блог на XXX" и там тебе всё распишут.

Показать весь текст
Ответы61793

582 27 авг, 13:10 582 1461765

>>1461635
>написал бы, к примеру, двач
Я бы не стал работать с чуваком, который выпячивает тот факт, что он двачер. Мне местных раковых рвотных конфочек хватило. Тайный двачер лучше явных трёх.

Ответы61792

583 27 авг, 13:40 583 1461792

>>1461765
Да какая разница. Двач, форчан, реддит, блог - это зависит от вкуса того, кто делать будет, его же пет-проект.
Просто он должен быть достаточно подъёмным для новичка, но при этом достаточно большим, чтобы можно было хоть на что-то посмотреть (потому что я видел тестовый в которых был 1 контроллер, 1 модель и 3 метода которые эту модель сохраняли, или удаляли).
Советовать сделать бложег как-то скучно, имиджборда - хотя бы оригинально.

Ответы61810

584 27 авг, 13:40 584 1461793

>>1461764
Отчасти потому и стрёмно устраиваться - вдруг на такого как ты попаду. Ты мне ничего нового не сказал, но ЧСВ у тебя определённо большое.

Ответы61814

585 27 авг, 13:54 585 1461810

>>1461792
>потому что я видел тестовый в которых был 1 контроллер, 1 модель и 3 метода
Падажжи. Наличие контроллера, модели и методов говорит о том, что человек понимает в ООП и MVC. А что должно говорить наличие пяти контроллеров и трёх моделей? Это просто количественная характеристика - всегда можно напилить ещё больше.
Походу ты сам плаваешь в своих же требованиях.

Ответы61814

586 27 авг, 13:59 586 1461813

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

587 27 авг, 14:01 587 1461814

>>1461793
Не устраивайся, мне безразлично.

>>1461810
И тем не менее, 20 строчек кастомного кода в одном файле - это слишком мало. Выводы делаются в конце-концов по кастомному коду, а есои этот кастомый код - это строка
```
function someAction($id) {
return someModel::load($id)
}
```
в минимальных вариациях, то это ничего не говорит о том, какого качества разработчик пишет это. Это несомненно плюс, что он показывает контроллер вместо самописного обращения к $_GET, но всё ещё недостаточно.
Это как принимать на работу чувака, поговорить с ним минуту и выяснить, что он знает русский язык. Знание языка - это необходимое условие, но не достаточное.

Ответы6181761844

588 27 авг, 14:04 588 1461817

>>1461814
>20 строчек
Давай только про крайности не говорить. Ты который пост уже выдумываешь какие-то вычурные вещи.

Ответы61853

589 27 авг, 14:11 589 1461820

зачем вы изучаете это дерьмо?

Ответы61821

590 27 авг, 14:12 590 1461821

>>1461820
а почему бы собственно им нет ?

Ответы61822

591 27 авг, 14:15 591 1461822

>>1461821
вы говноеды?

Ответы61823

592 27 авг, 14:16 592 1461823

>>1461822
нет

Ответы61826

593 27 авг, 14:18 593 1461826

>>1461823
ну и зачем вы тогда учите это старье и заним проф деградацией?

Ответы61828

594 27 авг, 14:20 594 1461828

>>1461826
по каким критериям это старьё ?

Ответы61829

595 27 авг, 14:21 595 1461829

>>1461828
как и перл он сдохнет

Ответы618326183361837

596 27 авг, 14:23 596 1461832

>>1461829
Всё сдохнет и даже ты.

597 27 авг, 14:23 597 1461833

>>1461829
>как и перл он сдохнет
как и Java как и C как и С++ и любой другой язык программирования , дальше то что ?

598 27 авг, 14:28 598 1461837

>>1461829
алсо в

>Платиновые вопросы
есть твой вопрос
> Почему PHP?
там есть ответ.

Ответы61842

599 27 авг, 14:32 599 1461842

>>1461837
так вы проф деграданты?

Ответы61847

600 27 авг, 14:35 600 1461844

>>1461814
>МОИ 20 строчек крутые, твои - нет
Демагог эз из.

Ответы61853

601 27 авг, 14:36 601 1461847

>>1461842
а как тебе такой ответ
echo "fusk yuo"

602 27 авг, 14:47 602 1461853

>>1461817
>>1461844
Вы правда считаете утверждения "тестовое задание с использованием паттернов и бест-практик" и "тестовое задание со значимым объёмом кастомного кода" взаимоисключающими, да?
Ну и да, если уже начались придирки к словам, то я ухожу из треда, здесь не будет диалога. Если вам хочется делать как-то по-другому и вы не готовы признавать, что бывает и другое мнение - то пожалуйста, как угодно.

Ответы61873618896217162416

603 27 авг, 15:31 603 1461873

>>1461853
анон не обращай внимания , верные же вещи пишешь

604 27 авг, 15:40 604 1461879

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

605 27 авг, 16:02 605 1461889

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

606 27 авг, 16:22 606 1461899

Новый тред будет?

Ответы61914

607 27 авг, 16:38 607 1461914

>>1461899
Мы перекатываем в раене 800+ постов. Иначе много большая часть треда оффтоп и срачи. Осенью будет полегче.

Ответы61940

608 27 авг, 17:19 608 1461940

>>1461914
У школьников начнутся уроки просто, лол.

Ответы62417

609 27 авг, 17:47 609 1461954

есть ли чем заменить сраное PDO?

Ответы61970

610 27 авг, 18:09 610 1461970

>>1461954
mysqli
https://www.php.net/manual/ru/book.mysqli.php

Ответы62000

611 27 авг, 18:53 611 1462000

>>1461970
устарел,советуют пдо.
есть мож какая библиотека,которая нах между ПДО и монстрами типа доктрины и eloquent?

Ответы62032

612 27 авг, 19:15 612 1462032

>>1462000
Я бы не назвал eloquent монстром, можно свободно отдельно брать и подключать, работает стабильно, хотя и active record. Ещё есть всякие propel, phpixie, зендовские компоненты.. Но я бы всё-таки eloquent взял.

Ответы62053

613 27 авг, 19:33 613 1462053

>>1462032
а где взять его отдельно?

Ответы62060

614 27 авг, 19:54 614 1462060

>>1462053
composer require illuminate/database

Ответы62061

615 27 авг, 19:56 615 1462061

>>1462060
что за команда?

Ответы62063

616 27 авг, 20:00 616 1462063

>>1462061
Почитай про композер.

617 27 авг, 20:39 617 1462089

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

618 27 авг, 23:19 618 1462171

>>1461853
Ну ты и камрад чувак.

86 Кб, 1124x462
619 28 авг, 09:51 619 1462327

Всем привет!
Надеюсь по адресу)
Есть таблица пользователя. (у нее есть расширенные данные в виде профиля)
Есть таблица профиля. (она в свою очередь может и не иметь пользователя)
В профиле есть "возраст", который может принимать 1 из 3х значений. (Для этого я выделил еще 1 табличку?)
В профиле есть "занятость" которая может иметь несколько вариантов из списка.

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

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

Ответы62408

620 28 авг, 11:33 620 1462408

>>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

Ответы62413

621 28 авг, 11:38 621 1462411

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

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

Ответы75083

622 28 авг, 11:40 622 1462413

>>1462408
Вооу, спасибо большое!!
Сейчас подкреплюсь и пойду воплощать в дело тобою сказанное.
Еще раз спасибо!

623 28 авг, 11:45 623 1462416

>>1461853
>и вы не готовы признавать, что бывает и другое мнение - то пожалуйста
весь дискас как раз и начался с того, что в тред залетел идиот-матершинник и стал оскорблять новичков, безапеляционно верещя "Я ЗНАЮ КАК НАДО, С ПЯТНАДЦАТИ ЛЕТ РАБОТАЛ А ВЫ ВСЕ ДЕРЬМО И ИНФАНТИЛЫ ВЫ МЕНЯ БЕСИТЕ". Ему тактично намекнули, что если не можешь помочь, а только ругаешь - то иди в другой тред

624 28 авг, 11:46 624 1462417

>>1461940
ага ололо вот они лохи да не то што мы студенты первого курса

625 28 авг, 13:59 625 1462541

Аноны, у меня на апаче самопальный пхп MVC-фреймворк.
Все это дело работает на http, как переехать на https?
1. Нужно убедиться что модуль отвечающий за https на сервере включен
2. Сделать редирект любого запроса по http на https в .htaccesse?
Все ?

Ответы62620

626 28 авг, 15:19 626 1462620

>>1462541
Тебе нужно подложить ssl-сертификат (если всё локально - то модно самоподписной) и сонфигать сервер, чтобы он через этот сертификат работал.
Редирект не обязателен, делают обычно для удобства, чтобы быть на 100% уверенными, что все юзеры ходят под https.

627 28 авг, 17:02 627 1462691

Нашёл в исходниках опенкарта оператор ^ и не могу нагуглить что он делает.
Знает кто?

Ответы6271963542

628 28 авг, 17:57 628 1462719

>>1462691
https://www.php.net/manual/ru/language.operators.bitwise.php

Ответы62785

381 Кб, 471x604
629 28 авг, 20:44 629 1462785

>>1462719

630 28 авг, 21:28 630 1462815

>>1446969 (OP)
https://github.com/asdasdasdasddasasdasdas/Filesharing Двач оцени мой файлообменник.

631 29 авг, 12:14 631 1463103

https://phpclub.tech/
Почему сайт откис?

Ответы63542

632 29 авг, 23:10 632 1463542

>>1463103
Поднял. Заодно настроил uptime бота на постоянную проверку статуса главной страницы. В случае 500-й ошибки от сервера бот будет оповещать нас в слаке.

>>1462691
ОП кстати писал на эту тему: https://phpclub.tech/pr/res/1019301.html#1027969
Ещё тут есть теория и практика: https://learn.javascript.ru/bitwise-operators

633 30 авг, 19:09 633 1464104

Аноны есть такой вопрос. Задача конвертировать текстовый файл в эксель. Реализовывать пытаюсь через csv файл дабы избежать использование spreadsheet библиотек. Так вот, при ее решении возникла проблема. Не получается разделить строку на 3 столбика. Дело идет в цикле...
$row = array();
$row[1] = trim(substr($data,0,7));
$row[2] = trim(substr($data,7,20));
$row[3] = trim(substr($data,27,25));
пытаюсь сделать через substr. Но substr используется только для строк, потому выдает ошибку. Вопрос, как разделить текстовый файл на 3 столбика и поместить их в csv?

А после я просто переименую .csv в .xls получив экселевский файл

Ответы6411564287

634 30 авг, 19:21 634 1464115

>>1464104
https://www.php.net/manual/ru/function.str-getcsv.php
не?

Ответы64152

635 30 авг, 20:02 635 1464152

>>1464115
Ее тоже находил, но не совсем понял как она работает. В моем примере цикл в котором есть массив построчно делит каждую строку по 3 столбика символами. А в этом не понимаю как использовать.

636 30 авг, 22:55 636 1464287

>>1464104
Это точно задача для php?

Ответы64328

637 30 авг, 23:54 637 1464328

>>1464287
Чому нет? Распарсить текстовый файл любой современный ЯП может.

Ответы64370

638 31 авг, 00:39 638 1464370

>>1464328
Не, на пыхе можно и десктоп писать, конечно. Но зачем?

Ответы6438864456

639 31 авг, 00:57 639 1464388

>>1464370
сопля

Ответы64457

640 31 авг, 02:47 640 1464424

Аноны, есть ли в php полноценная перегрузка функций? А то гуглил, и чё-т, если она и есть, то очень странная

Ответы64460

641 31 авг, 08:02 641 1464456

>>1464370
Причём тут десктоп? Речь шла о файле.
Да и кому нужен этот десктоп, если есть веб-приложения?

642 31 авг, 08:02 642 1464457

>>1464388
на месте

643 31 авг, 08:29 643 1464460

>>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

Ответы64547

644 31 авг, 10:08 644 1464491

Ребята подскажите как в csv файл(открывается в экселе) положить массив во второй столбик?(B1,B2...) обычно все время кладет в столбик А.

Ответы64724

645 31 авг, 12:24 645 1464547

>>1464460
>нинужно
А вот это не факт. Хуже никому от этого не стало бы.

Ответы64570

646 31 авг, 12:50 646 1464570

>>1464547
Перегрузка методов и функций усложняет понимание кода, так как без IDE сложно понять какая версия метода вызывается - нужно сверять типы и сравнивать количество аргументов. Код не только через IDE смотрят - если ты делаешь код-ревью коллеге в гитлабе/гитхабе, то скорее всего будешь искать метод через Ctrl+F на странице и перегрузка будет мешать и отнимать время. Опиши реальную проблему. Есть подозрение, что ты решаешь её не с той стороны.

647 31 авг, 17:15 647 1464724

>>1464491
а нельзя добавить перед твоим массивом B добавлять сначала массив A с пустыми значениями/пробелами? Или так коряво выйдет?

Ответы64765

648 31 авг, 17:44 648 1464752

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

Ответы64876

649 31 авг, 17:59 649 1464765

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

650 31 авг, 18:26 650 1464788

11 Кб, 444x11933 Кб, 537x36747 Кб, 307x469

Ребята которые в laravel умеют, помогите пожалуйста. Что это за переменная такая - $query. Где и когда она создается? В методе с использованием scope? А если имя метода без scope - переменная $query задана не будет? Разобрался, что она состоит из информации о sql запросе, где поле from задается по принципу "модель где определена переменная -> таблица этой модели в бд".

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

Ответы6489364970

651 31 авг, 20:42 651 1464876

>>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)

652 31 авг, 21:45 652 1464893

>>1464788
> это за переменная такая - $query.
Вангую, что строка запроса, которую билдер собирает.

653 31 авг, 23:57 653 1464940

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

Ответы65439

654 1 сен, 02:13 654 1464970

>>1464788
Scope в ларавел это "магический" метод, подозреваю что работает как-то через __call() и scope{MethodName}, который ты можешь чейнить с кверибилдером. Например ты ищешь только публичные посты, вместо того чтобы делать Post::where('public', true)->get(), ты можешь сделать scopePublic(), НО для удобства вызывается этот скоуп просто как Post::public(). Переменная $query это и есть объект текущего билдера, к которому ты вызываешь этот скоуп. Сам билдер возвращается тыщей разных методов, with, where и т.п. У меня всегда были проблемы со слогом.

Ответы64980

655 1 сен, 03:00 655 1464980

>>1464970
Все более-менее понял. Спасибо за ответ!

656 1 сен, 08:38 656 1465001

Анончики, какие плагины для sublime посоветуете поставить?

Ответы6553265547

185 Кб, 576x1024
657 1 сен, 12:04 657 1465069

Ура! Работает!

$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>";
};

658 1 сен, 21:44 658 1465439

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

Ответы65498

659 2 сен, 00:27 659 1465498

>>1465439
https://badcode.ru/chto-nuzhno-znat-laravel-junior-proghrammistu/

Это нормальные требования для того же джуниора? Я просто недавно начал учить, то что в статье той написано кажется довольно простыми вещами.
Что аноны могут по поводу видео-курсов по 20+ часов сказать? То же создание блога с ларакаста, сайт обьявлений Елисеева. Может быть смотрел кто полностью?

Ответы65663

660 2 сен, 05:06 660 1465532

>>1465001
vscode

1,4 Мб, 1920x1080
661 2 сен, 07:40 661 1465547

>>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" или забыл указать переменную что используешь

Ответы655777508375833

662 2 сен, 08:38 662 1465577

>>1465547
Благодарю

663 2 сен, 12:40 663 1465663

>>1465498
> Это нормальные требования для того же джуниора?
Всё зависит от конкретной компании. Не существует эталона требований для джуниора, какие-то компании нанимают совсем никаких студентов, другие ожидают от джуна опыт в несколько лет коммерческой разработки.
Лучше выбрать 2-3 компании, куда хотел бы попасть, посмотреть на их требования + нагуглить сотрудников этих компаний и выспросить с них ожидания от джунов. Тут не стоит стесняться, то, что ты так проактивно подходишь к трудоустройству - будет скорее дополнительным плюсом, потому что любая адекватная компания понимает, что первый условный год джун работает в лучшем случае в 0, потому что учится - и только потом начинает приносить в прибыль. Значит, если чувак сначала выяснил требования, потом потратил месяц на самообучение, потом пришёл на собеседования - значит, он ответственный и целеустремлённый и не сольётся через 6 месяцев, не оправдав вложений в его обучение.

> https://badcode.ru/chto-nuzhno-znat-laravel-junior-proghrammistu/
На мой вкус, данный список выглядит неплохо, лучше, чем 90% дерьмовых советов из интернетов.

Ответы65695

664 2 сен, 13:48 664 1465695

>>1465663
>и не сольётся через 6 месяцев, не оправдав вложений в его обучение
По этому и спрашивал, что не хочется быть совсем уж "грузом", и не вылететь даже если меня возьмут. Но с другой стороны слишком долго сидеть без работы тоже не вариант.
Большое спасибо за ответ

665 2 сен, 15:56 665 1465794

Есть приложение, оно состоит из "главного" класса root и еще пары классов, которые выполняют определенные функции (cl1, cl2, cl3). При этом, приложение пишет лог. Лог - это объект другого класса (cllog).

Вопрос: как мне сделать так, чтобы я мог писать в лог из всего приложения? На первый взгляд логичным кажется создать объект класса cllog в объекте класса root и работать с ним. И всё бы ничего, но мне ведь нужно к логу обращаться из остальных классов. То есть, все 4 класса (root, cl<1-3>) должны работать с одним объектом.

Мне в голову пришли следующие решения:

1. В каждом классе реализуется метод, который позволяет установить ссылку на лог. То есть, в классе root я создаю объект класса cllog, создаю объект класса cl1 и по ссылке (&) передаю в него объект с логом. Минусы очевидны: мне нужно в каждый класс пихать этот метод, это во-первых, во-вторых - а если логов несколько? Или если помимо лога есть еще что-то, что должно быть доступно из всех классов? Пилить десяток методов, которые по ссылке будут устанавливать? Короче, хуета какая-то.

2. Класс root содержит СТАТИЧЕСКОЕ свойство $log, которое хранит в себе лог. Соответственно, если мне нужно откуда-то написать в лог, то я делаю примерно так: root::$log->addRecord(). Вроде звучит хорошо, но, опять же, рассмотрим ситуацию, в которой у меня несколько логов. Есть общий лог приложения - root::$log. Но, в то же время, есть еще один лог, который касается какой-то конкретной части приложения, которая состоит из нескольких классов. Т. е, грубо говоря,в root:$log будут писать из всех классов, а в root:$logTwo из cl1 и cl2. С чего бы этому логу храниться в классе root, если он относится к cl1 и cl2? Сваливать абсолютно все объекты, которые должны быть доступны из нескольких классов в root - звучит не очень адекватно.

3. Существует еще один абстрактный класс - допустим, global. В нём есть статическое свойство global::$log. Я внутри root создаю объект лога и дальше делаю примерно так: global::$log = &$this->log.
В этом варианте я минусов не вижу, но хз, насколько это адекватно с точки зрения ООП. Я, по сути, создаю собственную глобальную область видимости с блекджеком и шлюхами.

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

665 2 сен, 15:56 665 1465794

Есть приложение, оно состоит из "главного" класса root и еще пары классов, которые выполняют определенные функции (cl1, cl2, cl3). При этом, приложение пишет лог. Лог - это объект другого класса (cllog).

Вопрос: как мне сделать так, чтобы я мог писать в лог из всего приложения? На первый взгляд логичным кажется создать объект класса cllog в объекте класса root и работать с ним. И всё бы ничего, но мне ведь нужно к логу обращаться из остальных классов. То есть, все 4 класса (root, cl<1-3>) должны работать с одним объектом.

Мне в голову пришли следующие решения:

1. В каждом классе реализуется метод, который позволяет установить ссылку на лог. То есть, в классе root я создаю объект класса cllog, создаю объект класса cl1 и по ссылке (&) передаю в него объект с логом. Минусы очевидны: мне нужно в каждый класс пихать этот метод, это во-первых, во-вторых - а если логов несколько? Или если помимо лога есть еще что-то, что должно быть доступно из всех классов? Пилить десяток методов, которые по ссылке будут устанавливать? Короче, хуета какая-то.

2. Класс root содержит СТАТИЧЕСКОЕ свойство $log, которое хранит в себе лог. Соответственно, если мне нужно откуда-то написать в лог, то я делаю примерно так: root::$log->addRecord(). Вроде звучит хорошо, но, опять же, рассмотрим ситуацию, в которой у меня несколько логов. Есть общий лог приложения - root::$log. Но, в то же время, есть еще один лог, который касается какой-то конкретной части приложения, которая состоит из нескольких классов. Т. е, грубо говоря,в root:$log будут писать из всех классов, а в root:$logTwo из cl1 и cl2. С чего бы этому логу храниться в классе root, если он относится к cl1 и cl2? Сваливать абсолютно все объекты, которые должны быть доступны из нескольких классов в root - звучит не очень адекватно.

3. Существует еще один абстрактный класс - допустим, global. В нём есть статическое свойство global::$log. Я внутри root создаю объект лога и дальше делаю примерно так: global::$log = &$this->log.
В этом варианте я минусов не вижу, но хз, насколько это адекватно с точки зрения ООП. Я, по сути, создаю собственную глобальную область видимости с блекджеком и шлюхами.

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

Показать весь текст
Ответы659436612566131

666 2 сен, 18:50 666 1465943

>>1465794

Это прямо таки типичный пример Dependency Injection: https://github.com/codedokode/pasta/blob/master/arch/di.md

Также, классы стоит называть с большой буквы и без странных сокращений. Не cllog, а Logger.

Также, для логгера есть рекомендация PSR: https://www.php-fig.org/psr/psr-3/ Не стоит изобретать тут велосипед.

Также, ссылки для объектов использовались в PHP4 много лет назад, а с PHP5 они не нужны, обнови свои знания.

Ответы65964

667 2 сен, 19:57 667 1465964

>>1465943

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

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

Насколько я понял (а понял я, конечно же, не так много, нужно еще пару раз перечитать), Сатана, в статье идёт речь о том самом, спасибо. На счёт ссылок - действительно, сейчас проверил и они правда не нужны. Но если говорить о сути вопроса, то мой первый вариант с кучей методов типа setLogger оказался ближе всего к истине? Довольно внезапно, конечно.

Ответы66118

668 2 сен, 21:56 668 1466025

ОП, глянь задачу про абитуриентов, пожалуйста.
Гитхаб github.com/deadj/student-list/
Хостинг http://f914421i.beget.tech

258 Кб, 625x679
669 2 сен, 23:52 669 1466082

Пыхоблядки, как же вы пропустили такую тему?

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

https://2019.phpce.eu/en/ (см. там ссылки на твиты)
https://wptavern.com/php-central-europe-conference-canceled-due-to-lack-of-speaker-diversity

В твиттере им напихали хуёв в панаму - поляки, русские, украинцы, в основном, но не только.

А я вот думаю, что это такой тонкий наброс и реклама пыхи.
Типа "php - технология белых людей".

твит не мой

Ответы66106662376639866762

670 3 сен, 00:40 670 1466106

>>1466082

Иди в любой другой тред ныть про притеснение белых мужчин, плиз.

Ответы66107

671 3 сен, 00:50 671 1466107

>>1466106
Не могли бы вы пояснить свою мысль, уважаемый(-ая)?

672 3 сен, 01:28 672 1466118

>>1465964
>Но если говорить о сути вопроса, то мой первый вариант с кучей методов типа setLogger оказался ближе всего к истине?

нет ты просто плохо понимаешь что такое DI контейнер, перечитай ещё раз.

мимо другой анон

Ответы66166

673 3 сен, 01:51 673 1466125

>>1465794
DI - это хорошо, конечно, но нужен контейнер.
У тебя он есть? Если да - читай документацию к нему.

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

Напрмер, на джаве в клиентском коде будет:
Logger log = Logger.getLogger(name);
log.fine("OLOLO");

log - это экземпляр класса Logger.
getLogger() - это статический метод класса Logger. Он доступен везде. И он возвращает сконфигурированный логгер (не создаёт он уже создан ранее).

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

Т.е., по сути, мы имеем статическую "глобальную" переменную внутри класса. Она не глобальная, естественно. Она - в пространстве имён "Logger". Но, может быть доступна везде.
Ещё это можно назвать модулем.
Т.е., в джаве класс - это 2 в 1 - и модуль и класс.

В пыхе так можно? Если да - так и делай.

Ответы6613166149

674 3 сен, 01:57 674 1466131

>>1466125
Бля, я таки дал себе труд прочитать, что ты там (>>1465794) написал.
Вообще непонятно, в чём у тебя проблема, если честно.
Про статические методы ты знаешь (но классы называешь по-блядски).
Сделай внутри лог-менеджера несколько логгеров, выбирай по именам, пиши в разные файлы.
А лучше - не изобретай велосипед, а загугли php logging library.

Ответы66271

675 3 сен, 04:18 675 1466149

>>1466125

Контейнер не обязателен. Мы можем руками передать логгер при создании объектов:

$logger = new Logger;
$c1 = new Class1($logger);
...

Контейнер просто позволяет это упростить и автоматизировать, но можно и без него.

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

В уроке про DI это все упоминается, и описаны недостатки статических методов.

Ответы6618266192

676 3 сен, 08:16 676 1466166

>>1466118
Иван Величко @Ostrovski
dllweb: DI - это на самом деле очень просто. Берете и явно (ключевое слово именно явно) передаете зависимости в код, который их требует. Через параметры функции/метода или через конструктор. А DIC - это о том, как этот процесс автоматизировать/универсализировать на уровне сервисов веб-приложения. Т.е. у вас есть куча сервисов, каждый явно определяет, от каких других сервисов он зависит (через параметры конструктора). А DIC умеет создавать экземпляры сервисов, скармливая им экземпляры тех сервисов, от которых они зависят.

Сурс: https://toster.ru/q/195091#comment_662753

Разве это не довольно близко к тому, что сказал я?

Ответы66167

677 3 сен, 08:20 677 1466167

>>1466166
Ну, то есть, я понимаю, что мой вариант (еще и с ссылками) относительно адекватной реализации = это каменный топор относительно танка, но сама философия и там и там заключается в том, что мы в каждый объект явно передаём его зависимости. DIC просто сокращает/автоматизирует этот процесс.

Нет?

678 3 сен, 08:57 678 1466182

>>1466149
>как передать 2 разных логгера в разные классы?
Как два пальца обоссать. Хоть 22.
Там же написано: Logger.getLogger(name);

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

Ответы6624466263

679 3 сен, 09:17 679 1466192

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

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

Ответы66223

680 3 сен, 10:30 680 1466223

>>1466192
> передаёшь зависимости как параметры в конструктор - это не DI. DI - это когда это делает контейнер за тебя

вопрос без подъеба ты явист?

Ответы66229

681 3 сен, 10:50 681 1466229

>>1466223
Разумеется, я выше это написал.
Чувак, I = Injection.
В данном случае можно перевести как внедрение, хотя, оттенок немного не тот. Т.е. что-то внедряет в твой код зависимость извне, понимаешь?

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

>явист
Ява - это остров такой.
И мотоцикл такой ещё был, охуенный.
А язык называется "джава".

Ответы66271

1,3 Мб, 1200x686
682 3 сен, 11:29 682 1466237

>>1466082
>Организаторы отменили европейскую конференцию по php, потому, что туда записались только белые мужчины.
Черные айтишники тоже могли бы записаться, но они все еще сидят А ю гарет гайз? сидят ин джейл!

42 Кб, 600x450
683 3 сен, 11:46 683 1466244

>>1466182
>Пыха открывает для себя ООП, DI и прочие взрослые игрушки.
Ненавижу ждава пидарастов за то, что у них переменные без $ объявляются. Тупо рандомное слово без идентификации. Мрази. Насколько надо быть дурными, что даже до значка не додуматься? А потом заходит такой ополоум в благородный тред и поучать начинает.

Ответы66271

684 3 сен, 12:13 684 1466260

Нужели им не хватает six figures в долларах для душевного спокойствия?

685 3 сен, 12:22 685 1466263

>>1466182

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

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

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

Логгер такая же зависимость, как и любой другой объект.

> Добавлю ещё, что когда ты сам, руками передаёшь зависимости как параметры в конструктор - это не DI.

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

DI/IoC описан у Фаулера тут: https://martinfowler.com/articles/injection.html

Тут есть явное противопоставление DI vs ServiceLocator:

> I'm going to start by talking about the various forms of dependency injection, but I'll point out now that that's not the only way of removing the dependency from the application class to the plugin implementation. The other pattern you can use to do this is Service Locator

Также, нигде явно не написано про обязательность "контейнера":

> The basic idea of the Dependency Injection is to have a separate object, an assembler, that populates a field in the lister class with an appropriate implementation for the finder interface

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

685 3 сен, 12:22 685 1466263

>>1466182

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

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

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

Логгер такая же зависимость, как и любой другой объект.

> Добавлю ещё, что когда ты сам, руками передаёшь зависимости как параметры в конструктор - это не DI.

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

DI/IoC описан у Фаулера тут: https://martinfowler.com/articles/injection.html

Тут есть явное противопоставление DI vs ServiceLocator:

> I'm going to start by talking about the various forms of dependency injection, but I'll point out now that that's not the only way of removing the dependency from the application class to the plugin implementation. The other pattern you can use to do this is Service Locator

Также, нигде явно не написано про обязательность "контейнера":

> The basic idea of the Dependency Injection is to have a separate object, an assembler, that populates a field in the lister class with an appropriate implementation for the finder interface

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

Показать весь текст
Ответы66294

686 3 сен, 12:30 686 1466271

>>1466244

Значок $ скорее по историческим причинам, унаследован от Перла, а тем от программ-оболочек командной строки (shells). Тут есть как плюсы: его удобно подставлять в строку, так и минусы: надо писать на один символ больше.

Java унаследовала синтаксис от Си, где доллар не пишется.

Еще были языки, где суффикс или префикс переменной определял ее тип.

>>1466229

Если понимать дословно, то как раз все логично: мы "внедряем" зависимости в объект, передавая их при создании. Можно почитать статью Фаулера и поискать определение там: https://martinfowler.com/articles/injection.html

>>1466131

> Сделай внутри лог-менеджера несколько логгеров, выбирай по именам, пиши в разные файлы.

Это ты начинаешь изобретать костыли вместо DI. Исходный вопрос был не только про логгеры, а вообще про инъекцию зависимостей.

Ответы66294

687 3 сен, 13:23 687 1466294

>>1466263
>В твоем подходе в классе просто жестко прописано получение логгера (Logger.getLogger) и мы не можем снаружи выбрать, что в него передать. Мы не можем выбрать тип логгера при создании класса, так как там все захардкожено. Мы не можем создать 2 экземпляра класса с разными логгерами. Мы не можем в тестах передать другой тип логгера.

Всё это мы можем. Как обоссать два пальца.

Статический метод - это просто способ вызова.
Функция, не привязанная к экземпляру какого-либо объекта.
Никаких недостатков у статических методов нет.
Какие могут быть недостатки у функции?
Но, конечно, их можно неправильно использовать. Всё что угодно можно неправильно использовать.

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

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

Например, у меня логгеры сконфигурированы в конфиге DI контейнера, тем способом, которым он хочет. А получаю я их через Logger.getLogger(name) - тоже стандартным способом. Это две стороны одного целого.

В конфиге я могу писать if-else. И у меня всё это будет конфигурироваться по-разному, в зависимости от других условий. Само.
Более того, я могу даже сменить саму библиотеку логгинга (которая, собственно, пишет в файлы и т.п.), и у меня всё будет продолжать работать.

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

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

>Фаулер
Не перебарщивай с этим.
Суха теория, мой друг, а древо жизни вечно зеленеет, лол.

>>1466271
>изобретать костыли вместо DI
Это не "костыли". И не "вместо" DI. Это вообще про другое.

687 3 сен, 13:23 687 1466294

>>1466263
>В твоем подходе в классе просто жестко прописано получение логгера (Logger.getLogger) и мы не можем снаружи выбрать, что в него передать. Мы не можем выбрать тип логгера при создании класса, так как там все захардкожено. Мы не можем создать 2 экземпляра класса с разными логгерами. Мы не можем в тестах передать другой тип логгера.

Всё это мы можем. Как обоссать два пальца.

Статический метод - это просто способ вызова.
Функция, не привязанная к экземпляру какого-либо объекта.
Никаких недостатков у статических методов нет.
Какие могут быть недостатки у функции?
Но, конечно, их можно неправильно использовать. Всё что угодно можно неправильно использовать.

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

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

Например, у меня логгеры сконфигурированы в конфиге DI контейнера, тем способом, которым он хочет. А получаю я их через Logger.getLogger(name) - тоже стандартным способом. Это две стороны одного целого.

В конфиге я могу писать if-else. И у меня всё это будет конфигурироваться по-разному, в зависимости от других условий. Само.
Более того, я могу даже сменить саму библиотеку логгинга (которая, собственно, пишет в файлы и т.п.), и у меня всё будет продолжать работать.

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

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

>Фаулер
Не перебарщивай с этим.
Суха теория, мой друг, а древо жизни вечно зеленеет, лол.

>>1466271
>изобретать костыли вместо DI
Это не "костыли". И не "вместо" DI. Это вообще про другое.

Показать весь текст

688 3 сен, 16:20 688 1466398

>>1466082
Ты опоздал на пару лет, вся та СЖВ хуерга заглохла ещё в 2017, и только сейчас до рашки доходят отголоски.
Если начать разбираться в теме - выяснится что ВНЕЗАПНО, никто не смотрел на имя или цвет кожи, а отбирались докладчики по докладу. Комиссия не знала имён, пола или расы. Так что выбрали 20 самых адекватов из 253 подавших заявки.
ВНЕЗАПНО, оказалось что все 253 были белыми.
252 из них - мужиками.
Какой-то дебич, вдруг решил что свалить на пару недель куда-нибудь на сказочноебали будет лучше, чем сидеть в европках с ботанами и нердами и не придумал ничего лучше чем сказать "Там одни белые и тёлок нет", его поддержал ещё один докладчик. Так как за пару недель до события новых двух найти не удалось, решили что надо расходиться.
Но Всякие нытики в интернетах и твитере конечно преподносят это как СЖВ и вот это вот всё.

689 3 сен, 17:52 689 1466457

Аноны, а что-нибудь известно про ОП? Или он личность покрытая мраком? А может ОП вообще ИИ?

Ответы66460

690 3 сен, 17:58 690 1466460

>>1466457
он под 800 постов вроде появляется. Надо просто верить в него
#яверю #посмотриМоихСтудентов #устройНаРаботуЗаСтоМильеновВсек

Ответы66477

691 3 сен, 19:03 691 1466477

>>1466460
Не, я не о том, когда он проверит. Мне интересно чем он занимается, работает

692 3 сен, 20:20 692 1466520

Господа шарящие, объясните глупому анону про Slim. С помощью slim я пишу роутер, а модели и контроллеры на голом php?

Ответы66525

693 3 сен, 20:28 693 1466525

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

Ответы66541

694 3 сен, 20:52 694 1466541

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

Ответы6673966781

695 3 сен, 22:27 695 1466573

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

Ответы6674175083

696 4 сен, 08:40 696 1466739

>>1466541
Если я ничего не путаю, то в слиме нет ничего, кроме роутера и структуры, так что я бы взял его. Ну или lumen, если ты laravel не знаешь, так хоть познакомишься с частью компонентов.

697 4 сен, 08:45 697 1466741

>>1466573
Js очень прост, как язык, там нечего долго изучать. Главное, изучать ES6 и тому подобное, модули, экосистему. Сложнее изучать фреймворки, библиотеки и подходы. react/redux,angular,saga и т.п.
Советую напичать пару простеньких фронтенд приложений с бекендом на ноде, потратишь неделю, но будет очень полезно.
Плюс, отдельно можешь тайпскриптом заполировать, он намного приятнее и будет полезен в будущем, он часто используется. Можешь писать на нём и фронт, и бэк.

Ответы6676966770

698 4 сен, 09:48 698 1466762

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

699 4 сен, 10:31 699 1466769

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

Ответы66779

700 4 сен, 10:33 700 1466770

>>1466741
спасибо, но жс не логичен, язык не поворачивается назвать его простым

701 4 сен, 11:02 701 1466779

>>1466769
В js'е нет кастомных типов (только примитивные), классов, указателей, многопоточностей. Сравнительно просто.
На начальный уровень знания самого языка нужно выучить только типы, операции, сравнительно маленькую стандартную библиотеку, концепцию event loop и промисов. Ну и про стандарты прочитать.

Ответы66789

702 4 сен, 11:04 702 1466781

>>1466541
>Я хочу от слима взять только роутер, остальное на чистом
Аношка, я тоже делаю slim. Но я еще установил шаблонизатор твиг, про него в учебнике написано. Возьми еще и его в нагрузку, он простой, но авторитет в собственных глазах повышается. Еще можешь бутстрап юзать для верстки - считай ТРИ пакета используешь. У будущего работодателя соски встанут от такого резюме джуна

Ответы6679467552

703 4 сен, 11:22 703 1466785

Аноны, помогите далбоебу.
Делаю сервис отчетов из бд.
Запросом из БД формирую отчет, пишу его в exel-файл и данный файл сохраняю в отдельной папочке.
Далее мне требуется этот файл отчета отдать клиенту, сделал ссылочку которая ведет на отдельный обработчик. Примерный код обработчика везде одинаков, у меня такой :

https://ideone.com/rB4236

Фигня в том что когда я сохраняю файл отчета на одном уровне с индексным файлом, то все отдается.
Но когда я размещаю файл в дочернем каталоге, то уже readfile не может найти файл. И ниче про это найти не могу.

Ответы6681666831

704 4 сен, 11:36 704 1466789

>>1466779
>классов
Прототипы, которые ломают мозг сильнее всяких классов.
>кастомных типов
Если бы такая фича и была (хотя она и не нужна в ваниле, есть typescript), и ты ещё жив, сможешь и с этим разобраться.
>указателей
В хаскелле тоже нет, но это не делает его простым для освоения.
>многопоточностей
Хороший пойнт. Но можно ведь
>выучить только

Ответы66793

705 4 сен, 12:00 705 1466793

>>1466789
Не понимаю, с чем ты споришь. В js'е, как языке, находится сравнительно мало фич. Кроме блядских прототипов и ряда исторически сложившихся нёх'ов там сильно нечего изучать, в языке.
Дальше нужно изучать экосистему и вот это уже пиздец, да.

706 4 сен, 12:01 706 1466794

>>1466781
Ни разу не видел, чтобы работодатели хотели слим. Лучше уж тогда брать ларавел или симфони.

707 4 сен, 12:45 707 1466816

>>1466785
я не очень умный, но может там в переменной path перед конечной папкой добавить глобальную переменную с серверным путем типа _DIR_

708 4 сен, 13:15 708 1466831

>>1466785
>отдельный обработчик
Но нахуя?
У тебя веб-сервер не может нормально отдать excel-файл? Добавь ему mime-тип в конфиг, если так.
Или тебе нужны ограничения по безопасности, чтобы кто-то не мог брать чужие файлы и т.п.? Или с именами что-то мутить?

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

Ответы67368

709 4 сен, 21:28 709 1467368

>>1466831
Где то как ты сказал и получилось - я с php.net скопировал пример, под себя перекопал - все заработало. У меня видимо некие траблы с относительными и абсолютными путями и всей этой залупой со слешами и корнями приложения.

710 5 сен, 03:54 710 1467552

>>1466781
Ты slim только для роутера используешь?

Ответы67646

711 5 сен, 09:55 711 1467646

>>1467552
Так там только роутинг и зависимости с логгером. Что ещё?

72 Кб, 843x921
712 5 сен, 19:03 712 1467919

>>1446969 (OP)
Как запустить приложение из примера: https://github.com/nesk/puphpeteer/

Пытаюсь запустить через xammp. В папку htdocs поместил test.php, обращаюсь через localhost/test.php, но сервак не видит либы установленные через composer.

Попробовал прописать их вречную через include, но на 20-й либе заебался?

Что я делаю не так? (на скрине нерабочий скрипт, не находит
очередной класс)

Ответы680596809275083

713 5 сен, 19:53 713 1467960

Насколько кровав PHP/Symfony/Doctrine по сравнению с Java/Spring/Hibernate?

Ответы67987

714 5 сен, 20:45 714 1467987

>>1467960

Ничего кровавого в пыхе нет.

Ответы68052

715 5 сен, 21:56 715 1468052

>>1467987
А как же заказчики?

716 5 сен, 22:02 716 1468059

>>1467919
>PuPHPeteer
Это вроде как эмулятор браузер для загруженной странички?
Лихо закрутили.

717 5 сен, 22:47 717 1468092

>>1467919
Контекст не особо читал, но после того как ты делаешь composer install он генерирует все подключения и тебе надо будет за иклудить только один файлик auto..чета там вроде load.php

718 6 сен, 14:53 718 1468528

Аноны, я немного заблудился в путях, относительных и абсолютных.

Вот у меня такая структура сайта -> в корне (он определяется $_SERVER['DOCUMENT_ROOT']) только файл .htassecc, который переадресует все запросы на дочерний каталог public, в котором находится уже index.php.

корень
.htaccess
----- папка public - тут каталоги картинок, стилей и тому подобное
----------index.php
----- папка App - в ней вся логика приложения, контроллеры, модели и представления

Я не очень понимаю что есть корень сайта для браузера в моем случае? Корень для браузера это $_SERVER['DOCUMENT_ROOT']- корень приложения, или для браузера корень - это то что находится в папке public, т.е. для браузера корневой каталог это каталог в котором выполняется index.php? И ниже него нельзя уже обратиться?

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

Ответы68539

719 6 сен, 15:07 719 1468539

>>1468528
>для браузера корневой каталог это каталог в котором выполняется index.php
да

даже если попробовать ../folder/1.jpg тоже не отображается ?

обычно vhost настраивается сразу на папку public что бы не было плясок с .htaccess

Ответы68575

720 6 сен, 15:50 720 1468575

>>1468539
>>1468539
>>для браузера корневой каталог это каталог в котором выполняется index.php
>>да

Похоже все же нет, потому что без .htaccess если просто создать структуру из каталогов - то браузер понимает конструкцию ../img/img.jpg и отображает изображение.

Первый .thaccess (который в корне) у меня таков:

AddDefaultCharset utf-8
Options -Indexes
RewriteEngine On
RewriteRule ^(.)$ /public/$1

он передает урл в каталог public (в нем находится индексный файл php), где запрос обрабатывается следующим .thaccess :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.) index.php?$1 [L,QSA]

В index.php у меня вызывается роутер, который уже разбирает запрос и вызывает нужные контроллеры.

Вопрос таков - все ссылки в тэгах <img> , все подключения стилей и так далее - это те же самые запросы, которые проходят всю цепочку из .thaccess.
То есть в <img src=' img/img.jpg ' > запрос "img/img.jpg" будет передан в папку public и открыт, согласно второму правилу не будет обработан index.php а отдан сервером сразу.
В таком же случае запрос "../img/img.jpg" не обрабатывается?

Ответы6857975081

721 6 сен, 15:52 721 1468579

>>1468575
>В таком же случае запрос "../img/img.jpg" не обрабатывается?
Почему же таком же случае запрос "../img/img.jpg" не обрабатывается?

самофикс

sage 722 6 сен, 22:43 722 1469095

>>1446969 (OP)
Хочу сказать спасибо ОПу за существование этих тредов. Благодаря ему "вошёл в АйТи". Прошел его гайд, сделал студентов, файловый хостинг (правда здесь не показывал, ибо было стыдно, да и слишком хикка был ). Попытался устроиться на галеру в другой город (100к променял на 500к (было сложно, очень)). С первого же раза прошел собес (спасибо за упор на ООП и современные технологии, большинство вопросов были по ООП (собес был удаленно, вначале тряслись руки и было очень страшно)). Видимо им понравился файловый хостинг и мой проект на Node.JS. Предложили зп выше той, что я просил, готовы были взять хоть сейчас.

Четвертый месяц как сижу на галере. За это время успел съездить в командировку в UK (после годов хиккования - это было потрясающе (совершенно другой мир)). Узнал что такое Agile и Scrum.
Научился работать в команде. Стал гораздо более общителен, стал менее бояться окружающего мира. И много-много всего остального.

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

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

Ответы691116923270011

723 6 сен, 23:04 723 1469111

>>1469095
Двачую. ОП, ты очень крутой чел (а может и барышня, кто знает)

724 7 сен, 08:50 724 1469232

>>1469095
Какой ценник в итоге получился?

Ответы69647

725 7 сен, 10:47 725 1469284

Допустим, у нас есть метод, который принимает аргумент, который может иметь одно из следующих значений: "eot", "eroha".

Как это правильно реализовать? Чтобы в функцию нельзя было просто так передать значение "omega" без последствий.

Очевидный вариант: if ($arg !== "eot" || $arg !== "eroha") { ... }, но интуитивно кажется, что должен существовать какой-то более стройный способ.

Про enum я знаю, но стоит ли под каждый метод, который принимает одно из значений заводить enum? Это сделает код не слишком громоздким?

Ответы692856932575081

726 7 сен, 10:48 726 1469285

>>1469284
>||
&&

fix

727 7 сен, 12:44 727 1469325

>>1469284
>Очевидный вариант: if ($arg !== "eot" || $arg !== "eroha") { ... }, но интуитивно кажется, что должен существовать какой-то более стройный способ.
Можно так:
if (in_array($arg, ['eot', 'eroha'], true)) {}

Или вынести массив в отдельную переменную/поле_класса/константу:
$dvachers = [
'eot',
'eroha',
];

728 7 сен, 13:37 728 1469343

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

Пробовал через bindTo() но чёта ругается на ссылку $this в функции.

Не хочется городить глобальный контейнер для передачи в обработчики.

Ответы6941075079

729 7 сен, 14:53 729 1469410

>>1469343
Это как раз нормально и правильно, создавай класс либо интерфейс Context и прокидывай его.

Ответы69515

730 7 сен, 17:22 730 1469486

Я дико извиняюсь за тупой вопрос, но правильно ли я понимаю что в скелете slim MVC паттерн нужно самому прописать? Я совсем не против, но мало ли он там уже осуществлен, а я просто найти его не могу

Ответы6949269534

731 7 сен, 17:50 731 1469492

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

Ответы6956575081

732 7 сен, 18:27 732 1469515

91 Кб, 685x76150 Кб, 474x307

>>1469410
Сделал передачу $this в обработчик. В этом $this сделал публичные поля, где надо. Вроде цивильно выглядит.
Так пойдёт?

733 7 сен, 19:00 733 1469534

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

Ответы69565

734 7 сен, 20:31 734 1469565

>>1469492
Так суть задания то в закреплении ооп и mvc

>>1469534
Меня просто смутило что у меня сразу после установки 16 тестов c
class User implements JsonSerializable

Ответы69623

735 7 сен, 22:13 735 1469623

>>1469565
Какое то говно. Два часа не могу контроллер к роуту привязать. Все мини-фреймворки такие душные?

Ответы69634

736 7 сен, 23:11 736 1469634

>>1469623
Какая версия Слима? Возможно, что ты четвёртую скачал, а делаешь по докам на 3.

Ответы70166

sage 737 7 сен, 23:51 737 1469647

>>1469232
700. Для джуна без опыта - очень много. Сейчас понимаю, что очень повезло.

353 Кб, 1440x900
738 8 сен, 13:40 738 1469875

Может кто-нибудь посоветовать, как быстрее всего вкатиться в безопасность? Где самые годные уроки/гайды?

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

Сразу сорри за много букв. Немного конкретнее опишу свою проблему.

Занимался тут по одному видосу, где рассказывалось, как работать с базой данных, и сделал почти все, что нужно. Только автор видоса предлагал проблему безопасности сайта решить самому. Он обмолвился, что в моем случае можно полям с конкатенацией применить mysqli_real_escape_string. А также сказал что-то про XSS-атаку, от которой можно защититься посредством strip-tags. Я не понял, идет ли речь о том, что нужно выбрать что-то одно из этого, либо же надо несколько фильтров накладывать? Мне уже приходилось использовать strip-tags() для того, чтобы очистить текст от html-тэгов, и вроде как она фильтрует также PHP, но мне не очень ясно, как именно это помогает в безопасности.

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

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

Собственно, в своем коде я применил mysqli_real_escape_string (как это рассказывается уже в другом ролике, но он на англ: https://www.youtube.com/watch?v=nTgFPcYRkys), а вот со strip-tags решил подождать. Потому что я не очень понимаю, нужен ли он. Нужно ли вообще прогонять информацию, получаемую через $_POST через несколько фильтров (для того, чтобы защититься от разных атак)? Подобные ухищрения кажутся немного нелепыми, но это первое, что пришло мне на ум, а именно создать еще 4 переменных и использовать очередную функцию (в данном случае strip-tags), прогоняя через нее уже имеющиеся переменные. Как паровозик через туннели, ё-мое. На комментарии в скрине внимание можно не обращать, я их оставляю для себя.

Я смотрел как-то еще один ролик, и там сразу про несколько функций рассказывалось, применяющихся для защиты. Помимо strip_tags() еще htmlspecialchars() и htmlentities().

Но из роликов и инфы в нете я получаю какую-то фрагментированную информацию. Знает ли кто-то адекватные источники на эту тему?

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

И что меня интересует больше всего, так это то, зачем в таких запросах нужна конкатенация с двух сторон, именно в таком виде? И еще кавычки внутри кавычек-апострофов. Это связано с безопасностью? В ролике автор как-то не очень объяснил этот момент. До того, как я применил strip-tags, в самом запросе mysqli_query на скрине там были не переменные, а POST-параметр.

353 Кб, 1440x900
738 8 сен, 13:40 738 1469875

Может кто-нибудь посоветовать, как быстрее всего вкатиться в безопасность? Где самые годные уроки/гайды?

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

Сразу сорри за много букв. Немного конкретнее опишу свою проблему.

Занимался тут по одному видосу, где рассказывалось, как работать с базой данных, и сделал почти все, что нужно. Только автор видоса предлагал проблему безопасности сайта решить самому. Он обмолвился, что в моем случае можно полям с конкатенацией применить mysqli_real_escape_string. А также сказал что-то про XSS-атаку, от которой можно защититься посредством strip-tags. Я не понял, идет ли речь о том, что нужно выбрать что-то одно из этого, либо же надо несколько фильтров накладывать? Мне уже приходилось использовать strip-tags() для того, чтобы очистить текст от html-тэгов, и вроде как она фильтрует также PHP, но мне не очень ясно, как именно это помогает в безопасности.

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

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

Собственно, в своем коде я применил mysqli_real_escape_string (как это рассказывается уже в другом ролике, но он на англ: https://www.youtube.com/watch?v=nTgFPcYRkys), а вот со strip-tags решил подождать. Потому что я не очень понимаю, нужен ли он. Нужно ли вообще прогонять информацию, получаемую через $_POST через несколько фильтров (для того, чтобы защититься от разных атак)? Подобные ухищрения кажутся немного нелепыми, но это первое, что пришло мне на ум, а именно создать еще 4 переменных и использовать очередную функцию (в данном случае strip-tags), прогоняя через нее уже имеющиеся переменные. Как паровозик через туннели, ё-мое. На комментарии в скрине внимание можно не обращать, я их оставляю для себя.

Я смотрел как-то еще один ролик, и там сразу про несколько функций рассказывалось, применяющихся для защиты. Помимо strip_tags() еще htmlspecialchars() и htmlentities().

Но из роликов и инфы в нете я получаю какую-то фрагментированную информацию. Знает ли кто-то адекватные источники на эту тему?

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

И что меня интересует больше всего, так это то, зачем в таких запросах нужна конкатенация с двух сторон, именно в таком виде? И еще кавычки внутри кавычек-апострофов. Это связано с безопасностью? В ролике автор как-то не очень объяснил этот момент. До того, как я применил strip-tags, в самом запросе mysqli_query на скрине там были не переменные, а POST-параметр.

Показать весь текст
Ответы7000472616

739 8 сен, 13:48 739 1469880

>>1460202
Ты имеешь в виду, что лучше писать 127.0.0.1 вместо localhost?

Сорри за некропостинг.

Ответы70373

740 8 сен, 16:29 740 1469959

.

741 8 сен, 18:16 741 1470004

>>1469875
Ты пойми сразу что никто ничего не пишет с нуля.
А готовые решения уже содержат средства для валидации данных и защиты инъекций.
А дальше два подхода
если ты хочешь что то делать то ты изучаешь как правильно использовать продукт;
если ты хочешь понимать как проходят атаки гуглишь атаки конкретно для этого продукта и разбираешь их на сырцах

Ответы70690

742 8 сен, 18:25 742 1470011

>>1469095
сколько лет? сколько прошло между началом обучения и первым оффером? бочку делаешь?

Ответы70014

743 8 сен, 18:29 743 1470014

>>1470011
Не ведись глупенький

744 9 сен, 00:38 744 1470166

>>1469634
Этот прав. Бери лучше третий слим, там доки лучше и инфы больше.

Ответы70172

745 9 сен, 01:04 745 1470171

А какие плюсы у слим 4 ?

Ответы70172

746 9 сен, 01:05 746 1470172

это >>1470171 сюда>>1470166

747 9 сен, 04:35 747 1470198

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

Ответы7023370237

748 9 сен, 09:29 748 1470233

>>1470198
Я проигрываю с местных кастратов, лол.
>>у меня вообще паническая атака
Чтож вы такие немощные то?

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

Ответы7023770255

749 9 сен, 09:36 749 1470237

>>1470233
П.С.
Я не к тому что бы постебаться.
Я к тому, что любые знания можно продать, а ты >>1470198
уже что то умеешь. Но как конченый овощ скулишь
>>Оцените мои шансы попасть на работу
позорище.

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

750 9 сен, 10:21 750 1470255

>>1470233
да кстати лол, у меня одноклассник так "работал", но ему лет 15 было лол. К 19 уже жоповозку купил учась в колледже.

Ответы70256

751 9 сен, 10:22 751 1470256

>>1470255
но он работал на себя, а не на дядю)

752 9 сен, 11:08 752 1470279

Поясните по композеру, анонисы. Я первым делом устанавливаю композер. Потом, если я хочу в голом проекте использовать какой-то пакет, я иду в консоль и пишу composer requre пакет/пакет. А что мне делать если у меня уже есть composer.json? Как мне сказать: компосер, выполняй вон тот файл? Просто composer uodate? А зачем тогда composer install?

Ответы703087057275079

753 9 сен, 11:53 753 1470297

>А что мне делать если у меня уже есть composer.json?
composer install
>Просто composer uodate?
Не делай composer update. Забудь про существование этой команды (пока, по крайней мере).

Ответы70312

754 9 сен, 12:37 754 1470308

>>1470279
Composer - это инструмент не только для скачивания, но и для фиксации версий. Потому что mypack@v1 может иметь функцию, которой уже нет в mypack@v2 и твой код, вызывающий её, сломается. Соответственно, необходимо куда-то записать, что ты используешь mypack с версией именно v1.
Так, композер поддерживает два файла файла:
composer.json - "проекту нужен mypack"
composer.lock - "нужно использовать mypack версии v1"

Команды:
composer require mypack v1 - добавит mypack в composer.json и v1 в composer.lock
composer update mypack - обновит версию mypack в composer.lock
composer install - скачает все пакеты из composer.lock с указанными версиями тебе в vendor.

composer install обычно используется при деплое. Твои composer.json и composer.lock лежат под гитом. Ты делаешь git clone или git pull и стягиваешь актуальные версии этих файлов на машину, потом делаешь composer install - и он выкачивает тебе нужные пакеты нужных версий. Всё, проект можно запускать.

Ответы7031270572

755 9 сен, 12:54 755 1470312

>>1470297
>>1470308
Спасибо, очень доходчиво

756 9 сен, 14:40 756 1470373

>>1469880
Да, по крайней мере у нас с товарищем было так. Наверное localhost виндой как-то по-другому интерпретируется, нежели просто ip циферками. Да чё, щас проверю ещё раз. / Да, все ещё есть задержка секунда- полторы. Интересно бы узнать как там, в глубине, это работает.

Ответы7040370683

757 9 сен, 15:27 757 1470403

>>1470373
Скорее всего, если ты указываешь адрес напрямую, то твой компьютер обращается по нему безо всяких промежуточных этапов.
А localhost требует вызова службы dns, которая пытается зарезолвить слово "localhost" в какой-то айпишник, обращается к кэшам, ещё куда-то, потом в hosts-файлик и в итоге возвращает 127.0.0.1, куда твой компьютер уже отправляет запрос так же, как и в варианте 1.
(собственно, слово localhost - это вообще нифига не стандарт, просто он прописан в локальном конфиге dns большинства ОСей, как 127.0.0.1)

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

Ответы70514

758 9 сен, 18:15 758 1470514

>>1470403
На ноде у меня нет такой проблемы, оба варианта работают быстро.

759 9 сен, 19:28 759 1470572

>>1470308
>>1470279
Хорошо, годно расписал.

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

Ответы70942

760 9 сен, 21:54 760 1470683

>>1470373
Ок, спасибо, буду так делать на всякий случай.

761 9 сен, 22:01 761 1470690

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

Ответы70854

762 10 сен, 07:20 762 1470854

>>1470690
Приходит тебе заказ сделать сайт для компании, ты берешь например битрикс для реализации, потому как нет смысла для типичного проекта писать все руками с нуля.
Ты изучаешь как правильно им пользоваться. Например рядовое место для инъекций это формы (для отзывов, для записи на что либо). Соответственно ты смотришь примеры как это правильно сделать в битриксе. И если ты сделаешь по гайдам с офсайта то у тебя и не возникнет проблем.

Ответы708697110372615

763 10 сен, 08:41 763 1470869

>>1470854
Чуваки, что угодно, только не битрикс. Действительно, что угодно, хоть yii, хоть древний, как говно мамонта, codeigniter, хоть wordpress (хотя тоже то ещё говно).
Но только не битрикс. Не заботитесь о себе - позаботьтесь о тех, кому после вас это поддерживать.
А новичку его вообще предлагать нельзя. Хороших паттернов он не выучит, навыки архитектуры не прокачает, на зарубежных клиентов работать не сможет. Эдакая западня.

Ответы70955

9 Кб, 811x109
764 10 сен, 10:59 764 1470925

Пиздец, ну и говноедство.
И это убожество называется Laravel.

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

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

Ответы7095370999710437115672615

765 10 сен, 11:30 765 1470942

>>1470572
спасибо

766 10 сен, 12:05 766 1470953

>>1470925
А что ты еще ожидал от пыхарей?

767 10 сен, 12:06 767 1470955

>>1470869
>на зарубежных клиентов работать не сможет
Он их и так найти не сможет (нормальных, по крайней мере), если продолжит писать на php.

Ответы70963

768 10 сен, 12:27 768 1470963

>>1470955
О, вот и хейтеры подъехали.

Мимо-пыхарь-работает-удалённо-на-нидерланды-за-3-килобакса.

Ответы70993

769 10 сен, 13:21 769 1470993

>>1470963
>Мимо-пыхарь-работает-удалённо-на-нидерланды-за-3-килобакса.
Какие же пыхари дегенераты, простигосподи.

мимо-жавист-котлинист-работает-в-комфортном-офисе-за-300-килорублей

Ответы71070

770 10 сен, 13:26 770 1470999

>>1470925
Ты не дорос ещё.

771 10 сен, 14:48 771 1471043

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

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

Ответы71069

772 10 сен, 15:37 772 1471069

ох как на понахватаются по верхам , а потом вот с такими и работать
>>1471043

Ответы71148

773 10 сен, 15:40 773 1471070

>>1470993
мимо-жавист-котлинист-анонист-гребёт -в кандалах-на-галере-с-корпо -булшитом-за-300-килорублей

774 10 сен, 16:25 774 1471103

>>1470854
Теперь немного понял. С нуля - т.е. на чистом пхп без всяких CMS, фреймворков и т.д., да? Т.е. нет особого смысла вкатываться в безопасность, пока не начну работать с фреймворками?

Ответы714187219872615

775 10 сен, 17:18 775 1471148

>>1471069
Ты хр у нас не пройдёшь с такими тупыми вопросами. Рано тебе ещё работать.

Ответы71153

776 10 сен, 17:24 776 1471153

>>1471148
нахуя мне хрюндель и твоя помойка галера если я на себя работаю уже как с 10 лет

мимо вопрос не мой , другой анон

777 10 сен, 17:27 777 1471156

>>1470925
а что ты ожидал от Eloquent и ОRM в целом ? сделано тупым говном для тупого говна как и сама Лара для написания чего-то на коленки за минимум секунд, алсо особые дауны пытаются пародировать dao и приминают подходы от туда.

778 10 сен, 21:49 778 1471418

>>1471103
Да, да
Лучшее обучение разбирать чужой хороший код и делать так же

779 11 сен, 00:58 779 1471516

Подскажите пожалуйста на счет базы данных для файлообменника. Мне нужна 1 таблица, в которой будет храниться id,file_path, file_name, file_size, file_extension, created_at ? Или имя, разрешение, размер - лишняя информация, которую можно обрабатывать при необходимости каждый раз? Или этой информации вообще мало, и нужно добавить что то еще? И ведь правильно, что выходит только 1 модель и контролер? На первый взгляд задача кажется легкой, или ее смысл научить работать с файлами?

Ответы719697219972614

780 11 сен, 11:25 780 1471677

Господа, ответственно заявляю что я ленивая пидораха. Это самое хуевоe.
Уже месяцев 5 барахтаюсь на одном и том же уровне. Чето типа блога с ноля способен написать. И завис.
Есть работка, платят не среднюю по РФ, на работке есть паралельная задача написать определенный сервис, я его общую логику написал. Но я пишу его еле еле, кое как по три строки в день.
Если бы взялся уверенно - давно бы уже сделал, и мне бы ЗП подняли. Но я как дерьмо в проруби.
Пиздец мне это надоело.

Ответы7167871704

781 11 сен, 11:26 781 1471678

>>1471677
Как взять себя в руки, и перестать быть хуепутолом? :(
Слабак я.

это риторический вопрос

782 11 сен, 11:40 782 1471704

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

Ответы71707

783 11 сен, 11:43 783 1471707

>>1471704
Я если честно себя уважать уже перестал, ну что это за дела?
Деньги пусть обычные платят, мозг не ебут, чему то я по итогу научился, задача есть. Время есть.
Мне блядь просто стыдно.

Ответы71712

784 11 сен, 11:50 784 1471712

>>1471707
Это обычная реакция умного человека - не напрягаться без нужды. Выдели 10 минут в день для начала и все

2,1 Мб, 1280x960
785 11 сен, 16:39 785 1471850

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

Ответы71852

786 11 сен, 16:41 786 1471852

>>1471850
Зачем он девочке на ногу наступил?

Ответы71867

787 11 сен, 17:14 787 1471867

>>1471852
Солидный человек. Может себе позволить.

788 11 сен, 19:09 788 1471920

Уважаемые, а может кто подскажет, что именно делает директива pcre.jit = 0 в php.ini?
А то вот опытным путём обнаружил, что в тестировании конфигурации битрикса она убирает предупреждение про размер стека, но возникают подозрения, что этим я какой-то функционал отключаю.

Ответы7204672613

789 11 сен, 20:07 789 1471969

>>1471516
Собственно вопрос в том, что выгодней. Хранить такие данные или вычислять их при необходимости каждый раз?

Ответы7219972614

56 Кб, 739x457
790 11 сен, 21:29 790 1472006

Как мне найти эти методы? Пишут что смотреть остальные методы тут: https://github.com/symfony/symfony/blob/3.0/src/Symfony/Component/HttpFoundation/File/UploadedFile.php но там нет тех, что на скрине. Все классы родителей перерыл. Знаю что можно использовать стандартные функции для работы с файлами, но у меня с головы не выходит мысль что я не смог найти то, что мне нужно.

Ответы72030

791 11 сен, 22:00 791 1472030

>>1472006
Нашел. Когда искал пропустил trait FileHelpers

792 11 сен, 22:28 792 1472046

>>1471920
https://www.php.net/manual/ru/pcre.configuration.php

793 11 сен, 23:28 793 1472072

83 Кб, 1185x6078 Кб, 454x191

Ребят, уже часа 2 не могу разобраться с этим, не понимаю почему приходит только часть массива. Мне нужно загрузить файл через курл, но приходит как раз всё кроме файла. Контент тайп = мультипарт/форм-дата ставил.

Ответы72121

794 12 сен, 03:32 794 1472103

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

Ответы72604

795 12 сен, 06:47 795 1472121

>>1472072
$_FILES

Ответы72125

796 12 сен, 07:21 796 1472125

>>1472121
thx, для довнс вроде меня тяжело даётся
но нравится

797 12 сен, 11:43 797 1472198

>>1471103
>Т.е. нет особого смысла вкатываться в безопасность, пока не начну работать с фреймворками?
Очень спорное утверждение, аношка. За ним может скрываться чистая лень типа "я щас на голом php не буду делать проверку на инъекцию и эддслеши, зачем, ведь во фреймворках все есть". Но чисто для саморазвития, чего и хочет добиться оп, это плохо, потому что ты упускаешь кучу нюансов и можешь просто не понять как работает функция "безопасности" во фреймворке

798 12 сен, 11:46 798 1472199

>>1471969
>>1471516
Вроде как оп советует вычислить их один раз с помощью сторонней библиотеки/средствами скрипта и хранить в базе в виде jcon объекта. То-есть, как я понимаю, будет одно лишнее поле с текстом объекта. Кроме того, оп еще пишет делать комментарии к скачиваемым файлам, то-есть это еще одна таблица, у которой будет текст камента, айди камента, потом парент айди - для двевовидных каментов, и айди-файла - чтобы знать кому этот камент принадлежит. Хотя это может быть факультативным заданием со звездочкой

Ответы72614

799 12 сен, 12:33 799 1472217

ОП и Компания, помогите додумать задачу "Алфавит по кругу". Вроде все правильно, но то как выглядит код меня не устраивает, ибо заготовка ОПа с $fromAngle = -80, $toAngle = 260; явно должна была использоваться как то по другому. И какого черта у меня ноль градусов находится в районе 6 часов, а не как у ОПа в районе 3 часов, отсюда и проблема с $fromAngle = -80; $toAngle = 260; да и сам алфавит у меня верх ногами получился, пришлось реверс делать. Если есть возможность - сделайте правку в самом коде. Заранее спасибо!
https://3v4l.org/BEGtc
[Ссылка]
BEGtc
https://3v4l.org/BEGtc

Ответы7261372614

20 Кб, 687x452
800 12 сен, 16:10 800 1472344

Возможно это реализовать на yii2 ? Если да, то как ?
Помогите тупому

Ответы7242072774

801 12 сен, 19:51 801 1472420

>>1472344
это надо сделать апишку ?
если да то можно но зачем ?

https://forum.yiiframework.com/t/creating-a-rest-api-for-yii2-basic-template/87613

Ответы72424

5 Кб, 619x75
802 12 сен, 19:59 802 1472424

>>1472420
>но зачем ?
Дали такое задание.

Ответы72528

803 12 сен, 21:05 803 1472468

>>1447479
Как определил?

Ответы72516

804 12 сен, 22:43 804 1472516

>>1472468
Член встал, как же еще

805 12 сен, 23:04 805 1472528

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

Ответы72632

806 13 сен, 03:49 806 1472604

>>1472103
Бамп, что никто проекты чужие в портфолио не запихивал?

759 - 805 807 13 сен, 04:57 807 1472613

>>1471920

JIT = just-in-time compilation. Это опция, которая позволяет взять регулярку и скомпилировать из нее программу в машинных кодах, которая проверяет строку на соответствие регулярке (вместо того, чтобы сопостовлять регулярку со строкой с помощью интерпретатора).

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

JIT - это значит, что мы берем регулярку вида "/^abc/" и преобразуем (компилируем) ее, например, в исполняемый PHP-код:

function is_match($string) {
return mb_substr($string, 0, 3) == 'abc';
}

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

Подробно она описана в документации к библиотеке PCRE: https://www.pcre.org/original/doc/html/pcrejit.html , учти что это сишная библиотека и там есть примеры кода на Си.

Если кратко:

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

>>1472217

> И какого черта у меня ноль градусов находится в районе 6 часов, а не как у ОПа в районе 3 часов

А ты наверно синус с косинусом местами перепутал. При 0 градусов синус равен нулю, а косинус - единице. Если у тебя синус на оси X, то при нуле градусов у тебя будет либо 12 часов, либо 6 в зависимости от знака (+/-) перед косинусом. В компьютерной графике традиционно 0 градусов лежит на 3 часах и угол отсчитывается против часовой стрелки.

> $curDegree = round($degree);

Начальный угол, наверно, должен равняться $fromAngle.

В остальном, решение верное.

759 - 805 807 13 сен, 04:57 807 1472613

>>1471920

JIT = just-in-time compilation. Это опция, которая позволяет взять регулярку и скомпилировать из нее программу в машинных кодах, которая проверяет строку на соответствие регулярке (вместо того, чтобы сопостовлять регулярку со строкой с помощью интерпретатора).

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

JIT - это значит, что мы берем регулярку вида "/^abc/" и преобразуем (компилируем) ее, например, в исполняемый PHP-код:

function is_match($string) {
return mb_substr($string, 0, 3) == 'abc';
}

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

Подробно она описана в документации к библиотеке PCRE: https://www.pcre.org/original/doc/html/pcrejit.html , учти что это сишная библиотека и там есть примеры кода на Си.

Если кратко:

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

>>1472217

> И какого черта у меня ноль градусов находится в районе 6 часов, а не как у ОПа в районе 3 часов

А ты наверно синус с косинусом местами перепутал. При 0 градусов синус равен нулю, а косинус - единице. Если у тебя синус на оси X, то при нуле градусов у тебя будет либо 12 часов, либо 6 в зависимости от знака (+/-) перед косинусом. В компьютерной графике традиционно 0 градусов лежит на 3 часах и угол отсчитывается против часовой стрелки.

> $curDegree = round($degree);

Начальный угол, наверно, должен равняться $fromAngle.

В остальном, решение верное.

Показать весь текст

808 13 сен, 04:58 808 1472614

>>1472217

> И какого черта у меня ноль градусов находится в районе 6 часов, а не как у ОПа в районе 3 часов

А ты наверно синус с косинусом местами перепутал. При 0 градусов синус равен нулю, а косинус - единице. Если у тебя синус на оси X, то при нуле градусов у тебя будет либо 12 часов, либо 6 в зависимости от знака (+/-) перед косинусом. В компьютерной графике традиционно 0 градусов лежит на 3 часах и угол отсчитывается против часовой стрелки.

> $curDegree = round($degree);

Начальный угол, наверно, должен равняться $fromAngle.

В остальном, решение верное.

>>1471516
>>1471969

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

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

Насчет имени файла - я думаю, надо хранить:

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

> И ведь правильно, что выходит только 1 модель и контролер?

Наверно, да. У тебя же по сути один раздел на сайте с 3 действиями: закачка файла, просмотр информации о файле, скачивание файла. И одна сущность: файл.

Если будут комментарии, то для них будет своя модель.

>>1472199

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

808 13 сен, 04:58 808 1472614

>>1472217

> И какого черта у меня ноль градусов находится в районе 6 часов, а не как у ОПа в районе 3 часов

А ты наверно синус с косинусом местами перепутал. При 0 градусов синус равен нулю, а косинус - единице. Если у тебя синус на оси X, то при нуле градусов у тебя будет либо 12 часов, либо 6 в зависимости от знака (+/-) перед косинусом. В компьютерной графике традиционно 0 градусов лежит на 3 часах и угол отсчитывается против часовой стрелки.

> $curDegree = round($degree);

Начальный угол, наверно, должен равняться $fromAngle.

В остальном, решение верное.

>>1471516
>>1471969

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

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

Насчет имени файла - я думаю, надо хранить:

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

> И ведь правильно, что выходит только 1 модель и контролер?

Наверно, да. У тебя же по сути один раздел на сайте с 3 действиями: закачка файла, просмотр информации о файле, скачивание файла. И одна сущность: файл.

Если будут комментарии, то для них будет своя модель.

>>1472199

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

Показать весь текст
Ответы73073

809 13 сен, 04:58 809 1472615

>>1471103

Безопасность не зависит от того, используешь ты фреймворк или нет. В фреймворках есть средства для защиты от уязвимостей, но если о них не знать, то можно ее допустить. Советую почитать мои несколько базовых уроков о популярных уязвимостях: https://github.com/codedokode/pasta/tree/master/security

>>1470925

Так тебе никто не запрещает удалять SQL-запросом. На практике удобно совмещать ORM и SQL. Ну например, если тебе надо посчитать сумму по какой-то колонке, выгоднее это делать через SQL, чем загружать в PHP 1000 объектов, суммировать их поля и выбрасывать эти объекты.

Причина, почему ORM так делает, там написана. Также, в Доктрине есть "ленивая" загрузка, которая позволяет не загружать данные при создании объекта.

И какую альтернативу ты предложишь? Отказаться от ORM и моделей-объектов и передавать массивы неизвестной структуры из функции в функцию? Потом в таком коде не разобраться. По моему опыту, удобнее использовать ORM для маленьких объемов данных и SQL для каких-то операций на большом числе записей.

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

>>1470854

А еще у битрикса можно получать вознаграждение за покупку продукта по твоей рекомендации ;)

Битрикс и правда хреновый, там по моему требуется настройки в php.ini менять, чтобы он работал. Хорошо, что я с ним не работаю.

Ответы73412

810 13 сен, 04:59 810 1472616

>>1469875

Начни отсюда: https://github.com/codedokode/pasta/tree/master/security

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

Если хочешь учиться далее, смотри OWASP top 10 - 10 самых популярных уязвимостей: https://www.owasp.org/images/7/72/OWASP_Top_10-2017_(en).pdf.pdf

Увы, там пояснения не очень простые и не очень понятные. Так что ты можешь по каждой уязвимости гуглить информацию дополнительно. Вот например презентация про SQL инъекции: https://www.ptsecurity.com/upload/corporate/ru-ru/analytics/PT-devteev-Advanced-SQL-Injection.pdf

Далее, есть сайт с каталогом всех известных уязвимостей (не только на сайтах, а вообще в любых программах), для каждой уязвимости делается описание и присваивается номер. Вот обзор уязвимостей: https://www.cvedetails.com/vulnerabilities-by-types.php

Вот список уязвимостей по вордпрессу: https://www.cvedetails.com/product/4096/Wordpress-Wordpress.html?vendor_id=2337

Вот пример одной из них (SQL инъекция в плагине): https://www.cvedetails.com/cve/CVE-2011-5216/

Вот изменения, которые ее исправляют, и по ним можно попробовать понять, в чем она заключалась: https://plugins.trac.wordpress.org/changeset/435356/scormcloud

Можешь порыться, хотя там сложно будет разобраться.

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

> Видов атак, я так понял, существует немалое количество. Как от всех них защищаться и в каких случаях нужно применять те или иные функции?

Если выучить топ 10 уязвимостей, то этого хватит в большинстве случаев. Как минимум, надо знать наизусть:

- SQL инъекции
- инъекции в eval
- XSS
- CSRF (cross site requst forgery)
- session fixation
- такую уязвимость: https://habr.com/ru/post/124387/ и https://habr.com/ru/post/124898/
- уязвимости при загрузке файлов на сервер
- раскрытие информации (путей к файлам, параметров конфигурации итд)
- как безопасно хранить пароли
- как безопасно сделать авторизацию и проверку прав доступа
- same-origin policy в браузерах, CORS (cross-origin resource sharing)

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

> Мне уже приходилось использовать strip-tags() для того, чтобы очистить текст от html-тэгов, и вроде как она фильтрует также PHP, но мне не очень ясно, как именно это помогает в безопасности.

Читай мой урок по XSS, там объясняется.

> Верно ли я понимаю, что о безопасности впору думать всякий раз, когда на сайте есть какие-либо формы для ввода/работает GET или POST параметр?

Не только. От пользователя приходят еще и другие данные:

- файлы при загрузке файлов (что, если он загрузит к тебе php-файл с кодом?)
- HTTP-заголовки в $_SERVER
- куки в $_COOKIE

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

> Нужно ли вообще прогонять информацию, получаемую через $_POST через несколько фильтров (для того, чтобы защититься от разных атак)?

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

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

Косые кавычки нужны, если имя поля или таблицы является зарезервированным словом (вроде SELECT или INT) в языке SQL. Официальный мануал, попробуй прочесть: https://dev.mysql.com/doc/refman/8.0/en/identifiers.html

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

810 13 сен, 04:59 810 1472616

>>1469875

Начни отсюда: https://github.com/codedokode/pasta/tree/master/security

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

Если хочешь учиться далее, смотри OWASP top 10 - 10 самых популярных уязвимостей: https://www.owasp.org/images/7/72/OWASP_Top_10-2017_(en).pdf.pdf

Увы, там пояснения не очень простые и не очень понятные. Так что ты можешь по каждой уязвимости гуглить информацию дополнительно. Вот например презентация про SQL инъекции: https://www.ptsecurity.com/upload/corporate/ru-ru/analytics/PT-devteev-Advanced-SQL-Injection.pdf

Далее, есть сайт с каталогом всех известных уязвимостей (не только на сайтах, а вообще в любых программах), для каждой уязвимости делается описание и присваивается номер. Вот обзор уязвимостей: https://www.cvedetails.com/vulnerabilities-by-types.php

Вот список уязвимостей по вордпрессу: https://www.cvedetails.com/product/4096/Wordpress-Wordpress.html?vendor_id=2337

Вот пример одной из них (SQL инъекция в плагине): https://www.cvedetails.com/cve/CVE-2011-5216/

Вот изменения, которые ее исправляют, и по ним можно попробовать понять, в чем она заключалась: https://plugins.trac.wordpress.org/changeset/435356/scormcloud

Можешь порыться, хотя там сложно будет разобраться.

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

> Видов атак, я так понял, существует немалое количество. Как от всех них защищаться и в каких случаях нужно применять те или иные функции?

Если выучить топ 10 уязвимостей, то этого хватит в большинстве случаев. Как минимум, надо знать наизусть:

- SQL инъекции
- инъекции в eval
- XSS
- CSRF (cross site requst forgery)
- session fixation
- такую уязвимость: https://habr.com/ru/post/124387/ и https://habr.com/ru/post/124898/
- уязвимости при загрузке файлов на сервер
- раскрытие информации (путей к файлам, параметров конфигурации итд)
- как безопасно хранить пароли
- как безопасно сделать авторизацию и проверку прав доступа
- same-origin policy в браузерах, CORS (cross-origin resource sharing)

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

> Мне уже приходилось использовать strip-tags() для того, чтобы очистить текст от html-тэгов, и вроде как она фильтрует также PHP, но мне не очень ясно, как именно это помогает в безопасности.

Читай мой урок по XSS, там объясняется.

> Верно ли я понимаю, что о безопасности впору думать всякий раз, когда на сайте есть какие-либо формы для ввода/работает GET или POST параметр?

Не только. От пользователя приходят еще и другие данные:

- файлы при загрузке файлов (что, если он загрузит к тебе php-файл с кодом?)
- HTTP-заголовки в $_SERVER
- куки в $_COOKIE

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

> Нужно ли вообще прогонять информацию, получаемую через $_POST через несколько фильтров (для того, чтобы защититься от разных атак)?

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

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

Косые кавычки нужны, если имя поля или таблицы является зарезервированным словом (вроде SELECT или INT) в языке SQL. Официальный мануал, попробуй прочесть: https://dev.mysql.com/doc/refman/8.0/en/identifiers.html

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

Показать весь текст
Ответы73412

3 Кб, 728x56
811 13 сен, 07:09 811 1472632

>>1472528
Только эти фреймворки можно использовать. Я вообще фреймворки не использовал, только-только начал изучать. А как эту задачу сделать я не представляю

Ответы7273572825

812 13 сен, 12:36 812 1472735

>>1472632
почитай про API , потом ищи примеры реализации АПИ на ларавеле (наверно есть на ларакасте) , начинай делать и решай попутно проблемы.

Ответы72915

813 13 сен, 13:27 813 1472774

>>1472344
Там фреймворк за тебя сам все сделает. Создаешь модельку, пишешь у ней rules с указанными требованиями, передаешь то что пришло в модель и дергаешь validate, оно тебе вернет bool, если там false, то getErrors кажется возвращает как раз массив вида поле=>ошибки

Ответы72915

814 13 сен, 14:44 814 1472825

>>1472632
Стоит понимать, что yii2 уже порядочно пованивает. Лучше взять laravel, symphony либо какой-то из микрофреймворков, указанных выше.
Совсем новичкам я бы посоветовал Laravel, как самый простой и имеющий сразу в коробке всё, что понадобится, без необходимости надстраивать микрофреймворк какими-то внешними пакетами.
А накодить можно что угодно на чём угодно, это не показатель.

Ответы7291572930

815 13 сен, 18:49 815 1472915

>>1472735
>>1472774
>>1472825
Спасибо за ответы

816 13 сен, 19:11 816 1472930

>>1472825
>Стоит понимать, что yii2 уже порядочно пованивает
для типовых средних задач как RAD фрейм ему до сих пор нет равных , его минус это монолитность , но и тут это не особо важно
>Лучше взять laravel, symphony
с 4 симфой возможно , лажа для такой типовой задачи точно мимо когда есть спец люмен который не требует доп настроек
>Cовсем новичкам я бы посоветовал Laravel, как самый простой и имеющий сразу в коробке всё
всё в коробке есть у любого фрейма , но лара вместе с лара кастом делают кодера инвалида ибо джуны учат джунов что не круто , лару можно брать при сильном контроле синьёра (толкового) , симфа по выгоднее как с её философией так и стем кол вом ООП и ДДД пропагандой которую она несёт, порог выше да , но и профита больше по итогу.

после полу года работы на ларе так и не понял на что дроч на неё даже по сравнению с тем же yii.

Ответы73678

817 14 сен, 01:03 817 1473073

>>1472614
>В такой ситуации стоит выписать возможные варианты, их плюсы и минусы, и выбрать оптимальный в данной ситуации. Например, рассмотрим хранение размера в БД:

Спасибо что ответил, опчик.

Аноны, кому не впадлу. Я вывел видео/аудио тегом <video>. Но, как я понял, данный способ сейчас не используют. Может у кого есть в закладках хороший гайд по этой теме?

Ответы730817325773544

818 14 сен, 01:18 818 1473081

>>1473073
>Но, как я понял, данный способ сейчас не используют.
с чего ты это взял анончик ?

Ответы73090

819 14 сен, 02:25 819 1473090

>>1473081
Вчера когда искал инфу - выдавало iframe и еще что то. Нашел только что в бутстрапе есть класс 'video-fluid', которого на деле не было (долго тупил, в итоге понял что он просто не прописан. прописал сам). В общем сложилось такое впечатление по вчерашнему опыту гугла.
Мне стыдно даже как то просить скинуть ссылку на что-то, ведь я и сам могу уделить время и поискать. Только встал сегодня - убунту не запускается моя,час назад переустановил полностью, сижу среду настраиваю. Вот и спросил, может у кого под рукой хороший гайд по этой теме.
Но судя по тому что ты спросил - мои догадки ошибочны.Только сейчас вспомнил, что читал вчера, мол эти плееры встроенные в браузеры можно джава скриптом как то менять/настраивать.

Ответы7325773544

820 14 сен, 13:59 820 1473257

>>1473073
>Я вывел видео/аудио тегом <video>. Но, как я понял, данный способ сейчас не используют.

А разве сейчас можно подключать мультимедиа как-то иначе?

>>1473090
>выдавало iframe и еще что то
iframe в котором тот же audio/video тег

821 14 сен, 19:16 821 1473380

Аноны, какие есть альтернативы phpMyAdmin?

Ответы73405

822 14 сен, 20:14 822 1473405

>>1473380
для каких целей ?
есть https://www.adminer.org
в пхпшторме есть модель довольно удобный
я ещё использовал https://www.heidisql.com тоже довольно удобный

Ответы73406

823 14 сен, 20:14 823 1473406

>>1473405
*модуль

824 14 сен, 20:21 824 1473412

>>1472615
>>1472616
Чувак, спасибо. Самый годный ответ на мои вопросы. Ближайший месяц вынужден заниматься другими делами, но как только смогу вернуться к обучению кодингу, буду разбираться.

806 - 824 825 15 сен, 03:54 825 1473544

>>1473090

> Нашел только что в бутстрапе есть класс video-fluid

А этот класс есть в документации? https://getbootstrap.com/docs/4.3/getting-started/introduction/ Если нет, то ты скорее всего что-то напутал.

>>1473073

У тебя неверная информация, HTML5 audio/video сейчас как раз используют. Но там есть одна проблема: аудио и видио бывает разных форматов (есть разные форматы файлов-контейнеров, аудио/видеокодеков, разные профили этих кодеков) и разные браузеры поддерживают разные форматы. Более того, поддержка формата в одном и том же браузере может быть разной в разных ОС.

Вот информация: https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats

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

> убунту не запускается

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

826 15 сен, 09:23 826 1473568

Оп у меня следующая проблема:
Я хочу попасть в какое нибудь комюнити или заиметь своих сподвижников. Что я имею введу: Я хотел бы вести какой нибудь опенсорсный проект, не запарно и с другими людьми (пусть это будет пакет для Фреймворка или что то в этом роде). Какой профит я с этого поимею:
1. Будет проект которым можно баловать свое самолюбие
2. Смотря на код других я смогу подчерпнуть что то для себя
3. Даже когда мне будет лень что то делать или же не будет времени - проект будет развиваться так как есть другие люди и не будет демотивации по принципу: Сколько еще надо сделать и где на все это времени найти.

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

Пс не хочу пулреквестить в сами фреймворки так как это капля в море и сосем не тешит мое тщеславие.

Ответы73912

827 15 сен, 14:17 827 1473678

>>1472930
у laravel более чистая архитектура, больше экосистема и аудитория и он не застрял в 2009.
Мне приходилось поддерживать проекты на yii, и это ад. Ни тебе нормального слоя конфигурации, ни тебе нормального контейнера, ничего. Всё какое-то самописное, на магии и сайд эффектах. Фу-фу-фу.
Сранивать с тем же laravel смысла нет вообще, настолько в yii всё убого.

38 Кб, 1143x397
828 15 сен, 19:54 828 1473872

Привет двач, почему вместо букв у меня херня какая-то в массиве?

Ответы73878

829 15 сен, 19:59 829 1473878

>>1473872
https://www.php.net/manual/ru/function.str-split.php

Ответы7389473912

830 15 сен, 20:19 830 1473894

>>1473878
Спасибо, переделал

831 15 сен, 20:36 831 1473912

>>1473568

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

- искать всякие обзоры вроде "топ 100 плагинов для редактора X" и писать их авторам, что ты написал такой-то плагин и может быть, они добавят его в текущий или в следующий обзор. На Хабре выходят дайджесты вроде "события из мира PHP", можно написать их авторам.
- если это плагин к редактору, то у него наверно есть какой-то официальный или неофициальный каталог/рейтинг плагинов или что-то такое, надо посмотреть, как добавиться туда
- делать хорошие описания и ставить теги в описании пакета, чтобы он выдавался в поиске по ключевым словам. Посмотри, какие описания стоят у аналогичных пакетов.
- можно попробовать написать статью на Хабр о своем проекте. Но там по моему есть ограничения на пиар, потому вместо "посмотрите, какой я хороший написал плагин" можно сделать статью "как писать плагины к редактору на примере X"
- можно написать статью в своем блоге и запостить на Hacker News, но не факт, что она там надолго задержится
- можно искать вопросы на сайтах вроде SO, где люди спрашивают как что-то сделать, и рекомендовать свой плагин, но опять же, соблюдая их правила и раскрывая, что ты являешься его автором

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

Теперь о контрибуторах. С этим будет сложнее. В опен сурсе люди обычно делают что-то, только если это им самим очень нужно. Часто из 100 человек 99 только пользуются и 1, может быть, что-то вложит в проект. Потому тут опять же все завязывается на известность, чем больше будет пользователей, тем охотнее они будут контрибутить.

> Пс не хочу пулреквестить в сами фреймворки так как это капля в море и сосем не тешит мое тщеславие.

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

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

>>1473878

str_split не работает с русскими буквами, читай урок https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

831 15 сен, 20:36 831 1473912

>>1473568

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

- искать всякие обзоры вроде "топ 100 плагинов для редактора X" и писать их авторам, что ты написал такой-то плагин и может быть, они добавят его в текущий или в следующий обзор. На Хабре выходят дайджесты вроде "события из мира PHP", можно написать их авторам.
- если это плагин к редактору, то у него наверно есть какой-то официальный или неофициальный каталог/рейтинг плагинов или что-то такое, надо посмотреть, как добавиться туда
- делать хорошие описания и ставить теги в описании пакета, чтобы он выдавался в поиске по ключевым словам. Посмотри, какие описания стоят у аналогичных пакетов.
- можно попробовать написать статью на Хабр о своем проекте. Но там по моему есть ограничения на пиар, потому вместо "посмотрите, какой я хороший написал плагин" можно сделать статью "как писать плагины к редактору на примере X"
- можно написать статью в своем блоге и запостить на Hacker News, но не факт, что она там надолго задержится
- можно искать вопросы на сайтах вроде SO, где люди спрашивают как что-то сделать, и рекомендовать свой плагин, но опять же, соблюдая их правила и раскрывая, что ты являешься его автором

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

Теперь о контрибуторах. С этим будет сложнее. В опен сурсе люди обычно делают что-то, только если это им самим очень нужно. Часто из 100 человек 99 только пользуются и 1, может быть, что-то вложит в проект. Потому тут опять же все завязывается на известность, чем больше будет пользователей, тем охотнее они будут контрибутить.

> Пс не хочу пулреквестить в сами фреймворки так как это капля в море и сосем не тешит мое тщеславие.

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

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

>>1473878

str_split не работает с русскими буквами, читай урок https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

Показать весь текст
Ответы73917

832 15 сен, 20:48 832 1473917

>>1473912
Значит все упирается в раскрутку.
>Ну вообще, в этом есть смысл
Я плохо объяснил мне. не проблема создать иссуе если я нашел баг, но меня так прельщают что мне дают на столько проработанный агрегат и я им пользуюсь что я не хочу соглашаться по чужим проблемам и пулреквестить на их основе. Это омрачит мое впечатление

Ответы7393075047

833 15 сен, 21:07 833 1473930

>>1473917
ПАСЫБА УЧИТЕЛ

166 Кб, 672x960
834 16 сен, 00:51 834 1474069

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

Telegram для связи со мной: @no_snakes_alive

Ответы74077

835 16 сен, 01:59 835 1474077

>>1474069
>знание PHP на уровне
На уровне кого?

Ответы76139

64 Кб, 604x453
836 16 сен, 16:51 836 1474426

Знающий анон, подскажи. Прикручиваю комментарии в задании по файлообменнику на slim. Комментарии имеют древовидную структуру, у каждого есть id и parentId. Через рекурсию забираю данные из базы и получаю большой массив, у каждого элемента которого есть массив детей, а у детей есть свой массив детей и т.д. Сейчас встал вопрос о том, как это корректно вывести в шаблон twig. Если я пишу через

for comment in comments

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

Ответы7447075047

837 16 сен, 17:46 837 1474457

311 Кб, 1920x1040349 Кб, 1920x104066 Кб, 1621x907

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

Ответы744647448975047

838 16 сен, 18:07 838 1474464

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

Ответы7447274475

839 16 сен, 18:16 839 1474470

>>1474426
Спасибо, аноны, всем кто откликнулся. Сделол через макросы

840 16 сен, 18:19 840 1474472

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

841 16 сен, 18:20 841 1474475

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

Ответы7449275049

842 16 сен, 18:40 842 1474489

>>1474457
Я тоже нуб, посмотрел и что то не врубаюсь что ты сделать хочешь. Что должно выводиться то?

Ответы74532

843 16 сен, 18:41 843 1474492

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

844 16 сен, 19:47 844 1474532

>>1474489
должна выводиться форма регистрации , но вместе с ней выводится цифра 1 - TRUE как результат спешного подключения файла, 3 скрин смотри

3 Кб, 247x79
845 16 сен, 20:30 845 1474548

Зачем единица в конце ставится? Просто в книжке не написано.

Ответы745707458475049

846 16 сен, 20:53 846 1474559

И ещё, правильно ли я понимаю, что чтобы использовать переменные вне функции в самой функции - мне надо указывать переменные в самой функции?
Делается же это через точку? Или как то иначе? Типа:
echo $hui . $zalupa . $nigger . functioname();

Ответы7494875049

847 16 сен, 21:22 847 1474570

>>1474548
единица говорит сколько символов взять, напиши там 2 и ответ будет
$number = 123456 67890;
echo $number."\n";
echo substr($number, -3, 2);
// Вернет 8381427840 84
$number = 123456 67890;
echo $number."\n";
echo substr($number, -3, 1);
// Вернет 8381427840 8

Ответы74574

848 16 сен, 21:27 848 1474574

>>1474570
Спасибо. Почему-то не подумал самостоятельно проверить.

849 16 сен, 21:31 849 1474584

>>1474548
А вообще, в таких непонятных для тебя ситуаций, советую обращаться к php.net, а именно поиску на нем. Пишешь например "substr" и смотришь аргументы =)

850 16 сен, 23:24 850 1474948

>>1474559
>что чтобы использовать переменные вне функции в самой функции
Хуй проссышь что вы хотите
>$hui . $zalupa . $nigger
Это переменные функции?

Ответы75238

851 17 сен, 07:46 851 1475026

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

Ответы75049

852 17 сен, 09:13 852 1475047

>>1473917

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

>>1474426

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

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

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

Также, может быть тебе поможет информация про хранение древовидных данных в БД (может пригодиться, чтобы продемонстрирвоать знания на собеседовании): https://github.com/codedokode/pasta/blob/master/db/trees.md

>>1474457

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

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

> но include возвращает сам файл и еще 1, как успешное подключение

А зачем ты выводишь то, что вернет include? Не выводи результат.

Также, возможно тебе еще пригодится урок по работе с формами: https://github.com/codedokode/pasta/blob/master/forms.md

Ответы75093

853 17 сен, 09:15 853 1475049

>>1474475

Можно взять урок "делаем сайт на CMS/фреймворке" и повторить то, что там делается, и ты получишь готовый проект.

>>1474548

Это описано в мануале по substr: https://www.php.net/manual/ru/function.substr.php

Также, substr не работает с кирилицей, вот урок по теме: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

>>1474559

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

Как это делать, описано в мануале https://www.php.net/manual/ru/functions.arguments.php (хотя и не очень понятно описано).

>>1475026

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

632 - 665, 670 - 758 854 17 сен, 10:29 854 1475079

>>1470279

Там есть 2 файла: composer.json - в нем указываются примерные версии зависимостей, он создается руками, и composer.lock - в нем указаны точные версии установленных зависимостей, он создается композером автоматически, обновляется с помощью update.

composer install устанавливает точные версии зависимостей, которые прописаны в composer.lock (если его нет, install работает как update). То есть ты ставишь проверенные кем-то из коллег версии библиотек.

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

>>1469343

Это идея уровня битрикса. Посмотри пример кода:

class X
{
public function test()
{
$this->evm->on('event', function () {
$this->...
});
}
}

Здесь интуитивно ожидается, что $this указывает на объект X, а ты хочешь его поменять на что-то другое. Как тогда обращаться к полям и методам X? Не нужно проявлять тут оригинальность и придумывать нестандартные подходы. Не трогай $this и не подменяй его.

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

Ответы7509375122

855 17 сен, 10:30 855 1475081

>>1469492

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

>>1469284

Надо делать, как ты описал. Также, можно для вариантов завести константы, например: USER_ANONYMOUS или USER_REGISTERED.

>>1468575

Браузер отправляет на сервер абсолютные URL. Если ты пишешь в HTML-коде src="../1.jpg", то браузер сначала преобразует его в абсолютный URL http://exmaple.com/images/1.jpg, и его отправляет на сервер. Апач этих двоеточий (?) не видит.

У меня есть урок по относительным URL: https://github.com/codedokode/pasta/blob/master/network/urls.md

В RewriteRule ты указываешь путь как URL, относительно DocumentRoot. Если у тебя DocumentRoot это папка /var/www/public, то твой RewriteRule ... /public/$1 добавляет второе слово "public" к ней.

Чтобы понять, как работают RewriteRule, я бы советовал:

- почитать статью https://habr.com/ru/company/sprinthost/blog/129560/
- включить режим отладки mod_rewrite директивой LogLevel warn rewrite:trace4 (взял ее из статьи https://habr.com/ru/post/264395/ ) и в логи будет писаться каждое преобразование URL.

> Я не очень понимаю что есть корень сайта для браузера в моем случае?

Корень это то, что указано в DocumentRoot. То есть при обращении к http://example.com/index.php Апач будет искать index.php в корне сайта. Апач берет путь из URL, дописывает его к DocumentRoot и по получившемуся пути ищет файл (в случае наличия mod_rewrite он сначала применяет к этому пути описанные в конфиге правила).

> Корень для браузера это $_SERVER['DOCUMENT_ROOT']

Браузер ничего не знает о настройках сервера и папках на нем. Он просто отправляет на сервер URL, а как его интерпретировать, зависит от сервера.

Я бы тебе советовал поставить DocumentRoot, чтобы он указывал на public, это надежнее и удобнее, чем возиться с mod_rewrite.

855 17 сен, 10:30 855 1475081

>>1469492

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

>>1469284

Надо делать, как ты описал. Также, можно для вариантов завести константы, например: USER_ANONYMOUS или USER_REGISTERED.

>>1468575

Браузер отправляет на сервер абсолютные URL. Если ты пишешь в HTML-коде src="../1.jpg", то браузер сначала преобразует его в абсолютный URL http://exmaple.com/images/1.jpg, и его отправляет на сервер. Апач этих двоеточий (?) не видит.

У меня есть урок по относительным URL: https://github.com/codedokode/pasta/blob/master/network/urls.md

В RewriteRule ты указываешь путь как URL, относительно DocumentRoot. Если у тебя DocumentRoot это папка /var/www/public, то твой RewriteRule ... /public/$1 добавляет второе слово "public" к ней.

Чтобы понять, как работают RewriteRule, я бы советовал:

- почитать статью https://habr.com/ru/company/sprinthost/blog/129560/
- включить режим отладки mod_rewrite директивой LogLevel warn rewrite:trace4 (взял ее из статьи https://habr.com/ru/post/264395/ ) и в логи будет писаться каждое преобразование URL.

> Я не очень понимаю что есть корень сайта для браузера в моем случае?

Корень это то, что указано в DocumentRoot. То есть при обращении к http://example.com/index.php Апач будет искать index.php в корне сайта. Апач берет путь из URL, дописывает его к DocumentRoot и по получившемуся пути ищет файл (в случае наличия mod_rewrite он сначала применяет к этому пути описанные в конфиге правила).

> Корень для браузера это $_SERVER['DOCUMENT_ROOT']

Браузер ничего не знает о настройках сервера и папках на нем. Он просто отправляет на сервер URL, а как его интерпретировать, зависит от сервера.

Я бы тебе советовал поставить DocumentRoot, чтобы он указывал на public, это надежнее и удобнее, чем возиться с mod_rewrite.

Показать весь текст

856 17 сен, 10:31 856 1475083

>>1467919

При использовании композера достаточно подключить 'vendor/autoload.php'. И делать это надо не в коде библиотеки, а в своем скрипте, который будет ее вызывать. Также, я думаю, что саму библиотеку тоже надо было установить через композер, а не скачивать руками.

В общем, почитай какие-нибудь руководства по композеру.

>>1466573

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

>>1465547

> ну вот кстати дисскасс имеет ли сейчас смысл писать в описании тип если ты его уже указал в самой функции?

Не имеет смысла, если это не несет никакой новой информации.

Я еще использую плагин для переименования файлов (так как я могу придумать класс с одним названием, а через полчаса решить, что у него должно быть другое название). Плагин, по моему, называется Rename File или как-то так. Вызываю через панель команд (Ctrl + Shift + P, затем fr, Enter).

>>1462411

В данном случае список отчетов имеет смысл захардкодить в коде (а где еще?). Под каждый отчет сделать функцию либо класс.

Ответы75833

857 17 сен, 10:56 857 1475093

>>1475047
>>1475079
Спасибо

858 17 сен, 11:24 858 1475120

Этот тред уже почти окончательно утонул, переходите тонуть в новый >>1475112 (OP)

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

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

859 17 сен, 11:27 859 1475122

>>1475079
>Это идея уровня битрикса
Так-то и вордпресса, да и на фреймворках такое встречается. Не говоря о ноде.
Вполне себе норм идея - стоит поковырять.

17 Кб, 968x681
860 17 сен, 14:13 860 1475238

>>1474948
ну, тип, есть переменные:
$pisechka
$huek
я хочу использовать писечку и хуёк в функции, это делается так?:
function functioname($pisechka, $huek) {}

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

Ответы7566875672

861 17 сен, 22:17 861 1475668

>>1475238
Если тебе нужны только их значения - да. Если хочешь их менять (я нуб и с этим не сталкивался), то вроде как можно передать ссылку на переменную

862 17 сен, 22:18 862 1475672

>>1475238
А вообще открой книжку какую нибудь, там все расписано. Или гайды ОПа, или гугл/ютюб

863 18 сен, 07:43 863 1475833

>>1465547
Дополню свой список:
Для документации можно еще взять DoxDoxygen он не может в нуловые переменные но зато вытаскивает эксепщены. А DocBlockr не может в типы возвращаемые методами.
LSP аводополнение по методам классов, описания к параметрам методов. Но мне что то не очень понравилось.

>>1475083
SidebarEnhancements тоже может в переименование

А в чем профит пхп шторма? Есть смысл перейти на него с саблайм?

12 Кб, 649x309
864 18 сен, 11:40 864 1475917

Не совсем понял Query parameters.
На сайте должна быть строка по которой можно найти человека и если есть совпадения, то должны передаваться его id, first_name т.д. ?

Ответы76247

865 18 сен, 15:57 865 1476139

>>1474077
На уровне php

Ответы76247

866 18 сен, 18:09 866 1476247

>>1475917
>На сайте должна быть строка по которой можно найти человека и если есть совпадения, то должны передаваться его id, first_name т.д. ?
Похоже на то, а вообще перекат был

>>1476139
>На уровне php
junior/middle/senior?
Не думай что я доебался или еще чего, просто с того что ты написал не особо ясно кого ты ищешь. То ли джуна, то ли мидла.

867 21 сен, 14:36 867 1478314

Поясните доходчиво и с пруфами, почему php не нужен.

Ответы789438056080717

868 22 сен, 12:18 868 1478943

>>1478314
бамп

869 24 сен, 08:49 869 1480560

>>1478314
Надо $ перед каждой переменной ставить
Под каждую задачу свой инструмент. Если тебе нужен сайт, или не овердохуя (а даже и если овердохуя) нагруженное веб-приложение, то PHP вполне подойдёт.
Банальнейшая связка nginx + phpfpm + php7 + *sql будет давать тебе достаточно производительности и возможностей для горизонтального масштабирования, пока у тебя натурально не появятся миллионы активных пользователей и десятки тысяч RPS.
Большинство хейта на пыху идёт со старых времён, когда он действительно был не очень. Сейчас же пыха очень быстрая (а скоро ещё и JIT подвезут), поддерживает строгую типизацию и в её экосистеме много очень качественныз решений. Субъективно, тот же питон она делает по всем фронтам.
Ну и, опять же субъективно, у PHP очень большой рынок, целая куча бизнес-решений было написано и пишутся на нём и приносят своим создателям нехилые деньги (мой босс недавно всех нас в Европу на корпоратив за свой счёт свозил, лол). Так что он вряд ли умрёт в ближайшие десятилетия.

Ответы81593

870 24 сен, 15:04 870 1480717

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

Ответы8072680769

871 24 сен, 15:12 871 1480726

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

872 24 сен, 16:30 872 1480769

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

Ответы80787

873 24 сен, 16:51 873 1480787

>>1480769
Ога, а потом получаем тонну сбегателей с пхп, бегущих куда глаза глядят (включая полный съеб из профессии), потому что развития нет, проекты однотипные, конторы - сплошные рога и копыта.

Ответы80791

874 24 сен, 16:59 874 1480791

>>1480787
поэтому в дополнение к пхп щас надо учить как минимум гошу, и фронт знать, чтобы быть фулл-стак

875 25 сен, 16:58 875 1481593

>>1480560
>у PHP очень большой рынок
Работу на пхп ты найдешь без проблем, но вот вряд ли ты будешь ей доволен.

Тред утонул или удален.
Это копия, сохраненная 27 сентября 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion