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


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
874 66 231

Клуб изучающих PHP #111 /php/ Аноним 02/08/19 Птн 21:13:33 14469691
php-noob-1.png (33Кб, 500x500)
500x500
cat-cafe-osaka.jpg (157Кб, 1024x683)
1024x683
cat-sad.jpg (194Кб, 1024x768)
1024x768
epic-raws-maria[...].jpg (504Кб, 1280x720)
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? — Да, однозначно. Посмотри любую вакансию.
Напоминание Аноним 02/08/19 Птн 21:18:30 14469712
grammar.png (56Кб, 500x644)
500x644
1393868234423.jpg (202Кб, 1024x768)
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

Аноним 02/08/19 Птн 21:19:49 14469743
Я постараюсь глянуть непроверенные вопросы в предыдущем треде, но если вы о них тут напомните, хуже не будет.
Аноним 02/08/19 Птн 23:08:05 14470624
>>1446974
Да хранят тебя и всех остальных аношек треда Небеса, вы заняты богоугодным делом
Аноним 03/08/19 Суб 17:50:19 14474785
336284413793463[...].jpg (86Кб, 499x281)
499x281
Аноним 03/08/19 Суб 17:52:28 14474796
Аноним 04/08/19 Вск 09:10:44 14477987
Как в Laravel при валидации сделать так, чтобы следующее поле проверялось ТОЛЬКО ЕСЛИ предыдущее было провалидировано успешно?

Как ни странно, такой элементарной хуйни там до сих пор не завезли.
Все поля валидируются одновременно всегда.
Аноним 04/08/19 Вск 10:31:13 14478108
>>1446974
Эта кружка кофе была за твое здоровье, анон.
Аноним 04/08/19 Вск 10:39:02 14478149
>>1447798
Что за задачу ты решаешь? На первый взгляд подход не верный
Аноним 04/08/19 Вск 11:15:26 144782010
>>1447798
Одновременно это как? Можно пример валидаторов?
Аноним 04/08/19 Вск 11:16:39 144782111
Аноним 04/08/19 Вск 12:33:58 144785212
>>1447814
>нинужно
Ну вот пошли мантры
Аноним 04/08/19 Вск 12:35:26 144785413
>>1447821
Хуеил. Это в рамках проверки ОДНОГО параметра запроса.
Если первое правило провалилось, остальные не проверяются.

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


Аноним 04/08/19 Вск 19:50:22 144806422
Безымянный.png (4Кб, 349x119)
349x119
Есть один проект который отлично работал на моем сервере Apache который я сам смастерил. Когда я сую свой проект в OpenServer, получаю 404. Хуйня в том, что я получаю ответ на /, но когда я хочу например перейти в /categories, он шлет меня. Что делать? Куда копать? Проект на laravel, и папку /public в доменах я прописал.
Аноним 04/08/19 Вск 20:26:15 144807123
>>1447934
В поле1 указывается токен от соц-сети, но он может быть хуевым.
С помощью этого токена делается запрос в соц-сеть, чтобы проверить поле2.

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

Пиздец блять. Что в манямирок не вписывается - так нинужно или невозможно.
Аноним 04/08/19 Вск 20:51:30 144809226
Screenshot13.png (5Кб, 582x280)
582x280
Будьте осторожны с циклами, пилоты.
Аноним 04/08/19 Вск 22:06:47 144814227
>>1446969 (OP)
йо, товарищи, есть некий проект, в котором нужно реализовать комментирование контента без регистрации и использования сторонних систем комментирования ибо не везжает в концепцию и не хочется приплетать стороннюю верстку по тем же причинам . Так вот, делаю я такое впервые, и вопрос - как это дело контролить модерировать и банить сквернословных залетных, как это происходит, например, на имиджбордах? Алсо целевая аудитория не сильно широкая и плебейская, так что вряд ли будет много грязи, адмитить-модерировать будет от силы пара человек, но какие-то минимальные инструменты контроля нужны
Аноним 04/08/19 Вск 22:26:44 144816328
>>1448071
у валидатора есть метод sometimes

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

так же у валидатора есть метод after, и то и другое можно вызывать в withValidator в FormRequest например, короче я к тому что способов сделать как тебе надо много, это будет канеш не так K P A C U B O но это похуй
Аноним 04/08/19 Вск 22:54:41 144817829
>>1447852
Ты расскажи нормально что за задача
Аноним 04/08/19 Вск 22:55:20 144818030
>>1448075
>Пиздец нахуй пятый год в погромировании
я тоже пять лет со скейтерами из двора тусовался и думал что я типа продвинутый и могу оли-оли крутить
Аноним 04/08/19 Вск 22:57:13 144818131
>>1448142
делай матерный словарик. Или вообще премодерацию забубень, пусть каждое сообщение отображается только когда твой модер галочку поставит. Они правда офигеют там все читать
Аноним 04/08/19 Вск 23:28:28 144820332
>>1448064
Проверь mod_rewrite, если apache на openсервере используешь
Аноним 05/08/19 Пнд 11:36:46 144834133
>>1447970
Бизнесу насрать на экономию памяти - ему важнее скорость разработки и стоимость поддержки. А вот если васянить постоянно, то именно эти два фактора страдают.

Наблюдение такое.
Аноним 05/08/19 Пнд 11:41:42 144834234
>>1448075
>пятый год в погромировании
Лол. И что? Все 5 лет говнокодил и вдруг мастером стал?
Аноним 05/08/19 Пнд 15:48:23 144845335
>>1448075
Ты как партизан не афишируешь, нахуй тебе это надо.
С лаварелем я не знаком, работаю на симфони.
Аргументирую. В чистом виде такой хуйни нет, так как в принципе нет порядка валидации. Хуй его знает, как и в каком порядке ты будешь передавать поля. А привязывать логику валидации к тому, в каком порядке педрила с фронта расставил поля в формочке - это пиздос.
Я мог бы понять, если бы тебе требовалась кастомная валидация одних полей в зависимости от значения других, но ты упорно пиздел именно про порядок.
Аноним 05/08/19 Пнд 15:56:58 144846236
>>1448453
А, нет, я ебусь в глаза. Ты ответил.
Но ты всё равно хуй, так как сформулировал вопрос ты максимально некорректно.
Аноним 05/08/19 Пнд 16:00:06 144846437
>>1448341
вот тут ты сам себе противоречишь. Если бы ты не заморачивался надуманной проблемой из разряда "а чому у меня ифы в уже готовой конструкции не такие как я хочу! Надо бы переделоть!", то сыканомил бы уйму времени. По факту соглашусь, заказчику наплевать что там внутри, лишь бы работало. Это ты чистоплюй и перфекционист. Небось еще и моешься чаще чем раз в неделю, педота
Аноним 05/08/19 Пнд 19:02:58 144854038
Ковыряюсь тут с шаблонами для БД.
У меня есть соединение на одной библиотеке NotORM и я на её основе хочу сделать Data Mapper. И у меня такой вопрос - мне этот маппер биндить в зависимости или просто вызывать в контроллере, передав ему соединение?
Аноним 05/08/19 Пнд 19:51:23 144855939
>>1448540
>мне этот маппер биндить в зависимости
Я бы сбиндил. Он же наверняка и в других контроллерах мелькнет?
Аноним 05/08/19 Пнд 19:53:25 144856340
>>1448559
Да наверняка мелькнёт. В той же админке должен ещё быть.
Аноним 05/08/19 Пнд 22:11:26 144861441
Аноним 06/08/19 Втр 11:32:43 144881242
Аношки, тоже взялся за студентов, как анины выше, но пока читаю условие и обдумываю. Возник вопрос:
>Список абитуриентов — выводит имя, фамилию, номер группы, число баллов. Выводятся по 50 человек на страницу, сортировка по любому полю делается кликом на заголовок колонки таблицы
а как вообще это реализуется? Мне это делать джаваСкриптом/джиКверри, типа перестраивать ячейки таблицы по клику, или силами пшп-скрипта - по клику отправлять новую ссылку на эту же страницу с новыми параметрами сортировки и перезагружать результат?
Как обычно это делается? Я с аяксом пока не очень знаком
Аноним 06/08/19 Втр 11:32:45 144881343
15642215109570.jpg (18Кб, 437x431)
437x431
>>1446969 (OP)
Cап, анусы. Значит пытаюсь тут запилить себе учебно-портфольный проект и завис на таком моменте - по легенде мне надо сделать простой сайт на php + sql, с регистрацией, логином и сессией, что я уже сделал, но теперь самое важное - как дать возможность залогиненному болванчику загружать изображения на сервер и желательно, чтобы он еще видел только свои хотя уже не суть. Простой аплоад с галереей уж делал без привязки, но тут прям завис в ступоре уже третий час. Хочется уже дропнуть и просто воткнуть на залогиненную страницу форму с аплоадом и кидать картинки так.
инб4 приходи через год
Аноним 06/08/19 Втр 11:41:01 144881744
>>1448813
Создай ещё одну таблицу с полями ид картинки и ид соответствующего пользователя. Потом выгружай оттуда все картинки конкретного пользователя.
Аноним 06/08/19 Втр 11:53:24 144882345
>>1448812
На этом задании джаваскрипт вообще не нужен. Только вёрстка и бэкенд. Сортировка делается по ссылке.
Просто посмотри как у других сделано.
Аноним 06/08/19 Втр 12:08:20 144882646
>>1448823
>Сортировка делается по ссылке
Понял, спасибо
Аноним 06/08/19 Втр 12:11:54 144882847
>>1448812

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

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

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

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

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

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

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

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

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

Аноним 06/08/19 Втр 20:01:56 144908953
Аноним 06/08/19 Втр 20:04:34 144909054
Аноним 06/08/19 Втр 20:26:58 144910155
>>1449085
из мануала:

password_hash()

Использованный алгоритм, стоимость и соль будут возвращены как часть хеша. Таким образом, информация, необходимая для проверки хеша будет в него включена. Это позволит функции password_verify() проверять хеш без необходимости отдельного хранения информации о соли и алгоритме.
Аноним 06/08/19 Втр 21:20:58 144913156
>>1449075
У меня есть парочка. Но я не скажу.
Аноним 06/08/19 Втр 23:38:08 144917257
>>1449085

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

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

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

Аноним 07/08/19 Срд 04:21:41 144921558
sql.JPG (26Кб, 934x91)
934x91
Снимок.JPG (25Кб, 479x157)
479x157
delete.JPG (50Кб, 693x369)
693x369
index.JPG (32Кб, 1052x307)
1052x307
>>1448813
>>1448817
В общем я вчера чудовищно наговнокодил, но сейчас хотя бы все загружается и выводится. Теперь надо разобраться с удалением - оно не работает и похоже я нихуя не понимаю чего делаю неправильно пишу запрос на удаление. да, мне стыдно, что я такой тупой
Аноним 07/08/19 Срд 08:11:38 144925259
Аноним 07/08/19 Срд 08:34:33 144925860
>>1449252
У меня был опыт общения, еще плоховато понимаю. А вообще уже все переписал и теперь все удаляется. Магия - стоит сюда написать, как все само собой решается.
Аноним 07/08/19 Срд 08:44:57 144926361
Аноним 07/08/19 Срд 11:33:21 144931862
>>1449215
>Теперь надо разобраться с удалением - оно не работает
Анон, есть хороший способ проверять запрос на работоспособность - просто берешь и выполняешь его в phpмайадмине. Тупо копируешь запрос из кода и вставляешь в поле/вкладку "запрос" пшпмайадмина. Если ошибка в запросе, то майадмин сразу тебе это напишет. Так ты хотя бы будешь знать где проблема - в коде пшп или в коде sql
Аноним 07/08/19 Срд 12:29:26 144933963
>>1449318
>Тупо копируешь запрос из кода
Лучше включить логирование запросов в mysql и брать из лога. Особенно если пользуешься каким-нибудь фреймворком который запрос сам формирует.
Аноним 07/08/19 Срд 14:36:58 144938164
>>1449318
Я поначалу вообще все запросы из пхпмайадмина тянул, только условия менял. Так и научился.
Аноним 07/08/19 Срд 18:55:55 144947865
Пытаюсь написать бота для вайбера на пхп.
Есть библиотка https://github.com/Bogdaan/viber-bot-php
Если просто использовать её по инструкции, то всё работает: клиент пишет в вайбер сообщение, оно парсится ботом и если есть совпадение, то выдаётся стандартный ответ. А мне нужно, чтобы этот процесс разился на две фазы: приём сообщения из вайбера и отправка сообщения в вайбер. И чтобы и то и то были простыми функциями. С приёмом проблем нет, просто разбираем, что там пришло в webhook. А вот отправку я не понимаю, как сделать. Я засунул это всё в метод, метод в класс, но ничего не работает. И не пишет никаких ошибок, просто умирает, как только достигает команды $botSender = new Sender .
Честно говоря, я запутался в этих методах, вызовах, пространствах имён и прочем ооп. Посмотрите пожалуйста на код, что именно я там организовал не так? И как ловить и отлаживать такие ошибки? Даже когда я оборачиваю всё (вообще всё) в try, никаких эксепшенов не ловится.

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

Отлично если работали с поисковым движком Sphinx, там 3 задачи только по нему одному.
Аноним 08/08/19 Чтв 02:19:56 144961972
image.png (25Кб, 477x188)
477x188
Боже, какую же хуйню приходится писать, чтобы типы работали как надо.
Аноним 08/08/19 Чтв 03:28:34 144962273
У меня встал вопрос. Пробую использовать slim 4 для апи. Отправляю response json, и зачем-то отправляется favicon. Может это зависит от метода get, post? Проблема в том, что Vue не читает ответ запроса, в то время как с других api успешно получает данные. Как запретить передачу favicon.ico?)
Аноним 08/08/19 Чтв 03:53:55 144962374
zxcccc
Аноним 08/08/19 Чтв 09:59:03 144968375
Зачем нужны пространства имен?
Аноним 08/08/19 Чтв 12:50:26 144976076
cat1.png (310Кб, 512x512)
512x512
>>1446969 (OP)
Сап котаны. Закончил шарагу, проходил практику в ВУЗе там изучил Symfony и сделал проект на нем. Не потому что хотел, а потому что это в программе практики у них было.

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

Город ДС2

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

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

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

Кароче доработка проекта встала только из-за этого. Пробовал еще с другими бандлами поддерживающими очередь работать, но вечно лажа происходила.
Аноним 08/08/19 Чтв 13:29:57 144977378
>>1449765
Так объяснишь зачем нужны пространства имен?
Аноним 08/08/19 Чтв 14:52:34 144982179
>>1449773
за тем что бы при установки доп пакетов , библиотек и тд , классы с 1 и тем же именем не переопределяли друг друга.
Аноним 08/08/19 Чтв 14:52:53 144982280
Аноним 08/08/19 Чтв 14:56:23 144982481
>>1449760
в рф как и в всём пост совке (СНГ) весма мало продуктовых контор , потому симфони не нужно , а для средне малых подделок хорошо заходят RAD фреймы типа лары , потому их и юзают , так что да в неё вкатываться есть смысл
Аноним 08/08/19 Чтв 15:20:21 144984082
>>1449824
Ща звонили с собеседования про битрикс и Yii2. Что расскажешь по поводу него? Какие подводные?
Аноним 08/08/19 Чтв 15:35:45 144985583
>>1449622
Решил проблему добавлением такого заголовка: header("Access-Control-Allow-Origin: *");
Аноним 08/08/19 Чтв 16:36:47 144987484
>>1449840
>про битрикс
даже если будешь с голоду умирать даже не думай , прям вот совсем , лучше уже сдохнуть.
>Yii2
не плох как RAD фрейм , но монолитен прям от слова совсем , хорошо генерит код ля админок всяких (так нормальной альтернативы для лары и не нашёл) , довольно популярен в СНГ (скорее всего и только тут) , можно стартануть на нём.
Аноним 08/08/19 Чтв 16:37:24 144987685
>>1449855
осталось теперь почитать про CORS , и узнать чтож за заголовок такой магический
Аноним 08/08/19 Чтв 16:44:43 144988186
>>1449876
Поиск проблемы был максимально непонятным. Как написано на вики - "браузер поддерживающий технологию CORS, передаст ошибку вместо данных." Chrome - выдавал ошибку, просто ошибку на этот запрос. Firefox - дал ответ с кодом 200.
Аноним 08/08/19 Чтв 16:45:46 144988287
Что нужно знать для бэкэнд разработки?
Аноним 08/08/19 Чтв 16:46:55 144988488
>>1449882
извиняюсь и иду нахуй, если в шапке всё написано
Аноним 08/08/19 Чтв 17:23:28 144991089
>>1449881
вполне реально ибо у них разные двежки очевидно правила CORS по умолчанию по разному ставят
Аноним 08/08/19 Чтв 17:56:59 144992690
>>1449910
Попробуй вместо звездочки перечислить методы, в одном проекте у меня так решилось проблема
Аноним 08/08/19 Чтв 19:47:25 144999191
Аноним 08/08/19 Чтв 20:00:52 145000592
>>1449991
Это не я ебанутый, а тот инцел, который решил сделать передачу значения в функцию settype по ссылке.
Аноним 08/08/19 Чтв 20:02:50 145001093
>>1449773
В передыдущем треде пережёвывали - посмотри архив.
Аноним 08/08/19 Чтв 20:04:59 145001694
>>1449840
>битрикс
Легаси и костыли от 1С.
Аноним 08/08/19 Чтв 20:34:27 145004895
Предыдущий тред все-таки утонул, а вопросы остались. Попробуем ответить:

>>1445583

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

>>1445953

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

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

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

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

>>1446336

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

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

- описываем контроллер и его зависимости в контейнере
- не описываем контролллер в контейнере, но передаем ему контейнер в конструктор или метод. И уже там берем из контейнера нужные нам классы
Аноним 08/08/19 Чтв 20:37:02 145005196
Ответы на вопросы из прошлого треда (тред есть в архиве и тут: 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-файлов. Есть несколько вариантов:

- ты неправильно назвал файл или поместил не в ту папку, и он не прочелся
- надо было использовать прямые слеши, а не обратные
Аноним 08/08/19 Чтв 20:37:51 145005497
>>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, какой массив в него надо передать.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как я должен понять, к какому контроллеру относится этот код? Наверно можно попробовать поискать по коду, где используется ограничение на уникальность, но это какой-то очень странный подход. Также, этот код ловит исключения отовсюду. Ты писал его для какого-то своего контроллера, но исключения ловятся и со всех других контроллеров, что может быть неожиданно для их авторов, которые этого не хотели.
Аноним 08/08/19 Чтв 20:39:50 145006099
>>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 с каждым процессом связана "текущая" директория.

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

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

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

Если мы отправляем файл с локального диска на сервер, то нам незачем создавать на диске зашифрованную копию этого же файла. Так как он у нас есть в расшифрованном виде.
Аноним 08/08/19 Чтв 21:40:11 1450109100
>>1449683
Чтобы изолировать код, который в него входит, от другого кода.
Аноним 08/08/19 Чтв 22:25:18 1450129101
Аноны, смогу ли я перекатиться к вам в похапе за месяц, чтобы устроиться хотя бы стажером за 15к, учитывая что хорошо знаю питон и немного джангу? А то чет ахуел с действительности, что питонистом невозможно устроится в моем миллионике, 1 вакансия на джуна и несколько на сеньоров-помидоров.
Аноним 08/08/19 Чтв 23:05:20 1450167102
>>1450129
Смотри на вакансии в своем миллионнике.
Аноним 08/08/19 Чтв 23:10:49 1450169103
>>1450129
Как же хорошо, что я вовремя одумался и не покатился в пиздон наслушавшись советов с двача
Аноним 08/08/19 Чтв 23:43:46 1450176104
>>1450167
Да я уже посмотрел вакансии, требования уровня php/js/sql/html/css, знаю все кроме пхп, вот и спрашиваю за сколько можно дойти до уровня, что могу работать.и вакансий в 10 раз больше чем на питониста
Аноним 08/08/19 Чтв 23:56:59 1450180105
Дошли руки с докером разобраться. Какаяже годнота скажу я вам
Аноним 09/08/19 Птн 09:19:44 1450247106
>>1450180
Скажи мне скажи мне
в чем годнота?
Ладно если у тебя контейнер - весь проект - Изи - но я так же могу и в xampp сунуть его и не пизди мне что у тебя клиент по сто раз на дню меняет окружение. Это редкость редкая когда тебе надо скакать между на столько рознящимися окружениями
Аноним 09/08/19 Птн 10:46:28 1450306107
>>1450247
Я не тот анон, но суть же не столько в вопросе смены окружения, сколько в лёгкости деплоя (используя Swarm или Kubernetes). Представь, что ты собрал какой-то проект у себя на сервере, и теперь тебе его нужно перенести на сервер заказчика. Без контейнеров тебе придётся поднимать сервер дважды - у себя и у него. А так - просто воткнул контейнер и всё сразу работает.
Аноним 09/08/19 Птн 11:33:34 1450335108
>>1446969 (OP)
1) ЕОБ (есть одна борда), в процессе написания. Пользователь может загружать файлы картинок. Обработчик формы присваивает имена файлам с помощью microtime() или time() (какую функцию выбрать кстати?). Эти значения будут уникальными? Что будет, если два или более пользователя одновременно запостят картинки? Не существует шанса распидорасить сервер?

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

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

Но мне больше нравится не это, а то, что я могу по щелчку пальцев менять составляющие, локально, при разработке. Например быстро сменить мускуль на мариюдб и т.д.
Аноним 09/08/19 Птн 11:53:01 1450348111
>>1450343
Прикрепляю. Но мой вопрос про имена файлов. Вот как тут:
https://2ch.hk/pr/src/1446969/15647696144140.png
microtime() или time() генерируют уникальные значения при использовании в обработчике формы?
Аноним 09/08/19 Птн 11:59:36 1450354112
bear.png (1166Кб, 944x708)
944x708
>>1446969 (OP)
есть скрипт который должен мне на почту через форму письмо отправлять
а он ничего не отправляет
даже в спам
https://ideone.com/RLlKiz
Аноним 09/08/19 Птн 12:04:42 1450357113
>>1450348
Как вариант делать хэш из микротайма и айдишника поста - коллизии будут минимальны.
Аноним 09/08/19 Птн 12:08:15 1450359114
>>1450348
К тому же никто не мешает те же айдишники и к файлам делать, которые с автоинкрементом. И не городить огород.
Аноним 09/08/19 Птн 12:12:21 1450360115
>>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) для таких вещей.
Аноним 09/08/19 Птн 12:28:27 1450377116
>>1450306
Я тоже так подумал и радовался что не придется ебаться. Но админ на тесте каждый из микросервисов собрал в отдельные контейнеры тоесть уже различие с локалью где каждый сервис в контейнере. А у заказчика на серверах Винда.
Аноним 09/08/19 Птн 13:15:34 1450431117
>>1449765

Опиши проблему подробнее. Как ты устанавливал этот компонент, какой код добавил, что запускаешь, что ожидаешь, что получается. Какая ОС и веб-сервер.
Аноним 09/08/19 Птн 13:17:38 1450435118
Аноним 09/08/19 Птн 13:18:34 1450440119
>>1449619

Не сталкивался с такой проблемой. Увы, кроме кода, никаких пояснений ты не дал.
Аноним 09/08/19 Птн 13:21:44 1450444120
>>1450335

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

И, кстати, ты можешь сделать поддержку в коде для 2 баз, но использовать одну и ту же.
Аноним 09/08/19 Птн 15:08:35 1450503121
>>1450176
Зависит от целого ряда факторов, в первую очередь от умения пиздеть с умным видом и быстро как понос учиться.
Голый ПХП на самом деле нужен либо совсем ньюфагам, которым важнее на данном этапе пощелкать, как работает веб, либо матерым олдфагам пишущим какую-нибудь экзотику.
Реально все работают на фреймфорках-CMS. И у каждого фреймворка есть своя логика, в рамках которой и следует ебашить. Поищи, знания каких фреймворков требуются у тебя. Это у питона по факту один Джанго, у пыха цветущих и пахнущих (в разных смыслах) штук 20. Один из вариантов - сделать за неделю задачу со студентами и устроиться стажером за еду, уча то, что используется в конторе.
Главный совет - избегай БИТРИКСА. Он сука популярен в рашке и его использует куча студий. Данная хуйня представляет из себя достаточно мощный, но извращенный как половая ориентация Слаанеш фреймворк/CMS, который не научит тебя ничему хорошему. Связывайся, только если альтернативы ну совсем нет а жрат хочется.
Аноним 09/08/19 Птн 15:20:07 1450511122
>>1450503
А вот смотри, такой пример.
Я знаю все основы языка, включая ООП, понимаю, как работать с базами данных, умею писать базовые запросы и составлять структуру БД. Но при этом у меня совершенно нет опыта в создании каких-то рабочих проектов на пыхе, потому что, как ты и говоришь, я всегда пилил все на CMS/CMF (преимущественно MODX). Но сейчас я хочу свои навыки поднять на рыночный уровень, чтобы найти нормальную работу, возможно даже завести трактор в перспективе. Нужно ли мне для этого пробовать реализовывать какие-то либо проекты на чистой пыхе, так сказать, для опыта и набивания скиллов? Или сразу сосредоточиться на каком-нибудь Ларавеле, попутно восполняя пробелы в знании самого языка?
Аноним 09/08/19 Птн 15:34:09 1450521123
>>1450511
Возможно, меня сейчас обоссут, но это
>Или сразу сосредоточиться на каком-нибудь Ларавеле, попутно восполняя пробелы в знании самого языка?
лучше.
Поясняю. Делая что-то на чистой пыхе, ты получаешь абстрактный некоммерческий опыт. В силу твоей неопытности - негативный, на своей жопе путем ошибок выясняя откуда растут ноги у современных паттернов проектирования. Я бы сделал задачу про студентов (она содержит необходимый минимум для ознакомления), посмотрел какой фреймворк используется в твоем города и устроился туда джуном, подтягивая недостающее.
Аноним 09/08/19 Птн 19:48:04 1450602124
>>1450503
Спасибо за ответ, сейчас проштудировал вакансии, в одних нужен ларавел, в других yii в третьих битрикс, в четвертых еще какие-то но самые популярные первые 2, битрикс я так понял сразу отпадает и что тогда учить лучше laravel или yii?
Аноним 09/08/19 Птн 20:40:31 1450628125
>>1450602
laravel. он сейчас самый популярный.
По нему советовали "Дмитрий Елисеев Сайт объявлений на Laravel". Сам не проверял, там 70 часов видео.
Аноним 09/08/19 Птн 22:59:55 1450682126
>>1450628
И от того же Елисеева есть интернет магазин на yii2, у него можешь еще и симфони посмотреть =)
Аноним 09/08/19 Птн 23:55:36 1450710127
Что лучше использовать: наследование или декоратор с инъекцией?
Аноним 09/08/19 Птн 23:57:55 1450711128
>>1450521
>В силу твоей неопытности - негативный
Зато увереннее себя чувствуешь с инструментом. когда пальцы им поотшибаешь
Слыхал про совсем тупых макак, которые задрочили один фреймворк и не могут ни налево, ни направо.
Аноним 10/08/19 Суб 11:30:49 1450808129
>2019
>просить совета у двача

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

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

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

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

Как организовать запуск заданий, чтобы это жрало минимум ресурсов (оперативка, проц, время)?
Аноним 10/08/19 Суб 17:32:35 1450953134
>>1450950
Код никакой не нужен, просто описать словами, как бы вы что сделали
Аноним 10/08/19 Суб 18:06:32 1450972135
>>1450950
Лень долго думать (к тому же ты не описал возможную структуру задач).
В БД хранятся: строчка, описывающая задание (это может быть хоть eval код хоть ссылка на php скрипт), галочка выполнено/нет и время следующего выполнения.
Отдельный процесс (самое простое - крон) обходит базу, выбирает процессы, которые необходимо выполнить, и отрабатывает их. Самое простое - обходить их в цикле, если проблемы со скоростью - заводить подпроцессы на отдельные задачи (или группировать по 10 штук в процессе).
Аноним 10/08/19 Суб 18:36:38 1450999136
>>1450972
>время следующего выполнения
Бинго, ты понял самое главное. Надо хранить время следующего запуска.

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

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

Ну и да, можно всегда прикрутить, чтобы они в мультитрединге запускались, если есть такая необходимость.
Например, в моем случае это будет даже минус, ибо хоть задания и будут выполнены "более одновременно", но это увеличит нагрузку на сторонние сервисы.
А когда они выполняются последовательно, хоть точность и меньше, но и нагрузка на сервисы меньше.
Аноним 11/08/19 Вск 14:20:09 1451347137
изображение.png (18Кб, 605x306)
605x306
Не понял.
Эта установка только для Linux? На Windows никак не поставить?
Аноним 11/08/19 Вск 14:59:14 1451371138
>>1451347

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

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

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

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

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

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

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

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

------

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

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

------

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

------

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

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

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

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

Аноним 12/08/19 Пнд 03:26:50 1451759141
15617059045170.jpg (25Кб, 300x300)
300x300
>>1446969 (OP)
Подскажите ньюфагу, где можно почитать или посмотреть на проект, идеально было бы пхп-sql-js, где реализовано разделение юзеров на разные сессии и аккаунты, т.е каждый работает в своем аккаунте и сессии. Если там еще будет crud, то я помру от счастья.
Аноним 12/08/19 Пнд 07:50:20 1451769142
Аноним 12/08/19 Пнд 07:55:19 1451770143
>>1451769
Спасибо, но я еще во фреймворках понимаю чуть более, чем нихуя. Насколько по сравнению с ванильным пхп там сложнее восприятие кода?
Аноним 12/08/19 Пнд 08:03:18 1451771144
>>1451770
Если тебе сделать нужно то намного проще, потому что все готово. Если если разобраться как сделано то все хуево, нужно разгребти кучи магии. С опытом там становится понятно как все работает внутри, но со старта разобраться это пиздец.
Аноним 12/08/19 Пнд 08:21:46 1451774145
>>1451771
>если если разобраться как сделано то все хуево, нужно разгребти кучи магии
Зис, к сожалению. Гуглить\копипастить типовые решения я уже хорошо научился и так, но мой вкат сейчас застопорился именно на понимании работы в глубину процесса. Блядь, дошел до стадии, когда надо либо на практике учиться, либо искать наставника, но на работу не берут никуда, требований какой-то вагон, ну а наставники сами уже все заебались.
Аноним 12/08/19 Пнд 08:44:09 1451777146
>>1451774
Ну если у тебя есть время, то самый простой способ: ставить себе задачу вроде той, что ты обрисовал, и садиться ее реализовывать. То, что непонятно - гуглишь, и потихоньку по кирпичикам собираешь решение своей задачи и получаешь знания.
Когда я начинал, я умел только верстать и натягивать верстку на MODX - там пэхэпэ вообще не нужен для базовых задач. А потом однажды получил заказ на кастомное решение, и сел писать, при том, что из PHP знал только echo(). В общем, когда я эту задачу решил, я уже знал все основы языка. После ещё нескольких таких задач я разобрался достаточно для того, чтобы сесть за документацию и изучить все нормально.
Аноним 12/08/19 Пнд 11:49:44 1451841147
Сап двощь, я немного не понял по теме бд миграций. Например стоит задача изменить что-то очень важное в архитектуре бд, это изменение ломает например немного кода, но чтобы не ломало надо обойти всю таблицу и что-то апдейтнуть в ней. Как происходит вот этот весь воркфлоу с гитом и миграциями? Я не думаю что будет правильно сразу в файле миграций писать скл код который обходит таблицы и что-то с ними делает, наверное стоит это сделать какой-то консольной командой?
Аноним 12/08/19 Пнд 12:23:52 1451878148
Анинки, изучаю гит, но никак не возьму в толк: я могу клонировать проект с локального компьютера на удаленный сервер, например, сервер провайдера, если там НЕ установлен гит? Тут же просто как бы копирование идет, я же там не буду репозиторий делать. И если на сервере провайдера стоит пароль, мне гит это окошко выведет, или надо в команде прописывать как-нито? Понимаю вопрос детский, но для меня все это вновинку
Аноним 12/08/19 Пнд 12:32:32 1451884149
>>1451878
Раз у тебя есть хостинг не проще ли туда задеплоить проект свой через админку или ssh? Гит это не про то, что тобой описано.
Аноним 12/08/19 Пнд 12:41:56 1451891150
>>1451884
Я не совсем понимаю конечную процедуру. Вот я доделал проект на локальном комьютере. Раньше я думал, что теперь мне надо сделать клон через гит и отправить его на сервер. Выходит, тут гит мне не поможет, и все тупо копировать вручную? А гит - это просто аз изменениями следить?
Аноним 12/08/19 Пнд 12:52:44 1451895151
Аноним 12/08/19 Пнд 12:56:44 1451897152
>>1451895
Большое спасибо, анончик
Аноним 12/08/19 Пнд 13:28:51 1451915153
>>1451841
Тебе понадобилось новое поле в таблице, ты написал в коде вывод этого поля во вьюхе (например) и написал миграцию с добавлением этого поля. Закомитил и отправил в репозиторий. Скрипт делоя увидел новый коммит спулил его и запустил миграцию. Конец истории.
Аноним 12/08/19 Пнд 14:35:35 1451940154
>>1451915
Я немного про другое, например я добавил новое поле, но по логике приложения это поле computed из каких-то других полей, и нужно старые записи обновить каким-то масс апдейтом. Я вот и спрашиваю где лучше писать код этого масс апдейта, прямо в файле с миграциями?
Аноним 12/08/19 Пнд 15:11:49 1451949155
>>1451940
Логически - да в файле миграций.
Пример: Ты ведешь разработку с кем то в команде, у каждого своя локальная база соответственно. Ты решил привнести свое сложное изменение базы - для других локально надо будет так же только запустить миграцию.
Но есть нюанс если у тебя на бою Большие данные и обработка всей базы по твоим новым правилам не влезет в 10 минут (или сколько там живет cli) то естественно тут будет другое решение.
Аноним 12/08/19 Пнд 15:28:24 1451955156
>>1451759
бумп, вопрос еще акутален
Аноним 12/08/19 Пнд 16:36:23 1452003157
Аноним 12/08/19 Пнд 16:43:47 1452005158
Можно ли как-то задать свойство класса с помощью метода? Ну или ещё как-то вынести значение из текста программы в иное место?

Вот код: https://pastebin.com/VYB6rxjP
Там токен = 666666666. Но мне нужно, чтобы этот токен брался вообще не из кода, а из конфига, который в базе (достаётся из неё через getToken() ). Но если написать вместо protected $token = "666666666"; что-то типа protected $token =$this->getToken();, то пхп на меня смотрит очень укоризненно.
Аноним 12/08/19 Пнд 16:46:01 1452006159
>>1452005
В конструктор инициализацию полей вынеси, он затем и нужен
Аноним 12/08/19 Пнд 17:49:33 1452047160
Пытался написать, но макак не пропускает, в общем вот мой высер https://pastebin.com/Mf6j8QnR
Суть в чем: тайпскрипт хорошая штука, но меня вымораживает, что любые внешние данные творят что хотят в моих строго типизированных для компиляции скриптах. Пришел null вместо числа? Ну все пизда тебе.
Как?! Как это всё правильно отрабатывать? Где проверять, преобразовывать, надо ли вообще. Как это делается в PHP? Опушка, помоги! SomeApprentice, ты нырнул глубоко в это дерьмо, может сможешь помочь?
Аноним 12/08/19 Пнд 18:13:36 1452056161
>>1452006
Там в исходном классе уже есть конструктор (я просто его не показал). И когда вставляю в него $token =$this->getToken();, код не работает. Получается, это у меня где-то там косяк и так и надо было делать?
Аноним 12/08/19 Пнд 18:46:28 1452070162
>>1452056
>$token =$this->getToken()
может всё такие $this->token?
или вообще сделай метод initToken() и вызывай его в конструкторе. Если ты наследуешь то не забывай про parent::__construct()
Аноним 12/08/19 Пнд 19:05:52 1452078163
>>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. Проблему решает, но код на декораторах получается перегруженным.
Аноним 12/08/19 Пнд 20:31:16 1452115164
>>1452005
Если доступ к полю происходит через метод-геттер (в твоем примере aa() ) то просто переопределяешь этот метод в наследуемом классе чтобы он возвращал то что нужно (это одна из причин почему желательно использовать геттеры а не напрямую поля дергать). Если поле используется напрямую $this->token тогда нужно добавлять магии __get https://ideone.com/TPS1f7
Аноним 12/08/19 Пнд 21:07:32 1452130165
>>1452070
>может всё такие $this->token?
Да, точно. Вызываю в конструкторе вот так:
$this->token = $this->getToken();
И в тестовом примере оно работает. А вот в коде, который модифицирую - нет. Завтра буду много думать.
Аноним 12/08/19 Пнд 21:19:58 1452133166
>>1452115
Спасибо, завтра попробую.
Аноним 12/08/19 Пнд 21:25:04 1452134167
А как написать палиндром для кирилицы? Я понял что использовать функцию strrev() нельзя, но решаю через цикл, mb_substr() тоже хуйню возвращает, нихуя не понимаю, вот код: https://ideone.com/xSGVI4
Аноним 12/08/19 Пнд 21:52:28 1452137168
>>1452134
Напиши в 20 строке echo "$symbol1 $symbol2\n"; и посмотри что получается
Аноним 12/08/19 Пнд 22:43:13 1452160169
>>1452137
Понял что у меня $symbol1 выводит что нужно, а $symbol2 весь текст так как выборка подстроки от 0 до -1, ну получается надо переписывать это по другому совсем, хули тут это ебка с этими кодировками, в питоне в одну строчку простейшую решается этот палиндром, какой же сложный язык.
Аноним 12/08/19 Пнд 23:23:07 1452174170
>>1452160
Вообщем я сделал, но выглядит страшно, мне кажется очень всратое решение, если есть лаконичней и проще, прошу скинуть, вот мой:
https://ideone.com/tmn3Fh
Аноним 13/08/19 Втр 00:39:50 1452185171
Аноним 13/08/19 Втр 02:23:45 1452199172
>>1452185
Так.. Решил я значит прочитать в учебнике анона про задачу. Написано что земля пухом, если через strrev решать. Поэтому держи другой вариант =) http://ideone.com/PUpD1t
Аноним 13/08/19 Втр 03:09:33 1452201173
Простите за тупой вопрос, но что означает символ ^ в версии пакета composer?
Аноним 13/08/19 Втр 10:22:15 1452237174
>>1451915
>Скрипт деплоя увидел новый коммит спулил его и запустил миграцию.

А можно об этом чуть подробнее? Что почитать, чтобы разобраться в этой теме?
Аноним 13/08/19 Втр 11:27:57 1452273175
Аноним 13/08/19 Втр 11:45:30 1452284176
Знающий анон, подскажи позязя, я должен у каждой функции, класса и метода писать вот такую конструкцию:

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

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

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

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

Или другой вариант через gitlab ci
https://m.habr.com/ru/company/softmart/blog/309380/
Аноним 13/08/19 Втр 12:04:43 1452298179
>>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.

Аноним 13/08/19 Втр 12:08:23 1452299180
Аноним 13/08/19 Втр 16:16:04 1452457181
Привет аноны. Дайте подсказку, что там еще можно написать?
http://ideone.com/FFFpnc#stdin
Уже всё там прочесал, ошибок вроде нет, руководство тоже не помогает да, я тупенький в таких делах
Аноним 13/08/19 Втр 16:27:15 1452471182
Аноним 13/08/19 Втр 16:30:36 1452475183
>>1452471
Кажется, понял, спасибо. Я в коде указал "как бы очевидное"
Аноним 13/08/19 Втр 20:58:56 1452701184
Привет, анон. Только вкатываюсь и пытаюсь разобраться.
https://ideone.com/r10PWb
Не могу понять как мне без 3-х инструкций echo сделать адекватный код. Всегда получается через 3 строки, даже если брать обычное умножение переменной на себя.
Аноним 13/08/19 Втр 21:26:48 1452718185
Аноним 13/08/19 Втр 21:39:33 1452726186
>>1452718
Ага, все дело в точках, которые я вижу впервые. Либо я читал как раздолбай, либо по гайдам еще рано для этого. Но в любом случае, спасибо
Аноним 13/08/19 Втр 23:10:04 1452791187
>>1452726
О, анон с моей проблемой. Думал минут 40 над этим, точек в гайде тоже не видел это который от ОПа. Решил отдохнуть, пока голова остынет
Аноним 14/08/19 Срд 11:59:48 1453019188
Кто-нибудь из знатоков может своими словами кратенько разжевать новичку, что такое компосер? Я так понимаю, это какая-то линуксовская программа типа гита, которая сидит в папке с дистрибутивом твоего фреймворка, и , при установке, куда-то лезет, забирает последние версии каких-то файлов, обновляет, загружает и вообще доминирует
Аноним 14/08/19 Срд 12:21:30 1453042189
Как проверить ТИП файла в php?
Не разрешение, мне вообще похуй на его разрешение.
Тип.

Есть какой аналог линухового file?
Аноним 14/08/19 Срд 12:31:35 1453059190
>>1453019
Она есть под любую ось.
Устанавливает пакеты по конфигурации composer.json
Основная идея в указании зависимостей:
Например пакет а версии 1.1 работает только с пакетом б версии 2.3 это указано в конфигурации пакетов по сему композер скачает тебе только совместимые версии.
Аноним 14/08/19 Срд 14:27:39 1453190191
>>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
Аноним 14/08/19 Срд 15:56:16 1453241192
>>1453190
>>1453059
Как все умно сделано-то, спасибо, аноны
Аноним 14/08/19 Срд 16:34:04 1453267193
>>1453241
Не умно. Если в пакете A зависимость от пакета B с версией 1.0.0, тогда установив пакет A ты хуй установишь пакет B другой версии
Аноним 14/08/19 Срд 16:47:14 1453276194
>>1452199
О вот за это спасибо, очень красивое решение.
Аноним 14/08/19 Срд 16:47:30 1453277195
Котаны, вопрос с .htaccess

Делаю тупейшую вещь, просто ридерекчу любой запрос на один конкретный php-файл. Сервер - openserver.
Такое правило
RewriteEngine On
RewriteRule ^.$ /public/test.php приводит к ошибке 500
а такое
RewriteRule ^[a-z0-9]
$ /public/test.php редиректит на test.php который и запускается.
Почему так?
Аноним 14/08/19 Срд 16:48:35 1453278196
>>1453277
бля, звездочки сожрались
Аноним 14/08/19 Срд 16:54:26 1453285197
Аноним 14/08/19 Срд 17:12:59 1453291198
>>1453285
>>1453277
а если точку в квадратные скобочки засунуть?
Аноним 14/08/19 Срд 17:18:44 1453294199
Аноним 14/08/19 Срд 17:20:50 1453296200
>>1453277

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

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

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

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

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

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

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


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

Аноним 15/08/19 Чтв 00:17:53 1453528206
15654764142170.jpg (7Кб, 480x360)
480x360
Как правильно подключать библиотеки без поддержки пространства имён? И где именно - при инициализации приложения, или прямо в конструктор класса-оболочки его подключить?
И что за мода у некоторых разработчиков этих библиотек делать классы через статик?
Аноним 15/08/19 Чтв 02:51:07 1453551207
>>1453019
Композер это годнота, базарю. Один раз попробуешь - больше не сможешь без него.
Аноним 15/08/19 Чтв 03:27:07 1453558208
Млп
Аноним 15/08/19 Чтв 09:04:33 1453615209
ПАМАГИТИ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
Аноним 15/08/19 Чтв 09:05:17 1453616210
>>1453267
В этом весь смысл дурилка
Аноним 15/08/19 Чтв 10:28:40 1453649211
>>1453616
Например мне надо поставить пакет A и B. Оба зависят от пакета С, но разных версий. Из-за этого я не смогу одновременно поставить A и B.

Это специально сделано?
Аноним 15/08/19 Чтв 10:50:24 1453656212
Скажите, а как в апаче запретить доступ ко всем каталогам, кроме public?

Аноним 15/08/19 Чтв 13:14:38 1453745213
>>1453656
Я просто посылаю все реквесты в \public\index.php
Аноним 15/08/19 Чтв 15:45:17 1453859214
>>1453745
то есть в .htaccesse правилами не отсеиваешь файлы и папки.
А как тогда подгружаются стили и прочее барахло из public?
Аноним 15/08/19 Чтв 16:08:04 1453867215
Аноним 15/08/19 Чтв 19:21:02 1454021216
>>1453649
Ты вьелся в частный случай. Хочешь пакет каждый в свою среду окружения и тд и все это ради одного частного случая. Цель именно в строгости зависимости а ты хочешь все усложнить
Аноним 15/08/19 Чтв 21:39:17 1454104217
image.png (124Кб, 416x226)
416x226
Этот опен сервер пойдет для создания локалки?
Аноним 15/08/19 Чтв 22:22:50 1454117218
pepereee.jpg (137Кб, 900x900)
900x900
>>1454104
ОН ДЛЯ ЭТОГО И СОЗДАННН!!!!
Аноним 15/08/19 Чтв 22:44:03 1454129219
>>1454117
Мало-ли какой-то другой получше есть
Аноним 16/08/19 Птн 01:26:33 1454210220
Объясните мне как решить проблему при выводе символа строки через квадратные скобки, если строка написана кирилицей, кодировка слетает и выводит какую-то хуйню, вот пример: https://ideone.com/wMhDPb
Аноним 16/08/19 Птн 03:17:38 1454243221
>>1454210
Квадратные скобки выводят байт, а не символ. Из-за этого возникает проблема, потому что utf это многобайтовая кодировка. Используй mb_substr()
Аноним 16/08/19 Птн 04:32:15 1454251222
>>1454243
Спасибо, теперь разобрался.
Аноним 16/08/19 Птн 08:00:13 1454278223
Аноним 16/08/19 Птн 10:33:04 1454313224
>>1454278
Много ли профита от разных опенсерверов?

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

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

Это нормальное решение в плане нагрузки на сервер? Меня очень смущает, что на каждую часть файла приходится sql запрос, можно как-то иначе решить этот вопрос? Как можно осуществить контроль к загрузчику без использования sql каждый раз? надеюсь понятно расписал
Аноним 16/08/19 Птн 11:55:42 1454365226
>>1454326
Возьми tus как готовое решение загрузки файлов по частям. Каждый блок там подписан хэшем. Так что кинешь проверку кук только на самый первый запрос загрузки дальше у тебя в очередь кусков уже никто не сможет влезть так что можно не проверять
Аноним 16/08/19 Птн 12:05:12 1454368227
image.png (35Кб, 873x395)
873x395
Привет, аноны.
На пикриле и задал значение Джонни синтаксу нейм.
Далее по условиям понятно, что если имя равно Пидар, то выводится хуидар и т.д. Почему вывелся хуидар, если имя не Пидор?
Аноним 16/08/19 Птн 12:06:03 1454370228
>>1454368
На пикриле я задал*
Быстрофикс
Аноним 16/08/19 Птн 12:10:24 1454371229
>>1454370
У тебя присвоение а не сравнение
Аноним 16/08/19 Птн 12:13:53 1454373230
>>1454371
Всё, понял, спасибо
до сих пор даже через раз точку запятую пропускаю
Аноним 16/08/19 Птн 12:19:45 1454376231
>>1454373
Поставь phpmd глобально и пакет для sublime соответствующий. Он будет тебе подсвечивать такие косяки
Аноним 16/08/19 Птн 12:29:26 1454383232
>>1454376
>Поставь phpmd глобально и пакет для sublime соответствующий
Что за зверь такой и где искать?
Аноним 16/08/19 Птн 12:33:07 1454387233
Аноним 16/08/19 Птн 12:40:05 1454390234
>>1454387
Спасибо!
А что насчет пакета для саблайм?
Аноним 16/08/19 Птн 13:10:18 1454415235
Аноним 16/08/19 Птн 13:14:14 1454419236
Аноним 16/08/19 Птн 13:18:09 1454424237
>>1454415
Но ведь я не толстил
Аноним 16/08/19 Птн 13:25:09 1454429238
>>1454424
Когда более-менее разберёшься, то поймёшь, что этих ютубных хайпожоров лучше обходить стороной, а их уроки и подавно - это не программисты.
Аноним 16/08/19 Птн 13:27:27 1454432239
>>1454429
Понял. Ну, я не разобрался еще хорошо в этой теме, смотрю, т.к. более-менее рассасывает всё. Со мной ничего не случится плохого?
Аноним 16/08/19 Птн 13:36:53 1454437240
>>1454432
Да смотри что хочешь, только другим не рекомендуй ничего, тем более если мало опыта.

>Со мной ничего не случится плохого?
Ничего. Там же совсем ясли показывают.
Но я бы поискал что-то менее гнилое.
Аноним 16/08/19 Птн 13:37:47 1454438241
>>1454437
>Но я бы поискал что-то менее гнилое
Ты использовал какие-то видео-уроки сам?
Аноним 16/08/19 Птн 13:43:15 1454444242
>>1454438
Поначалу вполне норм, но потом слишком медленно уже - читать быстрее. Сейчас только статьи всякие читаю интересные да доки посматриваю.
Аноним 16/08/19 Птн 13:49:21 1454451243
Аноним 16/08/19 Птн 14:21:47 1454473244
image.png (31Кб, 511x480)
511x480
Анончики, как подключить эту хрень?
Аноним 16/08/19 Птн 14:35:51 1454482245
>>1454473
Я нагуглил. Если кто-то не знает пароль от этого, то просто в логине пишите root и можно логиниться
Аноним 16/08/19 Птн 14:39:16 1454483246
Аноним 16/08/19 Птн 14:42:21 1454486247
Аноним 16/08/19 Птн 19:02:40 1454601248
>>1453317
@unlink($mediafile) еще проще
Аноним 16/08/19 Птн 19:16:16 1454616249
Аноним 16/08/19 Птн 19:39:25 1454631250
Анончики, объясните, пожалуйста, где в задаче про список абитуриентов нужно использовать класс Абитуриент?

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

Зачем нужен класс Абитуриент, если можно сразу использовать данные полученные в классе таблицы?
Аноним 16/08/19 Птн 20:49:54 1454671251
>>1454631
Ты можешь из бд сразу экземпляры класса получать, это очень удобно. Гугли pdo fetch class
Аноним 16/08/19 Птн 21:00:00 1454677252
Пытаюсь загрузить файл на telegra.ph/upload через curl, ошибка то Failure when receiving data from the peer, то SSL connect error.
Попробовал на imgur грузить - без проблем, любые страницы (и сам файл) получаю тоже. А на телеграфе проблема. Что делать?
Аноним 16/08/19 Птн 22:41:13 1454727253
>>1454313
>Учим PHP за 1 час
@
Видео идёт полтора
Аноним 16/08/19 Птн 23:35:10 1454746254
>>1454727
Не, там почти 4 выходит
Аноним 17/08/19 Суб 04:12:49 1454814255
>>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

Аноним 17/08/19 Суб 07:30:35 1454823256
>>1454601
Он не про это вовсе
Аноним 17/08/19 Суб 14:00:14 1454970257
как сука убрать из формы старые запросы?чтобы при перезагр страницы их там не было
Аноним 17/08/19 Суб 14:25:18 1454989258
>>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, а там, оказывается, ограничение на кол-во загрузок.
Аноним 17/08/19 Суб 14:46:02 1455005259
>>1454970
Не нажимай кнопку назад. Можешь сделать редирект =)
Аноним 17/08/19 Суб 14:51:41 1455009260
>>1455005
а нет к-л скрипта чтобы чистил?
Аноним 17/08/19 Суб 14:52:16 1455010261
>>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 скрипт, который содержит только единственный запрос к серверу. И включи в нем опции для отладки, запусти его из консоли и посмотри, что получится.

Аноним 17/08/19 Суб 14:52:37 1455011262
Есть пхп господа из столиц? Подскажите, по работе для новичков все ок или уже не очень?
Аноним 17/08/19 Суб 14:54:24 1455013263
Аноним 17/08/19 Суб 14:57:34 1455016264
>>1455013
а если так?
<input type="reset" value="Сбросить">
Аноним 17/08/19 Суб 14:59:39 1455017265
>>1455016
Я тебе дал всю инфу, остальное уже ты проверяй пока не получится =) И эта кнопка тебя не спасет от сохраненных данных при обновлении. На неё же еще нажать надо.
Аноним 17/08/19 Суб 15:13:20 1455024266
>>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 прокси не использует.
Аноним 17/08/19 Суб 15:15:28 1455027267
>>1454970

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

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

Аноним 17/08/19 Суб 15:16:40 1455029268
Аноним 17/08/19 Суб 15:47:08 1455061269
Анон, хватит себя мучать. Иди плати денежку на Хекслет и ищи норм работу.
Я устроился на 35к, щас 55 (полгода опыта)
Аноним 17/08/19 Суб 16:00:23 1455063270
Screenshot9.jpg (117Кб, 816x245)
816x245
Screenshot10.jpg (221Кб, 525x654)
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
Аноним 17/08/19 Суб 16:31:21 1455070271
>>1455061
Иди-ка ты нахуй со своими курсами.
Аноним 17/08/19 Суб 16:35:26 1455073272
>>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. Можешь глянуть, если интересно. Ты можешь так убедиться, что моя версия правильная и проблема не в твоем коде, а в сетевых проблемах.

Аноним 17/08/19 Суб 16:41:10 1455078273
Аноним 17/08/19 Суб 16:48:30 1455079274
>>1455070
Ну давай, осиливай свои регулярочки еще полгода. А потом на завод иди
Аноним 17/08/19 Суб 16:49:37 1455080275
>>1455078
Если появляются, зарегистрируйся, пройди бесплатные уроки. Я же не кидаю реф. ссылку, а делюсь годнотой.
Аноним 17/08/19 Суб 16:58:50 1455082276
Screenshot9.jpg (126Кб, 967x230)
967x230
>>1455073
>Скорее всего дело в РКН.
Но почему любые другие заблокированные сайты открываются без проблем? Через эти же прокси. Вот сейчас для теста рутрекер открыл.

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

Спасибо, ОП! Без тебя бы не справился.
Аноним 17/08/19 Суб 17:38:39 1455114281
>>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.

Аноним 17/08/19 Суб 17:46:11 1455121282
>>1455099

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

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

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

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

Но в общем тебе нужен если и прокси, то не HTTP, а HTTPS, к которому ты подключаешься по SSL, с шифрованием. Иначе он ничего не скрывает.
Аноним 17/08/19 Суб 18:01:12 1455130283
Screenshot10.jpg (69Кб, 554x343)
554x343
>>1455114
Но прокси вроде https. Вон, зашифровано же, нет? Я в это разбираюсь еще меньше, чем во всем остальном.
Аноним 17/08/19 Суб 18:03:29 1455131284
>>1455078
Все курсы на торрентах есть.

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

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

>если ты макакер уровня
А ты что за хуй важный чтобы мой уровень оценивать?
Аноним 17/08/19 Суб 18:53:10 1455158289
>>1455156
>>1455151
Хватит ругаться, джуниоры, не позорьте себя перед префессионалами.
Мимо-5-пет-проектов-на-штмл
Аноним 17/08/19 Суб 19:26:13 1455197290
>>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.
Аноним 17/08/19 Суб 20:51:21 1455252291
Привет, ОП, я когда-то делал твои задачи по вёрстке, на работе пишу бекенд, но внезапно понравилось верстать, возникли вопросы по которым очень интересно твоё мнение:
- Какой смысл в семантических тегах (section, article, menu) для закрытых SPA, которые не будут индексироваться? Почему иногда в статьях по-прежнему используют ul/li для меню, а потом перекрывают дефолтные padding/margin у этих тегов, вместо того, чтобы просто сверстать на div/span и flexbox? Вёрстка проще, поддержку IE просят очень редко.
- Для ретины рекомендуется использовать изображения с более высоким расширением. Я не очень понимаю как это работает на уровне железа. Что значит "повышенная плотность пикселей". Если на ретине с разрешением 1920x1200 и обычном дисплее 1920x1200 открыть одну и ту же картинку, то она будет отображена одинаково? Как-то можно эмулировать ретину на обычном дисплее, чтобы видеть вёрстку на маке, не имея мака?
- Что порекомендуешь для pixel perfect вёрстки, может есть расширения для браузера или удобные линейки под линукс?
Аноним 18/08/19 Вск 03:52:51 1455459292
>>1453413
>2020
>Apache
Апач это лютый депрекейт. Годится только для локалки - течёт по памяти пиздец.

>>1453528
Фу блядь, фу нахуй. Используй неймспейсы и не еби себе мозги.
Аноним 18/08/19 Вск 04:17:56 1455466293
доброй ночи
есть задача, исходные:
знаю базовые вещи вроде html, css, javascript, sql, ооп, очень поверхностно mvс, на php писал скрипты к всяким вордпрессам и джумлам и ковырялся в плагинах
собственно нужно сделать что-то вроде облачного хранилища фоток: юзеры грузят фотки на сервер, в личном кабинете могут просматривать их, создавать "альбомы" и раскидывать по ним фотки, делиться ссылкой с кем-попало или давать доступ к альбомам другим юзерам
стоит ли с такой задачей влезать в php фреймворки (если да, то какой?) или проще лепить код самому? быстрее ли будет разобраться с функционалом фреймворка или же писать и собирать phpные куски?
в приоритете время разработки, защищенность и правильная архитектура не интересует
Аноним 18/08/19 Вск 04:34:49 1455471294
>>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 вёрстки, может есть расширения для браузера или удобные линейки под линукс?

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

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

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

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

>>1455459

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

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

>>1455079

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

>>1455029

Показ выпадающего списка можно отключить HTML-атрибутом autocomplete. Это стоит делать для полей, содержащих приватные данные (вроде номера карты или паспорта), чтобы браузер их не сохранял.
Аноним 18/08/19 Вск 05:10:55 1455475296
>>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). Это самый надежный способ.
Аноним 18/08/19 Вск 05:12:03 1455476297
>>1453656

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

>>1453615

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

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

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

>>1453317

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

Аноним 18/08/19 Вск 08:21:23 1455492298
как вы смотрите на текущее состояние php в реалиях 2019 года и его развитие?
Аноним 18/08/19 Вск 08:45:29 1455496299
Аноним 18/08/19 Вск 08:49:58 1455498300
Аноним 18/08/19 Вск 16:02:27 1455647301
image.png (26Кб, 1024x768)
1024x768
>>1446969 (OP)
Помогите решить тестовые задания (одно из тестовых на собеседовании кстать):
Нужно сверстать календарь используя списки

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

Если кому интересно покидаю другие
Аноним 18/08/19 Вск 16:03:37 1455649302
Аноним 18/08/19 Вск 16:14:18 1455656303
Добрый день. Меня гложит следующая мысль: имеет ли основания джавист или например шарпист смотреть на пхп-программиста свысока и считать последнего "недопрограммистом", потому что "написание скриптиков" - это якобы что-то несерьёзное. А вот они, работающие на компилируемых языках, работающие в энтерпрайзе со всякими банками и прочими крупными заказчиками, это кто-то, кто стоит на уровнь выше и является "настоящим" программистом.
Это не троллинг, я серьёзно спрашиваю, и точно не хочу начинать срач. Я вроде бы понимаю, что язык - это просто инструмент, и сам по себе он не должен быть мерилом профессионализма. Мне хотелось бы услышать какие-то аргументы не для спора с кем-то, а для самого себя, чтобы избавиться от некоторых комплексов.
Аноним 18/08/19 Вск 16:21:53 1455657304
>>1455656
Полное право имеют. Потому что даже самый высоконагруженгый сайтик с гиганстким стеком технологий не сравнится с написанием приложения для, например, банковской сферы.
Аноним 18/08/19 Вск 17:37:46 1455681305
>>1455656
Всё зависит от того, какой у тебя уровень и какими технологиями ты владеешь.

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

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

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

Хотя многие реально клепают круд-говно, просто на других языках, шлёпают какие-нибудь формы к БД, которую даже и не они проектируют.
Аноним 18/08/19 Вск 17:55:44 1455687306
Аноним 18/08/19 Вск 18:04:43 1455692307
>>1455687
Хотя немного грустно стало от ваших ответов, честно говоря.
Аноним 18/08/19 Вск 18:07:16 1455693308
>>1455692
А какая нахуй разница, если бабки платят? Ну грустно и хуй с ним, зато сытно.
Аноним 18/08/19 Вск 18:18:53 1455697309
>>1455693
Хмм, а в этом есть логика, ведь если платят, то видимо не просто так платят.

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

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

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

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

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

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

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

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

Аноним 18/08/19 Вск 18:44:19 1455716313
>>1455699

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Прошу прощения за платиновый вопрос и то, что не читаю в гугле.
МОжет подскажете, как дела в европе с PHP? через пару месяцев меня ждет релокация в Чехию или, менее вероятно, но есть шанс, в Гермашку (скорее первое) по основной работе, которую после дропну нахуй. Понимаю, что там своим спецов дохуя , и я буду нубом, но с финаносовой подушкой есть полгода-год, чтобы поуизучать + по текущей работе есть реальные примеры, что могу поделать (допилить аддоны в облаке, могу просто попросится проверять и помогать коллегам)
Аноним 18/08/19 Вск 22:08:31 1455860325
image.png (158Кб, 1366x768)
1366x768
>>1455842
Судя по Loaded Configuration File (none) ini файла у меня попросту не существует.
Аноним 18/08/19 Вск 22:10:14 1455861326
>>1455835
Раскомментировать подойдет если у тебя стоит пыха такая как ее делали разрабы пыхи, что на большинстве дистрибутивов врядли. Скорее всего надо просто поставить нужный модуль. Но поскольку ты на винде - хз как это сделать
Аноним 18/08/19 Вск 22:14:42 1455869327
>>1455861
Нужный модуль у меня находиться в папке php\ext, но для его включения нужен ini файл, вот я и ищу его.
Аноним 18/08/19 Вск 22:15:54 1455870328
>>1455869
У тебя опен сервер?
Аноним 18/08/19 Вск 22:22:35 1455873329
>>1455870
Нет, я использую встроенный php сервер.
Аноним 18/08/19 Вск 22:24:33 1455876330
>>1455860
У тебя же написано что Configuration file (php.ini) path - находится в C:\Windows
Аноним 18/08/19 Вск 22:25:31 1455878331
>>1455876
Так в том то и дело, что его нет там.
Аноним 18/08/19 Вск 22:26:54 1455879332
>>1455878
Советую тебе поставить apache или nginx, чтобы ты все смог настраивать, там то они (конф. файлы) точно будут
Аноним 18/08/19 Вск 22:27:33 1455880333
>>1455879
Ладно, попробую, спасибо за помощь.
Аноним 18/08/19 Вск 22:54:46 1455905334
>>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 )

Аноним 18/08/19 Вск 23:26:37 1455923335
Доктрина или елокуент?
Аноним 19/08/19 Пнд 03:06:39 1455977336
>>1455459
>Используй неймспейсы
Жопой читаем?
Аноним 19/08/19 Пнд 03:29:29 1455980337
>>1453528

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

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

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

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

Если подключение библиотеки требует много ресурсов, то делаешь функцию для подключения и вызываешь только когда это нужно.
Аноним 19/08/19 Пнд 06:33:09 1456004338
>>1455923
елокуент и в пизду этот падающий от любого ика менеджера сущностей
Аноним 19/08/19 Пнд 11:22:34 1456059339
Аноны, привет, на связи пидораха. Хочу стать человеком. А точнее программистом который хочет глубже познать суть.
Так что мне видимо требуется открыть для себя волшебный мир структур данных и алгоритмов, я прав?
Подскажите книгов пожалуйста.
Аноним 19/08/19 Пнд 11:56:27 1456087340
В последнее время всё чаще думаю, что все попытки демонизировать php - это ошибка. Постоянно встречается говно с тем, что память течёт, системный io блокирующий, нормальных инструментов для ассинхронной работы нет, возникает необходимость в супервизоре, хелсчеках, таймаутах на операцию и т.п. Да и зачем, если php под это тупо не задизайнён?
Та же связка nginx-phpfpm (а теперь ещё и в php7.4 пред-загрузка появилась) дают огромную производительность, в которую ты уже не упрешься практически никогда (потому что узкое место - это обычно база данных, а приложения на php масштабировать очень просто), если написано нормально, а не через жопу.
Даже если задача такова, что нужно вычитывать из вебсокета или очереди, то есть куча инструментов (тот же nginx), которые умеют вычитывать данные и слать http-запросы, позволяя php работать as designed, а не как сова на глобусе.
Аноним 19/08/19 Пнд 12:33:56 1456133341
>>1456087
так и есть , или ждать пхп8 когда сделают асинхронность из коробки на низком уровне ядра , всё остальное ReactPHP и тд шняги для бенчмарков + пет проекты уровня хелло ворлд
Аноним 19/08/19 Пнд 12:35:21 1456136342
>>1455923
2 разных подходи , вопрос сорт оф автомобиль или лодка
Аноним 19/08/19 Пнд 12:37:45 1456140343
>>1455850
подтягивай тогда лучше англ , джуны без нетива на уровне б1 не нужны , по работе она есть , не так много как например в укропском ДС но есть.

мимо варшава кун
Аноним 19/08/19 Пнд 13:11:12 1456164344
>>1456140
Спасибо
С ним как раз проблем нет
Аноним 19/08/19 Пнд 13:56:04 1456191345
>>1455980
Спасибо.
Всегда пишу через неймспейсы + композер, не хочется напрямую инклюдить, в обход общей структуры приложения.
Аноним 19/08/19 Пнд 14:08:42 1456201346
>>1456087
Так возьми ту же ноду, чё как фуфел? Или ты из тех чуваков, что пхп - ван лав?
Аноним 19/08/19 Пнд 14:20:28 1456213347
Аноним 19/08/19 Пнд 16:26:26 1456283348
Пачаны, где искать задачки на подобие ОПовых? Одна мука в инете, сосчитать 2 + 2 и прочее гавно из жопы.
Аноним 19/08/19 Пнд 16:49:06 1456305349
Аноним 19/08/19 Пнд 17:08:45 1456316350
>>1456087
Расскажи что за задачи ты решаешь? Личный интерес
Аноним 19/08/19 Пнд 18:47:17 1456376351
как сделать личный кабинет?
Аноним 19/08/19 Пнд 19:35:18 1456452352
19/08/19 Пнд 19:39:29 1456458353
Подскажите как можно реализовать такую логику 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)
Но, видимо из-за того, что токены различаются, оно создает новую запись вместо обновления старой. Спасибо
Аноним 19/08/19 Пнд 19:45:24 1456472354
>>1456452
не могу,потому что не понимаю
19/08/19 Пнд 19:51:23 1456485355
>>1456458
Появилась идея. При создании линковоной таблицы создаются пустые записы под слинковую колонку? Просто сам объект пользователя сохраняется в другой таблице. Если слинковать и создать шаблонные записи под каждого созданного пользователя и создавать новые при создании новой записи пользователя и использовать UPDATE
Аноним 19/08/19 Пнд 20:50:58 1456579356
>>1456201
Этот вопрос уже 100500 раз обсосан. Это тебе в твоём манямирке на 2 с половиной юзера и полтора формошлёпа всё заебись, можешь хоть каждый день всё на новый язык переписать. А когда у тебя 50 разработчиков и кодовая база в несколько десятков тысяч строк, то ты каждый раз будешь думать, тащить ли новую технологию или сделать на старой. Потому что любой новый стек, это разработчики, которые должны уметь на этом кодить, девопсы, которые должны уметь это поддерживать, ещё одна экосистема, от которой ты зависишь и так далее. Для тебя это может быть пустой звук - но для бизнеса - нет, и дописать лишнюю точку входа в существующий монолит (или не совсем монолит, не суть) оказывается проще, чем тащить что-то новое.
Поэтому пхп не ван лав, просто нужно оценивать риски и профит. Та же нода - норм, но это если у тебя есть минимум 2 девелопера и 2 девопса, чтобы это готовить. И задача подходящая.
Во всех прочих случаях отдельный гейтвей для сокетов и обычный бекенд за ним решает 99% проблем, не принося новых.
А на пет проектах я сам на чём только не пишу.

>>1456316
У текущей компании много продуктов, в большинстве бекенд написан на php. В основном, всякие сервисы по работе с хостингом, доменами и прочими сертификатами. Но я - выходец с аутсорса и работал в том числе над сайтами для компаний из fortune-500 (в-основном интранеты, интернет-магазины, прочие веб-приложени). Почти везде и почти всегда связка cron + php решала все проблемы и мне не приходилось изобретать велосипеды.
Аноним 19/08/19 Пнд 21:54:36 1456630357
>>1456579
>Почти везде и почти всегда связка cron + php решала все проблемы
Я наверное не понял тебя сначала извини. Думал ты как раз расскажешь про те задачи что не решить этой связкой
Аноним 19/08/19 Пнд 22:42:22 1456671358
>>1456630
А. Классическая задача - это запускать что-то раз в 10-15 секунд, кроном принципиально не решается.
Из реальных задач - у меня была задача максимально ускорить доставку писем клиентам (они содержали подтверждение платежей). Крон, который рассылал письма клиентам из очереди раз в минуту бизнес не устраивал. Решается такое как раз набором демонов, вычитывающих всё из очереди в тот же момент, когда оно туда попадает.
Ещё, у меня была задача подгружать много данных из разных источников, компоновать их, и возвращать в едином списке. Понятно, что кэшировалось, но изначально-то это была композиция ассинхронных запросов. Решал через по тем временам модный Gearman.
С сокетами тоже была задача, как раз нужно было слать пуши на девайс и обратно, причём быстро. Вообще на php есть Ratchet, который вроде как умеет в сокеты, но я тогда (уже не помню, по какой причине) написал простенький прокси на socket.io, который умел принимать http-запросы из php и пересылать их на девайс, принимать запросы с девайса и пинать php по http. Тут могла бы быть проблема в случае добавления новых нод (потому что пришлось бы как-то узнавать, к какому из инстансов ноды прицеплен конкретный пользователь), но там трафика было достаточно мало, чтобы этим пока что не заморачиваться. Если бы понадобилось, то, наверное, хранил бы в каком-нибудь хранилище (редисе, к примеру) связку пользователь-девайс-нода.
Аноним 20/08/19 Втр 00:00:28 1456709359
>>1456283
codewars. Там вроде уже есть клан двачеров, но лучше не вступай туда.
Аноним 20/08/19 Втр 00:03:22 1456711360
>>1456579
>Этот вопрос уже 100500 раз обсосан
Только не рвись, дружок.
Аноним 20/08/19 Втр 02:00:36 1456733361
У меня небольшой вопрос twig и slim. Делаю сайт, на каждой странице сайта нужно выводить список категорий из бд. Я поместил код получения из бд в middleware и там же добавляю массив категорий как сервис twig, чтобы каждый раз не писать это в контроллерах. Все правильно делаю? Мне кажется, что это сложное решение, и можно как-то проще сделать...
Аноним 20/08/19 Втр 04:42:22 1456747362
>>1456733
в контроллере собирай массив и передавай во вью
Аноним 20/08/19 Втр 07:08:13 1456760363
>>1456671
Интересно. Спасибо
Аноним 20/08/19 Втр 09:22:01 1456785364
>>1456747
А если у меня 100 вью, то каждый раз в ручную передавать?
Аноним 20/08/19 Втр 11:50:23 1456817365
Анонче, помоги с апачем. Делаю автоматические поддомены.

Сейчас мой 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 править
Аноним 20/08/19 Втр 14:58:30 1456876366
>>1456817
Тысячу лет не имел дел с апачем, но вообще поддомен выглядит, как отдельный виртуальный хост. Может, там можно плейсхолдер херануть, чтобы у тебя, к примеру, было два виртуальных хоста, *.domain.com и domain.com
Аноним 20/08/19 Втр 15:56:58 1456914367
>>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" есть на этой же странице выше.
Аноним 20/08/19 Втр 16:10:51 1456917368
>>1456733

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

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

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

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

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

...

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

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

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



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

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

$viewData = addCommonViewData($app, $viewData);
Аноним 20/08/19 Втр 17:46:32 1456953370
>>1456472
Декомпозируй задачу
Аноним 20/08/19 Втр 18:36:27 1456997371
>>1456917
Спасибо большое! У меня теперь ещё один вопрос последний: ещё в middleware я ограничиваю доступ неавторизованных пользователей к некоторым разделам сайта. Это правильно, или фильтрацию надо в другом месте делать?
Аноним 20/08/19 Втр 19:41:13 1457051372
>>1456785
Ты создай контроллер а остальных наследуй от него
Аноним 20/08/19 Втр 22:48:59 1457174373
>>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) отсюда и такое поведение.
Аноним 20/08/19 Втр 22:50:07 1457176374
>>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
Аноним 20/08/19 Втр 22:51:00 1457179375
>>1456059

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

>>1456004

"менеджер сущностей" имеет свои плюс: он умеет сам искать изменения. Ты изменил (или создал) сущность и несколько связанных с ней, и одной командой все изменения находятся и сбрасываются в БД в нужном порядке. Хотя, конечно, это можно реализовать и в ActiveRecord.
Аноним 21/08/19 Срд 11:03:02 1457371376
>>1456917
>И да, названия у меня ужасные, придумай что-нибудь получше.
Поясни, знающий анон, как функции называть? Почему prepareLayoutData это плохо? Я думал плохо это TovarTyt() или VzatVelichiny()
Аноним 21/08/19 Срд 12:33:46 1457430377
>>1457176
> Или ты имел в виду простые задачки по основам?
Так точно.
Аноним 21/08/19 Срд 14:00:37 1457560378
Аноны, приведите позязя простейшую реализацию защиты от XSRF. Если я просто создам кукиесу с рандомными цифрами, вставлю ее в хидден поле формы, а потом при получении данных с этой формы буду проверять текущую куки и присланную - это прокатит?
Аноним 21/08/19 Срд 14:14:49 1457586379
>>1455476
>Нет это плохо с точки зрения читабельности кода
Да ты охуел там, с точностью до наоборот.
Визуальный мусор от скобочек и большего числа строк гораздо сильнее влияет на читаемость и восприятие кода, чем одна строчка.

Вот записывать так сложные условия - уже не очень.
А строка типа
hui && pizda читается изи.
Аноним 21/08/19 Срд 14:16:06 1457589380
>>1453317
Правда, жалко, это не работает с конструкциями языка. Только с функциями.
Например, unset () так не сделаешь
Аноним 21/08/19 Срд 14:18:10 1457595381
>>1455474
>Апач не используют по другой причине.
А более вменяемая и легкая настройка - это недостаточная причина?
Всегда люто блевал с этого апача, прежде чем научился настраивать это говно.
Nginx освоил за неделю, ибо там все в полторы строки делается.
Аноним 21/08/19 Срд 14:21:48 1457600382
>>1457586
я другой анон, но тоже не понимаю зачем вы if в сточку пишите. Мне читабельности не добавляет. Зачем экономить? Может ты еще и туалетную бумагу бережешь и пакетик три раза завариваешь? Смотри какая экономия выходит
Аноним 21/08/19 Срд 17:42:35 1457769383
>>1457600
>Зачем экономить?
Затем, чтобы методы по 500 строк не были
Аноним 21/08/19 Срд 17:43:35 1457771384
14166852016920.jpg (11Кб, 480x270)
480x270
Как изменить ключи во время итерации по многомерному массиву?
Аноним 21/08/19 Срд 19:35:40 1457859385
>>1457769
>методы по 500 строк
Неправильно декомпозируешь скорее всего. Ещё и на читабельности начинаешь экономить.

Много коротких строк лучше чем мало длинных.
Аноним 21/08/19 Срд 22:06:30 1457981386
70916971.png (213Кб, 1861x2008)
1861x2008
Table_1

Name Name_id
===================
Eva 222222
Joe 333333

Table_2

Id Value Unique_id
===================
88 80 222222
99 100 333333

Card

Card_name Card_value Card_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
Аноним 21/08/19 Срд 22:14:31 1457987387
Аноним 21/08/19 Срд 23:08:11 1458027388
>>1457987
Спасибо, я уже это вчера читал. Это совсем не то, кстати.
У меня не обновление множества форм за раз, а отправка имени в пустое поле уже готовой формы и (самое сложное, из-за чего проблема-то) нужно с налёта сверить это имя с именем в 1й таблице и только потом скопировать уже имеющиеся значения в 3й таблице, сверив айди имени 1й таблицы с айди мени во 2й. Здесь вроде триггер нужен, но это пока сложно для меня.
Аноним 22/08/19 Чтв 04:41:23 1458144389
>>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'

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

Аноним 22/08/19 Чтв 07:53:48 1458178390
Аноним 22/08/19 Чтв 10:36:23 1458246391
изображение.png (5Кб, 623x75)
623x75
Заказал хостинг от GoDaddy. В phpinfo() выводит вот это.

Как жить дальше? Можно ли поменять api на apache или nginx?
Аноним 22/08/19 Чтв 12:19:47 1458314392
>>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 в момент её заполнения и тут же выполнять другие действия, основываясь на этом имени и уникальном айди на лету за раз.

>Я бы советовал тебе прочесть
Спасибо, почитаю.
Аноним 22/08/19 Чтв 12:51:08 1458343393
>>1458246

Надо смотреть документацию, но обычно shared hosting подразумевает, что ты просто получаешь папку на диске, а веб-сервер настраиваешь не ты. Но тебе надо посмотреть, может быть у них есть какие-то опции, это все-таки известный хостер.
Аноним 22/08/19 Чтв 12:56:11 1458346394
Аноним 22/08/19 Чтв 14:02:03 1458405395
>>1458144
>Ты учел, что это обновит не одну строчку, а во всей таблице во всех строчках обновит поле?
Сделал
WHERE
`Card`.`Card_id` = 88
Теперь обновляет только нужную строчку, но всё ещё
>прибавляются все значения во всей таблице "Table_2"
а не к нужной айди имени...
Аноним 22/08/19 Чтв 16:37:27 1458550396
Снимок.PNG (32Кб, 568x439)
568x439
Пока самое чистое, что я >>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 А может всё же можно как-то без них? ?
Аноним 22/08/19 Чтв 18:08:39 1458617397
Аноны, тут можно вопрос по фремворкам задавать?
Аноним 22/08/19 Чтв 18:19:31 1458624398
Аноним 22/08/19 Чтв 18:28:42 1458634399
>>1458343
Спасибо за ответ.
В теъ. поддержке ответили что поменять api можно только на выделенном сервере.
Аноним 22/08/19 Чтв 20:02:24 1458747400
>>1458617
Конечно, не стесняйся.
Аноним 22/08/19 Чтв 20:45:34 1458774401
Безымянный.jpg (147Кб, 832x680)
832x680
/ Братишки, помогите разобраться.
Вот такой код. Выдаёт синтаксическую ошибку. Хотя синтаксической ошибки вроде как нет.
Не могу понять, тут какая-то неверная конструкция или что-то действительно не так с синтаксисом.
Пытался спросить у Гугла, не нашел ответ
/

<?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;
}
?>
Аноним 22/08/19 Чтв 22:03:59 1458814402
Аноним 23/08/19 Птн 00:28:40 1458888403
>>1458774
У тебя не поддерживает указание типа возвращаемого значения. Возможно ты пишешь на php 5. Просто убери ": array". Должно заработать
Аноним 23/08/19 Птн 10:19:38 1459010404
27HJ-yAEPNU.jpg (242Кб, 1014x1024)
1014x1024
>>1458814
>>1458888
Спасибо, няши. Добра. Несовместимость версий, действительно.
Аноним 23/08/19 Птн 11:04:51 1459021405
Аноним 23/08/19 Птн 11:06:29 1459025406
Аноним 23/08/19 Птн 11:14:26 1459037407
Григории, только начинаю разбираться в гите. Поясните, если я пушнул свой проект на гитхаб, то туда скопировались ВСЕ коммиты и изменения? То-есть если в первых версиях у меня реальный пароль к базе данных сохранен был, то все на гитхабе его увидят? И это фиксится только удалением проекта на гитхабе, удалением папки гит на локалке, initом нового проекта на локалке уже без пароля в файлах и пушем в гитхаб? А можно как-нито сказать "удалите пожалуйста историю до такого-то коммита"?
Аноним 23/08/19 Птн 11:42:46 1459075408
Аноним 23/08/19 Птн 11:47:39 1459084409
>>1459075
Благодарю, то что нужно
Аноним 23/08/19 Птн 12:03:34 1459108410
Совсем никаких подсказок по этому >>1458550
? Эх...
Аноним 23/08/19 Птн 15:00:16 1459306411
Уже не надо. Всё решил одним апдейтом, как и хотел.
>>1459108
Аноним 23/08/19 Птн 15:17:11 1459317412
image.png (173Кб, 1440x900)
1440x900
image.png (116Кб, 1440x900)
1440x900
ПАМАГИТИ

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

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

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

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

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

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

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

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









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

Хуетой занимаешься.
Аноним 23/08/19 Птн 16:12:53 1459344414
>>1459317

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

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

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

мимо
Аноним 23/08/19 Птн 18:40:39 1459414416
Смотрю исходники вордпресса - ну там и ад. Всё валится в кучу - и шаблоны, и пхп-код, функции отдают на вывод когда захочется автору. Осспаде, что за продукт говнокодера? Похерено очень многое из принципов разработки - никаким солидом там и не пахнет даже рядом.
Узнал, что можно жс-код прямо в пхп-функциях прописывать, а потом выводить на страничку. У автора наверняка была шизофрения.
Аноним 23/08/19 Птн 18:47:07 1459424417
>>1459344
Спасибо, анон. Ну я и даун. Удивительно, что я так долго не замечал этой опечатки. Хотя не исключено, что траблы со зрением сыграли свою роль.
Аноним 23/08/19 Птн 19:28:44 1459452418
>>1459414
>вордпресса
Всегда было поделием для пиндосских домохозяек. Сорт оф эпл в мире бложиков. Чего ты ожидал?
Аноним 23/08/19 Птн 19:41:29 1459458419
как работает такая махина,как фейсбук?
Аноним 23/08/19 Птн 20:22:01 1459494420
>>1459458
На реактивной тяге Цукера.
Аноним 23/08/19 Птн 20:38:46 1459505421
>>1459452
По крайней мере теперь понятно откуда у пхпшников слава обезян за клавиатурой - благодаря таким вот мартыханским поделиям.
Я бы и сам так считал, если бы не знал, что это дикое легаси.
Аноним 23/08/19 Птн 20:44:37 1459508422
Аноним 23/08/19 Птн 20:53:52 1459513423
Аноним 23/08/19 Птн 21:14:41 1459521424
там ларавел 6 вышел!
Аноним 23/08/19 Птн 22:29:05 1459603425
>>1457771
Делай новый массив
Аноним 23/08/19 Птн 23:10:28 1459626426
Анонче, вкатываюсь в пыху дабы вкатиться в ойти любыми способами, закончить вышку и перекатиться в ПМы. Годный план?
Аноним 24/08/19 Суб 02:06:16 1459702427
Аноним 24/08/19 Суб 09:23:10 1459760428
Аноним 24/08/19 Суб 13:16:42 1459900429
Аноним 24/08/19 Суб 14:07:01 1459944430
>>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 столбцов и нужного количества строк.
Охуенно простая формула, целочисленное деление (с округлением вниз) + остаток от деления всегда дают точные номер строки и столбца для данных.
Во многих случаях облегчает жизнь.
Аноним 24/08/19 Суб 15:20:29 1459983431
режим обработки ошибок обязательно пихать в пдо?
Аноним 24/08/19 Суб 15:25:31 1459986432
Уважаемые пхписты, правда, что именно на пхп удобнее и выгоднее фрилансом заниматься?
Аноним 24/08/19 Суб 15:47:55 1460011433
>>1459986
в мыВамПерезвоним тредах писали что платят за пшп меньше, но вакансий/работы в разы больше
Аноним 24/08/19 Суб 16:04:49 1460026434
Аноним 24/08/19 Суб 16:09:33 1460031435
>>1460011
Платят меньше по сравнению с чем?
Аноним 24/08/19 Суб 16:20:39 1460036436
image.png (41Кб, 815x497)
815x497
>>1446969 (OP)
ДА КАКОГО ХУЯ БЛЯТЬ. Я В РЕЗЮМЕ НЕ ПИСАЛ ЧТО ЗНАЮ ВОРДПРЕСС ОНИ ЕБАНУТЫЕ?????
Аноним 24/08/19 Суб 16:23:43 1460039437
>>1460036
Опарыш-неосилятор, ты?
Аноним 24/08/19 Суб 16:41:35 1460042438
Аноним 24/08/19 Суб 16:52:32 1460051439
>>1459944
только что вышел из спячки
>[$year, $month, $day] = $this
Теперь можно без list($year, $month, $day) ?
Пили еще мне нравится.
Аноним 24/08/19 Суб 17:06:02 1460067440
>>1460036
А что ты хотел, уча пхп?
Аноним 24/08/19 Суб 17:09:27 1460070441
>>1460042
Припекло попочку рукожопу-неумехе, лол
Аноним 24/08/19 Суб 17:09:36 1460071442
>>1460067
Я хотел создавать сайты. А не разбираться в готовых плагинах.
Помимо пхп я знаю кучу других языков. К тому же ПХП был в учебной программе, а вот вордпресс нихуя.

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

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

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

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

Мне было бы проще сделать это задание на голой пыхе в десятки тысяч раз.
Аноним 24/08/19 Суб 18:37:14 1460119450
Аноним 24/08/19 Суб 18:54:21 1460140451
Что помимо php необходимо знать, чтобы можно было откликаться на вакансии и не быть посланным из-за того, что знаешь недостаточно или вообще нихуя?
Аноним 24/08/19 Суб 20:04:20 1460190452
>>1460086

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

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

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

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

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

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

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

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

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

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

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

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

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

Я смотрю ты спец, можешь посоветовать, что делать человеку без опыта в индустрии? Стоит ли идти буквально за копейки работать ради опыта или стоит сидеть дома, ебаться с тестовыми заданиями?
Аноним 24/08/19 Суб 21:23:44 1460240457
>>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>';
и вроде работает. Если эту страницу подредактировать, поменять пути какие-нибудь, у тебя будет инструмент в админке для загрузки/редактирования твоих картинок. Останется в шаблоне главной страницы вывести загруженные файлы в верстку. Это очень топорный способ, по уму надо читать документацию, которую аноны выше предложили по созданию всяких модулей/плагинов. Но это может хоть как-нито помочь. Другой путь - сходить на рутрекер или другой ресурс, скачать плагин для вордпресса с каруселью и на его основе свой сделать
Аноним 24/08/19 Суб 22:20:52 1460274458
как на swoole делать сайт?
Аноним 24/08/19 Суб 23:37:37 1460312459
Привет
Решил что одному учиться грустно и ищe единомышленников, желательно адекватных с которыми можно обсудить проблемы/вместе писать проекты. Наверно это нужно писать в /soc но тем не менее.
Если что почта для связи korzinadlyamusora@gmail.com
Аноним 24/08/19 Суб 23:46:33 1460317460
Как мимокрокодил, хочу сообщить вам, что php - говно.
Аноним 24/08/19 Суб 23:50:09 1460319461
>>1460071
Как раз программист и разберётся, даже начинающий. А вот крикливое хуйло без скиллов будет бегать по форумам и просить чтобы ему всё разжевали.
Аноним 25/08/19 Вск 00:03:29 1460325462
>>1460071

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

Как думаешь стоит ли на сишарпе поискать работу раз в рашке только вп, битрикс вместо пыхи?
Аноним 25/08/19 Вск 00:28:00 1460332465
>>1460325
Алсо проблема в том что мне очень нравится веб-разработка, но и программирование тоже. Что делать собственно?
Аноним 25/08/19 Вск 00:33:20 1460335466
>>1460331

На шарме тоже докуя веба.
Кури net core.
Аноним 25/08/19 Вск 01:11:28 1460342467
>>1460335
Но жалко что в рашке это нихуя не популярно. Я же сидел на апворке ахуел сколько там заказов на сишарпе. Эх ну почему так?

+ я тока десктопные приложения умею пилить + немного асинхронных процессов изучил. Но нашему пынябизнесу это офк нинужна
Аноним 25/08/19 Вск 02:51:20 1460357468
>>1460342

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

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

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

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

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

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

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

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

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

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

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

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

Мне это напоминает какое-то болото, клиент использует какой-то популярный продукт, который не всегда к месту(интернет магазин на вп это сильно конечно), а потом на фрилансе заказы в стиле "всего лишь добавить один дропдаун, если вы ебать охуенный спец то дело на 5 мин" а там на самом деле чтобы этот дропдаун добавить раком пол дня стоять потому что везде спагетти из говна и палок, и "разработчик" вместо того, чтобы написать 10-20 строк кода за 30 минут, пол дня сидит и кликает мышкой по настройкам, что-то руками вбивает в бд, хакает кор фреймворка и т.д.
Аноним 25/08/19 Вск 06:58:27 1460379472
>>1460364
И чем фреймворк так сильно от цмс-ки отличается, кроме количества готового кода?
Аноним 25/08/19 Вск 08:58:41 1460392473
>>1460379
Тем что в популярных цмсках лютый древний непролазный говнокод. А современные цмски с нормальным кодом как правило малопопулярны. Ну и в цмсках в большинстве случаев все зависимости захардкожены под друг друга, а в фреймворках с DI можно поменять все, даже небо...
Аноним 25/08/19 Вск 08:59:35 1460393474
Manga4you
- добавил пару сайтов
- починила автозум
- сделал кэширование страничек
В планах:
- Запоминать позицию на странице
- отправлять главу в кэш
Аноним 25/08/19 Вск 09:17:27 1460396475
Аноним 25/08/19 Вск 09:24:13 1460399476
>>1460082
Пидораха как есть. Идёт на работу, чтобы его научили. Качаешь вп и изучаешь.
Аноним 25/08/19 Вск 09:25:20 1460400477
>>1460392
> современные цмски с нормальным кодом
это какие?
Аноним 25/08/19 Вск 09:45:42 1460405478
Аноним 25/08/19 Вск 10:40:34 1460413479
>>1460392
Это не говнокод, это НАСЛЕДИЕ доООПшных времён.
Аноним 25/08/19 Вск 11:11:58 1460418480
>>1460360
Сколько зарабатываешь?

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

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

Ковырял как-то модный у васянов элементор и охуел от того факта, что вообще все хедеры и футеры у них платные - это где они сайт без хедеров и футеров видели? То есть вообще все 10 штук. И далее везде такое.
Аноним 25/08/19 Вск 12:17:17 1460456484
как связать два кода,что бы результат одного перешел в другой и отобр на странице?
Аноним 25/08/19 Вск 12:20:57 1460460485
>>1460446
Джун.
Никто вменяемый не будет писать коммерческие вещи на чистой пыхе - долго и дорого. Потом ещё и поддерживать это задолбаешься.
Аноним 25/08/19 Вск 12:23:42 1460461486
>>1460456
1 Коды в одном файле - используй переменную
2 Коды в разных файлах - используй include
3 Коды в разных файлах и помещены в классы - используй автозагрузку классов. Например композером.
Аноним 25/08/19 Вск 12:44:10 1460474487
а как обезопасить то,что я передаю из формы в код?
Аноним 25/08/19 Вск 12:46:37 1460475488
>>1460474
intval(), strval() и подготовленные выражения в pdo.
Аноним 25/08/19 Вск 12:54:20 1460479489
Аноним 25/08/19 Вск 12:55:57 1460480490
>>1460379
Основное отличие, с точки зрения разраба - фреймворки сделаны для того, чтобы можно было писать расширяемый/дополняемый/изменяемый код. ЦМС - чтобы подключать готовые решения из админки, править тамошний код - побочная хуйня.

Все дело в том, что клиентам почему-то кажется, что раз цмс - это почти готовая хуйня то ее и пилить меньше, в то время как больше времени ты проебешь на разбор того, как устроен очередной говноплагин, чтобы поменять там цвет какой-то залупы
Аноним 25/08/19 Вск 12:58:01 1460483491
вам нравиться работать с пхп?
Аноним 25/08/19 Вск 13:02:58 1460485492
Аноним 25/08/19 Вск 13:31:29 1460502493
Интересная фича в Sublime Text 3:
Можно выделить всю строку если нажать на ее номер. Так-же можно выделять несколько строк.
Аноним 25/08/19 Вск 13:33:49 1460506494
>>1460502
И еще одну фичу нашел — можно создавать новый файл при двойном клике на поле с вкладками.
Список студентов Аноним 25/08/19 Вск 14:14:29 1460537495
Оп, доделал твоё задание со списком студентов, проверь пожалуйста.
Чувствую наговнокодил.. но вроде всё работает..
Правда поиск только по одному слову ищет, так и не понял как сделать поиск по нескольким словам(а нужен ли он вообще?).
https://github.com/hikkej/student_list
Аноним 25/08/19 Вск 14:24:58 1460540496
>>1460506
>>1460502
Абалдеть. А блоки кода можно схлопывать?
Аноним 25/08/19 Вск 16:32:50 1460614497
>>1460399
А где по твоему опыт я буду брать? Из онлайн туториола? Чтобы потом работодатель говорил "мы нитак делаем пошел нахуй"?

И вообще что значит научили? Программировать я умею а вот в сраном ВП не шарю. Здесь нет моей вины.
Аноним 25/08/19 Вск 16:37:32 1460617498
>>1460357
Да было бы все так просто. У меня фобия что из-за того что нет военника меня никуда не возьмут. + все вакансии это вп ебучий.
Аноним 25/08/19 Вск 16:43:46 1460623499
>>1460453
Посмотри сколько Битрикс стоит
Аноним 25/08/19 Вск 16:59:09 1460636500
>>1460399
>Качаешь вп и изучаешь
я не он, но кто его кормить будет пока он учится? И кстати да, вп скачать можно, а вот битрикс...
Аноним 25/08/19 Вск 17:02:47 1460639501
>>1460636
Бля с биртиксом делал тестовое неделю назад. HR говорит сделай за день ну я и сделал в итоге он начал пиздеть что нихуя не может проверить. Завтра типа сможет. Но завтра он не написал и вообще нихуя не ответил.
Наес тестовые задания))))))))
Алсо реквестирую способы борьбы с такими пидорасами.
Аноним 25/08/19 Вск 17:09:53 1460644502
>>1460639
Вангую что они уже нашли кого то.
Аноним 25/08/19 Вск 17:32:25 1460649503
>>1460636
Битрикс тоже можно скачать.
Мимо, ковыряюсь в нем
Аноним 25/08/19 Вск 18:12:04 1460660504
>>1460623
Доплачивать всё равно придётся.
Аноним 25/08/19 Вск 18:13:25 1460661505
>>1460636
>кто его кормить будет пока он учится?
А кого это ебёт? Работодатель ему мамочка что ли? Повзрослейте уже.
Аноним 25/08/19 Вск 18:32:04 1460668506
>>1460661
>Повзрослейте уже
по твоей логике выходит, что ты сразу из роддома работать пошел? Тебя самого родители не обеспечивали?
Аноним 25/08/19 Вск 18:32:20 1460669507
>>1446969 (OP)
Какую зп джуну просить в дс2 без опыта работы?
Аноним 25/08/19 Вск 18:38:50 1460674508
>>1460669
Людям из дс-ов вообще платить не надо. Они - кровопийцы и сосут последнее из наших регионов.
Аноним 25/08/19 Вск 18:40:48 1460676509
>>1460668
>по твоей логике выходит
>сразу из роддома работать пошел
У тебя проблемы с пониманием контекста?
Речь о работодателе идёт.
Аноним 25/08/19 Вск 18:45:09 1460679510
>>1460674
Все деньги Москва сжирает, а потом перераспределяет по регионам. Так в чем виноват я житель дс2?
Аноним 25/08/19 Вск 19:07:31 1460688511
>>1460669
50-55 если ты хорош в пет-проектах и тех интервью.
Аноним 25/08/19 Вск 20:06:21 1460710512
Может тупой вопрос, но можно ли как-то сделать так, чтобы при создании какой-то новой хуйни в базе данных на phpmyadmin ей, согласно автоинкрименту давался айди не в зависимости от того, какой она по счету в принципе создается, а в зависимости от того, какой самый большой айди уже имеется в базе данных?
Не очень понятно сформулировал, наверное. Суть в том, что, допустим, если я удаляю из базы данных что-то с айди 7, к примеру, то при создании следующего объекта ему будет присвоен 8-ой, в то время как я хочу, чтобы был 7-ой айди, потому что он не занят после удаления старого. В общем, как сделать, чтобы так сделать? Сорри за косноязычность.
Аноним 25/08/19 Вск 20:09:53 1460711513
>>1460710
Это делается тригерами.
Аноним 25/08/19 Вск 20:19:48 1460714514
>>1460710
Анон, а зачем тебе так делать? Если ты хочешь в таблице, например, фамилий вывести слева столбец с красивыми числами по-порядку, то это не айдишники надо выводить, а тупо сделать какой-нибудь $num-плюс-плюс. Зачем еще такая штука может понадобиться?
Аноним 25/08/19 Вск 20:24:44 1460718515
>>1460714
Я вывожу статьи. У каждой свой айди. Мне не нравится, что после удаления некоторых "тестовых" статей из базы данных, их айди уходят в небытие, а остаются только те, которые не удалялись, но при этом айди для новой статьи выводится в зависимости от того, сколько уже статей создавалось, а не отсчитывается от последнего созданного айди с прибавкой единицы.
Аноним 25/08/19 Вск 20:26:18 1460719516
>>1460711
Вот этими?
https://habr.com/ru/post/37693/
Спасибо. Еще бы какой-нибудь гайд по этим триггерам исчерпывающий.

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

Стоит ли мне понизить планку до 35-45к ради опыта работы?
Аноним 25/08/19 Вск 20:53:51 1460737519
>>1460718
Да и нормально. У тебя какой-то нездоровый перфекционизм.
Аноним 25/08/19 Вск 21:04:45 1460747520
>>1460736
Что значит стояло? На собесе обсуждали зарплату?
Что умеешь вообще?
Аноним 25/08/19 Вск 21:08:58 1460748521
Сап, анон, нужно завернуть xml с рандомного сайта, как сделать не используя curl?
Аноним 25/08/19 Вск 21:20:58 1460756522
>>1460614
Опыта набираются во воемя учебы. Скачал виртуалку, развернул вордпресс, открыл вакансии с вордпрессом, откликаешься на заявки и клянчишь тестовое задание, делаешь их, самые мнтересные в гитхаб. Вот тебе и опыт.

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

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

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

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

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

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

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

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

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

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

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

Ох блядь и дуры вы дурные.
Аноним 25/08/19 Вск 22:12:23 1460786528
>>1460614
>Программировать я умею а вот в сраном ВП не шарю
Значит не умеешь.
Что за нытьё вообще? Либо умеешь и делаешь, либо идёшь нахуй с поезда.
Аноним 25/08/19 Вск 23:58:51 1460850529
>>1460757
Ты лицемер. Уверен, тебя все детство содержали родители, кормили, одевали. И что-то я не думаю, что ты отвергал их помощь, крича "Я ВОЛК МЯМЯ РЫЫЫ!" И мат тебя не красит, ты не выглядишь взрослее и мужественней, наоборот, мат - это показатель идиота
Аноним 26/08/19 Пнд 00:02:36 1460852530
>>1460748
а через file_get_contents не получается?
Аноним 26/08/19 Пнд 00:19:00 1460859531
>>1460850
С чего ты решил, что работодатель должен к тебе относиться как родитель? Ты у начальника ещё сисю попроси в обед - быстро трудовую на руки получишь.
Аноним 26/08/19 Пнд 00:35:59 1460869532
>>1460859

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

>>1460773

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

>>1460756

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

>>1460736

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

>>1460731

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

Аноним 26/08/19 Пнд 00:42:23 1460872533
>>1460869
>Прекращайте бесполезный флуд
А то что?
Аноним 26/08/19 Пнд 01:10:18 1460883534
>>1460850
Я изрекаю мысль как хочу, обилие мата доставляет мне эстетическое удовольствие.

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

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

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

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

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

Хороший разработчик способен разобраться и в том, и в том.
Аноним 26/08/19 Пнд 07:40:13 1460948539
>>1446971
Ставлю ; после }, отбиваю вложения табуляцией.
Аноним 26/08/19 Пнд 07:56:18 1460950540
>>1460934
Я вкатывальщик 19 лвла, есть заказ на автомобильный магазин. Клиент не шарит вообще и был найден по сарафанному радио ( т.е не крупная какая-то сеть, а частник). Последние два дня повкатывался в CMS (Modx,WP). В целом я как программист могу и обойтись без этого. Но хочется с этим проектом продвинутся в теме современного веба, А то мне подумалось что самописы это изобретение велосипедов, поправь мои рассуждения, если я не прав.
Аноним 26/08/19 Пнд 09:13:04 1460959541
>>1460931
Интернет-магазины сейчас не нужно писать, это глупо. Там до жопы фич нужно, заказы, корзины, интеграции с платёжными системами, выгрузки, купоны, акции, скидки, витрины, напоминания, dwh и прочая и прочая.
Полноценно писать такую систему очень долго (несколько лет) и сложно (потому что это коммерц, там много нетривиальных задач), и написать её хорошо сразу не получится (те системы, что уже есть на рынке, развиваются и пишутся последние лет 10, множеством программистов).
Конечно, можно начать с нуля и потихоньку наворачивать одну фичу над другой, но во-первых это будет обрекать тебя на цикл разработки сразу же, как захочется хоть что-нибудь изменить, а во-вторых некоторые вещи вроде event sourcing'а закладываются в архитектуру сразу же и я не верю в то, что ты сумеешь заложить сразу всё правильно.
Да и бизнесу это всё не нужно.
Короче, если у тебя рядом (или ты сам) сидит мамкин бизнесмен и хочет себе интернет-магазин - бусть башляет 1000 рублей любой онлайн-платформе для этого и получает сразу вообще всё готовое. Максимум, потратится на дизайнера и фронтендщика. Зато ему не придётся думать о хостинге, бекапах и прочем.
Если есть твёрдое решение хоститься у себя - берите уже готовое решение, магенту, друпал коммерц (есть сборка commerce kickstart), вордпресс (у него должны быть плагины) и т.п.
Аноним 26/08/19 Пнд 10:58:48 1461002542
>>1460872
угомонись, матершинник. Ты не вписываешься в тред. Советы дельные не даешь, всех оскорбляешь. Здесь новичкам помогают, а не матерят их. Поищи себе другую доску, уверен в /au ты найдешь единомышленников. Там и тачки можно обсудить, и свою зазнобу, и тугосерю, и спорт - все, что интересно человеку, начавшему трудовой пусть в пятнадцать лет с разгрузки товорняков с зеками
Аноним 26/08/19 Пнд 11:08:52 1461009543
image.png (95Кб, 1360x768)
1360x768
Двачик помоги в пхп слаб!
Аноним 26/08/19 Пнд 11:26:55 1461024544
image.png (96Кб, 1360x768)
1360x768
Аноним 26/08/19 Пнд 11:39:37 1461032545
1.jpg (35Кб, 800x375)
800x375
>>1461009
анон, я сам слаб в пшп, вот сам код, который уже работает, но без запроса командной строки о вводе твоих чисел. Погугли как это делается
Аноним 26/08/19 Пнд 11:56:22 1461048546
Здравствуйте, тред как всегда фиг найдешь. Пусть и не релейтед но мб кто знает ответ на мой вопрос. Все таки мой родной тред.

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

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

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

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

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

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

>только флудишь и оскорбляешь
Тебя ебать это не должно, полицай.
Аноним 26/08/19 Пнд 13:16:58 1461120555
>>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% в СНГ подобных котор

Аноним 26/08/19 Пнд 13:44:14 1461136556
>>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 - писать код можно во вполне широких пределах, жертвуя миллисекундами в угоду читаемости кода и его поддерживаемости.
Уточню, я не имею ввиду "говнокодим и пофиг, оперативка дешёвая", я имею ввиду - слой абстракции, котороый структурирует код, упростив какие-то вещи, но будет требовать создания одного-двух объектов в рантайме - это неплохой компромисс.
Но всегда нужно руководствоваться критерием разумности и оправданности, конечно.
Аноним 26/08/19 Пнд 13:44:54 1461137557
Аноним 26/08/19 Пнд 14:19:11 1461161558
>>1461136
так то посыл все верен , только как пользоваться молотком (фреймом) ломать головы или бить гвозди дело сугубо пользователя , по сему как строить грамотную архитектуру это уже к разработчикам а не фреймам , асинк фреймы всё больше набирают обороты , и это очевидно логично в эру микросервисной архитектуры потому на всякие swoole я бы обращал по более внимания. Но в основном с картинкой да ты прав, хотя опять таки это если мы пишем монолит.
Аноним 26/08/19 Пнд 14:38:14 1461179559
>>1461161
> Монолит
Я за весь свой опыт не видел годно организованных микросервисов.
Пришёл к выводу, что правильно написанный монолит можно расширять почти бесконечно, а если пишешь говно, то и микросервисы не помогут.

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

разве что асинк должен появиться как стандарт в языке 8 пхп
Аноним 26/08/19 Пнд 15:53:13 1461245562
>>1461230
нечего не мешает делить запросы через тот же nginx между разными софтинами на разных языках
Аноним 26/08/19 Пнд 15:53:42 1461246563
>>1461230
>>1461245
так же ещё вполне возможно через очереди например
Аноним 26/08/19 Пнд 16:57:06 1461266564
>>1461230
В итоге у тебя получаются несколько приложений, одно центральное - это монолит, а прочие - это сервисы, которые отвечают за отдельные аспекты функциональности, требующие производительности или специфических фич (вебсокеты, нейронки, многопоточная обработка).
В итоге у тебя возникнет три задачи, обеспечения этих сервисов, доступа к ним и поддержки.
Первое решается множеством способов в зависимости от стека, требований и просто вкусов создающих. Самый тупой и сомнительный вариант - запускать прямо из php через shell_exec. Самый простой из нормальных - поднимать всё ручками, рядом или на соседнем сервере. Самый хайповый - это kubernetes и прочие системы оркестрации.
По поводу второго камрады из
>>1461245
>>1461246
уже высказались. Тут нужно определиться с двумя вещами, типом взаимодействия и транспортом. Тип - это синхронные вызовы (по сути rpc, например, jsonrpc) или ассинхронные (событийность, подписка/отписка). Транспорт же может быть любым, это могут быть сетевые вызовы (http-запросы), может быть брокер сообщений (отдельная система по доставке, например, rabbitmq) или твои сервисы могут просто пользоваться одной и той же базой данных (сомнительный вариант, но иногда встречается).
Третье - это поддержка, и связан он с тем, что такие распределённые (состоящие из нескольких узлов) системы не так просто поддерживать, например, дебажить. Из очевидного, каждая из этих систем должна писать свои логи и ты должен понимать, как ты будешь их деплоить (потому что они будут разворачиваться не одновременно, что вызовет временные отказы в связанных компонентах). Из неочевидного, это какие-то общие конфигурации и трасировка: ты должен предусмотреть возможность понять, к какому запросу в монолит у тебя относится твоя задача в стороннем сервисе. Делается не особо сложно, генерируешь на уровне входящего запроса случайный идентификатор REQUEST_ID, прокидываешь его во все последующие запросы и пишешь во всех логах. Таким образом, поискав по всем логам всех сервисов по этому REQUEST_ID, ты поймешь кто и что вызвал, и почему.
Ну и в принципе, правильное логирование - залог стабильной системы.
Аноним 26/08/19 Пнд 17:08:34 1461275565
>>1461266
А, ну и главное забыл. Ключ к правильной структуре приложения - это правильное разделение областей ответственности между компонентами (это не только в SOA, это в принципе так).
Соответственно, 95% логики должно быть в монолите, а в другие компоненты нужно выносить то и только то, что слишком тяжёлое/сложное/долгое для монолита. В идеале оно не должно быть связано с другими частями, будучи "чистой функцией": получает аргументы, возвращает результат, без вызовов в другие компоненты.
К примеру, у нас был монолит и нужно было генерировать огромные PDF'ки, что сильно выжирало процессор и оперативную память. Мы в тот раз написали отдельный маленький сервис, который получал данные для документа, генерировал pdf и слал её назад отдельным запросом. В итоге, мы вынесли тяжелый процесс в отдельное место (и он перестал влиять на производительность пользовательских запросов), сохранив неизменной бизнес-логику внутри монолита (методы "создай отчёт", "дай отчёт" остались в монолите, как и раньше).
Аноним 26/08/19 Пнд 18:10:31 1461339566
Так аноны, знаю что я ахуевший, но все таки, собираюсь найти работу через 1 месяц, теперь расскажите что мне делать учитывая, что знаю неплохо питон и чучуть жс, то есть напишите план как вы бы с нуля в пхп до работы дошли, буду очень признателен и будет интересно почитать.
someApprentice !EaaiHmIJms 26/08/19 Пнд 18:22:20 1461363567
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
Аноним 26/08/19 Пнд 18:23:42 1461364568
>>1461339
А добавлю что html/css знаю.
Аноним 26/08/19 Пнд 19:42:25 1461412569
можно ли на пхп замутить такое?
1 пользователь двигает объект с помощью жс
2 юзер видит это передвижение
Аноним 26/08/19 Пнд 21:18:20 1461461570
>>1461364
Я сделал пару пет проджектов: "музыку вконтакте", где можно было грузить треки и проигрывать их и ещё аналог гисметео, карту России с прогнозами погоды по городам (тянул из какого-то апи). Ну и вроде классический туду лист слепил.
Приходил на собесы с ноутом, говорил, что джуниор, но вот смотрите, что сделал.
Потом было тестовое в одну контору, сделать блог без использования фреймворков. Я написал свой mvc фреймворк и уже на нём сделал тестовое.
В итоге взяли.
Но это было уже лет 6 назад, если не больше.
Аноним 26/08/19 Пнд 22:36:43 1461491571
Аноним 26/08/19 Пнд 22:42:42 1461497572
>>1461461
Спасибо за ответ, вот я тоже думаю запилить петпрожект, думал пару сайтов сделать, это лучшая практика, да и на собесе покажу сразу.
Аноним 26/08/19 Пнд 22:57:15 1461504573
>>1461461
Делал бота в телеграм, копался в темах вордпресса, парсил всякое говно, игрался разными с апи, лепил калькуляторы на жикуери и жс, тыкал палочкой ноду, есть гитхаб с собственной приватной помойкой на парочку проектов. MVC, паттерны, сотни статей в одно лицо и 60 часов лекций на старте. Дома давно уже стоит серверная убунта из старого нетбука на которой собираю всякое под нужду.

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

Вчера вот на google cloud platform туторы проходил. Годно зделоли. Местными хостерами уже пользовался, теперь с этим хочу попробовать.
Аноним 27/08/19 Втр 13:10:33 1461764581
>>1461705
Чувак, у тебя явно пригорает и/или ты обижен на кого-то, поэтому взрываешься тут на адекватные советы.
Я анону сказал правдивую вещь: засылай на ревью хороший код, потому что небольшой качественно сделанный проект в глазах ревьювера (например моих) будет весить больше, чем 10 некачественно сделанных проектов. Увы, мир так работает, что людей оценивают по результатам и показывать нужно лучшее, что можешь вообще продемонстрировать.
Стандарты и паттерны у меня начинаются сразу, я в принципе стараюсь плохой код не писать, даже если нужно по-быстрому наговнякать - чтобы не страдать при поддержке и не отвечать за плохой код в будущем (когда спришвают "что за плохой код годичной давности" обычно аргумент "эээ, ну там сроки горели" не проканывает).
Далее, про большие проекты я не писал, как и не отбивал охоту. что-то делать. Я сказал чуваку выбрать стек, изучить бест-практики (в которых будут и конфиги, и паттерны и всё такое) и сделать настолько хороший проект, насколько он сможет. К слову, "написать двач" - довольно изичный пет проджект, не виду ничего "большого", где новичок "соснёт".
> сделаю как я фейсбук
> не знает как две переменные складывать
Вот и узнает. Ты забываешь, что мы не в детский сад играем, и чем меньше джун знает, тем сильнее он сядет мне на шею, если я его возьму. Если он будет знать, что нужно использовать конфиги, нельзя писать весь код в одном классе и нужно использовать ORM вместо кастомных запросов, то это значит, что мне можно будет больше времени объяснять ему, как сделать задачу, нежели как пользоваться инструментами и как складывать переменные.
Соответственно да, я ожидаю от джуна понимания на начальном уровне, как пользоваться языком программирования (чтобы он понимал, что такое "отнаследуй класс" и "реализуй интерфейс") и то, как следует пользоваться фреймворком (всё ещё на начальном уровне, что конфиги нужно выносить вот сюда, база данных описывается вот в таких классов и так далее). Я считаю это справедливым требованием, тем более, что изучать это действительно просто, заходишь в любой мануал "пишем блог на XXX" и там тебе всё распишут.
Аноним 27/08/19 Втр 13:10:50 1461765582
>>1461635
>написал бы, к примеру, двач
Я бы не стал работать с чуваком, который выпячивает тот факт, что он двачер. Мне местных раковых рвотных конфочек хватило. Тайный двачер лучше явных трёх.
Аноним 27/08/19 Втр 13:40:12 1461792583
>>1461765
Да какая разница. Двач, форчан, реддит, блог - это зависит от вкуса того, кто делать будет, его же пет-проект.
Просто он должен быть достаточно подъёмным для новичка, но при этом достаточно большим, чтобы можно было хоть на что-то посмотреть (потому что я видел тестовый в которых был 1 контроллер, 1 модель и 3 метода которые эту модель сохраняли, или удаляли).
Советовать сделать бложег как-то скучно, имиджборда - хотя бы оригинально.
Аноним 27/08/19 Втр 13:40:43 1461793584
>>1461764
Отчасти потому и стрёмно устраиваться - вдруг на такого как ты попаду. Ты мне ничего нового не сказал, но ЧСВ у тебя определённо большое.
Аноним 27/08/19 Втр 13:54:58 1461810585
>>1461792
>потому что я видел тестовый в которых был 1 контроллер, 1 модель и 3 метода
Падажжи. Наличие контроллера, модели и методов говорит о том, что человек понимает в ООП и MVC. А что должно говорить наличие пяти контроллеров и трёх моделей? Это просто количественная характеристика - всегда можно напилить ещё больше.
Походу ты сам плаваешь в своих же требованиях.
Аноним 27/08/19 Втр 13:59:42 1461813586
В любом случае - проект для демонстрации скиллов работодателю это именно целевой проект, а не рабочее приложение. И у него не стоит цели быть максимально жирным и обширным - оно просто показывает скиллы соискателя.
В конце-концов, если у меня есть собственный двач, то нахуй ты мне сдался со своей конторой.
Аноним 27/08/19 Втр 14:01:33 1461814587
>>1461793
Не устраивайся, мне безразлично.

>>1461810
И тем не менее, 20 строчек кастомного кода в одном файле - это слишком мало. Выводы делаются в конце-концов по кастомному коду, а есои этот кастомый код - это строка
```
function someAction($id) {
return someModel::load($id)
}
```
в минимальных вариациях, то это ничего не говорит о том, какого качества разработчик пишет это. Это несомненно плюс, что он показывает контроллер вместо самописного обращения к $_GET, но всё ещё недостаточно.
Это как принимать на работу чувака, поговорить с ним минуту и выяснить, что он знает русский язык. Знание языка - это необходимое условие, но не достаточное.
Аноним 27/08/19 Втр 14:04:27 1461817588
>>1461814
>20 строчек
Давай только про крайности не говорить. Ты который пост уже выдумываешь какие-то вычурные вещи.
Аноним 27/08/19 Втр 14:11:09 1461820589
зачем вы изучаете это дерьмо?
Аноним 27/08/19 Втр 14:12:36 1461821590
>>1461820
а почему бы собственно им нет ?
Аноним 27/08/19 Втр 14:15:19 1461822591
Аноним 27/08/19 Втр 14:16:04 1461823592
Аноним 27/08/19 Втр 14:18:32 1461826593
>>1461823
ну и зачем вы тогда учите это старье и заним проф деградацией?
Аноним 27/08/19 Втр 14:20:12 1461828594
>>1461826
по каким критериям это старьё ?
Аноним 27/08/19 Втр 14:21:25 1461829595
>>1461828
как и перл он сдохнет
Аноним 27/08/19 Втр 14:23:44 1461832596
>>1461829
Всё сдохнет и даже ты.
Аноним 27/08/19 Втр 14:23:56 1461833597
>>1461829
>как и перл он сдохнет
как и Java как и C как и С++ и любой другой язык программирования , дальше то что ?
Аноним 27/08/19 Втр 14:28:11 1461837598
>>1461829
алсо в

>Платиновые вопросы
есть твой вопрос
> Почему PHP?
там есть ответ.
Аноним 27/08/19 Втр 14:32:24 1461842599
>>1461837
так вы проф деграданты?
Аноним 27/08/19 Втр 14:35:03 1461844600
>>1461814
>МОИ 20 строчек крутые, твои - нет
Демагог эз из.
Аноним 27/08/19 Втр 14:36:40 1461847601
>>1461842
а как тебе такой ответ
echo "fusk yuo"
Аноним 27/08/19 Втр 14:47:41 1461853602
>>1461817
>>1461844
Вы правда считаете утверждения "тестовое задание с использованием паттернов и бест-практик" и "тестовое задание со значимым объёмом кастомного кода" взаимоисключающими, да?
Ну и да, если уже начались придирки к словам, то я ухожу из треда, здесь не будет диалога. Если вам хочется делать как-то по-другому и вы не готовы признавать, что бывает и другое мнение - то пожалуйста, как угодно.
Аноним 27/08/19 Втр 15:31:37 1461873603
>>1461853
анон не обращай внимания , верные же вещи пишешь
Аноним 27/08/19 Втр 15:40:47 1461879604
>>1461461
Не понимаю чего они к тебе докопались. Все 3 опытных погроммиста с которыми я знаком, говорили мне примерно тоже самое:
- сделай пару мелких
- придумай и сделай большой проект
- начинай ходить по собесам

Аноним 27/08/19 Втр 16:02:47 1461889605
>>1461853
Ты с тем шизиком общаешься, который своим нытьем, о том что ему все должны весь тред засрал. Не понял еще?
Аноним 27/08/19 Втр 16:22:03 1461899606
Новый тред будет?
Аноним 27/08/19 Втр 16:38:45 1461914607
>>1461899
Мы перекатываем в раене 800+ постов. Иначе много большая часть треда оффтоп и срачи. Осенью будет полегче.
Аноним 27/08/19 Втр 17:19:00 1461940608
>>1461914
У школьников начнутся уроки просто, лол.
Аноним 27/08/19 Втр 17:47:37 1461954609
есть ли чем заменить сраное PDO?
Аноним 27/08/19 Втр 18:09:42 1461970610
Аноним 27/08/19 Втр 18:53:49 1462000611
>>1461970
устарел,советуют пдо.
есть мож какая библиотека,которая нах между ПДО и монстрами типа доктрины и eloquent?
Аноним 27/08/19 Втр 19:15:55 1462032612
>>1462000
Я бы не назвал eloquent монстром, можно свободно отдельно брать и подключать, работает стабильно, хотя и active record. Ещё есть всякие propel, phpixie, зендовские компоненты.. Но я бы всё-таки eloquent взял.
Аноним 27/08/19 Втр 19:33:29 1462053613
>>1462032
а где взять его отдельно?
Аноним 27/08/19 Втр 19:54:41 1462060614
>>1462053
composer require illuminate/database
Аноним 27/08/19 Втр 19:56:52 1462061615
Аноним 27/08/19 Втр 20:00:49 1462063616
>>1462061
Почитай про композер.
Аноним 27/08/19 Втр 20:39:02 1462089617
Приветствую пыхарея, я загульный из C#. Т.к. в родном треде молчат, спрошу тут. Кто нибудь Trial на Azure деплоил? Трафик платный, я правильно понял?
Аноним 27/08/19 Втр 23:19:18 1462171618
>>1461853
Ну ты и камрад чувак.
Аноним 28/08/19 Срд 09:51:57 1462327619
Снимок экрана 2[...].png (86Кб, 1124x462)
1124x462
Всем привет!
Надеюсь по адресу)
Есть таблица пользователя. (у нее есть расширенные данные в виде профиля)
Есть таблица профиля. (она в свою очередь может и не иметь пользователя)
В профиле есть "возраст", который может принимать 1 из 3х значений. (Для этого я выделил еще 1 табличку?)
В профиле есть "занятость" которая может иметь несколько вариантов из списка.

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

Если с третьим пунктом гугл легко справится, то вот насчет первых двух прошу совета! А если не впадлу, можно и за за последний пояснить.
Аноним 28/08/19 Срд 11:33:07 1462408620
>>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


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

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





Аноним 28/08/19 Срд 11:40:46 1462413622
>>1462408
Вооу, спасибо большое!!
Сейчас подкреплюсь и пойду воплощать в дело тобою сказанное.
Еще раз спасибо!
Аноним 28/08/19 Срд 11:45:02 1462416623
>>1461853
>и вы не готовы признавать, что бывает и другое мнение - то пожалуйста
весь дискас как раз и начался с того, что в тред залетел идиот-матершинник и стал оскорблять новичков, безапеляционно верещя "Я ЗНАЮ КАК НАДО, С ПЯТНАДЦАТИ ЛЕТ РАБОТАЛ А ВЫ ВСЕ ДЕРЬМО И ИНФАНТИЛЫ ВЫ МЕНЯ БЕСИТЕ". Ему тактично намекнули, что если не можешь помочь, а только ругаешь - то иди в другой тред
Аноним 28/08/19 Срд 11:46:19 1462417624
>>1461940
ага ололо вот они лохи да не то што мы студенты первого курса
Аноним 28/08/19 Срд 13:59:48 1462541625
Аноны, у меня на апаче самопальный пхп MVC-фреймворк.
Все это дело работает на http, как переехать на https?
1. Нужно убедиться что модуль отвечающий за https на сервере включен
2. Сделать редирект любого запроса по http на https в .htaccesse?
Все ?
Аноним 28/08/19 Срд 15:19:02 1462620626
>>1462541
Тебе нужно подложить ssl-сертификат (если всё локально - то модно самоподписной) и сонфигать сервер, чтобы он через этот сертификат работал.
Редирект не обязателен, делают обычно для удобства, чтобы быть на 100% уверенными, что все юзеры ходят под https.
Аноним 28/08/19 Срд 17:02:56 1462691627
Нашёл в исходниках опенкарта оператор ^ и не могу нагуглить что он делает.
Знает кто?
Аноним 28/08/19 Срд 17:57:58 1462719628
Аноним 28/08/19 Срд 20:44:51 1462785629
image.png (381Кб, 471x604)
471x604
Аноним 28/08/19 Срд 21:28:11 1462815630
Аноним 29/08/19 Чтв 12:14:08 1463103631
Аноним 29/08/19 Чтв 23:10:12 1463542632
Аноним 30/08/19 Птн 19:09:30 1464104633
Аноны есть такой вопрос. Задача конвертировать текстовый файл в эксель. Реализовывать пытаюсь через 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 получив экселевский файл
Аноним 30/08/19 Птн 19:21:38 1464115634
Аноним 30/08/19 Птн 20:02:13 1464152635
>>1464115
Ее тоже находил, но не совсем понял как она работает. В моем примере цикл в котором есть массив построчно делит каждую строку по 3 столбика символами. А в этом не понимаю как использовать.
Аноним 30/08/19 Птн 22:55:29 1464287636
>>1464104
Это точно задача для php?
Аноним 30/08/19 Птн 23:54:14 1464328637
>>1464287
Чому нет? Распарсить текстовый файл любой современный ЯП может.
Аноним 31/08/19 Суб 00:39:44 1464370638
>>1464328
Не, на пыхе можно и десктоп писать, конечно. Но зачем?
Аноним 31/08/19 Суб 00:57:04 1464388639
Аноним 31/08/19 Суб 02:47:34 1464424640
Аноны, есть ли в php полноценная перегрузка функций? А то гуглил, и чё-т, если она и есть, то очень странная
Аноним 31/08/19 Суб 08:02:11 1464456641
>>1464370
Причём тут десктоп? Речь шла о файле.
Да и кому нужен этот десктоп, если есть веб-приложения?
Аноним 31/08/19 Суб 08:02:49 1464457642
Аноним 31/08/19 Суб 08:29:36 1464460643
>>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
Аноним 31/08/19 Суб 10:08:57 1464491644
Ребята подскажите как в csv файл(открывается в экселе) положить массив во второй столбик?(B1,B2...) обычно все время кладет в столбик А.
Аноним 31/08/19 Суб 12:24:55 1464547645
>>1464460
>нинужно
А вот это не факт. Хуже никому от этого не стало бы.
Аноним 31/08/19 Суб 12:50:46 1464570646
>>1464547
Перегрузка методов и функций усложняет понимание кода, так как без IDE сложно понять какая версия метода вызывается - нужно сверять типы и сравнивать количество аргументов. Код не только через IDE смотрят - если ты делаешь код-ревью коллеге в гитлабе/гитхабе, то скорее всего будешь искать метод через Ctrl+F на странице и перегрузка будет мешать и отнимать время. Опиши реальную проблему. Есть подозрение, что ты решаешь её не с той стороны.
Аноним 31/08/19 Суб 17:15:50 1464724647
>>1464491
а нельзя добавить перед твоим массивом B добавлять сначала массив A с пустыми значениями/пробелами? Или так коряво выйдет?
Аноним 31/08/19 Суб 17:44:46 1464752648
Пыханы, вот у меня есть, например, доменный объект с кучей приватных свойств. Можно ли в конструктор передавать массив этих свойств или обязательно поимённо? Как принято делать в таких случаях?
Аноним 31/08/19 Суб 17:59:10 1464765649
>>1464724
так коряво выйдет. Планировал по очереди записать информацию в столбики. Сначала первый ,потом второй, потом третий.
Аноним 31/08/19 Суб 18:26:53 1464788650
image.png (11Кб, 444x119)
444x119
image.png (33Кб, 537x367)
537x367
image.png (47Кб, 307x469)
307x469
Ребята которые в laravel умеют, помогите пожалуйста. Что это за переменная такая - $query. Где и когда она создается? В методе с использованием scope? А если имя метода без scope - переменная $query задана не будет? Разобрался, что она состоит из информации о sql запросе, где поле from задается по принципу "модель где определена переменная -> таблица этой модели в бд".

Наверное очень плохо обьяснил, да и вопрос нубский. Первый раз в такой тупик зашел.
Аноним 31/08/19 Суб 20:42:05 1464876651
>>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)
Аноним 31/08/19 Суб 21:45:28 1464893652
>>1464788
> это за переменная такая - $query.
Вангую, что строка запроса, которую билдер собирает.
Аноним 31/08/19 Суб 23:57:21 1464940653
Что значит "знать" фреймворк. Знать ведь можно на разных уровнях. Нужно от и до все выучить, будто я сам его написал?
Аноним 01/09/19 Вск 02:13:03 1464970654
>>1464788
Scope в ларавел это "магический" метод, подозреваю что работает как-то через __call() и scope{MethodName}, который ты можешь чейнить с кверибилдером. Например ты ищешь только публичные посты, вместо того чтобы делать Post::where('public', true)->get(), ты можешь сделать scopePublic(), НО для удобства вызывается этот скоуп просто как Post::public(). Переменная $query это и есть объект текущего билдера, к которому ты вызываешь этот скоуп. Сам билдер возвращается тыщей разных методов, with, where и т.п. У меня всегда были проблемы со слогом.
Аноним 01/09/19 Вск 03:00:38 1464980655
>>1464970
Все более-менее понял. Спасибо за ответ!
Аноним 01/09/19 Вск 08:38:45 1465001656
Анончики, какие плагины для sublime посоветуете поставить?
Аноним 01/09/19 Вск 12:04:21 1465069657
15409879986510.png (185Кб, 576x1024)
576x1024
Ура! Работает!

$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>";
};
Аноним 01/09/19 Вск 21:44:31 1465439658
>>1464940
То и значит, "знать фреймворк на уровне джуниора/миддла/сеньора".
Вообще, как правило, ожидается знание архитектуры, набора компонентов, используемых паттернов и наличие практических навыков работы с ними для решения хотя бы повседневных задач.
Аноним 02/09/19 Пнд 00:27:28 1465498659
>>1465439
https://badcode.ru/chto-nuzhno-znat-laravel-junior-proghrammistu/

Это нормальные требования для того же джуниора? Я просто недавно начал учить, то что в статье той написано кажется довольно простыми вещами.
Что аноны могут по поводу видео-курсов по 20+ часов сказать? То же создание блога с ларакаста, сайт обьявлений Елисеева. Может быть смотрел кто полностью?
Аноним 02/09/19 Пнд 05:06:48 1465532660
Аноним 02/09/19 Пнд 07:40:31 1465547661
YotsugiOnonoki.png (1429Кб, 1920x1080)
1920x1080
>>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" или забыл указать переменную что используешь
Аноним 02/09/19 Пнд 08:38:10 1465577662
Аноним 02/09/19 Пнд 12:40:09 1465663663
>>1465498
> Это нормальные требования для того же джуниора?
Всё зависит от конкретной компании. Не существует эталона требований для джуниора, какие-то компании нанимают совсем никаких студентов, другие ожидают от джуна опыт в несколько лет коммерческой разработки.
Лучше выбрать 2-3 компании, куда хотел бы попасть, посмотреть на их требования + нагуглить сотрудников этих компаний и выспросить с них ожидания от джунов. Тут не стоит стесняться, то, что ты так проактивно подходишь к трудоустройству - будет скорее дополнительным плюсом, потому что любая адекватная компания понимает, что первый условный год джун работает в лучшем случае в 0, потому что учится - и только потом начинает приносить в прибыль. Значит, если чувак сначала выяснил требования, потом потратил месяц на самообучение, потом пришёл на собеседования - значит, он ответственный и целеустремлённый и не сольётся через 6 месяцев, не оправдав вложений в его обучение.

> https://badcode.ru/chto-nuzhno-znat-laravel-junior-proghrammistu/
На мой вкус, данный список выглядит неплохо, лучше, чем 90% дерьмовых советов из интернетов.
Аноним 02/09/19 Пнд 13:48:59 1465695664
>>1465663
>и не сольётся через 6 месяцев, не оправдав вложений в его обучение
По этому и спрашивал, что не хочется быть совсем уж "грузом", и не вылететь даже если меня возьмут. Но с другой стороны слишком долго сидеть без работы тоже не вариант.
Большое спасибо за ответ
Аноним 02/09/19 Пнд 15:56:06 1465794665
Есть приложение, оно состоит из "главного" класса 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.
В этом варианте я минусов не вижу, но хз, насколько это адекватно с точки зрения ООП. Я, по сути, создаю собственную глобальную область видимости с блекджеком и шлюхами.

Короче, максимально сокращая вопрос: что делать, если у меня есть какой-то объект, который должен быть доступен из нескольких классов?
Аноним 02/09/19 Пнд 18:50:47 1465943666
>>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 они не нужны, обнови свои знания.

Аноним 02/09/19 Пнд 19:57:35 1465964667
>>1465943

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

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

Насколько я понял (а понял я, конечно же, не так много, нужно еще пару раз перечитать), Сатана, в статье идёт речь о том самом, спасибо. На счёт ссылок - действительно, сейчас проверил и они правда не нужны. Но если говорить о сути вопроса, то мой первый вариант с кучей методов типа setLogger оказался ближе всего к истине? Довольно внезапно, конечно.
Аноним 02/09/19 Пнд 21:56:08 1466025668
ОП, глянь задачу про абитуриентов, пожалуйста.
Гитхаб github.com/deadj/student-list/
Хостинг http://f914421i.beget.tech
Аноним 02/09/19 Пнд 23:52:13 1466082669
pizdoliz.png (258Кб, 625x679)
625x679
Пыхоблядки, как же вы пропустили такую тему?

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

https://2019.phpce.eu/en/ (см. там ссылки на твиты)
https://wptavern.com/php-central-europe-conference-canceled-due-to-lack-of-speaker-diversity

В твиттере им напихали хуёв в панаму - поляки, русские, украинцы, в основном, но не только.

А я вот думаю, что это такой тонкий наброс и реклама пыхи.
Типа "php - технология белых людей".

твит не мой
Аноним 03/09/19 Втр 00:40:14 1466106670
>>1466082

Иди в любой другой тред ныть про притеснение белых мужчин, плиз.
Аноним 03/09/19 Втр 00:50:06 1466107671
>>1466106
Не могли бы вы пояснить свою мысль, уважаемый(-ая)?
Аноним 03/09/19 Втр 01:28:30 1466118672
>>1465964
>Но если говорить о сути вопроса, то мой первый вариант с кучей методов типа setLogger оказался ближе всего к истине?

нет ты просто плохо понимаешь что такое DI контейнер, перечитай ещё раз.

мимо другой анон
Аноним 03/09/19 Втр 01:51:04 1466125673
>>1465794
DI - это хорошо, конечно, но нужен контейнер.
У тебя он есть? Если да - читай документацию к нему.

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

Напрмер, на джаве в клиентском коде будет:
Logger log = Logger.getLogger(name);
log.fine("OLOLO");

log - это экземпляр класса Logger.
getLogger() - это статический метод класса Logger. Он доступен везде. И он возвращает сконфигурированный логгер (не создаёт он уже создан ранее).

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

Т.е., по сути, мы имеем статическую "глобальную" переменную внутри класса. Она не глобальная, естественно. Она - в пространстве имён "Logger". Но, может быть доступна везде.
Ещё это можно назвать модулем.
Т.е., в джаве класс - это 2 в 1 - и модуль и класс.

В пыхе так можно? Если да - так и делай.
Аноним 03/09/19 Втр 01:57:10 1466131674
>>1466125
Бля, я таки дал себе труд прочитать, что ты там (>>1465794) написал.
Вообще непонятно, в чём у тебя проблема, если честно.
Про статические методы ты знаешь (но классы называешь по-блядски).
Сделай внутри лог-менеджера несколько логгеров, выбирай по именам, пиши в разные файлы.
А лучше - не изобретай велосипед, а загугли php logging library.

Аноним 03/09/19 Втр 04:18:44 1466149675
>>1466125

Контейнер не обязателен. Мы можем руками передать логгер при создании объектов:

$logger = new Logger;
$c1 = new Class1($logger);
...

Контейнер просто позволяет это упростить и автоматизировать, но можно и без него.

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

В уроке про DI это все упоминается, и описаны недостатки статических методов.


Аноним 03/09/19 Втр 08:16:39 1466166676
>>1466118
Иван Величко @Ostrovski
dllweb: DI - это на самом деле очень просто. Берете и явно (ключевое слово именно явно) передаете зависимости в код, который их требует. Через параметры функции/метода или через конструктор. А DIC - это о том, как этот процесс автоматизировать/универсализировать на уровне сервисов веб-приложения. Т.е. у вас есть куча сервисов, каждый явно определяет, от каких других сервисов он зависит (через параметры конструктора). А DIC умеет создавать экземпляры сервисов, скармливая им экземпляры тех сервисов, от которых они зависят.

Сурс: https://toster.ru/q/195091#comment_662753

Разве это не довольно близко к тому, что сказал я?
Аноним 03/09/19 Втр 08:20:14 1466167677
>>1466166
Ну, то есть, я понимаю, что мой вариант (еще и с ссылками) относительно адекватной реализации = это каменный топор относительно танка, но сама философия и там и там заключается в том, что мы в каждый объект явно передаём его зависимости. DIC просто сокращает/автоматизирует этот процесс.

Нет?
Аноним 03/09/19 Втр 08:57:09 1466182678
>>1466149
>как передать 2 разных логгера в разные классы?
Как два пальца обоссать. Хоть 22.
Там же написано: Logger.getLogger(name);

Но, у вас тут, похоже, своя атмосфера, лол.
Пыха открывает для себя ООП, DI и прочие взрослые игрушки.
Аноним 03/09/19 Втр 09:17:23 1466192679
>>1466149
Добавлю ещё, что когда ты сам, руками передаёшь зависимости как параметры в конструктор - это не DI. DI - это когда это делает контейнер за тебя, а ты просто пишешь аннотации.

И логгер - это не зависимость, в обычном понимании.
Передавать логгер в конструктор - это ебанизм.
Хотя, возможно, в пыхе это норма.
Аноним 03/09/19 Втр 10:30:54 1466223680
>>1466192
> передаёшь зависимости как параметры в конструктор - это не DI. DI - это когда это делает контейнер за тебя

вопрос без подъеба ты явист?
Аноним 03/09/19 Втр 10:50:03 1466229681
>>1466223
Разумеется, я выше это написал.
Чувак, I = Injection.
В данном случае можно перевести как внедрение, хотя, оттенок немного не тот. Т.е. что-то внедряет в твой код зависимость извне, понимаешь?

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

>явист
Ява - это остров такой.
И мотоцикл такой ещё был, охуенный.
А язык называется "джава".
Аноним 03/09/19 Втр 11:29:18 1466237682
11.png (1336Кб, 1200x686)
1200x686
>>1466082
>Организаторы отменили европейскую конференцию по php, потому, что туда записались только белые мужчины.
Черные айтишники тоже могли бы записаться, но они все еще сидят А ю гарет гайз? сидят ин джейл!
Аноним 03/09/19 Втр 11:46:22 1466244683
1.jpg (42Кб, 600x450)
600x450
>>1466182
>Пыха открывает для себя ООП, DI и прочие взрослые игрушки.
Ненавижу ждава пидарастов за то, что у них переменные без $ объявляются. Тупо рандомное слово без идентификации. Мрази. Насколько надо быть дурными, что даже до значка не додуматься? А потом заходит такой ополоум в благородный тред и поучать начинает.
Аноним 03/09/19 Втр 12:13:31 1466260684
Нужели им не хватает six figures в долларах для душевного спокойствия?
Аноним 03/09/19 Втр 12:22:26 1466263685
>>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", но к нему не предъявляется никаких требований и не сказано, что это должен быть "контейнер".



Аноним 03/09/19 Втр 12:30:08 1466271686
>>1466244

Значок $ скорее по историческим причинам, унаследован от Перла, а тем от программ-оболочек командной строки (shells). Тут есть как плюсы: его удобно подставлять в строку, так и минусы: надо писать на один символ больше.

Java унаследовала синтаксис от Си, где доллар не пишется.

Еще были языки, где суффикс или префикс переменной определял ее тип.

>>1466229

Если понимать дословно, то как раз все логично: мы "внедряем" зависимости в объект, передавая их при создании. Можно почитать статью Фаулера и поискать определение там: https://martinfowler.com/articles/injection.html

>>1466131

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

Это ты начинаешь изобретать костыли вместо DI. Исходный вопрос был не только про логгеры, а вообще про инъекцию зависимостей.

Аноним 03/09/19 Втр 13:23:11 1466294687
>>1466263
>В твоем подходе в классе просто жестко прописано получение логгера (Logger.getLogger) и мы не можем снаружи выбрать, что в него передать. Мы не можем выбрать тип логгера при создании класса, так как там все захардкожено. Мы не можем создать 2 экземпляра класса с разными логгерами. Мы не можем в тестах передать другой тип логгера.

Всё это мы можем. Как обоссать два пальца.

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

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

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

Например, у меня логгеры сконфигурированы в конфиге DI контейнера, тем способом, которым он хочет. А получаю я их через Logger.getLogger(name) - тоже стандартным способом. Это две стороны одного целого.

В конфиге я могу писать if-else. И у меня всё это будет конфигурироваться по-разному, в зависимости от других условий. Само.
Более того, я могу даже сменить саму библиотеку логгинга (которая, собственно, пишет в файлы и т.п.), и у меня всё будет продолжать работать.

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

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

>Фаулер
Не перебарщивай с этим.
Суха теория, мой друг, а древо жизни вечно зеленеет, лол.

>>1466271
>изобретать костыли вместо DI
Это не "костыли". И не "вместо" DI. Это вообще про другое.
Аноним 03/09/19 Втр 16:20:08 1466398688
>>1466082
Ты опоздал на пару лет, вся та СЖВ хуерга заглохла ещё в 2017, и только сейчас до рашки доходят отголоски.
Если начать разбираться в теме - выяснится что ВНЕЗАПНО, никто не смотрел на имя или цвет кожи, а отбирались докладчики по докладу. Комиссия не знала имён, пола или расы. Так что выбрали 20 самых адекватов из 253 подавших заявки.
ВНЕЗАПНО, оказалось что все 253 были белыми.
252 из них - мужиками.
Какой-то дебич, вдруг решил что свалить на пару недель куда-нибудь на сказочноебали будет лучше, чем сидеть в европках с ботанами и нердами и не придумал ничего лучше чем сказать "Там одни белые и тёлок нет", его поддержал ещё один докладчик. Так как за пару недель до события новых двух найти не удалось, решили что надо расходиться.
Но Всякие нытики в интернетах и твитере конечно преподносят это как СЖВ и вот это вот всё.
Аноним 03/09/19 Втр 17:52:47 1466457689
Аноны, а что-нибудь известно про ОП? Или он личность покрытая мраком? А может ОП вообще ИИ?
Аноним 03/09/19 Втр 17:58:41 1466460690
>>1466457
он под 800 постов вроде появляется. Надо просто верить в него
#яверю #посмотриМоихСтудентов #устройНаРаботуЗаСтоМильеновВсек
Аноним 03/09/19 Втр 19:03:36 1466477691
>>1466460
Не, я не о том, когда он проверит. Мне интересно чем он занимается, работает
Аноним 03/09/19 Втр 20:20:56 1466520692
Господа шарящие, объясните глупому анону про Slim. С помощью slim я пишу роутер, а модели и контроллеры на голом php?
Аноним 03/09/19 Втр 20:28:47 1466525693
>>1466520
Тебе не всегда нужен весь фарш сразу и разом, некоторые предпочитают собирать проекты покомпонентно, выбирая каждый инструмент под задачу. Роутер от слима, базу от ларавела, валидатор от симфони и так далее.
Аноним 03/09/19 Втр 20:52:38 1466541694
>>1466525
А касательно задачи про файлообменник, что можешь посоветовать? Я хочу от слима взять только роутер, остальное на чистом. Или лучше углубиться в слим для обучения?
Аноним 03/09/19 Втр 22:27:47 1466573695
возможно платина, но сейчас изучаю js и он далек от языка богов, понимаю что знать его надо как можно лучше, но у меня понос и рвота, как глубоко надо изучать это говно? ну в смысле всякие мапы и сеты когда нибудь понадобятся пхп боярину?
Аноним 04/09/19 Срд 08:40:57 1466739696
>>1466541
Если я ничего не путаю, то в слиме нет ничего, кроме роутера и структуры, так что я бы взял его. Ну или lumen, если ты laravel не знаешь, так хоть познакомишься с частью компонентов.
Аноним 04/09/19 Срд 08:45:07 1466741697
>>1466573
Js очень прост, как язык, там нечего долго изучать. Главное, изучать ES6 и тому подобное, модули, экосистему. Сложнее изучать фреймворки, библиотеки и подходы. react/redux,angular,saga и т.п.
Советую напичать пару простеньких фронтенд приложений с бекендом на ноде, потратишь неделю, но будет очень полезно.
Плюс, отдельно можешь тайпскриптом заполировать, он намного приятнее и будет полезен в будущем, он часто используется. Можешь писать на нём и фронт, и бэк.
Аноним 04/09/19 Срд 09:48:47 1466762698
>>1466082
СЖВ-блядки лезут туда, куда их исторически не просили. Никто не мешает нигерам и феминисткам тоже записыватся, но они слишком тупые для этой сходочки белых парней.
Аноним 04/09/19 Срд 10:31:51 1466769699
>>1466741
Расскажешь. Может тебе просто, с высоты опыта и тп. но новичок охуеет от того сколькими разными способами делается одно и то же, совершенно законно. Ни разу не легкий и не простой.
Аноним 04/09/19 Срд 10:33:21 1466770700
>>1466741
спасибо, но жс не логичен, язык не поворачивается назвать его простым
Аноним 04/09/19 Срд 11:02:11 1466779701
>>1466769
В js'е нет кастомных типов (только примитивные), классов, указателей, многопоточностей. Сравнительно просто.
На начальный уровень знания самого языка нужно выучить только типы, операции, сравнительно маленькую стандартную библиотеку, концепцию event loop и промисов. Ну и про стандарты прочитать.
Аноним 04/09/19 Срд 11:04:24 1466781702
>>1466541
>Я хочу от слима взять только роутер, остальное на чистом
Аношка, я тоже делаю slim. Но я еще установил шаблонизатор твиг, про него в учебнике написано. Возьми еще и его в нагрузку, он простой, но авторитет в собственных глазах повышается. Еще можешь бутстрап юзать для верстки - считай ТРИ пакета используешь. У будущего работодателя соски встанут от такого резюме джуна
Аноним 04/09/19 Срд 11:22:09 1466785703
Аноны, помогите далбоебу.
Делаю сервис отчетов из бд.
Запросом из БД формирую отчет, пишу его в exel-файл и данный файл сохраняю в отдельной папочке.
Далее мне требуется этот файл отчета отдать клиенту, сделал ссылочку которая ведет на отдельный обработчик. Примерный код обработчика везде одинаков, у меня такой :

https://ideone.com/rB4236

Фигня в том что когда я сохраняю файл отчета на одном уровне с индексным файлом, то все отдается.
Но когда я размещаю файл в дочернем каталоге, то уже readfile не может найти файл. И ниче про это найти не могу.

Аноним 04/09/19 Срд 11:36:45 1466789704
>>1466779
>классов
Прототипы, которые ломают мозг сильнее всяких классов.
>кастомных типов
Если бы такая фича и была (хотя она и не нужна в ваниле, есть typescript), и ты ещё жив, сможешь и с этим разобраться.
>указателей
В хаскелле тоже нет, но это не делает его простым для освоения.
>многопоточностей
Хороший пойнт. Но можно ведь
>выучить только
Аноним 04/09/19 Срд 12:00:48 1466793705
>>1466789
Не понимаю, с чем ты споришь. В js'е, как языке, находится сравнительно мало фич. Кроме блядских прототипов и ряда исторически сложившихся нёх'ов там сильно нечего изучать, в языке.
Дальше нужно изучать экосистему и вот это уже пиздец, да.
Аноним 04/09/19 Срд 12:01:45 1466794706
>>1466781
Ни разу не видел, чтобы работодатели хотели слим. Лучше уж тогда брать ларавел или симфони.
Аноним 04/09/19 Срд 12:45:51 1466816707
>>1466785
я не очень умный, но может там в переменной path перед конечной папкой добавить глобальную переменную с серверным путем типа _DIR_
Аноним 04/09/19 Срд 13:15:37 1466831708
>>1466785
>отдельный обработчик
Но нахуя?
У тебя веб-сервер не может нормально отдать excel-файл? Добавь ему mime-тип в конфиг, если так.
Или тебе нужны ограничения по безопасности, чтобы кто-то не мог брать чужие файлы и т.п.? Или с именами что-то мутить?

Проверь, что на самом деле является текущим каталогом у тебя - выведи в лог полый путь к "."
Дело в этом, скорее всего. А в readfile() может быть какая-то магия, и ты думаешь, что каталог скрипта у тебя текущий.
Аноним 04/09/19 Срд 21:28:51 1467368709
>>1466831
Где то как ты сказал и получилось - я с php.net скопировал пример, под себя перекопал - все заработало. У меня видимо некие траблы с относительными и абсолютными путями и всей этой залупой со слешами и корнями приложения.

Аноним 05/09/19 Чтв 03:54:27 1467552710
>>1466781
Ты slim только для роутера используешь?
Аноним 05/09/19 Чтв 09:55:20 1467646711
>>1467552
Так там только роутинг и зависимости с логгером. Что ещё?
Аноним 05/09/19 Чтв 19:03:06 1467919712
скрин.PNG (72Кб, 843x921)
843x921
>>1446969 (OP)
Как запустить приложение из примера: https://github.com/nesk/puphpeteer/

Пытаюсь запустить через xammp. В папку htdocs поместил test.php, обращаюсь через localhost/test.php, но сервак не видит либы установленные через composer.

Попробовал прописать их вречную через include, но на 20-й либе заебался?

Что я делаю не так? (на скрине нерабочий скрипт, не находит
очередной класс)
Аноним 05/09/19 Чтв 19:53:37 1467960713
Насколько кровав PHP/Symfony/Doctrine по сравнению с Java/Spring/Hibernate?
Аноним 05/09/19 Чтв 20:45:18 1467987714
>>1467960

Ничего кровавого в пыхе нет.
Аноним 05/09/19 Чтв 21:56:14 1468052715
>>1467987
А как же заказчики?
Аноним 05/09/19 Чтв 22:02:36 1468059716
>>1467919
>PuPHPeteer
Это вроде как эмулятор браузер для загруженной странички?
Лихо закрутили.
Аноним 05/09/19 Чтв 22:47:22 1468092717
>>1467919
Контекст не особо читал, но после того как ты делаешь composer install он генерирует все подключения и тебе надо будет за иклудить только один файлик auto..чета там вроде load.php
Аноним 06/09/19 Птн 14:53:55 1468528718
Аноны, я немного заблудился в путях, относительных и абсолютных.

Вот у меня такая структура сайта -> в корне (он определяется $_SERVER['DOCUMENT_ROOT']) только файл .htassecc, который переадресует все запросы на дочерний каталог public, в котором находится уже index.php.

корень
.htaccess
----- папка public - тут каталоги картинок, стилей и тому подобное
----------index.php
----- папка App - в ней вся логика приложения, контроллеры, модели и представления

Я не очень понимаю что есть корень сайта для браузера в моем случае? Корень для браузера это $_SERVER['DOCUMENT_ROOT']- корень приложения, или для браузера корень - это то что находится в папке public, т.е. для браузера корневой каталог это каталог в котором выполняется index.php? И ниже него нельзя уже обратиться?

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

Аноним 06/09/19 Птн 15:07:38 1468539719
>>1468528
>для браузера корневой каталог это каталог в котором выполняется index.php
да

даже если попробовать ../folder/1.jpg тоже не отображается ?

обычно vhost настраивается сразу на папку public что бы не было плясок с .htaccess
Аноним 06/09/19 Птн 15:50:15 1468575720
>>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" не обрабатывается?




Аноним 06/09/19 Птн 15:52:49 1468579721
>>1468575
>В таком же случае запрос "../img/img.jpg" не обрабатывается?
Почему же таком же случае запрос "../img/img.jpg" не обрабатывается?

самофикс
06/09/19 Птн 22:43:53 1469095722
>>1446969 (OP)
Хочу сказать спасибо ОПу за существование этих тредов. Благодаря ему "вошёл в АйТи". Прошел его гайд, сделал студентов, файловый хостинг (правда здесь не показывал, ибо было стыдно, да и слишком хикка был ). Попытался устроиться на галеру в другой город (100к променял на 500к (было сложно, очень)). С первого же раза прошел собес (спасибо за упор на ООП и современные технологии, большинство вопросов были по ООП (собес был удаленно, вначале тряслись руки и было очень страшно)). Видимо им понравился файловый хостинг и мой проект на Node.JS. Предложили зп выше той, что я просил, готовы были взять хоть сейчас.

Четвертый месяц как сижу на галере. За это время успел съездить в командировку в UK (после годов хиккования - это было потрясающе (совершенно другой мир)). Узнал что такое Agile и Scrum.
Научился работать в команде. Стал гораздо более общителен, стал менее бояться окружающего мира. И много-много всего остального.

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

Написано в пьяном желании выразить благодарность.
Аноним 06/09/19 Птн 23:04:28 1469111723
>>1469095
Двачую. ОП, ты очень крутой чел (а может и барышня, кто знает)
Аноним 07/09/19 Суб 08:50:17 1469232724
>>1469095
Какой ценник в итоге получился?
Аноним 07/09/19 Суб 10:47:35 1469284725
Допустим, у нас есть метод, который принимает аргумент, который может иметь одно из следующих значений: "eot", "eroha".

Как это правильно реализовать? Чтобы в функцию нельзя было просто так передать значение "omega" без последствий.

Очевидный вариант: if ($arg !== "eot" || $arg !== "eroha") { ... }, но интуитивно кажется, что должен существовать какой-то более стройный способ.

Про enum я знаю, но стоит ли под каждый метод, который принимает одно из значений заводить enum? Это сделает код не слишком громоздким?
Аноним 07/09/19 Суб 10:48:04 1469285726
Аноним 07/09/19 Суб 12:44:52 1469325727
>>1469284
>Очевидный вариант: if ($arg !== "eot" || $arg !== "eroha") { ... }, но интуитивно кажется, что должен существовать какой-то более стройный способ.
Можно так:
if (in_array($arg, ['eot', 'eroha'], true)) {}

Или вынести массив в отдельную переменную/поле_класса/константу:
$dvachers = [
'eot',
'eroha',
];
Аноним 07/09/19 Суб 13:37:04 1469343728
Знает кто как можно запустить анонимную функцию в контексте некоторого объекта? Пилю менеджер событий и запоролся на передаче зависимостей и параметров в обработчик события.

Пробовал через bindTo() но чёта ругается на ссылку $this в функции.

Не хочется городить глобальный контейнер для передачи в обработчики.
Аноним 07/09/19 Суб 14:53:54 1469410729
>>1469343
Это как раз нормально и правильно, создавай класс либо интерфейс Context и прокидывай его.
Аноним 07/09/19 Суб 17:22:55 1469486730
Я дико извиняюсь за тупой вопрос, но правильно ли я понимаю что в скелете slim MVC паттерн нужно самому прописать? Я совсем не против, но мало ли он там уже осуществлен, а я просто найти его не могу
Аноним 07/09/19 Суб 17:50:56 1469492731
>>1469486
Ты же просто в рутах указываешь обработчик, это или анонимная функция или путь к методу. Вот тебе и весь мвс
Аноним 07/09/19 Суб 18:27:26 1469515732
huita1.jpg (91Кб, 685x761)
685x761
huitaOutput1.jpg (50Кб, 474x307)
474x307
>>1469410
Сделал передачу $this в обработчик. В этом $this сделал публичные поля, где надо. Вроде цивильно выглядит.
Так пойдёт?
Аноним 07/09/19 Суб 19:00:52 1469534733
>>1469486
слим это контейнер с роутингом. Всю логику ты пишешь сам, по необходимости можно вьюхи подключить или отдавать по апи
Аноним 07/09/19 Суб 20:31:58 1469565734
>>1469492
Так суть задания то в закреплении ооп и mvc

>>1469534
Меня просто смутило что у меня сразу после установки 16 тестов c
class User implements JsonSerializable
Аноним 07/09/19 Суб 22:13:40 1469623735
>>1469565
Какое то говно. Два часа не могу контроллер к роуту привязать. Все мини-фреймворки такие душные?
Аноним 07/09/19 Суб 23:11:15 1469634736
>>1469623
Какая версия Слима? Возможно, что ты четвёртую скачал, а делаешь по докам на 3.
07/09/19 Суб 23:51:59 1469647737
>>1469232
700. Для джуна без опыта - очень много. Сейчас понимаю, что очень повезло.
Аноним 08/09/19 Вск 13:40:50 1469875738
image.png (353Кб, 1440x900)
1440x900
Может кто-нибудь посоветовать, как быстрее всего вкатиться в безопасность? Где самые годные уроки/гайды?

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

Сразу сорри за много букв. Немного конкретнее опишу свою проблему.

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



Аноним 08/09/19 Вск 13:48:50 1469880739
>>1460202
Ты имеешь в виду, что лучше писать 127.0.0.1 вместо localhost?

Сорри за некропостинг.
Аноним 08/09/19 Вск 16:29:56 1469959740
.
Аноним 08/09/19 Вск 18:16:43 1470004741
>>1469875
Ты пойми сразу что никто ничего не пишет с нуля.
А готовые решения уже содержат средства для валидации данных и защиты инъекций.
А дальше два подхода
если ты хочешь что то делать то ты изучаешь как правильно использовать продукт;
если ты хочешь понимать как проходят атаки гуглишь атаки конкретно для этого продукта и разбираешь их на сырцах
Аноним 08/09/19 Вск 18:25:15 1470011742
>>1469095
сколько лет? сколько прошло между началом обучения и первым оффером? бочку делаешь?
Аноним 08/09/19 Вск 18:29:03 1470014743
>>1470011
Не ведись глупенький
Аноним 09/09/19 Пнд 00:38:11 1470166744
>>1469634
Этот прав. Бери лучше третий слим, там доки лучше и инфы больше.
Аноним 09/09/19 Пнд 01:04:24 1470171745
А какие плюсы у слим 4 ?
Аноним 09/09/19 Пнд 01:05:02 1470172746
Аноним 09/09/19 Пнд 04:35:16 1470198747
Оцените мои шансы попасть на работу, нет опыта работы, нет диплома, есть cайт магаза на голом пхп и еще один статический сайт, у меня вообще паническая атака, кажется что с этой хуйней даже бесплатно никто меня не возьмет работать. Скажите может что сделать еще, на работу надо обязательно через месяц.
Аноним 09/09/19 Пнд 09:29:41 1470233748
>>1470198
Я проигрываю с местных кастратов, лол.
>>у меня вообще паническая атака
Чтож вы такие немощные то?

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



Аноним 09/09/19 Пнд 09:36:58 1470237749
>>1470233
П.С.
Я не к тому что бы постебаться.
Я к тому, что любые знания можно продать, а ты >>1470198
уже что то умеешь. Но как конченый овощ скулишь
>>Оцените мои шансы попасть на работу
позорище.

Напрягись сам и ищи то что тебе по уровню. Если упорно искать - найдешь обязательно. И прокачаешь решительность, упорство, смелость, умение брать ответственность.
А не стерильное " возьмите меня на работу, я кастрат".
Не будь тряпкой, и верь в себя.
Аноним 09/09/19 Пнд 10:21:45 1470255750
>>1470233
да кстати лол, у меня одноклассник так "работал", но ему лет 15 было лол. К 19 уже жоповозку купил учась в колледже.
Аноним 09/09/19 Пнд 10:22:12 1470256751
>>1470255
но он работал на себя, а не на дядю)
Аноним 09/09/19 Пнд 11:08:42 1470279752
Поясните по композеру, анонисы. Я первым делом устанавливаю композер. Потом, если я хочу в голом проекте использовать какой-то пакет, я иду в консоль и пишу composer requre пакет/пакет. А что мне делать если у меня уже есть composer.json? Как мне сказать: компосер, выполняй вон тот файл? Просто composer uodate? А зачем тогда composer install?
Аноним 09/09/19 Пнд 11:53:09 1470297753
>А что мне делать если у меня уже есть composer.json?
composer install
>Просто composer uodate?
Не делай composer update. Забудь про существование этой команды (пока, по крайней мере).
Аноним 09/09/19 Пнд 12:37:27 1470308754
>>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 - и он выкачивает тебе нужные пакеты нужных версий. Всё, проект можно запускать.
Аноним 09/09/19 Пнд 12:54:55 1470312755
Аноним 09/09/19 Пнд 14:40:37 1470373756
>>1469880
Да, по крайней мере у нас с товарищем было так. Наверное localhost виндой как-то по-другому интерпретируется, нежели просто ip циферками. Да чё, щас проверю ещё раз. / Да, все ещё есть задержка секунда- полторы. Интересно бы узнать как там, в глубине, это работает.
Аноним 09/09/19 Пнд 15:27:17 1470403757
>>1470373
Скорее всего, если ты указываешь адрес напрямую, то твой компьютер обращается по нему безо всяких промежуточных этапов.
А localhost требует вызова службы dns, которая пытается зарезолвить слово "localhost" в какой-то айпишник, обращается к кэшам, ещё куда-то, потом в hosts-файлик и в итоге возвращает 127.0.0.1, куда твой компьютер уже отправляет запрос так же, как и в варианте 1.
(собственно, слово localhost - это вообще нифига не стандарт, просто он прописан в локальном конфиге dns большинства ОСей, как 127.0.0.1)

Скорее всего, у тебя в винде какие-то проблемы с локальной службой dns. Или с ней же, но внутри докера, если ты его используешь. Где-то там в-общем, далее надо смотреть, что именно ты используешь и дебажить.
На всякий случае можешь сбросить локальный кэш dns.
Аноним 09/09/19 Пнд 18:15:56 1470514758
>>1470403
На ноде у меня нет такой проблемы, оба варианта работают быстро.
Аноним 09/09/19 Пнд 19:28:41 1470572759
>>1470308
>>1470279
Хорошо, годно расписал.

Composer update обновит тебе все библиотеки до свежих версий и в большинстве случаев добавит тебе жопного веселья с пачкой новых багов. Обновлять библиотеки стоит по одной и только когда ты уверен, что оно тебе надо.
Аноним 09/09/19 Пнд 21:54:45 1470683760
>>1470373
Ок, спасибо, буду так делать на всякий случай.
Аноним 09/09/19 Пнд 22:01:54 1470690761
>>1470004
>ты пойми
Ничего не понял из твоего поста. Для меня это просто каша из непонятных слов, т.к. я совсем новичок в программировании.
>готовые решения
>валидация данных
>продукт
>на сырцах
Мне бы понять, в какую сторону вообще двигаться. Есть ли какой-то гайд или книга годная на эту тему?
Аноним 10/09/19 Втр 07:20:05 1470854762
>>1470690
Приходит тебе заказ сделать сайт для компании, ты берешь например битрикс для реализации, потому как нет смысла для типичного проекта писать все руками с нуля.
Ты изучаешь как правильно им пользоваться. Например рядовое место для инъекций это формы (для отзывов, для записи на что либо). Соответственно ты смотришь примеры как это правильно сделать в битриксе. И если ты сделаешь по гайдам с офсайта то у тебя и не возникнет проблем.
Аноним 10/09/19 Втр 08:41:23 1470869763
>>1470854
Чуваки, что угодно, только не битрикс. Действительно, что угодно, хоть yii, хоть древний, как говно мамонта, codeigniter, хоть wordpress (хотя тоже то ещё говно).
Но только не битрикс. Не заботитесь о себе - позаботьтесь о тех, кому после вас это поддерживать.
А новичку его вообще предлагать нельзя. Хороших паттернов он не выучит, навыки архитектуры не прокачает, на зарубежных клиентов работать не сможет. Эдакая западня.
Аноним 10/09/19 Втр 10:59:52 1470925764
Screenshot25.png (9Кб, 811x109)
811x109
Пиздец, ну и говноедство.
И это убожество называется Laravel.

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

В который раз убеждаюсь, что все эти ORM годятся исключительно для васянских манясайтов с нагрузкой не больше 5 одновременных запросов.
Аноним 10/09/19 Втр 11:30:15 1470942765
Аноним 10/09/19 Втр 12:05:18 1470953766
>>1470925
А что ты еще ожидал от пыхарей?
Аноним 10/09/19 Втр 12:06:43 1470955767
>>1470869
>на зарубежных клиентов работать не сможет
Он их и так найти не сможет (нормальных, по крайней мере), если продолжит писать на php.
Аноним 10/09/19 Втр 12:27:46 1470963768
>>1470955
О, вот и хейтеры подъехали.

Мимо-пыхарь-работает-удалённо-на-нидерланды-за-3-килобакса.
Аноним 10/09/19 Втр 13:21:12 1470993769
>>1470963
>Мимо-пыхарь-работает-удалённо-на-нидерланды-за-3-килобакса.
Какие же пыхари дегенераты, простигосподи.

мимо-жавист-котлинист-работает-в-комфортном-офисе-за-300-килорублей
Аноним 10/09/19 Втр 13:26:35 1470999770
Аноним 10/09/19 Втр 14:48:10 1471043771
>>1470925
>Действительно, почему бы при сраном удалении нескольких записей не создать инстанс объекта для каждой из них?
Это ты про уровень домена? Именно, что без архитектуры будет у тебя сплошное васянство и говнокод.

Так-то тебе никто не мешает взять вордпресс и не ебать умным людям мозги.
Аноним 10/09/19 Втр 15:37:37 1471069772

ох как на понахватаются по верхам , а потом вот с такими и работать
>>1471043
Аноним 10/09/19 Втр 15:40:36 1471070773
>>1470993
мимо-жавист-котлинист-анонист-гребёт -в кандалах-на-галере-с-корпо -булшитом-за-300-килорублей

Аноним 10/09/19 Втр 16:25:52 1471103774
>>1470854
Теперь немного понял. С нуля - т.е. на чистом пхп без всяких CMS, фреймворков и т.д., да? Т.е. нет особого смысла вкатываться в безопасность, пока не начну работать с фреймворками?
Аноним 10/09/19 Втр 17:18:11 1471148775
>>1471069
Ты хр у нас не пройдёшь с такими тупыми вопросами. Рано тебе ещё работать.
Аноним 10/09/19 Втр 17:24:02 1471153776
>>1471148
нахуя мне хрюндель и твоя помойка галера если я на себя работаю уже как с 10 лет

мимо вопрос не мой , другой анон
Аноним 10/09/19 Втр 17:27:51 1471156777
>>1470925
а что ты ожидал от Eloquent и ОRM в целом ? сделано тупым говном для тупого говна как и сама Лара для написания чего-то на коленки за минимум секунд, алсо особые дауны пытаются пародировать dao и приминают подходы от туда.
Аноним 10/09/19 Втр 21:49:39 1471418778
>>1471103
Да, да
Лучшее обучение разбирать чужой хороший код и делать так же
Аноним 11/09/19 Срд 00:58:13 1471516779
Подскажите пожалуйста на счет базы данных для файлообменника. Мне нужна 1 таблица, в которой будет храниться id,file_path, file_name, file_size, file_extension, created_at ? Или имя, разрешение, размер - лишняя информация, которую можно обрабатывать при необходимости каждый раз? Или этой информации вообще мало, и нужно добавить что то еще? И ведь правильно, что выходит только 1 модель и контролер? На первый взгляд задача кажется легкой, или ее смысл научить работать с файлами?
Аноним 11/09/19 Срд 11:25:16 1471677780
Господа, ответственно заявляю что я ленивая пидораха. Это самое хуевоe.
Уже месяцев 5 барахтаюсь на одном и том же уровне. Чето типа блога с ноля способен написать. И завис.
Есть работка, платят не среднюю по РФ, на работке есть паралельная задача написать определенный сервис, я его общую логику написал. Но я пишу его еле еле, кое как по три строки в день.
Если бы взялся уверенно - давно бы уже сделал, и мне бы ЗП подняли. Но я как дерьмо в проруби.
Пиздец мне это надоело.
Аноним 11/09/19 Срд 11:26:03 1471678781
>>1471677
Как взять себя в руки, и перестать быть хуепутолом? :(
Слабак я.

это риторический вопрос
Аноним 11/09/19 Срд 11:40:13 1471704782
>>1471677
Аношка, я уверен, если тебя прижмет, ты быстро и качественно выполнишь любую работу, так что не напрягайся зря. Выдели в день по десять минут на самосовершенствование - для начала. Просто каждый день эти 10 минут трать и постепенно увеличивай. И само пойдет - привычка сильная сила
Аноним 11/09/19 Срд 11:43:07 1471707783
>>1471704
Я если честно себя уважать уже перестал, ну что это за дела?
Деньги пусть обычные платят, мозг не ебут, чему то я по итогу научился, задача есть. Время есть.
Мне блядь просто стыдно.
Аноним 11/09/19 Срд 11:50:33 1471712784
>>1471707
Это обычная реакция умного человека - не напрягаться без нужды. Выдели 10 минут в день для начала и все
Аноним 11/09/19 Срд 16:39:59 1471850785
image.png (2130Кб, 1280x960)
1280x960
Предлагаю Славика в шапку следующего треда. Способный малый оказывается.
Аноним 11/09/19 Срд 16:41:17 1471852786
>>1471850
Зачем он девочке на ногу наступил?
Аноним 11/09/19 Срд 17:14:56 1471867787
>>1471852
Солидный человек. Может себе позволить.
Аноним 11/09/19 Срд 19:09:36 1471920788
Уважаемые, а может кто подскажет, что именно делает директива pcre.jit = 0 в php.ini?
А то вот опытным путём обнаружил, что в тестировании конфигурации битрикса она убирает предупреждение про размер стека, но возникают подозрения, что этим я какой-то функционал отключаю.
Аноним 11/09/19 Срд 20:07:00 1471969789
>>1471516
Собственно вопрос в том, что выгодней. Хранить такие данные или вычислять их при необходимости каждый раз?
Аноним 11/09/19 Срд 21:29:05 1472006790
image.png (56Кб, 739x457)
739x457
Как мне найти эти методы? Пишут что смотреть остальные методы тут: https://github.com/symfony/symfony/blob/3.0/src/Symfony/Component/HttpFoundation/File/UploadedFile.php но там нет тех, что на скрине. Все классы родителей перерыл. Знаю что можно использовать стандартные функции для работы с файлами, но у меня с головы не выходит мысль что я не смог найти то, что мне нужно.
Аноним 11/09/19 Срд 22:00:43 1472030791
>>1472006
Нашел. Когда искал пропустил trait FileHelpers
Аноним 11/09/19 Срд 22:28:02 1472046792
Аноним 11/09/19 Срд 23:28:40 1472072793
1.png (83Кб, 1185x607)
1185x607
2.png (8Кб, 454x191)
454x191
Ребят, уже часа 2 не могу разобраться с этим, не понимаю почему приходит только часть массива. Мне нужно загрузить файл через курл, но приходит как раз всё кроме файла. Контент тайп = мультипарт/форм-дата ставил.
Аноним 12/09/19 Чтв 03:32:50 1472103794
Аноны, а это нормально забить гитхаб сайтами, которые я по урокам на ютубе делаю? Тип на работе не пробьют этот сайт и не чекнут что он спизжен?
Аноним 12/09/19 Чтв 06:47:52 1472121795
Аноним 12/09/19 Чтв 07:21:55 1472125796
>>1472121
thx, для довнс вроде меня тяжело даётся
но нравится
Аноним 12/09/19 Чтв 11:43:12 1472198797
>>1471103
>Т.е. нет особого смысла вкатываться в безопасность, пока не начну работать с фреймворками?
Очень спорное утверждение, аношка. За ним может скрываться чистая лень типа "я щас на голом php не буду делать проверку на инъекцию и эддслеши, зачем, ведь во фреймворках все есть". Но чисто для саморазвития, чего и хочет добиться оп, это плохо, потому что ты упускаешь кучу нюансов и можешь просто не понять как работает функция "безопасности" во фреймворке
Аноним 12/09/19 Чтв 11:46:08 1472199798
>>1471969
>>1471516
Вроде как оп советует вычислить их один раз с помощью сторонней библиотеки/средствами скрипта и хранить в базе в виде jcon объекта. То-есть, как я понимаю, будет одно лишнее поле с текстом объекта. Кроме того, оп еще пишет делать комментарии к скачиваемым файлам, то-есть это еще одна таблица, у которой будет текст камента, айди камента, потом парент айди - для двевовидных каментов, и айди-файла - чтобы знать кому этот камент принадлежит. Хотя это может быть факультативным заданием со звездочкой
Аноним 12/09/19 Чтв 12:33:11 1472217799
ОП и Компания, помогите додумать задачу "Алфавит по кругу". Вроде все правильно, но то как выглядит код меня не устраивает, ибо заготовка ОПа с $fromAngle = -80, $toAngle = 260; явно должна была использоваться как то по другому. И какого черта у меня ноль градусов находится в районе 6 часов, а не как у ОПа в районе 3 часов, отсюда и проблема с $fromAngle = -80; $toAngle = 260; да и сам алфавит у меня верх ногами получился, пришлось реверс делать. Если есть возможность - сделайте правку в самом коде. Заранее спасибо!
https://3v4l.org/BEGtc
[Ссылка]
BEGtc
https://3v4l.org/BEGtc
Аноним 12/09/19 Чтв 16:10:27 1472344800
51.PNG (20Кб, 687x452)
687x452
Возможно это реализовать на yii2 ? Если да, то как ?
Помогите тупому
Аноним 12/09/19 Чтв 19:51:13 1472420801
Аноним 12/09/19 Чтв 19:59:48 1472424802
61.PNG (5Кб, 619x75)
619x75
>>1472420
>но зачем ?
Дали такое задание.
Аноним 12/09/19 Чтв 21:05:10 1472468803
Аноним 12/09/19 Чтв 22:43:02 1472516804
>>1472468
Член встал, как же еще
Аноним 12/09/19 Чтв 23:04:35 1472528805
>>1472424
и обязательно на yii2 ? или можно любой другой фрейм ? для таких задач обычно микроферймы типа слим люмен етц юзают , но это весьма изи задание
Аноним 13/09/19 Птн 03:49:54 1472604806
>>1472103
Бамп, что никто проекты чужие в портфолио не запихивал?
759 - 805 Аноним 13/09/19 Птн 04:57:03 1472613807
>>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.

В остальном, решение верное.
Аноним 13/09/19 Птн 04:58:17 1472614808
>>1472217

> И какого черта у меня ноль градусов находится в районе 6 часов, а не как у ОПа в районе 3 часов

А ты наверно синус с косинусом местами перепутал. При 0 градусов синус равен нулю, а косинус - единице. Если у тебя синус на оси X, то при нуле градусов у тебя будет либо 12 часов, либо 6 в зависимости от знака (+/-) перед косинусом. В компьютерной графике традиционно 0 градусов лежит на 3 часах и угол отсчитывается против часовой стрелки.

> $curDegree = round($degree);

Начальный угол, наверно, должен равняться $fromAngle.

В остальном, решение верное.

>>1471516
>>1471969

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

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

Насчет имени файла - я думаю, надо хранить:

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

> И ведь правильно, что выходит только 1 модель и контролер?

Наверно, да. У тебя же по сути один раздел на сайте с 3 действиями: закачка файла, просмотр информации о файле, скачивание файла. И одна сущность: файл.

Если будут комментарии, то для них будет своя модель.

>>1472199

В виде JSON я советую хранить метаданные (для картинки - размер, для аудиофайла - длительность, число каналов, параметры кодеков), у которых нет какой-то определенной схемы, и которые из-за этого не получится или невыгодно хранить в отдельных колонках.
Аноним 13/09/19 Птн 04:58:51 1472615809
>>1471103

Безопасность не зависит от того, используешь ты фреймворк или нет. В фреймворках есть средства для защиты от уязвимостей, но если о них не знать, то можно ее допустить. Советую почитать мои несколько базовых уроков о популярных уязвимостях: https://github.com/codedokode/pasta/tree/master/security

>>1470925

Так тебе никто не запрещает удалять SQL-запросом. На практике удобно совмещать ORM и SQL. Ну например, если тебе надо посчитать сумму по какой-то колонке, выгоднее это делать через SQL, чем загружать в PHP 1000 объектов, суммировать их поля и выбрасывать эти объекты.

Причина, почему ORM так делает, там написана. Также, в Доктрине есть "ленивая" загрузка, которая позволяет не загружать данные при создании объекта.

И какую альтернативу ты предложишь? Отказаться от ORM и моделей-объектов и передавать массивы неизвестной структуры из функции в функцию? Потом в таком коде не разобраться. По моему опыту, удобнее использовать ORM для маленьких объемов данных и SQL для каких-то операций на большом числе записей.

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

>>1470854

А еще у битрикса можно получать вознаграждение за покупку продукта по твоей рекомендации ;)

Битрикс и правда хреновый, там по моему требуется настройки в php.ini менять, чтобы он работал. Хорошо, что я с ним не работаю.

Аноним 13/09/19 Птн 04:59:57 1472616810
>>1469875

Начни отсюда: https://github.com/codedokode/pasta/tree/master/security

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

Если хочешь учиться далее, смотри OWASP top 10 - 10 самых популярных уязвимостей: https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.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

Если есть еще вопросы, задавай, только сначала прочитай мои уроки по ссылке выше.
Аноним 13/09/19 Птн 07:09:58 1472632811
5к.PNG (3Кб, 728x56)
728x56
>>1472528
Только эти фреймворки можно использовать. Я вообще фреймворки не использовал, только-только начал изучать. А как эту задачу сделать я не представляю
Аноним 13/09/19 Птн 12:36:14 1472735812
>>1472632
почитай про API , потом ищи примеры реализации АПИ на ларавеле (наверно есть на ларакасте) , начинай делать и решай попутно проблемы.
Аноним 13/09/19 Птн 13:27:06 1472774813
>>1472344
Там фреймворк за тебя сам все сделает. Создаешь модельку, пишешь у ней rules с указанными требованиями, передаешь то что пришло в модель и дергаешь validate, оно тебе вернет bool, если там false, то getErrors кажется возвращает как раз массив вида поле=>ошибки
Аноним 13/09/19 Птн 14:44:44 1472825814
>>1472632
Стоит понимать, что yii2 уже порядочно пованивает. Лучше взять laravel, symphony либо какой-то из микрофреймворков, указанных выше.
Совсем новичкам я бы посоветовал Laravel, как самый простой и имеющий сразу в коробке всё, что понадобится, без необходимости надстраивать микрофреймворк какими-то внешними пакетами.
А накодить можно что угодно на чём угодно, это не показатель.
Аноним 13/09/19 Птн 18:49:31 1472915815
Аноним 13/09/19 Птн 19:11:31 1472930816
>>1472825
>Стоит понимать, что yii2 уже порядочно пованивает
для типовых средних задач как RAD фрейм ему до сих пор нет равных , его минус это монолитность , но и тут это не особо важно
>Лучше взять laravel, symphony
с 4 симфой возможно , лажа для такой типовой задачи точно мимо когда есть спец люмен который не требует доп настроек
>Cовсем новичкам я бы посоветовал Laravel, как самый простой и имеющий сразу в коробке всё
всё в коробке есть у любого фрейма , но лара вместе с лара кастом делают кодера инвалида ибо джуны учат джунов что не круто , лару можно брать при сильном контроле синьёра (толкового) , симфа по выгоднее как с её философией так и стем кол вом ООП и ДДД пропагандой которую она несёт, порог выше да , но и профита больше по итогу.

после полу года работы на ларе так и не понял на что дроч на неё даже по сравнению с тем же yii.
Аноним 14/09/19 Суб 01:03:10 1473073817
>>1472614
>В такой ситуации стоит выписать возможные варианты, их плюсы и минусы, и выбрать оптимальный в данной ситуации. Например, рассмотрим хранение размера в БД:

Спасибо что ответил, опчик.

Аноны, кому не впадлу. Я вывел видео/аудио тегом <video>. Но, как я понял, данный способ сейчас не используют. Может у кого есть в закладках хороший гайд по этой теме?
Аноним 14/09/19 Суб 01:18:15 1473081818
>>1473073
>Но, как я понял, данный способ сейчас не используют.
с чего ты это взял анончик ?
Аноним 14/09/19 Суб 02:25:49 1473090819
>>1473081
Вчера когда искал инфу - выдавало iframe и еще что то. Нашел только что в бутстрапе есть класс 'video-fluid', которого на деле не было (долго тупил, в итоге понял что он просто не прописан. прописал сам). В общем сложилось такое впечатление по вчерашнему опыту гугла.
Мне стыдно даже как то просить скинуть ссылку на что-то, ведь я и сам могу уделить время и поискать. Только встал сегодня - убунту не запускается моя,час назад переустановил полностью, сижу среду настраиваю. Вот и спросил, может у кого под рукой хороший гайд по этой теме.
Но судя по тому что ты спросил - мои догадки ошибочны.Только сейчас вспомнил, что читал вчера, мол эти плееры встроенные в браузеры можно джава скриптом как то менять/настраивать.
Аноним 14/09/19 Суб 13:59:36 1473257820
>>1473073
>Я вывел видео/аудио тегом <video>. Но, как я понял, данный способ сейчас не используют.

А разве сейчас можно подключать мультимедиа как-то иначе?

>>1473090
>выдавало iframe и еще что то
iframe в котором тот же audio/video тег
Аноним 14/09/19 Суб 19:16:29 1473380821
Аноны, какие есть альтернативы phpMyAdmin?
Аноним 14/09/19 Суб 20:14:41 1473405822
Аноним 14/09/19 Суб 20:14:57 1473406823
Аноним 14/09/19 Суб 20:21:55 1473412824
>>1472615
>>1472616
Чувак, спасибо. Самый годный ответ на мои вопросы. Ближайший месяц вынужден заниматься другими делами, но как только смогу вернуться к обучению кодингу, буду разбираться.
806 - 824 Аноним 15/09/19 Вск 03:54:32 1473544825
>>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).

> убунту не запускается

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

Аноним 15/09/19 Вск 09:23:24 1473568826
Оп у меня следующая проблема:
Я хочу попасть в какое нибудь комюнити или заиметь своих сподвижников. Что я имею введу: Я хотел бы вести какой нибудь опенсорсный проект, не запарно и с другими людьми (пусть это будет пакет для Фреймворка или что то в этом роде). Какой профит я с этого поимею:
1. Будет проект которым можно баловать свое самолюбие
2. Смотря на код других я смогу подчерпнуть что то для себя
3. Даже когда мне будет лень что то делать или же не будет времени - проект будет развиваться так как есть другие люди и не будет демотивации по принципу: Сколько еще надо сделать и где на все это времени найти.

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

Пс не хочу пулреквестить в сами фреймворки так как это капля в море и сосем не тешит мое тщеславие.
Аноним 15/09/19 Вск 14:17:50 1473678827
>>1472930
у laravel более чистая архитектура, больше экосистема и аудитория и он не застрял в 2009.
Мне приходилось поддерживать проекты на yii, и это ад. Ни тебе нормального слоя конфигурации, ни тебе нормального контейнера, ничего. Всё какое-то самописное, на магии и сайд эффектах. Фу-фу-фу.
Сранивать с тем же laravel смысла нет вообще, настолько в yii всё убого.
Аноним 15/09/19 Вск 19:54:38 1473872828
изображение.png (38Кб, 1143x397)
1143x397
Привет двач, почему вместо букв у меня херня какая-то в массиве?
Аноним 15/09/19 Вск 19:59:54 1473878829
Аноним 15/09/19 Вск 20:19:43 1473894830
>>1473878
Спасибо, переделал
Аноним 15/09/19 Вск 20:36:54 1473912831
>>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
Аноним 15/09/19 Вск 20:48:36 1473917832
>>1473912
Значит все упирается в раскрутку.
>Ну вообще, в этом есть смысл
Я плохо объяснил мне. не проблема создать иссуе если я нашел баг, но меня так прельщают что мне дают на столько проработанный агрегат и я им пользуюсь что я не хочу соглашаться по чужим проблемам и пулреквестить на их основе. Это омрачит мое впечатление
Аноним 15/09/19 Вск 21:07:23 1473930833
Аноним 16/09/19 Пнд 00:51:55 1474069834
D9BGGeaXoAI7XE1.jpg (166Кб, 672x960)
672x960
Требуется амбициозный бэк-энд программист на постоянку, который сутками сидит за пекарней и хочет получить опыт работы на крупном проекте.
Обязательно: знание PHP на уровне, ответственность и максимум свободного времени. Больше навыков - только лучше.

Telegram для связи со мной: @no_snakes_alive
Аноним 16/09/19 Пнд 01:59:52 1474077835
>>1474069
>знание PHP на уровне
На уровне кого?
Аноним 16/09/19 Пнд 16:51:12 1474426836
1.jpg (64Кб, 604x453)
604x453
Знающий анон, подскажи. Прикручиваю комментарии в задании по файлообменнику на slim. Комментарии имеют древовидную структуру, у каждого есть id и parentId. Через рекурсию забираю данные из базы и получаю большой массив, у каждого элемента которого есть массив детей, а у детей есть свой массив детей и т.д. Сейчас встал вопрос о том, как это корректно вывести в шаблон twig. Если я пишу через

for comment in comments

то выводятся только элементы верхнего уровня. Можно ли через синтаксис шаблонизатора сказать "выводи, пожалуйста, еще и все что вложено, а еще и вложенное во вложенном"?
Или просто взять и убрать многомерность у исходного массива комментариев, сделать все элементы одноуровневыми, просто детей под родителем ставить, и так выводить? Как по умному делается?
Аноним 16/09/19 Пнд 17:46:53 1474457837
image.png (311Кб, 1920x1040)
1920x1040
image.png (349Кб, 1920x1040)
1920x1040
image.png (66Кб, 1621x907)
1621x907
программач, помоги , я не понимаю как правильно подключить форму регистрации к сайту
ситуация такая - вынес код регистрации в отдельный файл, прикрутил туда php с записью в БД, и этот файл надо через include вставить в основную страницу, но include возвращает сам файл и еще 1, как успешное подключение, так вот, как правильно его подключить чтобы include не вернул единицу?
Аноним 16/09/19 Пнд 18:07:17 1474464838
>>1474457
анон, я сам новичок, а если вместо инклуда рекьюре попробовать?
Аноним 16/09/19 Пнд 18:16:00 1474470839
>>1474426
Спасибо, аноны, всем кто откликнулся. Сделол через макросы
Аноним 16/09/19 Пнд 18:19:23 1474472840
>>1474464
у них разница лишь в том что require вернет фатальную ошибку , если не сможет найти нужный файл, а так при успешном выполнении тоже вернет единицу
по идее там должна быть функция которая будет что то возвращать, тогда единица пропадет, но я не знаю как мой код обернуть в функцию и что она должна возвращать, если я просто делаю запись в БД
Аноним 16/09/19 Пнд 18:20:27 1474475841
>>1474464
пытался найти готовый проект в инете чтобы посмотреть как там чего люди делают на практике, в итоге хуй, либо плати либо перди
Аноним 16/09/19 Пнд 18:40:13 1474489842
>>1474457
Я тоже нуб, посмотрел и что то не врубаюсь что ты сделать хочешь. Что должно выводиться то?
Аноним 16/09/19 Пнд 18:41:54 1474492843
>>1474475
Зачем что то искать, когда у тебя в шапке огромное кол-во гайдов и заданий с ответами на подводными и прочим.
Аноним 16/09/19 Пнд 19:47:44 1474532844
>>1474489
должна выводиться форма регистрации , но вместе с ней выводится цифра 1 - TRUE как результат спешного подключения файла, 3 скрин смотри
Аноним 16/09/19 Пнд 20:30:52 1474548845
Screenshot10.png (3Кб, 247x79)
247x79
Зачем единица в конце ставится? Просто в книжке не написано.
Аноним 16/09/19 Пнд 20:53:50 1474559846
И ещё, правильно ли я понимаю, что чтобы использовать переменные вне функции в самой функции - мне надо указывать переменные в самой функции?
Делается же это через точку? Или как то иначе? Типа:
echo $hui . $zalupa . $nigger . functioname();
Аноним 16/09/19 Пнд 21:22:21 1474570847
>>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
Аноним 16/09/19 Пнд 21:27:03 1474574848
>>1474570
Спасибо. Почему-то не подумал самостоятельно проверить.
Аноним 16/09/19 Пнд 21:31:00 1474584849
>>1474548
А вообще, в таких непонятных для тебя ситуаций, советую обращаться к php.net, а именно поиску на нем. Пишешь например "substr" и смотришь аргументы =)
Аноним 16/09/19 Пнд 23:24:35 1474948850
>>1474559
>что чтобы использовать переменные вне функции в самой функции
Хуй проссышь что вы хотите
>$hui . $zalupa . $nigger
Это переменные функции?
Аноним 17/09/19 Втр 07:46:35 1475026851
Как лучше всего готовиться к собесу? иду на джуна, есть гитхаб с 1 сайтом магазина на голом пхп и задачка про студента, но какие вопросы чаще всего будут спрашивать и на что особенно обратить внимание?
Аноним 17/09/19 Втр 09:13:59 1475047852
>>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
Аноним 17/09/19 Втр 09:15:13 1475049853
>>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 Аноним 17/09/19 Втр 10:29:15 1475079854
>>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 и не подменяй его.

Лучше, как ниже посоветовали, передавать нужный объект через аргументы.
Аноним 17/09/19 Втр 10:30:15 1475081855
>>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.
Аноним 17/09/19 Втр 10:31:01 1475083856
>>1467919

При использовании композера достаточно подключить 'vendor/autoload.php'. И делать это надо не в коде библиотеки, а в своем скрипте, который будет ее вызывать. Также, я думаю, что саму библиотеку тоже надо было установить через композер, а не скачивать руками.

В общем, почитай какие-нибудь руководства по композеру.

>>1466573

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


>>1465547

> ну вот кстати дисскасс имеет ли сейчас смысл писать в описании тип если ты его уже указал в самой функции?

Не имеет смысла, если это не несет никакой новой информации.

Я еще использую плагин для переименования файлов (так как я могу придумать класс с одним названием, а через полчаса решить, что у него должно быть другое название). Плагин, по моему, называется Rename File или как-то так. Вызываю через панель команд (Ctrl + Shift + P, затем fr, Enter).

>>1462411

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

Аноним 17/09/19 Втр 10:56:03 1475093857
Аноним 17/09/19 Втр 11:24:23 1475120858
Этот тред уже почти окончательно утонул, переходите тонуть в новый >>1475112 (OP)

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

Я постараюсь позже проверить гитхабы с задачками про студентов и фалообменник.
Аноним 17/09/19 Втр 11:27:27 1475122859
>>1475079
>Это идея уровня битрикса
Так-то и вордпресса, да и на фреймворках такое встречается. Не говоря о ноде.
Вполне себе норм идея - стоит поковырять.
Аноним 17/09/19 Втр 14:13:35 1475238860
sorry-note-rex.jpg (17Кб, 968x681)
968x681
>>1474948
ну, тип, есть переменные:
$pisechka
$huek
я хочу использовать писечку и хуёк в функции, это делается так?:
function functioname($pisechka, $huek) {}

?
Или я должен писечку и хуёк глобальными функциями для этого делать? Или я должен непосредственно в функции создавать писечку и хуёк? А если я хочу переменную, созданную вне функции, использовать в функции?
Аноним 17/09/19 Втр 22:17:22 1475668861
>>1475238
Если тебе нужны только их значения - да. Если хочешь их менять (я нуб и с этим не сталкивался), то вроде как можно передать ссылку на переменную
Аноним 17/09/19 Втр 22:18:48 1475672862
>>1475238
А вообще открой книжку какую нибудь, там все расписано. Или гайды ОПа, или гугл/ютюб
Аноним 18/09/19 Срд 07:43:51 1475833863
>>1465547
Дополню свой список:
Для документации можно еще взять DoxDoxygen он не может в нуловые переменные но зато вытаскивает эксепщены. А DocBlockr не может в типы возвращаемые методами.
LSP аводополнение по методам классов, описания к параметрам методов. Но мне что то не очень понравилось.

>>1475083
SidebarEnhancements тоже может в переименование

А в чем профит пхп шторма? Есть смысл перейти на него с саблайм?
Аноним 18/09/19 Срд 11:40:53 1475917864
Снимок4.PNG (12Кб, 649x309)
649x309
Не совсем понял Query parameters.
На сайте должна быть строка по которой можно найти человека и если есть совпадения, то должны передаваться его id, first_name т.д. ?
Аноним 18/09/19 Срд 15:57:12 1476139865
Аноним 18/09/19 Срд 18:09:59 1476247866
>>1475917
>На сайте должна быть строка по которой можно найти человека и если есть совпадения, то должны передаваться его id, first_name т.д. ?
Похоже на то, а вообще перекат был

>>1476139
>На уровне php
junior/middle/senior?
Не думай что я доебался или еще чего, просто с того что ты написал не особо ясно кого ты ищешь. То ли джуна, то ли мидла.
Аноним 21/09/19 Суб 14:36:22 1478314867
Поясните доходчиво и с пруфами, почему php не нужен.
Аноним 22/09/19 Вск 12:18:29 1478943868
Аноним 24/09/19 Втр 08:49:03 1480560869
>>1478314
Надо $ перед каждой переменной ставить
Под каждую задачу свой инструмент. Если тебе нужен сайт, или не овердохуя (а даже и если овердохуя) нагруженное веб-приложение, то PHP вполне подойдёт.
Банальнейшая связка nginx + phpfpm + php7 + *sql будет давать тебе достаточно производительности и возможностей для горизонтального масштабирования, пока у тебя натурально не появятся миллионы активных пользователей и десятки тысяч RPS.
Большинство хейта на пыху идёт со старых времён, когда он действительно был не очень. Сейчас же пыха очень быстрая (а скоро ещё и JIT подвезут), поддерживает строгую типизацию и в её экосистеме много очень качественныз решений. Субъективно, тот же питон она делает по всем фронтам.
Ну и, опять же субъективно, у PHP очень большой рынок, целая куча бизнес-решений было написано и пишутся на нём и приносят своим создателям нехилые деньги (мой босс недавно всех нас в Европу на корпоратив за свой счёт свозил, лол). Так что он вряд ли умрёт в ближайшие десятилетия.
Аноним 24/09/19 Втр 15:04:54 1480717870
>>1478314
Из объективного - анальная огороженность вебом. Если заебет - для переката придется становиться ждуняшкой и учить новый стек почти с нуля. Почти все прочие популярные языки, используемые в вебе, такой проблемы не имеют.
Аноним 24/09/19 Втр 15:12:03 1480726871
>>1480717
Второй объективный минус - вероятность найти хорошую контору со всеми соцплюшками и прочим стремится к нулю. Даже скайенг, который сидит на симфони, оформляет договор предоставления услуг.
Аноним 24/09/19 Втр 16:30:17 1480769872
>>1480717
Бред язык должен быть под что то если язык подо все то он уже будет иметь просадки в сферах. Это так же как с приложениями и сайтами - да они могут быть адаптивными и что то мочь и там и там но на порядок удобнее им пользоваться когда они разработаны индивидуально.
Аноним 24/09/19 Втр 16:51:54 1480787873
>>1480769
Ога, а потом получаем тонну сбегателей с пхп, бегущих куда глаза глядят (включая полный съеб из профессии), потому что развития нет, проекты однотипные, конторы - сплошные рога и копыта.
Аноним 24/09/19 Втр 16:59:24 1480791874
>>1480787
поэтому в дополнение к пхп щас надо учить как минимум гошу, и фронт знать, чтобы быть фулл-стак
Аноним 25/09/19 Срд 16:58:29 1481593875
>>1480560
>у PHP очень большой рынок
Работу на пхп ты найдешь без проблем, но вот вряд ли ты будешь ей доволен.
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов