«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP и webdev #91 Аноним 2017/07/09 13:54:48  №1019301 1
php-noob-1.png (33, 500x500)
500x500
cat-cafe-osaka.jpg (157, 1024x683)
683x1024
cat-sad.jpg (194, 1024x768)
768x1024
chuuni1.png (3449, 1920x1080)
1080x1920
Добро пожаловать в наш уютный тред. Тут мы изучаем веб-разработку на языке PHP (а также JS/CSS/HTML/SQL), решаем задачки и делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Пожалуйста, пишите один большой пост вместо нескольких маленьких и не флудите не по теме.

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

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

Предыдущий тред был тут: >>1000416 (OP) ( http://arhivach.org/thread/266631/ ). Еще предыдущие треды ищутся в гугле по словам "клуб php" или в архиваче. Еще есть такой архив тредов: phpclub.rf.gd

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

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

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

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru/ Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то надо начать с него. Он простой и понятный (по крайней мере в начале). Там есть задачи, их надо решать обязательно (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению.

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

Ты прошел весь учебник? Молодец, но это были лишь основы языка 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

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

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

Оформляй код аккуратно!!! — например пропусти через 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 месяцев
- Посоветуйте редактор кода - Sublime Text 3, Notepad++, PhpStorm
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
- Что самое главное для программиста? Умение аккуратно оформлять код.
- ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
- Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Важно Аноним 2017/07/09 13:55:28  №1019303 2
grammar-nazi.png (56, 500x644)
644x500
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

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

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

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

- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется 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

------------------

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

Давай удочку, а не рыбу

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

Будь доброжелателен

Не годится: «Ты мануал хоть раз в жизни открывал, обезьяна?»
Не годится: «В гугле забанили?»
Не годится: «Твой код плохой»
Хорошо: «Вот, как можно улучшить этот код: ...»
Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»

Не придирайся к знанию английского или русского языка.

Объясняй

Не очень хорошо: «сделай как в этом коде»
Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)»
Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»

Не проповедуй

Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.

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

Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Ответы: >>1032446 >>1033764
Аноним 2017/07/09 13:56:32  №1019307 3
Если вы писали что-то в прошлом треде, и вам не ответили, напомните тут о себе.

Этот проект https://github.com/Merkalov/Students я проверил тут >>1005550 (если тред утонул, ищите в архиваче)
Аноним 2017/07/09 14:33:34  №1019372 4
Не заметил что уже перекат. Извините.

>>1019368
Аноним 2017/07/09 15:00:37  №1019419 5
подписался
IDE Аноним 2017/07/09 15:23:13  №1019450 6
phpstormtn.png (17, 159x159)
159x159
Какже мне горит, от моего старого ноута куплен в 2009 году. Решился установить PHPStorm - какаяже годнота, именно то, что нужно, но пиздец как тормозит, пришлось снести.

Юзаю codelobster. Пытался в netbeans, но во-первых: он тоже притормаивает, а во вторых - нет нормального автодополнения для laravel и blade.

Может кто-то посоветовать, что-то годной для старых компухтеров?
Ответы: >>1019593 >>1019622
Аноним 2017/07/09 15:30:29  №1019464 7
Есть ли пхпшнику профит от изучения C++?
Я имею в виду, есть ли проекты, требующие навыков написания кода на обоих этих языках. И насколько это экзотика?
Ответы: >>1019562
Аноним 2017/07/09 16:44:51  №1019562 8
>>1019464

хайлоад (хотя сейчас там чаще посматривают в сторону Го или Раста, но их без знания Си изучать трудно).
Аноним 2017/07/09 17:15:32  №1019593 9
Ответы: >>1019597
Аноним 2017/07/09 17:22:27  №1019597 10
>>1019593
сублайм терпеть не могу. Уж сорян, пытался его настроить даже поюзал какое-то время, но отсутствие тулбара, настройки через пизду, все на горячих клавишах, отсутствие проводника и самое главное черный цвет паталогически не могу кодить в темных редакторах заставили меня его снести, уж лучше codelobster. Может еще какие варики есть?
Ответы: >>1020364 >>1020370
Аноним 2017/07/09 17:47:32  №1019622 11
149366109870201.jpg (58, 540x542)
542x540
Ответы: >>1019646
Аноним 2017/07/09 18:16:56  №1019646 12
>>1019622
Ты конкретную ссылку дай, то, что ты умеешь запрос в гугле составить я понял. Есть полурабочие способы, где нужно плясать с бубном - это никак не подходит под определение "норальное"
Ответы: >>1019750
Аноним 2017/07/09 20:16:26  №1019750 13
>>1019646
Для блейда есть плагин, емнип
Аноним 2017/07/09 20:24:34  №1019755 14
>>1002548

А почему тогда не сделаны сеттеры на ранг или на лидера?

И получается нужно на все вводимые данные делать сеттеры и на сеттеры ставить тайпхинты? А на все другие данные константы?
Аноним 2017/07/09 20:31:30  №1019760 15
Сап, вебач. Тема такая - я не столь давно прошел курс макаки-верстальщика, но приложиться не было времени и возможности. Сейчас все заново преучиваю и у меня назрел вопрос: будучи веб-разрабом или просто версталкой, нужно ли мне будет создавать графическую часть? Иконки, дизайн и прочее? Или это задачи дизигнеров и заказчики этого не просят?
Ответы: >>1019771
Аноним 2017/07/09 21:01:17  №1019770 16
что почитать про создания сайтов с регистрацией,постингом,загрузки всяких файлов,взамодействие между юзерами сайта,гугление дает одну хуйню
Ответы: >>1019772 >>1019896
Аноним 2017/07/09 21:01:46  №1019771 17
>>1019760
Есть миллион готовых библиотек для иконок.
Если заказчик дает тебе эскиз (макет), то иконки все есть.
Если в студии с кем-то, то также - картинки даны.
Верстальщику рисовать не очень нужно.
Аноним 2017/07/09 21:02:24  №1019772 18
>>1019770
Гуглишь курсхантерс, оплачиваешь подписку на Хекслете.
Ответы: >>1019773
Аноним 2017/07/09 21:03:13  №1019773 19
>>1019772
а обязательно платить,мож на английском че есть?
Ответы: >>1019814
Аноним 2017/07/09 21:41:26  №1019814 20
Аноним 2017/07/09 22:05:11  №1019868 21
fciuGDC.jpg (92, 688x460)
460x688
>>1019301 (OP)

>
- сделать для каждой формы свой URL, который и выводит ее (при GET), и обрабатывает запрос (при POST). И форма с главной шлет запрос на этот URL, при ошибке выводится только сама форма с ошибкой.

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

> При ошибке выводится только сама форма с ошибкой

...это что, будет вью только с этой формой комментария? Т.е. шаблон без ничего (ну кроме шапки и подвала, которые везде инклюдятся), только эта форма?
Или же, если я правильно понял, эти две формы выводятся и в local.app/controller/indexAction и в local.app/controller/someAction, но как второй экшн вернет главному список ошибок? Можно немного псевдокода, что-то я давно мучаюсь с этими второстепенными экшнами и мой код сейчас выглядит как пикрелейтед (функции delFile, addComment, checkAccessPass являются не экшнами, а просто уменьшают толщину контроллера).
Ответы: >>1019871 >>1043657
Аноним 2017/07/09 22:05:39  №1019871 22
Аноним 2017/07/09 22:16:21  №1019896 23
>>1019770
Тебе надо работать с БД, в которой ты будешь хранить юзеров и данные.
Для авторизации пользователя тебе надо куки.
Загрузка файлов - обычная работа с файлами, вида
...
<form enctype="multipart/form-data" action="addres" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="44444" />
<input name="userfile" type="file" />
<p><input type="submit" value="Загрузить"></p>
</form>
...
$uploaddir = 'dir';
$uploadfile=$uploaddir.basename($_FILES['userfile']['name']);
...
Ответы: >>1019935 >>1019948
Аноним 2017/07/09 22:27:52  №1019935 24
>>1019896
почему везде все это дается кусками и приходить потом дрочить что бы все это собрать в одно?
Ответы: >>1019948
Аноним 2017/07/09 22:35:39  №1019948 25
>>1019896
сессии+куки
>>1019935
я бы дал тебе годных видеоуроков, блягодаря которым я это все постиг, но ты ведь не будешь смотреть, ибо там 200+ часов
Ответы: >>1019988
Аноним 2017/07/09 23:48:56  №1019988 26
>>1019948
Ну ты кинь линк, а там уже смотреть или нет - дело каждого.
Ответы: >>1020006
Аноним 2017/07/10 00:24:21  №1020006 27
>>1019988
Давно смотрел видосы от этого васяна: https://school-php.com/video
Они всратые, старые, в них много воды и они примитивные, но после них я научился строить какую-никакую архитектуру сайта, понял как делаются все эти авторизации и пр. Рекомендую их только потому, что не знаю смог бы я научится всему тому, по следующим урокам...
... а это уроки для илиты, это реально ахуенная хуйня, тут есть все: от самых основ (переменные, массивы, циклы и пр.) до ООП, паттернов, MVC, обзора по фреймворкам и т.пр. Качество плоховатое, но я реально ничего лучше не видел, просто посмотри на программу Кликни на "дополнительная информация" каждого из уроков:
1 уровень: http://nnm-club.me/forum/viewtopic.php?t=889322
2 уровень: http://nnm-club.me/forum/viewtopic.php?t=889427
3 уровень: http://nnm-club.me/forum/viewtopic.php?t=889601
4 уровень: http://nnm-club.me/forum/viewtopic.php?t=1014639
Ответы: >>1020018
Аноним 2017/07/10 00:31:04  №1020018 28
Аноним 2017/07/10 00:40:36  №1020029 29
2017-07-1000-34-44.png (254, 1920x1080)
1080x1920
2017-07-1000-38-15.png (195, 1920x1080)
1080x1920
Я сегодня у мамы быдло-верстальшик. Собираю Франкенштейна из деталек бутстрапа.

Только полгода назад сделал поделку на ларавел, а сейчас как будто и не делал ничего, всё заново учу.

А вы что творите, аноны?
Ответы: >>1020139 >>1028374
Аноним 2017/07/10 03:43:10  №1020111 30
Если я напишу какуют приложуху и запихну ссылку с ее кодом на гитхабе и для пруфов работоспособнсти залью на хост и тоже укажу ссылку и укажу все это в резюме, мне необходимо будет пояснять за нее на собеседовании? Или это пук в воду и им насрать на мои старания?

И вообще, есть тут те, кто работает пхп джуном? Что вы вообще делаете?
Ответы: >>1020143 >>1021018
Аноним 2017/07/10 08:20:16  №1020139 31
>>1020029
ты так все время пердолишь окно?
и в фф и в хромиум-* вроде же есть эмуляция
и почему шиндовс?
Ответы: >>1020161
Аноним 2017/07/10 08:34:12  №1020143 32
>>1020111
По всякому. Бывают собеседования, где за каждую строчку пояснить просят.
Аноним 2017/07/10 08:42:21  №1020145 33
антоны помогите плизке
сайт pisos.ru
как сделать, чтобы файл
/folderWithCandies/dick.html
открывался по адресу pisos.ru/dick ?
через редирект 301 или что-то типа того
Ответы: >>1020166 >>1020739
Аноним 2017/07/10 09:53:10  №1020161 34
>>1020139
Какая эмуляция?

На мак денег пока нет. А в лиуксе интерфейс громоздкий, сжирает много экранного места по вертикали, и безбожно томозит, всё это в сравнении с виндой. Хостинг - выделенный на убунте, пердолю через ssh, гуй там не нужен.

Вчера открыл для себя, что вместо копирвоания файлов на хостинг через ftp или ssh можно просто сделать там пулл реквести из гит.
Ответы: >>1020789 >>1022010
Аноним 2017/07/10 10:00:23  №1020166 35
>>1020145
>/folderWithCandies/
На выделенном хостинге настроить апач или нгникс так чтобы корневой папкой была "/folderWithCandies/"

На виртуальном можно создать в корне dick.php который будет подтягивать "/folderWithCandies/dick.html" с помощью require или include. В адресной строке тогда останется "pisos.ru/dick"

htaccess может только перенаправить с "pisos.ru/dick" на "/folderWithCandies/dick.html" В адресной строке тогда будет "/folderWithCandies/dick.html" и ничего с этим не поделать

А вообще обязательно описывай зачем, может тебе вообще что-то другое пододёт
Ответы: >>1020712
Аноним 2017/07/10 12:39:45  №1020292 36
Ответы: >>1020317
Аноним 2017/07/10 13:15:37  №1020317 37
>>1020292

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

date | ok | wait | cancel
------------------------

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

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

Там ведь разные сервисы, хранилища файлов, базы данных, и тд.

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

> То есть persist на каждом шагу и не нужен.
persist используется для передачи новых созданных объектов под управление entity manager. На каждом шагу он не нужен, да.

> В этом и состоит суть паттерна, что изменения в сущностях отслеживаются автоматически и сохраняются в базу при коммите?
Вроде примерно это (судя по https://martinfowler.com/eaaCatalog/unitOfWork.html ). Но там написано, что главное преимущество UOW это запись изменений атомарно, одной транзакцией, а не кучей мелких транзакций.

Доктрина содержит в UOW ссылки на все управляемый ей сущности (загруженные из БД, а также добавленные через persist), а также их исходное состояние и при flush() сравнивает их текущее состояние с исходным, находит различия, формирует пакет изменений и сбрасывает эти изменения в базу одной транзакцией.

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

> Ну то есть в классе UOW имеется маппер и репозиторий для каждой сущности,
Нету там ни мапперов, ни репозиториев.

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

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

> при извлечении из бд в репозиторий
В репозитории ничего не хранится.

> сохраняется ссылка на модель с статусом типа "clean", когда мы меняем свойства модели через сеттер, статус меняется на "dirty"
Нет. По умолчанию при загрузке из БД Доктрина просто сохраняет значения полей и ссылку на объект, а при flush() сравнивает текущее состояние объекта с исходным. Но ты можешь использовать и другие опции, например сделать объекты, которые будут сами сообщать в доктрину об изменениях, чтобы сэкономить время на поиск изменений (но это усложняет сущности). То есть возможны варианты когда объекты сообщают об изменениях, и когда Доктрина сама их ищет, это настраивается.

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

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

Аноним 2017/07/10 14:11:52  №1020356 38
У меня тоже вопрос про .htacces есть.
Как закрыть папку, чтобы извне никто не мог смотреть/исполнять файлыы, а сам сервер мог к ним оборащаться?

Экспериментировал с такими конструкциями и либо не блокируется ничего, либо блокируется для всех:
<FilesMatch ".(htaccess|php|jpg)$">
Order Allow,Deny
Deny from all
</FilesMatch>

Order deny,allow
Deny from all
<Files ~ ".(xml|css|jpe?g|php)$">
Allow from all
</Files>
Ответы: >>1022010
Аноним 2017/07/10 14:27:16  №1020364 39
>>1019597
>отсутствие проводника
Open folder побывал ?
>черный цвет
white theme sublime text в гугл
>все на горячих клавишах
разве в шторме не тоже самое ?
>настройки через пизду
кто то не может в json объекты ?


не говорю что он пизже всех или замена IDE но имхо для моих задач хватает с головой и не жрёт 1000 ГБ рама , Atom есть , Brackets но они все чёрные , что при желании можно легко изменить


Ответы: >>1021072
Аноним 2017/07/10 14:37:13  №1020370 40
>>1019597

Зачем тулбар? Я наоборот рад, что в нем нет этих дурацких кнопок. Цвет меняется, я сам не могу читать на темном фоне, тем более на моей плохой матрице. Файлы открываются через Ctrl + P либо через Ctrl + O с вписыванием пути вручную (в Windows в диалоге открытия файла можно писать путь и он дополняется).

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

Ответы: >>1021072
Аноним 2017/07/10 14:45:24  №1020373 41
Помогите пожалуйста, как скачать апач?
Ответы: >>1020375
Аноним 2017/07/10 14:47:26  №1020375 42
Аноним 2017/07/10 15:35:06  №1020408 43
14928382274440.jpg (53, 493x387)
387x493
Анончики, решаю задачу про компанию "Вектор". Только начал, пытался проверить вывод имени департамента в терминале, а оно ничего не пишет, что я делаю не так?
https://pastebin.com/8NkvceWp
Ответы: >>1020434 >>1020445
Аноним 2017/07/10 15:59:41  №1020434 44
>>1020408
Я не пхпшник, но разве buy->name не должно возвращать значение, например, с помощью return, как в других ЯП?
Ответы: >>1020443
Аноним 2017/07/10 16:07:22  №1020443 45
>>1020434
в учебнике все вроде также было.
создаю объект, вызываю свойство, без всяких return
Аноним 2017/07/10 16:07:48  №1020445 46
>>1020408
Потому что у тебя у объекта поле name пустое.
Ответы: >>1020457
Аноним 2017/07/10 16:21:37  №1020457 47
>>1020445
но я же его с помощью конструктора создаю
Ответы: >>1020463
Аноним 2017/07/10 16:28:30  №1020463 48
Ответы: >>1020465
Аноним 2017/07/10 16:33:55  №1020465 49
14936830636352.jpg (27, 343x256)
256x343
>>1020463
сорян, я constructor пишу, а надо construct
Аноним 2017/07/10 17:10:21  №1020506 50
>>1019301 (OP)
ОП, смотри на что наткнулся по пыхе и по ноде нашел такое же
https://phpschool.io/
Есть идея твои уроки перепилить в формат подачи воркшопов. Стоит ли?
Ответы: >>1022010
Аноним 2017/07/10 20:40:14  №1020712 51
>>1020166
хочу сокращатель ссылок сделать
только теперь еще больше запутался и не пойму как это сделать нормально
Ответы: >>1020722 >>1020733 >>1020739
Аноним 2017/07/10 21:03:59  №1020722 52
>>1020712
Тебе нужно динамически генерировать html с помощью php. Пользователь вводит адрес, ты проверяешь есть ли такой в базе, если есть даешь ему короткую ссылку из базы, если нет генерируешь короткую ссылку и кладешь в базу.
Ответы: >>1020728
Аноним 2017/07/10 21:09:58  №1020728 53
>>1020722
генерировать каждый раз новый хтмл?
Ответы: >>1020732
Аноним 2017/07/10 21:19:09  №1020732 54
Аноним 2017/07/10 21:21:16  №1020733 55
>>1020712
Используй фреймворки. Попробуй Slim, он простой.
Аноним 2017/07/10 21:31:50  №1020739 56
>>1020145
>>1020712
if ($url == >'dick') {
//render dick
}

// for more information
Google: php router
Аноним 2017/07/10 21:33:36  №1020741 57
граждане, кто то пользовался вагрантом?
ставлю коробку под ларавел, запускаю виртуалку, но проблема - не установлен в ней mcrypt. захожу по ssh, устанавливаю через apt php7.1-mcrypt и хуяк! все ломается, все к едрени бабушки перекосоебливается и не работает. Версия php на виртуалке 7.1
Ответы: >>1022010
Аноним 2017/07/10 22:11:01  №1020789 58
>>1020161
>Вчера открыл для себя, что вместо копирвоания файлов на хостинг через ftp или ssh можно просто сделать там пулл реквести из гит.
Да пребудет с тобой git clone.
Аноним 2017/07/10 22:30:55  №1020821 59
Как можно определить 100% что кравлер попал в бан? Получаю 403 код, хотя из cli курлом получил 200 ответ один раз, пробовал полностью менять шапку реквеста, если использую прокси - в зависимости от работоспособности оной получаю 200 код. Мне админ доказывает, что забанили по какому-то параметру в реквеста, и говорит что у него в консоли все ок всегда и 403 ни разу не получил.
И второй вопрос, можно ли спуфить IP курлом при запросе из cli с параметром interface с учетом что использованный IP куплен и установлен на сервере тоже
Аноним 2017/07/10 22:56:27  №1020834 60
>>1019301 (OP)
Как правильно использовать php. Писать html в php коде, или php код в html странице? Или может как то еще можно?
Ответы: >>1020857 >>1021023
Аноним 2017/07/10 23:23:39  №1020857 61
>>1020834
Если что-то простое, то юзать PageController, если посерьезнее - FrontController и ApplicatiobController
я у мамы зандстраёб
Ответы: >>1020870 >>1021023
Аноним 2017/07/10 23:41:44  №1020870 62
>>1020857
Спасибо. Щас по гуглю.
Ответь еще пожалуйста, в php есть встроенные обработчики, ну как в ноде например, пишешь обработчик для запроса и вызываешь функцию? Не смог нагуглить точный ответ.

И еще кое что, как делают так, что при запросе www.host.ru/page открывается страница без окончания index.php? Знаю что во фреймворках такое, но как сделать без фреймворков не могу нагуглить.
Ответы: >>1020902
Аноним 2017/07/10 23:48:38  №1020876 63
Ничего не понимаю, везде пишут только про обработку форм php. Запросы на страницы как обрабатывать? Хелп анончики.
Ответы: >>1020904 >>1020950
Аноним 2017/07/11 00:18:29  №1020900 64
ОП проверь плз. Задача про компанию вектор. http://ideone.com/UZfro9

Тайпхинты не использовал, смысл в них вообще.

А еще ошибки не знаю как исправить.
Аноним 2017/07/11 00:21:23  №1020902 65
>>1020870
гугли ЧПУ , rewrite mod apache2
Ответы: >>1020908
Аноним 2017/07/11 00:23:07  №1020903 66
>>1020900
Тайпхинты для правильно DI же , что бы ты точно знал что тебе передаётся именно тот объект
Аноним 2017/07/11 00:24:34  №1020904 67
>>1020876
либо ajax либо POST GET с перезагрузкой страницы , то есть отсылаешь все данные с формы на какой то скрипт обрабатываешь и получаешь результат
Ответы: >>1020911
Аноним 2017/07/11 00:26:44  №1020908 68
>>1020902
Как я понял апач будет переадресовывать на файлы, какждый файл это хост? Чет костыль какой то получается. Может у меня нжинкс будет.
Может кто-нибудь знает как нормально сделать, что при запросе отрабатывала функция? Хотя бы в теории как это в php, какие есть функции и структуры для этого.
Ответы: >>1020922
Аноним 2017/07/11 00:29:42  №1020911 69
>>1020904
Не понятно. Вот открыл юзер в браузере www.host.ru/page, предположим это главная страница, значит GET запрос, как этот запрос обработать?
Не пойму зачем мне форма, если нужно гет запросы обрабатывать.
Ответы: >>1020920 >>1020925 >>1020950
Аноним 2017/07/11 00:32:59  №1020914 70
14995193824660.jpg (513, 3840x2160)
2160x3840
Товарищи, покажите пожалуйста свой Utility.service. Только начал себе собирать, хочется интересных идей подсмотреть на будущее.

https://ideone.com/FWNxh4
Ответы: >>1021023
Аноним 2017/07/11 00:36:15  №1020920 71
>>1020911
а в этом смысле www.host.ru/page пофакту должно быть www.host.ru/page.php но всякие мод реврайты умеют обрезать эту .php или например www.host.ru/index.php/page тоже умеют обрезать index.php

скрипт выполняется скрипт из этого самого page.php
Аноним 2017/07/11 00:38:40  №1020922 72
>>1020908
так то да , по нормальному у тебя должен быть всего 1 входная точка это index.php и она обработает запрос на тот же page но тогда гугли простейшие route pattern
Аноним 2017/07/11 00:40:40  №1020925 73
Ответы: >>1020932
Аноним 2017/07/11 00:46:23  №1020928 74
>>1019301 (OP)
Кто нибудь может объяснить что не так с php. Можно ли как в ноде или в других языках запустить php файл на выполнение и чтобы он обрабатывал все запросы? Если я правильно понял, то нельзя, из-за того что php отрабатывает код файла и умирает.
Ответы: >>1020950
Аноним 2017/07/11 00:50:42  №1020932 75
>>1020925
Спасибо анон. Просто я хожу разобраться с тем как работает интерпретатор php, и как устроена работа с http. Не хочу ставить апач. Мне не горит решать это, мне нужно понять как работает сам php. Похоже в строке запроса php может получать только параметры после знака ?, это вообще печаль, как жить то???
Ответы: >>1020937 >>1020947
Аноним 2017/07/11 01:03:21  №1020937 76
Аноним 2017/07/11 01:42:20  №1020945 77
>>1020900

### Тайп хинты

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

Обрати внимание, что php7 усовершенствовал систему тайп-хинтов - теперь можно в их качестве указывать примитивные типы вроде int/string, а в php7.1 стало можно указывать тайп-хинт для возвращаемого функцией значения: https://habrahabr.ru/post/267799/ (увы, возможность вернуть null пока не реализовали, так что ждем)
Ответы: >>1021023
Аноним 2017/07/11 01:46:49  №1020947 78
>>1020932

Здесь нет нужной информации? http://php.net/manual/ru/reserved.variables.server.php

Когда приходит HTTP запрос, PHP анализирует его и кладет информацию о нем в суперглобальные переменные $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV - они описаны в документации.

Все, что выводит программа (echo и подобными функциями), PHP отправляет в теле HTTP ответа.

На заголовки HTTP ответа можно повлиять с помощью функций header, set_cookie и некоторых ini-настроек.
Аноним 2017/07/11 01:51:58  №1020950 79
>>1020928

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

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

С PHP все в порядке.

>>1020876

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

>>1020911

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

Вообще-то у меня это описано в уроке для встроенного в PHP сервера, почему не прочел? https://github.com/codedokode/pasta/blob/master/soft/web-server.md

Ссылка в ОП посте стоит.




Аноним 2017/07/11 02:12:12  №1020958 80
Что вот это вот?
PHP Fatal error: Uncaught Error: Call to undefined function mb_internal_encoding() in /home/hIt56v/prog.php:5

Везде, даже в самых простых вещах вылезает эта лажа на ideone. Я косячу или такова воля Божья?
Ответы: >>1020961
Аноним 2017/07/11 02:20:23  №1020961 81
Ответы: >>1020973
Аноним 2017/07/11 02:47:54  №1020973 82
>>1020961
Раньше работала. А что же делать?
Ответы: >>1021023
Аноним 2017/07/11 07:56:33  №1021013 83
1406910228597.jpg (215, 1021x681)
681x1021
какого хуя это говно не работает я хочу выбрать все iblock_element у которых есть VALUE 423 и 408 в iblock_element_property
SELECT
`iblock_element`.`ID` AS `ID`
FROM `b_iblock_element` `iblock_element`
LEFT JOIN `b_iblock_element_property` `iblock_element_property` ON `iblock_element_property`.`IBLOCK_ELEMENT_ID` = `iblock_element`.`ID`
WHERE (`iblock_element_property`.`VALUE` = '423') AND (`iblock_element_property`.`VALUE` = '408')
Ответы: >>1021017
Аноним 2017/07/11 08:15:49  №1021017 84
>>1021013
неужели так? а если у меня пиздец сложная логика на каждое значение по джоину?
SELECT
`iblock_element`.`ID` AS `ID`
FROM `b_iblock_element` `iblock_element`
LEFT JOIN `b_iblock_element_property` `iblock_element_property` ON `iblock_element_property`.`IBLOCK_ELEMENT_ID` = `iblock_element`.`ID`
LEFT JOIN `b_iblock_element_property` `iblock_element_property2` ON `iblock_element_property2`.`IBLOCK_ELEMENT_ID` = `iblock_element`.`ID`
WHERE (`iblock_element_property`.`VALUE` = '423' AND `iblock_element_property2`.`VALUE` = '408')
Аноним 2017/07/11 08:20:38  №1021018 85
>>1020111
Какой-то код это обычно всегда плюс, особенно если он хороший. Это дает возможность более адекватно оценить навыки кандидата.

> И вообще, есть тут те, кто работает пхп джуном? Что вы вообще делаете?
Бэкэнд часть я делаю.

пхп-джун
Ответы: >>1021195
Аноним 2017/07/11 08:30:01  №1021023 86
ОП, в пасте про студентов ссылка http://www.phpinfo.su/articles/practice/shablony_v_php.html стала битой (встречается в нескольких местах).

>>1020945
В PHP 7.1 есть возвращаемый тип void: https://3v4l.org/0kuHL

>>1020973
https://3v4l.org/

>>1020914
Можешь объяснить, чем плохи чистые функции, зачем городить эти Utility service? Юнит-тесты ты ведь всё равно писать не будешь. Какое-то слепое следование паттернам ради усложнений.

>>1020834
Хороший вопрос, тут есть ответ: http://www.php.su/articles/?cat=examples&page=014

>>1020857
Эти паттерны не отвечают на вопрос как увязывать HTML и PHP.
Ответы: >>1021050 >>1022010
Задачи Аноним 2017/07/11 09:21:36  №1021030 87
Ответы: >>1022009
Аноним 2017/07/11 10:17:01  №1021050 88
>>1021023
Мне казалось, всякий код должен быть на своем месте. Что если мне понадобится вот этот rand() в любом месте кода, я позову его из сервиса и всё.

Предлагаешь лучше просто собрать их все в файл и подключать прямо к window?
Аноним 2017/07/11 10:48:52  №1021061 89
Ответы: >>1022009
Аноним 2017/07/11 11:16:40  №1021072 90
>>1020364
>Open folder побывал ?
Что это? Папка как проект? Мне нужен проводник по всей системе - в notepad++, например, он сделан идеально.
>разве в шторме не тоже самое ?
я его не юзал толком, но там вроде есть возможность влепить тулбар
>кто то не может в json объекты ?
а че ты в дефолтном виндовом блокноте не кодишь? Не можешь в него?

>>1020370
>Я наоборот рад, что в нем нет этих дурацких кнопок
только выиграл от отсутствия того, что всегда можно отключить?
Ответы: >>1021170
Аноним 2017/07/11 12:29:38  №1021099 91
Привет всем.
Последнее время, перед собеседованием просят показать небольшой файл с примером кода.
Я хочу отправлять это: https://pastebin.com/F9Cv1eXm
Рейт ми, как говорится. Может чего подправить стоит?
Ответы: >>1022009
Аноним 2017/07/11 13:54:01  №1021170 92
>>1021072
>а че ты в дефолтном виндовом блокноте не кодишь? Не можешь в него?
м манёвры ? сравнить json объекты с кучей формочек ? имхо мне даже удобнее поправить в файле нежели бегать по файл -> правка -> опция залупки
Ответы: >>1021184
Аноним 2017/07/11 14:13:26  №1021184 93
>>1021170

Это просто дело вкуса, я думаю. Кто-то любит кнопочки, кто-то конфиги. У конфигов в сравнении с GUI масса преимуществ - ими можно делиться, публиковать, бекапить, делать поиск, генерировать программно, но из минусов - нужно сначала потратить время на изучение.

Если программа рассчитана на разработчиков, а не на "обычных" пользователей, вполне логично использовать текстовый конфиг.

Некоторые редакторы пытаются взять лучшее из обоих миров - давая и GUI и конфиг в XML, вроде eclipse, но по моим ощущениям, настройки у них совсем уж навороченные.
Аноним 2017/07/11 14:26:57  №1021195 94
>>1021018
>Бэкэнд часть я делаю
это понятно, хотелось бы подробней. Прямо со старту ты пришел джуном и на тебя весь бэкэнд свалили?
Ответы: >>1021975
Аноним 2017/07/11 15:49:05  №1021262 95
Это снова https://github.com/tsubaku
Я поработал над указанными ошибками, но исправил не все.
Во-первых, что исправил:
>Советую убрать опцию переименования таблиц через конфиг, это требует много усилий, а выгода неочевидна.
Убрал из конфига, в PDO обращаюсь к таблицам по имени. Теперь их названия прибиты гвоздями. Не уверен, что это лучше, но сделал.
>Советую убрать реальные даты, названия компаний, номера и фамилии из скриншота, заменить на вымышленные.
Убрал
>Тут код отформатирован ужасно: https://github.com/tsubaku/flights/blob/master/submit.php
Переформатировал. Теперь правильно? Перевёл в camelCase названия пхп-функций. Переменные не переводил, их слишком много.
>Если ты отдаешь JSON, то тип ответа должен быть application/json, не надо изобретать свои стандарты. И логично заголовки ставить не в начале скрипта, а перед отдачей самого JSON
Заменил text/plain на application/json везде, где возвращается JSON. Перенёс хидеры к echo json_encode. Нужны ли хидеры там, где только echo? А там, где вообще ничего нет, просто вызов функции?
> $pass = md5(md5(trim($pass)));
>Безопаснее использовать соленый хеш, как описано в моем уроке https://github.com/codedokode/pasta/blob/master/security/password-hashing.md
Заменил md5 на password_hash/password_verify
>При загрузке картинок нет проверки типа файла, человек загрузит .png или .txt, а ты его переименуешь в .jpg например.
Сделал проверку и корректное расширение для jpg, png, gif, остальным типам скрипт отказывает в загрузке.
> https://github.com/tsubaku/flights/blob/master/show_list_clients.php#L10
> while(list ($key, $val) = each ($_POST)){
>Это давно устарело, нужно использовать foreach тут
Переделал
>Название функции должно начинаться с глагола, то есть не protection, а redirectIfNoPrivileges(...)
Заменил на verifyAuthorization
> <a href='#' class='a_button_delete'
Ссылка должна куда-то вести. Для создания кнопки есть тег button.
Оформил в виде button. Немного поехала вёрстка кнопки, потом поправить.
> while ($i <= count($ru_rows_array)-1){
Тут нужно использовать foreach. Ты сишник наверно? Не надо тянуть плохие практики из Си в язык, где есть foreach.
Заменил в нескольких местах count на foreach
> if (is_null($_COOKIE['id'])
Это неправильно и вызовет ошибку, если в массиве нет ключа 'id'. У тебя наверно включено игнорирование предупреждений, или же ты не смотришь в логи ошибок, раз этого не видишь. Нужно использовать array_key_exists или isset здесь.
Хм, никаких ошибок в логах. Хотя, может быть я просто проверил не все случаи. Заменил is_null на empty.
https://github.com/tsubaku/flights/blob/master/functions.php#L187
> $info = getimagesize($path);
>Тут не проверяется вариант, когда функция вернет вместо массива false.
Добавил проверку


Что исправил с оговорками:
>В шаблонах у тебя вроде бы есть повторяющиеся куски - шапка страницы.
Шапки немного повторяются, но всё же есть различия и не думаю, что сливать общие части имеет смысл. Плюс, так их легче воспринимать. Я разделил скрипт core.js, вынеся в отдельные файлы скрипты менеджера и охранника, а в шаблонах убрал загрузку лишних скриптов.
>https://github.com/tsubaku/flights/blob/master/index.php#L10
> if ($user_level == 9) {
>Тут нужно ииспользовать константу с понятным названием вместо цифры
> $level = 'manager';
>И тот тоже желательно константу.
Немного переписал функцию проверки, теперь она возвращает ид, уровень доступа и фамилию. Проверку оставил по тому же условию.
> echo "<br />";
В HTML слеш в конце тега не ставится, в отличие от XML/XHTML.
Так у меня как раз XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> https://github.com/tsubaku/flights/blob/master/functions.php#L292
> header("Location: status_codes.php?result=403");
Если ты хочешь отдать код ответа HTTP, то надо его отдавать сразу. Потому что редирект - это код вроде 302. То есть ты вместо отдачи кода 403 отдаешь код 302 в ответ на запрос. И вместо "доступ запрещен" говоришь "страница переехала на другой адрес".
Я так и не понял, как сделать так, чтобы браузер при ошибках показывал суть ошибки. Ну или хотя бы стандартные коды. Так что просто заменил все редиректы на header("Location: login.php");

Что не удалось:
>Выделить публичную папку (т.е. папку для файлов, которые можно запросить снаружи) отдельно. Сейчас у тебя по сути все лежит в публичной папке веб-сервера, что небезопасно. Например, можно скачать шаблоны и увидеть их исходный код, а также скачать конфиг.
Выделил папку core, в неё перенёс все НЕ публичные пхп, шаблоны и закачиваемые фотографии. Но как закрыть её, не понимаю. .httaccess полностью рубит доступ и скрипты просто не работают. Как сделать так, чтобы сервер обращаться к ним мог, а левый юзер нет, я не нашёл информации.
>Тут https://github.com/tsubaku/flights/blob/master/show_list_clients.php в одном файле смешана логика и вывод данных в HTML, почитай про шаблоны http://web.archive.org/web/20161119062218/www.phpinfo.su/articles/practice/shablony_v_php.html
Немного переписал и упростил вывод таблиц охранников и клиентов, но как их шаблонизировать, я не знаю (статью читал). Данные в ячейки подставляются в цикле, имена ячеек тоже. При шаблонизации для каждой ячейки придётся писать отдельный вызов, получится монструозно.

>https://github.com/tsubaku/flights/blob/master/functions.php#L5
>Тут слишком сложная функция с слишком большой глубиной отступов
Да, функция монструозная. Я не знаю, как её изменить, ведь приходится обрабатывать каждую ячейку таблицы и обрабатывать дня неё данные, которые она содержит, и правила их отображения.

Что скажете?
Ответы: >>1021978
Аноним 2017/07/11 16:57:28  №1021332 96
>>1020900
http://ideone.com/lI5U84
Кто то может подсказать почему не работает функция увольнения. 168 Строка начала функции, в конце неё делаю ансет трём работникам. А в итоге все равно 101 работник.
Ответы: >>1021359
Аноним 2017/07/11 17:32:08  №1021359 97
>>1021332
>get_Workers_For_Destruction
:)

http://php.net/unset

>// удаляем один элемент массива
>unset($array['element']);

Больше Разрушителей в энтот тред!
Ответы: >>1021692
Аноним 2017/07/11 19:10:44  №1021421 98
ОП, какие есть способы оптимизировать вставку большого количества данных в БД, при условии использования доктрины? Я нагуглил это: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/batch-processing.html#bulk-inserts
Ещё что-то помню про отключение проверки внешних ключей на уровне СУБД. Это вопрос по поводу парсера старых/новых тредов: https://github.com/someApprentice/phpClub/tree/master/tests/ThreadParser
Прошу не проверять xpath-запросы, они скорее всего будут переписаны.
Ответы: >>1021824
Аноним 2017/07/11 19:27:27  №1021432 99
Как сделать конструктор лэндига для вордпресса в виде плагина с драг и дропом секций?
Ответы: >>1021823
Аноним 2017/07/11 19:37:32  №1021439 100
Кто-то под линупсом сидит? Все хочу перекатиться с винды, друг советует mint, посмотрел скрины - мне понравилось.

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

И раз уж спросил. я не шарю в линуксе и как там все устроено, поэтому вопрос возможно тупой, но Можно переустановить систему например с минт на убунту или наоборот без потери софтины и ее настроек?
Аноним 2017/07/11 20:17:14  №1021482 101
>>1021439
перекатывайся в Debian, мне уже четвертый месяц нрааится. если будешь переустанавливать, то софт тоже постигнет сия участь.
просто приготовься к ебле с линухом(рано или поздно заебешься с какой нибудь проблемой)
Ответы: >>1021526 >>1021823
Аноним 2017/07/11 20:38:48  №1021504 102
>>1021439
Без консоли в линуксе никак, но в один момент ты поймешь, что это не минус, а преимущество. Возня есть, но если ты все поставил как надо, то оно будет стоят как надо годами. Алсо, в винде тоже закидонов хватает. Во многих ситуациях, где в линуксе надо прописать одну команду в консоли, которая гарантировано сработает, для винды надо скачивать какой-нибудь экзешник и молиться, чтобы все встало как надо.
Аноним 2017/07/11 20:40:37  №1021505 103
>>1021439
Если есть деньги, то можешь купить мак. Это считай линукс, только удобный и красивый. Там тебе и МАМП будет, и нжинкс будет в родной среде вариться, и права доступа к файлам по человечески. В общем, все плюсы линукса в приятной оболочке.
Ответы: >>1021823
Аноним 2017/07/11 20:42:46  №1021509 104
>>1021439
хз что такое опенсервер, но по описанию унреал подходит генту
немного поебаться с установкой, если ты вообще не шаришь (но нужно уметь читать)
всякое лишнее говно супер легко убирается юз флагами
переключение между пхп\руби\питон\ядрами\видеодрайверами\почти-чем-угодно за 2 клика типа:
>eselect php list
>eselect php set 2

сам на линуксе <год, генту единственный юзабельный дистр
Ответы: >>1021526
Аноним 2017/07/11 20:58:13  №1021526 105
>>1021482
>если будешь переустанавливать, то софт тоже постигнет сия участь
да ну нах. Если я захочу перебить систему с линукса на линукс, то софтине пизда?
>Без консоли в линуксе никак
Я умею в консоль и понимаю, что пользоваться консолью это конечно круто, но я в рот ебал эти понты, когда можно два раза мышкой кликнуть
>>1021509
Я не шарю. Для меня дистрибутивы линукса отличаются только внешним видом
Ответы: >>1021580
Аноним 2017/07/11 21:57:02  №1021580 106
>>1021526
>Я умею в консоль и понимаю, что пользоваться консолью это конечно круто, но я в рот ебал эти понты, когда можно два раза мышкой кликнуть
Я так понимаю, про композер ты даже и не слышал?
Ответы: >>1021590
Аноним 2017/07/11 22:07:02  №1021590 107
>>1021580
Причем тут композер?
Ответы: >>1021591
Аноним 2017/07/11 22:07:49  №1021591 108
>>1021590
Имеет отношение к понтам.
Ответы: >>1021594
Аноним 2017/07/11 22:08:42  №1021594 109
>>1021591
это я понял, но как он поможет мне также быстро сменить версию пхп или апача, как я делаю это в опен сервере?
Ответы: >>1021609 >>1021613
Аноним 2017/07/11 22:21:57  №1021609 110
>>1021594
меньше всего ебли из коробки с этим в генте
ставь генту
Ответы: >>1021649
Аноним 2017/07/11 22:26:22  №1021613 111
>>1021594
= тому сколько ебли поставить memcache в опенсервере , алсо для смены можно сделать скрипт который так же по запуску будет менять как и 2 щелчка в GUI
Ответы: >>1021649
Аноним 2017/07/11 23:14:23  №1021649 112
Ответы: >>1021684
Аноним 2017/07/12 00:06:14  №1021671 113
Как можно удалить элемент массива по ключу?
unset($arrays[1]);?
Ответы: >>1021823
Аноним 2017/07/12 00:36:04  №1021684 114
>>1021649
иди на форточки и ебись со своим дерьмом заебал
Ответы: >>1021688 >>1021823
Аноним 2017/07/12 00:49:23  №1021688 115
Аноним 2017/07/12 01:08:44  №1021692 116
Ответы: >>1021803 >>1021821
Аноним 2017/07/12 09:37:38  №1021761 117
>>1021439
Линукс > Виндовс для разработчика
Бери mint с ним будет меньше всего мороки
С gentu тебя тролят, mac оверпрайс

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

Ответы: >>1021921
Аноним 2017/07/12 11:33:07  №1021803 118
>>1021692
>Departament
Незачет тебе по английскому.
Аноним 2017/07/12 12:06:05  №1021821 119
>>1021692

> add_departament
> get_Count_Workers
Что за нестандартный стиль названий функций? PSR рекомендует camelCase для методов:

- https://svyatoslav.biz/misc/psr_translation/#_PSR-1
- https://svyatoslav.biz/misc/psr_translation/#_PSR-2

> public function print_Info()
Вот это лучше бы вынести из Компании наружу, так как у каждого класса должна быть своя зона ответственности. Если у Компании зона отвественности - хранить список департаментов и считать по ним статистику, то вывод информации - это какая-то другая деятельность, которая явно должна делаться в другом месте.

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

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

> //Cократить в каждом департаменте 40% (округляя в большую сторону) инженеров,
> //преимущественно самого низкого ранга.
> public function Destruction_Workers
Тут та же проблема. Это сильно специфический метод, написанный под одну конкретную задачу (антикризисные меры), и его лучше вынести в отдельный класс. А так, ты по сути взял код, который должен быть в отдельном классе и размазал по Компании и Департаменту.

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

Гораздо аккуратнее будет если Компания будет заведовать списком департаментов, а специфичные вещи вроде "найти и уволить 40% рабочих" будут в отдельном классе для антикризисных мер.

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

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

> Destruction_Workers
Имена функций начинаются с глаголов, сделатьЧтоТо

> public function add_Workers($count, $rank, $proffesion, $is_Head)
Этот метод сам создает работников, и не позволяет добавить уже созданного где-то в другом месте работника. Лучше сделать добавление именно готового объекта, это будет универсальнее.

> public function get_Workers_And_Destruction($count_in_percent,$proffesion)
Тут функция просто создана методом копирования кода. Так не годится. Нужно убрать повторяющийся код.

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

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

> PHP Notice: Undefined variable: sum_salary in /home/UH8YEW/prog.php on line 139
> PHP Notice: Undefined variable: sum_pages in /home/UH8YEW/prog.php on line 155
> PHP Notice: Undefined variable: sum_salary in /home/UH8YEW/prog.php on line 139
> PHP Notice: Undefined variable: sum_coffee in /home/UH8YEW/prog.php on line 147
> PHP Notice: Undefined variable: sum_pages in /home/UH8YEW/prog.php on line 155
Ответы: >>1022062
Аноним 2017/07/12 12:06:25  №1021823 120
>>1021684

Не надо добавлять бесполезные посты в этот тред

>>1021671

да

>>1021505

Это не линукс, например, там нет неймспейсов тех же.

>>1021439

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

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

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

Насчет разных версий PHP - в линуксе есть штука https://github.com/phpbrew/phpbrew которая умеет скачивать и компилировать нужные версии PHP, а потом переключать переменные окружения, чтобы их использовать. Разумеется, тебе придется изучить, как она работает. А так, большинство версий линукса не поддерживают стандартным способом установку 2 версий одной программы.

>>1021482

Только Debian лучше ставить Testing, а то в Stable софт стабильный, но старый.

>>1021432

В смысле, "как"? Не очень понятно, как ответить на твой вопрос. Проектируешь, как это должно работать, и реализуешь.
Аноним 2017/07/12 12:06:50  №1021824 121
>>1021421

Вообще, в MySQL есть раздел мануала на эту тему https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html

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

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

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

Пример, который приведен в мануале, использует flush для группы записей, чтобы вставлять N записей одной транзакцией, и clear, чтобы очистить память (так как Доктрина хранит ссылки на все управляемые ей объекты и потребление памяти без этого будет быстро расти, а также будет змедляться flush, так как он обходит все объекты). Недостаток clear в том,что он убирает все объекты из-под управления доктрины (то есть делает на них detach) и его нельзя применять, если какой-то другой код держит ссылки на эти объекты, и планирует дальше с ними работать. То есть clear годится только для каких-то скриптов импорта, но его не стоит использовать в середине приложения, так как он сломает загруженные ранее сущности.

Ответы: >>1022181
Аноним 2017/07/12 14:57:27  №1021921 122
>>1021761
В генте быстрая смена версий пхп и прочего из коробки в виде системы слотов тащемта, не пизди если не шаришь. Гента ультрагибкая и удобная штука, ее можно подогнать под любые задачи, просто порог вхождения несколько выше чем у дебиана например. Если не гента, то только дебиан, все эти коляски в виде его форков типа минта или там убунты вообще не нужны.
Аноним 2017/07/12 16:32:22  №1021975 123
>>1021195
Пришел джуном, поставили в парное программирование с более опытным специалистом, начал делать АПИ для одной системы. Работаю с фреймворком, оперативными хранилищами, серверами очереди, и очевидно с БД. Сейчас все примерно так же, только работаю один.
Ответы: >>1021998
Аноним 2017/07/12 16:45:06  №1021978 124
>>1021262

https://github.com/tsubaku

Сначала отвечу на пост:

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

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

> Переформатировал. Теперь правильно?
Не очень:

https://github.com/tsubaku/flights/blob/master/login.php
Тут нужно убрать самый первый отступ (после <?php), то есть строка require_once('./core/php/functions.php'); идет без отступа. Для отступов лучше использовать 4 пробела, а не таб.

https://github.com/tsubaku/flights/blob/master/core/php/submit.php
Тут отступы вообще разные. Почему отступ в строке 22 - 8 пробелов? должно быть 4. И почему там так много пустых строк? Пока что плохо.

Рекомендации PSR можно почитать тут в переводе

- https://svyatoslav.biz/misc/psr_translation/#_PSR-1
- https://svyatoslav.biz/misc/psr_translation/#_PSR-2

Код можно форматировать автоматически, через сайт или IDE, вот ссылка https://gist.github.com/codedokode/8759492

Не понимаю, в чем проблема прогнать файл через сайт или нажать комбинацию клавиш в IDE.

> Нужны ли хидеры там, где только echo? А там, где вообще ничего нет, просто вызов функции?
header логично ставить радом с echo так как они относятся к одной задаче, и header должен срабатывать только когда выводится JSON. А когда ты их ставишь в разных местах, то это во-первых нелогично (мы сначала сообщаем, что будет выведен JSON, а только потом где-то в другом месте его выводим), во-вторых может вести к ошибкам, когда выводится header с application/json а потом выводится не JSON, а обычный текст или например сообщение об ошибке.

То есть нелогично функцию вывода JSON разделять на 2 части и разбрасывать их в разные места кода.

Кстати, тут тоже нелогично: https://github.com/tsubaku/flights/blob/master/core/php/show_list_clients.php
В заголовках указан тип text/plain, а затем идет вывод HTML кода.

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

> Сделал проверку и корректное расширение для jpg, png, gif, остальным типам скрипт отказывает в загрузке.
Пока не очень удачно. Тут https://github.com/tsubaku/flights/blob/master/core/php/submit.php#L25 ты проверяешь тип файла, который берется из тела POST запроса и указывается браузером. Но браузер может там указать что угодно. Надежднее проверить расширение.

>> if (is_null($_COOKIE['id'])
>> Это неправильно и вызовет ошибку, если в массиве нет ключа 'id'.
> Хм, никаких ошибок в логах.
Вот пример, показывающий ошибку: http://ideone.com/bMeVWL

Возможно у тебя в php.ini включено игнорирование ошибок с помощью настройки error_reporting (зачем так делать??) или отключено их логгирование. Или у тебя всегда есть эта кука.

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

> Я так и не понял, как сделать так, чтобы браузер при ошибках показывал суть ошибки. Ну или хотя бы стандартные коды. Так что просто заменил все редиректы на header("Location: login.php");
Ты выводишь HTTP заголовок, затем тело страницы. Что тут сложного?

header("HTTP/1.0 500 Internal Error");
echo "Everything is broken, sorry\n";
die();

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

> Выделил папку core, в неё перенёс все НЕ публичные пхп, шаблоны и закачиваемые фотографии. Но как закрыть её, не понимаю.
У сервера есть такая настройка, как "корневая папка" (в Апаче она называется document root, в нгинксе root). Ты создаешь у себя папку public и в настройках веб-севрера прописываешь путь к ней как document root, например в Апаче:

DocumentRoot /var/www/example.com/public/

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

> Немного переписал и упростил вывод таблиц охранников и клиентов, но как их шаблонизировать, я не знаю
Элементарно это делается. В скрипте-контроллере ты подготавливаешь данные:

$guards = getGuardsList();
// подключаем шаблон
require 'templates/guards.phtml';

В шаблоне формируешь и выводишь HTML страницу:

<?php require __DIR__ . '/header.php'; ?>

<h1>Охранники</h1>
<ul>
<?php foreach ($guards as $guard): ?>
<li><?= htmlspecialchars($guard['name']) ?></li>
<?php endforeach ?>
</ul>

<?php require __DIR__ . '/footer.php'; ?>

> https://github.com/tsubaku/flights/blob/master/core/php/functions.php#L224
> unset($row_content); // разорвать ссылку на последний элемент
Эта строчка вообще смысла не несет, так как она стоит в конце функции, а все локальные переменную удаляются при выходе из функции.

Вот еще проблемное место:

> function showTable($year, $month)
> ...
> $stmt = $pdo->query('INSERT INTO flights () VALUES()'); //Добавляем пустую строку
Функция вывода таблицы не должна ее модифицировать.

> https://github.com/tsubaku/flights/blob/master/core/php/write_in_table.php
Тут нечитаемая стена кода, надо выносить из нее отдельные функции.

> Вопрос про функцию showTable()
> Да, функция монструозная. Я не знаю, как её изменить, ведь приходится обрабатывать каждую ячейку таблицы и обрабатывать дня неё данные, которые она содержит, и правила их отображения.
Сначала нужно разделить получение данных и их вывод. Сначала получаем все данные из БД, только потом выводим.

При этом часть кода можно выносить в отдельные функции. Вот например вначале идет кусок лапши, получающий список рейсов между 2 датами. Его легко вынести в отдельную функцию:

$flights = getFlightsInRange($fromDate, $toDate);

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

Точно так же можно вынести например получение списка охранников (getGuardList()), получение названия месяца по номеру (getMonthName()), и тд.

После того, как все данные выбраны в переменные, вызываем шаблон для вывода HTML кода.

HTML код выводить, как у тебя, с помощью echo, очень неудобно и неэффективно.

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

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

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

Соответственно, сейчас тебе надо работать над разделением:

- вынести весь HTML код в шаблоны
- вынести весь SQL-код в функции в отдельном файле или файлах, то есть сделать отдельный слой доступа к базе данных, а не размазывать это по всему коду

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


Ответы: >>1021991 >>1021991
Аноним 2017/07/12 17:26:48  №1021991 125
>>1021978
>https://github.com/tsubaku/flights/blob/master/login.php
>Тут нужно убрать самый первый отступ (после <?php), то есть строка require_once('./core/php/functions.php'); идет без отступа. Для отступов лучше использовать 4 пробела, а не таб.
Блин, про manager.php, index.php, guard.php и login.php я забыл. Сделаю.
>https://github.com/tsubaku/flights/blob/master/core/php/submit.php
>Тут отступы вообще разные. Почему отступ в строке 22 - 8 пробелов? должно быть 4. И почему там так много пустых строк? Пока что плохо.
Хм, submit.php тоже забыл. Странно. Вроде я все файлы по очереди переформатировал.
>Код можно форматировать автоматически, через сайт или IDE, вот ссылка https://gist.github.com/codedokode/8759492
Через него и делал.
>То есть нелогично функцию вывода JSON разделять на 2 части и разбрасывать их в разные места кода.
Не понял. Там же только одна команда вывода json. В каком смысле "разбивать на 2 части"?
>Кстати, тут тоже нелогично:
>https://github.com/tsubaku/flights/blob/master/core/php/show_list_clients.php
>В заголовках указан тип text/plain, а затем идет вывод HTML кода.
А html - это не text/plain?
>И еще, у тебя по прежнему остается проблема копипасты. Например антикеширующие заголовки ты копипастишь из файла в файл, а надо сделать функцию с понятным названием и вызывать ее. Копипаста это плохо, от нее надо избавляться.
Хорошо, функцию сделаю. Но вот именно проблему копипасты не понимаю. Если что-то работает, и работает правильно, то как это переписывать?
>Но браузер может там указать что угодно. Надежднее проверить расширение.
Я гуглил на эту тему и когда кто-то в похожей ситуации делал проверку по расширению, ему так же указывали, что "клиент может послать что угодно, надёжнее проверять по типу". Олсо, не всё ли равно? Законопослушный юзер отправить jpg под видом jpg и всё будет нормально. А незаконопослушный отправит какую-нибудь НЁХ, но сервер переименует её в jpg и при обращении просто не откроет.
>>1021978
>Возможно у тебя в php.ini включено игнорирование ошибок с помощью настройки error_reporting (зачем так делать??) или отключено их логгирование. Или у тебя всегда есть эта кука.
Не включено. Я вручную удалял из браузера куки, ошибок не было, браузер корректно перенаправлял на страницу логина.
>Очевидно же, что у страниц в твоем проекте будут общая шапка, и может быть, подвал.
Но они не одинаковые. В шапке подключаются разные скрипты, выводится разные title, у охранника там дополнительно прописывается срока для мобильных устройств.
>Ты выводишь HTTP заголовок, затем тело страницы. Что тут сложного?
>Я вообще не понимаю, что сложного так сделать и зачем тут понадобился редирект.
А, так это пишется вручную. Теперь понятно. А редирект для удобства юзера.
>и в настройках веб-севрера прописываешь путь к ней как document root, например в Апаче:
У меня нет доступа к настройкам сервера. Вернее, на локалхосте есть, а вот на продакшене всё крутится у хостера (там всего-то статичный сайт нашей конторы, а этот сервис я делаю как бы его подсистемой).
Я посмотрю, как там это устроено.
>Элементарно это делается. В скрипте-контроллере ты подготавливаешь данные:
Я попробую.
> unset($row_content); // разорвать ссылку на последний элемент
>Эта строчка вообще смысла не несет
Блин, точно.
> function showTable($year, $month)
> ...
> $stmt = $pdo->query('INSERT INTO flights () VALUES()'); //Добавляем пустую строку
>Функция вывода таблицы не должна ее модифицировать.
Ну, в общем, да. Я тоже думал вынести скрипт добавления строки в отдельную функцию, а потом вызывать её, но вызывать-то всё равно придётся. Если в указанном месяце нет ни одного рейса, то должна втоматически создаваться пустая строка для нового рейса и после этого показываться таблица, состоящая из пустой строки.
> https://github.com/tsubaku/flights/blob/master/core/php/write_in_table.php
>Тут нечитаемая стена кода, надо выносить из нее отдельные функции.
Большая часть стены - case. В зависимости от того, куда вставлены данные, скрипт должен либо просто их прописать в базу, либо пересчитать связанные с этой ячейкой другие ячейки строки. Разделить на функции, конечно, можно, и я сделаю, раз так надо.

Остальные комментарии тоже приму к сведению.

>Я еще раз напомню, что у нас в ОП посте есть задача на список студентов.
Я с ней ознакомился. Кое-что применил, что смог. Мне кажется, у меня мозги слишком крепко пропитаны админством и сложно уловить подход программистов. Но я буду продолжать переписывать код и дальше.
Ответы: >>1022011
Аноним 2017/07/12 17:43:46  №1021998 126
>>1021975
>оперативными хранилищами, серверами очереди
шо это за хуйня?
Ответы: >>1022011
Аноним 2017/07/12 18:11:05  №1022009 127
>>1021099

Работа с исключениями сделана абсолютно неправильно:

> try { }
> catch (\Exception $e) {
> Yii::warning($e->getMessage());
> return $this->redirect(Yii::$app->request->referrer);

Что за бред? В приложении происходит ошибка, и ты просто редиректишь на referer (а кстати, что если он пустой?). При ошибке надо вывести страницу ошибки, а не скрывать этот факт. Это ведь тебе самому потом усложнит поиск причин.

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

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

Вот простой пример, чем плох твой код. У тебя есть действие контроллера для рассылки сообщений actionMassSend(). Но что, если нам понадобится вызвать это действие где-то программно? У тебя нет функции вроде sendMassMessage($message, $users) и нам придется писать код заново. Ты не почему-то не додумался вынести это действие в отдельную функцию, а вписал в контроллер, перемешав с кодом получения данные из формы и кодом отдачи ответа пользователю.

>>1021061

Спасибо, сайтгайд хороший.

>>1021030

> Изменение номера - https://ideone.com/KJxmSg
Ок, верно

> Автозамена - https://ideone.com/LaOqC8
Ок, тоже верно

> Вывод email - https://ideone.com/NCD54g
Не найдется email [email protected]

> Grammar Nazi - https://ideone.com/BR95EM

Эти однотипные строки надо объединить в одну регулярку:
$text = preg_replace('/[,](\\S)/ui', ', $1', $text);
$text = preg_replace('/[;](\\S)/ui', '; $1', $text);
$text = preg_replace('/[!](\\S)/ui', '! $1', $text);

И эти объединить:
> $text = preg_replace('/жы/ui','жи', $text);
> $text = preg_replace('/шы/ui','ши', $text);

> $text = preg_replace('/(\\S) а /', '$1, а ', $text);
Нужно еще правило для "но"
Ответы: >>1022194
Аноним 2017/07/12 18:11:29  №1022010 128
>>1021023

> Можешь объяснить, чем плохи чистые функции, зачем городить эти Utility service?
Я думаю, ради DI, если тебе нужна ссылка на другой сервис, то надо использовать DI. Если не нужна, можно наверно и обычные функции.

>>1020161

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

>>1020741

Какая версия дистрибутива? И почему версия PHP какая-то левая, что еще за blackfire? ты каких-то странных патчей туда наустанавливал, возможно в этом проблема?

Что значит "все ломается"

Из твоего поста ничего понять нельзя.

>>1020506

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

Ну и она не на русском.

А ты видел это? https://github.com/codedokode/task-checker

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

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

>>1020356

Нужно вынести файлы за пределы публичной папки (корня сервера).
Ответы: >>1022210
Аноним 2017/07/12 18:11:45  №1022011 129
>>1021991

> Не понял. Там же только одна команда вывода json. В каком смысле "разбивать на 2 части"?
Вывод JSON ответа состоит из 2 действий:

- добавить заголовок Content-Type с значением application/json
- вывести тело ответа (JSON код)

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

> А html - это не text/plain?
Это text/html: https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_MIME-%D1%82%D0%B8%D0%BF%D0%BE%D0%B2

text/plain значит "обычный текст без тегов и форматрования". Браузер отобразит его просто черным текстом на белов фоне как есть.

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

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

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

setNoCacheHeaders();

гораздо понятнее и читабельнее чем 2 строки с header.

> Я гуглил на эту тему и когда кто-то в похожей ситуации делал проверку по расширению, ему так же указывали, что "клиент может послать что угодно, надёжнее проверять по типу
Имя файла присылается всегда, а где гарантия, что браузер правильно определит и пришлет тип? У тебя есть информация, какие типы файлов какой браузер "знает", а какие нет? У меня нет такой информации например. Никто не запрещает прислать браузеру тип application/octet-stream например.

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

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

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

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

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

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

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

>>1021998

видимо redis/rabbitmq
Ответы: >>1025277
Аноним 2017/07/12 19:27:58  №1022062 130
>>1021821
>Что за нестандартный стиль названий функций? PSR рекомендует camelCase для методов:

Думал что стиль названия для всего один. А оказывается для всего разные. fixed

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

А нормально что он будет в функции которая не в классе, а сама по себе?

>Гораздо аккуратнее будет если Компания будет заведовать списком департаментов, а специфичные вещи вроде "найти и уволить 40% рабочих" будут в отдельном классе для антикризисных мер.

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

>Имена функций начинаются с глаголов, сделатьЧтоТо

Заменил на destroy. А как я понимаю этот глагол пишется с маленькой буквы.

>> public function get_Workers_And_Destruction($count_in_percent,$proffesion)
>Тут функция просто создана методом копирования кода. Так не годится. Нужно убрать повторяющийся код.

Как я понял это про копирование foreach 3 раза. Сделал адекватно.

>Этот метод сам создает работников, и не позволяет добавить уже созданного где-то в другом месте работника. Лучше сделать добавление именно готового объекта, это будет универсальнее.

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

>Гораздо аккуратнее будет если Компания будет заведовать списком департаментов, а специфичные вещи вроде "найти и уволить 40% рабочих" будут в отдельном классе для антикризисных мер.

Я сделал отдельный класс. В нем функцию. и дальше если я пытаюсь эту фунецию на компанию использовать то ошибка. Не понимаю как сделать.

Есть еще вопрос насчет того что все переменные в классах закрыты и из за этого приходится делать кучу функций геттеров и сеттеров. Это нормально так делать? Всегда так надо делать? Почему бы не сделать все паблик и тогда код сократится в 2-3 раза, потому что не будет этих бесполезных функций getRank и тд.

Еще вопрос что плохого в классе монстре. Хочешь использовать функцию или сделать. Через поиск проверяешь нет ли такой и используешь/делаешь.
Ответы: >>1022071 >>1024904
Аноним 2017/07/12 19:50:01  №1022071 131
Аноним 2017/07/12 22:37:30  №1022173 132
>>1019301 (OP)
Всем привет. Застрял в самом начале :с
Вот код:

1) <?php
2)
3) error_reporting(-1)
4)
5) echo "Бросаем кубик... \n";
6) $random = mt_rand(1,6) ;
echo "Выпало $random\n";

Выдает ошибку:
PHP Parse error: syntax error, unexpected 'echo' (T_ECHO) in /home/jZlt7x/prog.php on line 4

Я так понимаю у меня что-то не так с кавычками, а что сними не так? Или что не так?
Ответы: >>1022181
Аноним 2017/07/12 22:49:11  №1022181 133
>>1022173
Ты забыл точку с запятой в конце третьей строки.

>>1021824
Спасибо за ответ.
Ответы: >>1023903
Аноним 2017/07/12 22:52:29  №1022184 134
объясните дауну как решить задачу с сайта для начинающих из оп поста
http://codepad.org/nm9jPcpd
перебрал дохуа вариантов, боюсь окончательно ебанутся
Ответы: >>1022265
Аноним 2017/07/12 23:15:00  №1022194 135
>>1022009
>При ошибке надо вывести страницу ошибки
Ну она ругается в лог, а пользователю об это знать и не обязательно, хотя я наверное хотел проставлять там flash message ибо просто редирект это хрень конечно
Это единственная ошибка с исключениями?
> типичный толстый контроллер
Об этом я тоже думал, но я хз, как оценивают код и что там хотят увидеть те люди которые его просят ("Контроллер строк на 300, максимально написанных вами")
Вот я и запихнул туда этот метод, а то в контролере только вызовы сервисов и методов моделей и будут.
Или они хотят видеть патернизацию всего, а логика не так важна...
Увы у меня особо нет времени запилить годный большой резюме-проект, а на текущей работе говнокод и суровая реальность

Ответы: >>1022273
Аноним 2017/07/12 23:45:13  №1022210 136
>>1022010
>Какая версия дистрибутива? И почему версия PHP какая-то левая, что еще за blackfire? ты каких-то странных патчей туда наустанавливал, возможно в этом проблема?
Что значит "все ломается"
Из твоего поста ничего понять нельзя.

это версия пхп, который в коробке хомстед в вагранте скрин с терминала под ссх, там все настроено и установлено заранее, в этом и понт этого вагранта. а вот мкрипта нет. устанавливаю туда, по ссх мкрипт и вылазит при просмотре в браузере: No input file specified везде
Аноним 2017/07/13 01:13:32  №1022265 137
Ответы: >>1023888
Аноним 2017/07/13 01:51:48  №1022273 138
>>1022194
>Или они хотят видеть патернизацию всего, а логика не так важна...
this
Аноним 2017/07/13 05:54:26  №1022830 139
Но за большее количество раз и при этом
смотреть на нее
Аноним 2017/07/13 05:58:22  №1023120 140

Рассердился на такое дело царевич, и как даст ему крапивой по правому яйцу!
Аноним 2017/07/13 09:04:31  №1023888 141
>>1022265
спасибо,один в один делал так же, видимо ебаный синтаксис
Ответы: >>1023904
Аноним 2017/07/13 09:48:54  №1023903 142
Аноним 2017/07/13 09:49:26  №1023904 143
>>1023888
я тоже тупил на этом месте чето
это математика, а не синтаксис, лол
выплатил 60000 = $paymentTotal
тебе нужно отдать 1270 = $creditBalance
ты отдаешь 5к $paymentTotal = 65k
долг $creditBalance = -3630
if ($creditBalance < 0)
тебе дают сдачу
$paymentTotal= $paymentTotal + $creditBalance;
Ответы: >>1023912
Аноним 2017/07/13 09:56:08  №1023912 144
>>1023904
ну что ты за человек, сделал так же говорю, но правильный результат не выводился
2017/07/13 11:02:18  №1023957 145
антоны есть какой-нибудь изи способ добавлять записи с какого-нибудь фейсбука\да и вообще любого сайта к себе на через пхп+мускл?
тупо в текстовом варианте
какие вообще есть способы для этого?
Ответы: >>1023987
Аноним 2017/07/13 11:56:12  №1023987 146
>>1023957
С фейсбука ты можешь воспользоваться их API, благо у них неплохая документация с Explorer'ом.

А с любого другого сайта могу посоветовать лишь парсить верстку, советую с мобильной версии.
Я пользовался несколькими библиотечками, быстрее всего оказалась pharse от ressio.
Аноним 2017/07/13 14:21:57  №1024084 147
я не смог осилить пхп...
Ответы: >>1024090
Аноним 2017/07/13 14:34:11  №1024090 148
>>1024084
Я осилил php, когда мне было 11. Сейчас мне 26.
Тебе 10?
Ответы: >>1024094 >>1024104
Аноним 2017/07/13 14:47:19  №1024094 149
Аноним 2017/07/13 15:01:22  №1024104 150
>>1024090
А когда мне было десять лет ПХП еще не изобрели и программировать я мол разве что на БЭСМ
Аноним 2017/07/13 15:02:29  №1024105 151
какая разница между передачей по значению и по ссылке?
Ответы: >>1024114
Аноним 2017/07/13 15:11:49  №1024114 152
Аноним 2017/07/13 16:47:38  №1024189 153
Ответы: >>1024652
Аноним 2017/07/13 16:49:56  №1024192 154
Господа, как сделать, чтобы strpos работало под кириллицей?
<?
$what="буквы";
$where="здесь буквы кириллицы";
echo mb_strpos($where, $what, 0, 'UTF-8');
?>
Этот код не хочет работать. PHP 7.
Ответы: >>1024200 >>1024202
Аноним 2017/07/13 17:17:48  №1024200 155
>>1024192
><?
>$what="буквы";
>$where="здесь буквы кириллицы";
>echo mb_strpos($where, $what, 0, 'UTF-8');
>?>

Попробуй

<?php
$what="буквы";
$where="здесь буквы кириллицы";
echo mb_strpos($where, $what, 0, 'UTF-8');
Ответы: >>1024205
Аноним 2017/07/13 17:20:26  №1024202 156
>>1024192

Если на ideone, то там не поддерживаются mb-функции, ищи другой сервис выполнения PHP кода.
Ответы: >>1024205
Аноним 2017/07/13 17:23:59  №1024205 157
>>1024202
>>1024200
Не работает.
Я на своем сервере запускаю, не ideone.
Может надо как-то настроить php-fpm?
Ответы: >>1024211
Аноним 2017/07/13 17:33:57  №1024211 158
>>1024205

В чем проявляется "не работает"? Ошибка какая-то пишется или что? Что в логах? Установлено ли расширение mbstring (можно посмотреть в phpinfo())?
Ответы: >>1024219
Аноним 2017/07/13 17:45:05  №1024217 159
фреймворки ставятся только на линукс?
Ответы: >>1024231
Аноним 2017/07/13 17:52:18  №1024219 160
>>1024211
FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Call to undefined function mb_strpos() in /var/www/html/test.php:38


И где там посмотреть установлено ли оно? Ввел в поиск ctrf-f - не нашло mbstring.
У меня чистый php-fm на убунте. Как установить mbstring?
Ответы: >>1024248
Аноним 2017/07/13 18:19:33  №1024231 161
>>1024217
Только на macOS. Для установки необходимо смузи
Аноним 2017/07/13 18:30:59  №1024242 162
Ответы: >>1024244
Аноним 2017/07/13 18:34:04  №1024244 163
Ответы: >>1024247
Аноним 2017/07/13 18:40:51  №1024247 164
>>1024244
знаю.но он у меня тяжелее пошел
Ответы: >>1024255
Аноним 2017/07/13 18:41:50  №1024248 165
>>1024219

Посмотреть с помощью php -m или функции phpinfo()

Установить так:

apt-cache search php

найти там mbstring и установить с помощью sudo apt-get install
Ответы: >>1024253
Аноним 2017/07/13 18:53:41  №1024253 166
>>1024248
Спасибо, установил через
sudo apt-get install php7.0-mbstring
Всё заработало.
Аноним 2017/07/13 18:56:26  №1024255 167
>>1024247
От твоего учебника у тебя только мусор в голове останется.
w3schools не объясняет такие базовые вещи как
foreach ($arr as &$value) {
$value = $value * 2;
}
обрати внимание на амперсанд перед $value

Не говоря про темы, которые ты пропустишь, например:

http://php.net/manual/ru/language.oop5.autoload.php
http://php.net/manual/ru/language.namespaces.php
http://php.net/manual/ru/language.oop5.late-static-bindings.php
Ответы: >>1024266
Аноним 2017/07/13 19:08:15  №1024266 168
>>1024255
так этот курс не претендует на объемное изучение.но для быстрой базы самый раз
Ответы: >>1024278
Аноним 2017/07/13 19:21:41  №1024278 169
>>1024266
Базы для чего? Для натягивания шаблонов на вордпресс - возможно. Для уверенного пользования современными PSR фреймворками - нет не достаточно. Да и вообще, как я указал в начале, w3schools не дает правильного понимания php. Официальная документация методически правильно излагает материал от простого к сложному.
Ответы: >>1024293
Аноним 2017/07/13 19:35:50  №1024293 170
>>1024278
там много заумных объяснений,либо все кратко отчего местами нихуя не понятно,если ты изучал до этого к-л язык то все пойдет конечно норм
Аноним 2017/07/13 19:48:43  №1024308 171
как в ХAMPP вручную через консоль, командами работать с БД?
Ответы: >>1043644
Аноним 2017/07/13 20:17:18  №1024337 172
<input type="hidden" name="the_checkbox" value="0" />
<input type="checkbox" name="the_checkbox" value="1" />

Можно ли писать такой код чтобы потом удобнее обрабатывать было в php форму? А то isset'ом проверять не очень как-то.
Ответы: >>1043642
Аноним 2017/07/13 21:31:27  №1024423 173
>Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
Это ебаша по пять часов в день? Сколько мне понадобится времени, если уделять по два часа в день, чтобы достигнуть такого уровня, чтобы взяли на работу хотя бы "за еду"?
Зачачи Аноним 2017/07/13 22:40:51  №1024516 174
Ответы: >>1024555 >>1025479
Аноним 2017/07/13 23:22:23  №1024555 175
Ответы: >>1024989
Аноним 2017/07/13 23:35:51  №1024561 176
Задачу на банкомат можно решить следующим алгоритмом?
Сначала проверяет на наличие купюр, если ключ(кол-во купюр) таковой равен нулю, то удаляет её из массива. После сумма делится на последний элемент массива, попутно считая купюры и отнимая один от ключа до тех пор, пока он не станет равен нулю. После следующий и так далее.
Ответы: >>1025469
Аноним 2017/07/14 06:37:04  №1024652 177
Аноним 2017/07/14 15:23:46  №1024904 178
Ответы: >>1025469
Аноним 2017/07/14 15:29:56  №1024908 179
Почему symfony3 запущенный в dev моде работает с очень большой задержкой. Запускал на был в build-in сервере и на nginx+fpm
Ответы: >>1025319
Аноним 2017/07/14 17:48:41  №1024989 180
>>1024555
Так в задании написано "выделяет квадратными скобками первую замененную букву". Разве нужно остальные выделят?
Аноним 2017/07/14 23:00:19  №1025212 181
Аноны, посоветуйте пожалуйста идеи для портфолио на гитхаб. Я только только выучил основы ооп php, хочу че нибудь сделать, что бы потом показать на собеседовании на стажера, но вобще ни одной мысли. Хелп!
Ответы: >>1025247 >>1025319
Аноним 2017/07/14 23:54:18  №1025247 182
>>1025212
Та же хуйня. Взялся делать хайп, мимо из прошлого треда
Ответы: >>1025319
Аноним 2017/07/15 00:35:04  №1025277 183
>>1022011
Я после твоих последних постов так и не смог найти силы переписывать программу. Руки опустились.
Ответы: >>1025299 >>1025479
Аноним 2017/07/15 01:01:18  №1025299 184
>>1025277
Когда ты вбрасывал программу в тред, ты думал, что за тебя найдут ошибки.
Теперь ты думаешь, что кто-то даст тебе мотивацию.
Потом у тебя что-то не получиться, и ты попросишь решить проблему за тебя.


Реши блядь уже свои собственные проблемы самостоятельно. Тебе уже охуительно сильно помогают искать ошибки. Цени чужое потраченное на тебя время.
Ответы: >>1025304
Аноним 2017/07/15 01:06:01  №1025304 185
>>1025299
Ценю. Реально дотошный разбор ошибок (это положительная оценка, если что).
Ответы: >>1025305
Аноним 2017/07/15 01:07:22  №1025305 186
>>1025304
Так делай, если не хочешь чтобы оно было потрачено зря.
Аноним 2017/07/15 03:09:31  №1025319 187
>>1025212
>>1025247

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

>>1024908

Ну, если у сайта один пользователь то особой разницы между fpm и built-in сервером и нет.

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

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

Стоит помнить только, что включение отладки повлияет на код и он будет работать еще медленнее.

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

- наконец, есть еще poor man profiling, то есть ручная расстановка по коду команд вывода текущей функции и время, прошедшее от начала запроса. Это конечно может занять много времени.

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

Я тебе советую сделать какой-то тестовый контроллер, который просто выводит hello world, чтобы исключить проблемы в твоем коде.

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

- включить opcache. Это расширение кеширует скомпилированные скрипты в памяти и избавляет от необходимости компилировать их повторно
- проверить настройки Доктрины, особенно если ты используешь много сущностей. Она в зависимости от настроек может собирать метаданные из кода сущностей и генерироват прокси классы на лету, что увеличивает время выполнения
Аноним 2017/07/15 12:37:40  №1025359 188
2.jpg (53, 820x683)
683x820
3.jpg (37, 726x185)
185x726
Подскажите пожалуйста, где взять имя и временное имя файла?
И почему не добавляется запись в таблицу
Ответы: >>1025361 >>1025394
Аноним 2017/07/15 12:38:09  №1025361 189
Ответы: >>1025394
CSS Animation goes back slower than forward. A html class toggles with delay. Аноним 2017/07/15 12:51:09  №1025364 190
Hello,
I did a roll up/down menu with CSS transitions. It's based on toggling classes with different "max-height". Very simple case, but it doesn't work in a way I expect it to.

The problem is: the menu goes back only after a certain delay, (which is depends on an animation time). Maybe something wrong with my JS, bc it seems like the browser toggles the class with delay (and only then the animation fires).

Here's codepen. You click to open it - it rolls down fast, you click to close it - it waits 2 seconds and only then rolls down: https://codepen.io/anon/pen/dRrwQB
Ответы: >>1025423 >>1025432 >>1025478
Аноним 2017/07/15 14:11:24  №1025391 191
>Нихуя не понял генераторы
>первая же js задача ввела ступор
дайте решение.
Ответы: >>1025419 >>1025477
Аноним 2017/07/15 14:27:34  №1025394 192
Аноним 2017/07/15 15:46:32  №1025419 193
>>1025391
Там не нужно использовать ES6 генераторы, если ты о них. Достаточно написать функцию, возвращающую функцию, которая в свою очередь инкрементирует и возвращает значение из замыкания. Почитай learn.javascript.ru
Ответы: >>1025428
Аноним 2017/07/15 15:54:21  №1025423 194
>>1025364
transition: cubic-bezier(0.17, 0.04, 0.03, 0.94);
Аноним 2017/07/15 16:08:43  №1025428 195
Аноним 2017/07/15 16:10:25  №1025430 196
4.jpg (50, 843x202)
202x843
Что ему не нравится-то?


100 $key = $_POST['key'];
101 $query="SELECT * FROM posts WHERE text LIKE '$key' OR WHERE title LIKE '$key' ORDER BY id DESC";
102 $result=$pdo->query($query)or die("Запрос не выполнен");
Аноним 2017/07/15 16:10:59  №1025432 197
Аноним 2017/07/15 16:12:02  №1025433 198
>>1025430
>Что ему не нравится-то?
102я строка
Ответы: >>1025434 >>1025452
Аноним 2017/07/15 16:14:02  №1025434 199
>>1025433
Очень информативно. Обращаю внимание, что в посте указана 102-я строка.
Аноним 2017/07/15 16:29:13  №1025440 200
Ответы: >>1025446
Аноним 2017/07/15 16:56:59  №1025446 201
>>1025440
Спасибо, заработало.

Еще вопрос, как вынести подключение к БД за пределы страницы?У меня сейчас код вида
<? соединение с БД ?>
<html>
<? вывод данных из БД?>

но по логике пользователь не должен видеть операции с БД же.
Ответы: >>1025450 >>1025452
Аноним 2017/07/15 17:02:14  №1025450 202
mpv-shot0001.jpg (64, 1280x720)
720x1280
mpv-shot0002.jpg (64, 1280x720)
720x1280
Ответы: >>1025452
Аноним 2017/07/15 17:08:14  №1025452 203
>>1025446
Да, хорошим тоном считается разделять PHP-код от шаблонов: http://web.archive.org/web/20161119062218/http://www.phpinfo.su/articles/practice/shablony_v_php.html
Видно, что ты начинающий и c MVC не знаком, советую почитать/выполнить эту задачу, сам многому научился: https://github.com/codedokode/pasta/blob/master/student-list.md

>>1025450
>>1025433
Зачем вы тут? Не хотите помогать - не засоряйте тред.
Аноним 2017/07/15 18:06:20  №1025469 204
>>1024561

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

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

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

>>1024904

> public function addDepartament($departament)
Тут нужен тайп-хинт. Вот короткая копипаста:

--------
### Тайп хинты

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

Мануал: http://php.net/manual/ru/language.oop5.typehinting.php

Обрати внимание, что php7 усовершенствовал систему тайп-хинтов - теперь можно в их качестве указывать примитивные типы вроде int/string, а в php7.1 стало можно указывать тайп-хинт для возвращаемого функцией значения: https://habrahabr.ru/post/267799/ , причем можно указать тип void, значащий, что функция ничего не возвращает (увы, возможность вернуть null пока не реализовали, так что ждем)
--------

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

> public function deleteWorker($number)
Вот это неудачно спректированная функция. Чтобы удалить работника, надо узнать его номер в приватном списке внутри департамента. Как его узнать? Надо вместо номера передавать самого работника, которого надо уволить. Объект - это сам по себе уникальный идентификатор.

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

> $is_Head,
Стиль названия не соответствует другим переменным

> public function getSalary($worker)
Зачем сюда передается worker? Он еще и не используется никак.

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

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

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

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

> class Crisis
Название неудачное, так как класс не представляет собой описание кризиса, а антикризичных мер

Отбор кандидатов на увольнение/повышени лучше сделать так:

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

Поиск работников нужно как-то унифицировать, а то у тебя там код поиска повторяется.

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

Также, логично было сделать отдельный метод в департаменте для замены главы. А ты написал код смены главы где-то снаружи, что по моему не так логично. Это ведь явно область ответственности департамента - управлять списком своих работников и назначением главы.
Аноним 2017/07/15 18:20:26  №1025473 205
Поясните зачем нужен интерфейс Итератор? нужно ли тратить время на него так как вообще не пойму че он делает? Реализован ли он в современных фреймах? И если да то какие примеры.
Ответы: >>1025474 >>1025481
Аноним 2017/07/15 18:26:21  №1025474 206
>>1025473
> зачем нужен интерфейс Итератор?
Чтобы обходить объект в цикле.

> Реализован ли он в современных фреймах?
Да, любой класс коллекций, например коллекции ошибок валидации в symfony/form, коллекции сущностей в доктрине, коллекции HTTP-заголовков и т.д

> нужно ли тратить время на него
Однозначно, у меня даже на собесе про него спрашивали.
Аноним 2017/07/15 18:32:23  №1025477 207
>>1025430

Вместо or die нужно включить в PDO режим выброса исключений (PDO::ERRMODE_EXCEPTION).

>>1025430

Обрати внимание на текст "right syntax to use near ..." - это значит, что ошибка в указанном месте, то есть лишний WHERE.

>>1025391

Там нужно использовать переменную в замыкании как счетчик. То есть ты создаешь переменную-счетчик, создаешь новую функцию, и она привязывается к этой переменной и может ее использовать.
Test Аноним 2017/07/15 18:37:21  №1025478 208
Ответы: >>1025501
Аноним 2017/07/15 18:38:15  №1025479 209
>>1025277

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

>>1024516

> На словах ты Лев Толстой - https://ideone.com/S7Xrez
Ок, верно

> Поиск email - https://ideone.com/d2N8d6
Все правильно

> Grammar Nazi - https://ideone.com/925aB2
> '/[,](\\S)/ui', '/[;](\\S)/ui', '/[!](\\S)/ui'
Эти регулярки очень похожи и их надо объединить в одну. То же касается регулярок с жы/шы и зделал/зделаю

> Опечаточник - https://ideone.com/mpNbLd
Твоя программа просто ищет латинские буквы. Но надо искать слова, составленные из букв разных алфавитов. Слова вроде "HELLO" не должны вызывать ошибку.
Аноним 2017/07/15 18:46:18  №1025481 210
>>1025473

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

foreach ($primeIterator as $number) {
echo "Число: $number\b";
}

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

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

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

Я советую изучить список встроенных итераторов: http://php.net/manual/ru/spl.iterators.php

Писать итераторы не очень удобно, удобнее сделать функцию-генератор, которая при вызове возвращает итератор: http://php.net/manual/ru/language.generators.overview.php

Аноним 2017/07/15 19:19:31  №1025501 211
>>1025478
Да, проблема была с анимацией была именно в том, что CSS анимирует свойство max-height полностью, т.е несмотря на то, что размеры меню 200px, оно анимирует все 900px.
Ответы: >>1025519
Аноним 2017/07/15 19:36:46  №1025519 212
>>1025501
Why are you stopped speaking on english? That's weird.
Ответы: >>1025558
Аноним 2017/07/15 19:48:16  №1025530 213
В файлообменнике сущность файл должна агрегировать массив сущностей комментариев? Если да, то класс FileGateway должен агрегировать CommentGateway?
Ответы: >>1043639
Аноним 2017/07/15 19:58:12  №1025540 214
>>1007389
>>>Ну и подсчет высоты сообщений - это явно что-то неправильное. Это нужно для выравнивания сообщений вертикально? Неужели это нельзя было сделать средствами CSS? Задание размеров и расположения элементов через JS работает плохо, может влиять на производительность и работать с задержками.
>> Это нужно сделать отступ сверху, если сообщений слишком мало, и они начинались как бы снизу вверх, а не сверху вниз.
>Это называется "вертикальное выравнивание". Я бы поискал варианты сделать это средствами CSS. Вот что приходит в голову:
>
>- flex, новая технология, которая не везде есть. С ее помощью можно выделить часть экрана под область сообщений, и задать выравнивание блока сообщений по нижнему краю. Ну и не забыть про overflow, чтобы при большом числе сообщений блок не растягивался, а появлялась бы прокрутка. Минус - работает в новых браузерах
>- display: table - работает начиная с ИЕ8 и древних фаерфоксов. Это как flex, только слабее по возможностям и со своими недостатками. Табличное отображение позволяет прижать содержимое ячейки (зоны сообщений) вниз. Тут есть проблемка - чтобы сделать прокрутку, блоку сообщений надо задать высоту, и задать ее в виде 100% (=высоте окна) наверно не получится, значит придется этот момент сделать через JS (определение доступной высоты блока и изменение ее при измнеении размера окна)
>- прижать блок сообщений вниз с помощью абс. поз. Работает тоже везде, и можно задать высоту как 100% от зоны для вывода сообщений (при условии что не используется display: table, так как абс. поз. не работает с элементами таблиц).
>
>Я бы советовал попробовать сделать отдельный пример (примеры) в jsfiddle или аналогичном сервисе, и потестировать его на маленьком и большом числе сообщений (когда должна появляться прокрутка).
>
>Я могу подсказать по CSS, но имея частично работающий код, сделать это проще.
С точки зрения дизайна интерфейса, критично ли будет то, что даже если все сообщения получены, то они всё равно будут прижиматься вниз, оставляя пустое пространство в верху? Я не вижу в этом ничего плохого, но кому-то пустое пространство может показаться не красивым.

https://jsfiddle.net/55khok9f/1/
Ответы: >>1043617
Аноним 2017/07/15 20:33:11  №1025558 215
>>1025519
Просто учусь формулировать предложения на англ. Спасибо за помощь с вопросом.
Ответы: >>1025559 >>1025560
Аноним 2017/07/15 20:42:54  №1025559 216
>>1025558

Зарегистрируйся на Hacker News (новости IT) и участвуй там в дискуссиях.
Аноним 2017/07/15 20:43:46  №1025560 217
>>1025558

Или на stack overflow. Или на lang-8 который специально для этого предназначен.
Аноним 2017/07/15 21:35:27  №1025582 218
Здравствуйте, у меня есть Many To Many связь между Link и Tag. Форма Link (на пике) позволяет редактировать теги для каждой ссылки. Это норма, что приходится извращаться с array_diff'ами при редактировании тегов, при условии что:
- теги можно удалять (значит нужно как использовать unlink)
- при добавлении новых тегов в БД нужно сначала их создать (save), а только потом присоединять к Link
- уже существующие теги не должны создаваться заново, Link нужно связывать с уже существующими тегами

Тут код: https://pastebin.com/56qq7Zdj
Ответы: >>1025585
Аноним 2017/07/15 21:45:03  №1025585 219
>>1025582

Ты зря все это пишешь в контроллере. Лучше сделать в модели функцию updateTags($newTags) и пусть она проверяет что там где изменилось.

Ну а вообще, если лень делать diff то можно просто очищать связь и создавать заново.
Ответы: >>1025819
Аноним 2017/07/15 22:44:41  №1025613 220
ПХП макаки, самые нищеброды. Golang разработчики самые оплачиваемые! Переходите на Go пока не поздно. Вся инфа в треде
https://2ch.hk/pr/res/1020995.html
Ответы: >>1025781 >>1027487
mb Аноним 2017/07/15 23:40:25  №1025658 221
Аноны, на ideone не работает mb_strlen, mb_substr и т.д. не работают?
Ответы: >>1025819
Аноним 2017/07/16 02:50:21  №1025781 222
>>1025613
а на node уже переходить не надо?
Ответы: >>1025969
Аноним 2017/07/16 08:51:25  №1025819 223
>>1025585
Спасибо, это уменьшит количество diff'ов. А нормально ли для Active Record делать save() в цикле для новых сущностей? Ещё мой в транзакцию нужно обернуть.

>>1025658
Да, там обновили PHP до 7-й версии, а про расширение mbstring забыли. Как вариант можно использовать https://3v4l.org/
Ещё мне кажется, что этот вопрос за последние треды бьёт все рекорды популярности и может быть стоит об этом написать в ОП-посте. Или что хуже - редактировать сайт на народе, там ведь ссылки на ideone.
Аноним 2017/07/16 09:35:30  №1025828 224
uriurnurl.png (25, 600x391)
391x600
Вскроем тему.
Что такое URI?
URL - ссылка, но нееет, это всё детские шалости, ссылкой это называют только не знающие.
URI - унифицированное имя ресурса.
URL - местонахождение ресурса(location)
URN(che za huiny?) - имя ресурса(name)

Так вот URL и URN являются частями URI.
Так блядь в чём смысл? URL - устарело, так? Теперь любые ссылки называть URI?

"http://docs.slimframework.com/request/paths/ "
ЭТО URI? Говорить URL не тру и вообще не правильно?


А вопрос встал ввиду не понимания информации ниже.
Root URI

The root URI is the physical URL path of the directory in which the Slim application is instantiated and run. If a Slim application is instantiated in index.php within the top-most directory of the virtual host’s document root, the root URI will be an empty string. If a Slim application is instantiated and run in index.php within a physical subdirectory of the virtual host’s document root, the root URI will be the path to that subdirectory with a leading slash and without a trailing slash pidor.

(поясните о чём тут)
Ответы: >>1025838 >>1025839
Аноним 2017/07/16 10:18:00  №1025838 225
>>1025828
url описывает МЕСТОНАХОЖДЕНИЕ ресурса.
uri - это не имя, а идентификатор ресурса. он может быть как и url так и urn, так и все в перемешку

url частный случай uri
у одного uri может быть множество url и urn

urn не описывает где лежит ресурс. а url не обязан отражать имя ресурса.
Ответы: >>1025845
Аноним 2017/07/16 10:19:38  №1025839 226
>>1025828
>"http://docs.slimframework.com/request/paths/ "
>ЭТО URI? Говорить URL не тру и вообще не правильно?

Человек играющий на скрипке - это музыкант? Говорить, что он скрипач вообще не правильно?
Аноним 2017/07/16 10:26:27  №1025845 227
>>1025838
>у одного uri может быть множество url и urn
Вот тут по-подробней пожалуйста.
Ответы: >>1025846
Аноним 2017/07/16 10:34:50  №1025846 228
>>1025845
Что не ясного. URI это сам ресурс. Например какая-то книга. Представлена она тебе можеть быть либо ввиде URN (например isbn:NOMER_KNIGI), либо ввиде URL (ссылки туда где эта книга лежит). И то и другое ты потом передаешь нужной программе, и она тебе вытаскивает данные о твоей книге.

URI это АБСТРАКТНЫЙ КЛАСС. URN и URL классы, от него наследующиеся. Инстансов у URL быть не может. Но в то же время каждый инстанс URN или URL - это URI
Ответы: >>1025847 >>1025869
Аноним 2017/07/16 10:35:30  №1025847 229
>>1025846
>Инстансов у URL быть не может
у URI*
Аноним 2017/07/16 11:20:40  №1025869 230
>>1025846
Ты пример может привести URI? Что значит сам ресурс? Я знаю адрес сайта - foobar.ru, это URL. URL часть URI, значит foobar.ru - это URI? Но URI может иметь несколько URL, и как блядь? Если имя уникально.
Ответы: >>1025884 >>1025888 >>1025892
Аноним 2017/07/16 11:46:09  №1025884 231
>>1025869
Ты дебил, нет?

http://foobar.ru - это как и URL так и URI
А http://www.foobar.ru или https://foobar.ru - это тебе примеры еще пары URL ссылающихся НА ТОТ ЖЕ САМЫЙ ресурс.

При этому у твоего foobar.ru URN может быть каким-нибудь website:foobarcompany

URL показывает где лежит ресурс. URN его уникальное имя в КАКОЙ-ТО СИСТЕМЕ. И то и другое это URI этого ресурса. Это ОБЩЕЕ ТВОЯ СУКА МАТЬ НАЗВАНИЕ . И у любого ресурса может быть миллионы URL или URN


Сука, ты понимаешь, что такое АБСТРАКТНЫЙ КЛАСС - нет?

Вот скажи мне блядь, человек играющий на гитаре - это гитарист или музыкант?
Ответы: >>1025895
Аноним 2017/07/16 11:52:41  №1025888 232
>>1025869
>уникально
Уникальность - это когда по завпросу идентификатора тебе предоставляется один и только один ресурс. При этом у ресурса может быть хуева туча таких уникальных идентификаторов. Если бы один и тот же идентификатор мог описывать разные ресурсы одновременно - вот тогда он не уникален.

URI - это уникальный идентификатор ресурса. Представлен он тебе может либо ввиде URL либо в виде URN. И то и другое это URI.
Ответы: >>1025894
Аноним 2017/07/16 12:00:35  №1025892 233
>>1025869

URI это обобщенное название для URL (обычных ссылок) и URN (всяких странных идентификаторов вроде номера книги или телефона) и может быть каких-то еще других видов ссылок на ресурсы. То есть любой URL или URN является URI.

Вот определения:

URL:
> A Uniform Resource Locator (URL), colloquially termed a web address,[1] is a reference to a web resource that specifies its location on a computer network and a mechanism for retrieving it.
> URLs occur most commonly to reference web pages (http), but are also used for file transfer (ftp), email (mailto), database access (JDBC), and many other applications.

Вот URN:
> In computing, a Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that uses the urn scheme.

URI:
> A URI is a string of characters used to identify or name a resource.

И вот еще:

> Since RFC 3986[5] in 2005, use of the terms "Uniform Resource Name" and "Uniform Resource Locator" has been deprecated in technical standards in favor of the term Uniform Resource Identifier (URI), which encompasses both

Дальше можно почитать статью https://en.wikipedia.org/wiki/Uniform_Resource_Name и сам RFC, если хочется точных определений.

Хоть авторы и пишут URI, там имеется в виду именно URL, причем не любой, а только URL с использованием протоколов HTTP/HTTPS. Так как это веб-фреймворк.
Аноним 2017/07/16 12:04:18  №1025894 234
>>1025888

Вообще-то уникальность подразумевает, что у ресурса один URI, а не множество.
Аноним 2017/07/16 12:05:37  №1025895 235
Ответы: >>1025901 >>1025906
Аноним 2017/07/16 12:16:43  №1025901 236
>>1025895
>должен быть один URI, а не несколько
Потому что ты так сказал?
Ты идиот.
Ответы: >>1025935
Аноним 2017/07/16 12:22:45  №1025906 237
>>1025895
В твоем манямирке ресурсы должны быть доступны только по одному протоколу и только на одном хосте, ip? А со всех остальных надо редиректить?
Ответы: >>1025997
Аноним 2017/07/16 13:06:23  №1025935 238
>>1025901

Все понятно, не засоряй тогда дальше тред.
Аноним 2017/07/16 13:29:31  №1025947 239
Делаю к файлообменнику регистрацию, есть сущности RegisteredUser, Admin и Visitor унаследованные от абстрактного класса User. Создал для каждой сущности свой TableDataGateway и свою таблицу sql. В классе AuthHelper все эти TDG агрегируются и в методе login($login, $pass) я обращаюсь к каждому чтобы проверить существует ли пользователь с данным логином. Мне кажется, я делаю что-то неправильно, потому что получается 3 запроса, а в sql запросах можно объединять таблицы. Есть ли альтернатива моему способу?
Ответы: >>1025949 >>1025977 >>1025997
Аноним 2017/07/16 13:33:45  №1025949 240
>>1025947

Если что, сущность Admin наследуется от RegisteredUser, и есть еще сущность SuperAdmin наследуемая соответственно от Admin.
Ответы: >>1025951 >>1025977
Аноним 2017/07/16 13:35:24  №1025951 241
>>1025949

А еще для Visitor я не создавал таблицу и TDG, гость у меня только куку получает без записи в таблице, так что мы говорим о сущностях Admin, SuperAdmin и RegisteredUser, вот.
Аноним 2017/07/16 14:08:04  №1025969 242
>>1025781
Сравнил жопу с пальцем. JS в любом случае придётся учить. С ним на ноде и монге можно ебашить изоморфные приложения без ебли с парсингом. Смысл пхп - разбираться в чужих легаси конюшнях в разных мусохрансках за гроши.
Ответы: >>1026390
Аноним 2017/07/16 14:17:16  №1025977 243
>>1025947
>>1025949
Кажется, что ты переусложнил с четырьмя классами. Что мешает в таблице User держать колонку-дискриминатор, которая будет обозначать тип пользователя? В приложении может быть куча ролей у пользователей и неудобно создавать по классу для каждой роли. Наследование удобно использовать, когда у каждого наследника свой набор колонок в бд / свойств класса (советую почитать про STI, Class TI и Concrete TI).

Ответы: >>1025978
Аноним 2017/07/16 14:20:30  №1025978 244
Ответы: >>1025982
Аноним 2017/07/16 14:22:44  №1025982 245
>>1025978

Хотя наверное не мой. Мой - это когда у перечисленных спортсменов определенные роли на поле.
Аноним 2017/07/16 14:25:30  №1025988 246
В чем проблема?
>
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION on line 40
Ответы: >>1025997
Аноним 2017/07/16 14:43:30  №1025997 247
>>1025906

Почитай справку для вебмастеров у Яндекса или Гугла.

>>1025947

А зачем таблица для Visitor? Вообще, мне кажется, ты переусложнил все это и удобнее было использовать Single TI.

>>1025988

public/private забыл
Ответы: >>1026001 >>1026151
Аноним 2017/07/16 14:53:39  №1026001 248
>>1025997
>URI
>вебмастеров
Все с тобой понятно.
Аноним 2017/07/16 16:18:45  №1026061 249
В VS Code подсветка кода пыхи не работает. Может кто знает, как починить?
Ответы: >>1026143
Аноним 2017/07/16 18:38:15  №1026143 250
>>1026061
<?php или <? перед пыха кодом написал?
Ответы: >>1026243
Аноним 2017/07/16 18:52:45  №1026151 251
>>1025997
Спасибо, все заработало. Но появилась следующая проблема, как присвоить значение которое возвращает метод класса данной переменной? Вот мой говнокод http://ideone.com/igRnFF
Ответы: >>1026317
Аноним 2017/07/16 20:33:40  №1026198 252
ОП, что скажешь? https://habrahabr.ru/post/333398/
Как раз начинать проект новый буду, собирался на Yii2 но теперь немного сомневаюсь
Ответы: >>1030007 >>1030199
Аноним 2017/07/16 22:10:15  №1026243 253
>>1026143
Есть такое. Я разобрался сам, но всё равно спасибо ещё миллион часов потратил,
чтобы xDebug настроить
.
Аноним 2017/07/16 22:36:45  №1026257 254
Где в MVC вызывать session_start(), в начале каждого контроллере? И где проверять может ли пользователь находиться на странице, private метод контроллера checkAuth() в каждом экшне?
Ответы: >>1026258 >>1030007
Аноним 2017/07/16 22:38:41  №1026258 255
>>1026257
> private метод контроллера checkAuth()

Метод AuthHelper, а не контроллера, фикс.
Аноним 2017/07/17 02:42:55  №1026317 256
>>1026151
Посмотри как вызывать метод в учебнике, нельзя просто так обращаться к нему как к функции.

>как присвоить значение которое возвращает метод класса данной переменной?
Можешь присвоить в конструкторе или создать отдельный метод setWorkers, например, который будет присваивать свойству workers массив из метода.
Аноним 2017/07/17 03:19:46  №1026318 257
Привет, аноны.

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


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


Ответы: >>1030007
Аноним 2017/07/17 11:51:52  №1026390 258
>>1025969
>Сравнил жопу с пальцем
С хяльцем. Уже несколько лет слышу про ноду - убийцу ПХП, да чет все никак не не взлетает. Теперь вот стал все чаще слышать по Go, а с нодой все как-то тише и тише. При этом пхп сколько занимал информационного пространства - столько и занимает если не больше. Ах да, пхп узко-направленный язык, уступающий модным разваливающимся свистоперделкам, срок жизни которых - несколько лет, после чего прийдет новая хайпо-развалюха.

>мусохрансках за гроши
а с го и нодой, ты хуй работу найдешь и если найдешь, то срок актуальности твоих знаний и умений - 2-3 года, после чего придется учить новую революционную все-убийцу, на ближайшие 2 года.
Ответы: >>1026460
Аноним 2017/07/17 14:07:11  №1026460 259
>>1026390
>да чет все никак не не взлетает.
Это ты так решил?
>а с го и нодой, ты хуй работу найдешь
Тож сам так решил?))Может стоит зайти хотя бы на hh и увидеть 900~ вакансий?

>то срок актуальности твоих знаний и умений - 2-3 года
И еще раз, ecma тебе в любом случае придется уметь.
Ответы: >>1026470
Аноним 2017/07/17 14:36:33  №1026470 260
>>1026460
>сам так решил?))
ага)))))
>увидеть 900~ вакансий
и эти 900 высосаных из пальца и возникших на волне хайпа вакансии количество которых не сравнится с пхп уже меняются на то же количество но теперь для го, а через пару лет будут актуальны для новой йобы. А для пхп как было дохуя, так дохуя остается и растет, причем вакансии как для низкооплачиваемых макак, так и высокооплачиваемые для гуру господ. И если ты зеленый, то ты можешь не ссаться, что через 2 года твои знания никому нахуй не нужны будут, а спокойно развиваться.

>ecma тебе в любом случае придется уметь
Хуекма. Одна из особенностей джаваскрипта в том, что ты можешь писать на нем, его не зная, т.к. изучение одного из 100500 жс фреймворков сродни изучению нового языка.

И нахуя мне нужна нода, чтобы использовать жквери?
Ответы: >>1026496
Аноним 2017/07/17 15:14:45  №1026496 261
1445468530242.png (62, 275x417)
417x275
>>1026470
>и эти 900 высосаных из пальца и возникших на волне хайпа вакансии
А какой процент из этого является "знать пых 3 и 5, терпение и умение разбираться в чужом коде"?
Или "мы слышали что на пхп делают сайтики, но нам на самом деле нам абсолютно похуй чем ты там занимаешься, лишь бы было"

>т.к. изучение одного из 100500 жс фреймворков сродни изучению нового языка.
Лол
>Одна из особенностей джаваскрипта в том, что ты можешь писать на нем, его не зная
>чтобы использовать жквери?
Ответы: >>1026510
Аноним 2017/07/17 15:42:39  №1026510 262
>>1026496
>Лол
Треснул квадратно-гнездовой шаблон? Бывает

>А какой процент из этого...
И, что ты хотел этим сказать, не пойму? точно также не пойму как необходимость знания екма связывает изучение ноды для того, чтобы уметь использовать жквери?
Ответы: >>1026513
Аноним 2017/07/17 15:47:28  №1026513 263
>>1026510
>И, что ты хотел этим сказать, не пойму?
Макака не смогла в контекст и зависла?
>жырквери
>кому-то про квадраты-гнёзда, да шаблоны заливает.
Ответы: >>1026515
Аноним 2017/07/17 15:54:06  №1026515 264
>>1026513
хайпошкольник порвался
Аноним 2017/07/17 19:37:48  №1026920 265
можно ли силами CSS сделать симпотичный дизайн или все на фотошопе щас?
вопрос нуба
Ответы: >>1030007
Аноним 2017/07/17 19:45:30  №1027168 266
что такое статическая переменная?
Ответы: >>1027245 >>1030007
Аноним 2017/07/17 19:47:55  №1027245 267
Ответы: >>1027379
Аноним 2017/07/17 19:52:27  №1027379 268
Ответы: >>1027482
Аноним 2017/07/17 20:13:19  №1027482 269
Аноним 2017/07/17 20:21:35  №1027487 270
>>1025613
Одно другому, тащем-та, не мешает. Бадушники тому — живой пример.
А есть статистика по пыхозарплатам без учета битриксов и прочих макак из уэб-студий?
Аноним 2017/07/17 20:29:50  №1027490 271
Аноним 2017/07/17 21:10:36  №1027509 272
Напоминаю, что на Хабре выходит еженедельный дайджест со списком новостей, связанных с PHP. Там можно узнать про новые версии PHP, полезные библиотеки, почитать новые статьи на эту тему.

https://m.habrahabr.ru/company/zfort/blog/333458/
Аноним 2017/07/17 21:16:06  №1027510 273
почему нет замены php в в современных реалиях?
Ответы: >>1027569 >>1028164 >>1031753
Аноним 2017/07/17 22:50:31  №1027569 274
>>1027510
почему нет? Есть, вон нода, го. Скоро пхп пизда
Аноним 2017/07/18 04:48:24  №1027651 275
https://github.com/someApprentice/chat/blob/master/public/js/conversation.js#L82
Что можно сделать после успешной отправки сообщения?

Можно обновить все сообщения, но сообщения и так обновляются каждые пол секунды. Как-то не хочется оставлять пустую функцию. Или её можно не писать?


https://arhivach.org/thread/261841/#1000396
>Ты не обрабатываешь ошибки. Видимо, уроки, которые ты читал, упускают такие важные вещи. Вот тебе тогда мои маленькие советы про использование аякса: https://github.com/codedokode/pasta/blob/master/js/ajax.md
https://github.com/someApprentice/chat/blob/master/public/js/chat.js#L59-L69
https://github.com/someApprentice/chat/blob/master/public/js/conversation.js#L85-L92

Стоит ли так выборочно обрабатывать ошибки? Для пользователя достаточно вывести ошибку соединения, а для разработчиков выбросить в консоль статус и текст ошибки.

Почему у меня не вбрасываются эти ошибки (ошибки не появляются в консоле)? Это из-за асинхронного кода?

https://arhivach.org/thread/266631/#1010744
>> Кстати, это нормально делать перевод на новую строку в цикле https://github.com/someApprentice/chat/blob/master/public/js/conversation.js#L280-L284 ?
>Это какие-то кривые костыли. Получается, логика отображения разбросана между шаблоном и JS кодом. Мы ведь в PHP не пытаемся так делать после генерации HTML из шаблона? И тут не надо. Наверняка там есть какие-нибудь хелперы для таких преобразований. В чем проблема сделать какой-нибудь хелпер для преобразования текстов сообщений?
К сожалению, у меня не получилось найти в ejs аналог функции nl2br и при этом чтобы экранировались тэги. В таком случае, будет приемлемым оставить этот костыль?
Или лучше, можете посоветовать какой-нибудь шаблонизатор который справиться с этой задачей?

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

https://github.com/someApprentice/chat/blob/master/src/Controller/ConversationController.php#L78-L115
Это нормально, что у меня такая простыня с обработкой ошибок?


https://arhivach.org/thread/261841/#1000396
>Также, некоторые разработчики активно используют возможности HTTP (дополнительные заголовки, методы вроде PUT/DELETE, коды ответов), а некоторые не используют.
>Также, перед проектированием АПИ, советую почитать про REST и HATEOS (и далее, стандарт про шаблоны URL https://tools.ietf.org/html/rfc6570 ), но тут конечно есть разные мнения, ну к примеру в иделогии REST одним запросом нельзя получить несколько несвязанных массивов данных, а HATEOS раздувает размер ответа.
Я плохо понял что такое REST. Это просто архитектура которая позволяет обрабатывать запросы с методами вроде PUT\DELETE?

Я пока не могу придумать для чего использовать такие методы.


https://arhivach.org/thread/266631/#1010325
>Пересоздавать полный список сообщений неэффективно.
Я никак не могу придумать как выводить только новые сообщения. Определенно, нужен setTimeout\setInterval чтобы постоянно обновлять данные с сервера, но как при этом выводить только те сообщения которые ещё не выведены в шаблон?


https://github.com/someApprentice/chat/blob/master/src/Model/Database/MessageGateway.php#L25
Поскольку, я теперь вывожу сообщения за определённый период времени, то если за этот промежуток не было сообщений, при открытии диалога выведиться пустое окно сообщений из-за чего вытекает баг с автоматической подрузкой более старых сообщений, из-за того что отсутвует скролл блока сообщений. Это можно исправить увеличивая отрезок времени и повторном обращении к БД, до тех пор пока не получим нужное количество сообщений:

$count = $db->getMessagesCount();

$offset = 1;

if ($count > 10) {
while(count($messages) < 10) {
$offset++;
$messages = $db->getMessages(..., $offset);
}
}

Не будет ли это лишней нагрузкой на БД?


У меня есть идея как при отключенном js опускать окно диалога до последнего сообщения - использовать якори. Я уже делаю что-то подобное при получении более старых сообщениях (при выключенном js):

https://github.com/someApprentice/chat/blob/master/templates/chat.phtml#L24
><a ... href="conversation.php? ... #message-ID">Получить больше сообщений</a>

https://github.com/someApprentice/chat/blob/master/templates/chat.phtml#L32
><div id="message-ID ... class="message">

Точно так же можно сделать в ссылке контакта.

Но для этого нужно сделать несколько лишних запросов к БД:

$contacts = $db->getContacts();

$c = array();

foreach ($contacts as $contact) {
$lastMessage = $db->getLastMessage(...);

$c[] = array(
'contact' => $contact,
'lastMessage' => $lastMessage
);
}

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

Опять же, не создаст ли это большую нагрузку на БД? Учитывая, что с включенным js, при сортировке по последним сообщениям, обновление контактов будет происходить каждую секунду.


https://github.com/someApprentice/chat/blob/master/src/Controller/AuthController.php#L101-L103
https://github.com/someApprentice/chat/blob/master/public/js/conversation.js#L217
Не подвергаю ли я пользователей опасности, открывая кукисы для js?

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


У меня есть переменные, которые пишутся ни как camelCase или snake_case, например moremessages. Я знаю, что это плохой плохой вариант, но мне он кажется вполне читабельным. Лучше будет переимновать?
Ответы: >>1028199 >>1030006
Аноним 2017/07/18 14:08:40  №1027835 276
Котаны,вкатываюсь в ваш уютный клуб,проверьте задачки про кубы http://ideone.com/LitWO1 и айфон http://ideone.com/lHOqEL. Заранее пасяб.
З.Ы. А зачем в эхо выделять переменные фигурными скобками?
Ответы: >>1029997
Аноним 2017/07/18 18:08:52  №1027942 277
Расскажите пожалуйста про
>$example = function () use ($variable) { ... }

В мануале http://php.net/manual/ru/functions.anonymous.php
не понял что значит этот use, и когда надо и не надо его употреблять.
Ответы: >>1028003 >>1028510 >>1028550
Аноним 2017/07/18 18:53:20  №1027953 278
$STH->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'secret_person');
Объясните, пожалуйста, что значит символ "|"? Это оператор? Гугл не помог. Я нашел только || - логическое ИЛИ.
Ответы: >>1027969
Аноним 2017/07/18 19:28:42  №1027968 279
Спрашивал уже раньше, но не могу найти свой пост: какие подводные камни в том, чтобы делать небольшой сайт в виде одной страницы, где весь контент разбит по динамически подгружающимся вкладкам? Просто у меня горит очко от мысли, что я буду копипастить кучу одинакового кода в разные страницы, шапку там, подвал. А если в них что-то нужно поменять будет? Это же пиздец.
Вот пример такого сайта: https://goo.gl/n7bfuT Сократил, потому что макака-пидор.
Ответы: >>1027970
Аноним 2017/07/18 19:28:52  №1027969 280
>>1027953

Чтобы разобраться в этой теме, придется почитать про двоичные числа. Любое число можно представить не только в обычной (10-ной) системе счисления, но и в двоичной. Например, 19 в десятичной = 10011 в двоичной.

https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F

Двоичная система используется потому, что внутри компьютера все числа представлены как раз в двоичном виде. Например, если в ячейке памяти есть электрический заряд, то это обозначает 1, а если нет - то там хранится 0. Одно такое значение - 0 или 1 - называется бит. Используя несколько ячеек, мы можем с помощью этих битов кодировать произвольные числа. То есть двоичная система "родная" для компьютера и внутри числа представлены и обрабатываются в этой системе.

С числами в двоичной форме кроме обычных математических операций можно делать битовые операции вроде И или ИЛИ: https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8

http://php.net/manual/ru/language.operators.bitwise.php

Если нам нужно как-то закодировать набор опций, каждая из которых может быть включена или выключена, мы можем использовать двоичные числа. То есть договориться, что например последний разряд в числе обозначает одну опцию (OPTION1 = 00001), предпоследний - другую (OPTION2 = 000010).

Тогда с помощью операции ИЛИ мы можем объединять эти опции: OPTION1 | OPTION2 = 0000011

В общем-то константы вроде PDO::FETCH_CLASS - это числа (можно проверить echo или var_dump), каждое из которых содержит одну единицу в двоичном виде, а с помощью операции ИЛИ их объединяют.

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

Чтобы проверить и закрепить знания, реши задачку:

- сделай набор из нескольких констант, каждая из которых будет представлять какую-то опцию, которая кодируется с помощью двоичных флагов (то есть константа хранит число, в двоичном виде содержащее ровно одну единицу)
- сделай функцию setBit, которая принимает на вход число и опцию, и возвращает число где установлен в единицу соответствующий опции бит
- сделай функцию clearBit, которая принимает на вход число и опцию, и возращает число, где соответствующий опции бит сброшен
- сделай функцию toggleBit, которая принимает на вход число и опцию и меняет соответствующий бит в числе на противоположный
- сделай функцию testBit, которая принимает на вход число и одну опцию и возвращает true/false в зависимости от того, включен в этом числе соответствующий флаг или нет
- сделай функцию countBits, которая принимает на вход число и возвращает число единиц в его двоичном представлении

Пример использования:

const OPTION_A= ...;
const OPTION_B = ...;
const OPTION_C = ...;

$flags = 0;
$flags = setBit($flags, OPTION_A);
$flags = setBit($flags, OPTION_B);

var_dump(testBit($flags, OPTION_A)); // true
var_dump(testBit($flags, OPTION_C)); // false

$flags = clearBit($flags, OPTION_A);
var_dump(testBit($flags, OPTION_A)); // false
var_dump(testBit($flags, OPTION_B)); // true

var_dump(countBits($flags)); // 1

Если что-то непонятно, уточняй.

Ответы: >>1028510 >>1028606 >>1030326
Аноним 2017/07/18 19:29:57  №1027970 281
>>1027968

Если шапка одинаковая, зачем ее копипастить, когда можно просто вынести ее в отдельный файл? И объединить шапку с содержимым используя например PHP (это 2 строчки кода)?
Аноним 2017/07/18 20:06:37  №1027976 282
gununu.jpg (105, 881x637)
637x881
Кароч.
Я нихуя не понимаю что ему надо.
REEEE
Ответы: >>1027987 >>1028008 >>1029108
Аноним 2017/07/18 20:27:48  №1027987 283
>>1027976
Тебе же красным выделели условия, которые ты не выполнил, дебил.
Ответы: >>1028010
Аноним 2017/07/18 20:57:59  №1028003 284
>>1027942
Забирает себе значение $variable на время определения функции для дальнейшего использования. То есть если ты создал функцию, а $variable не определил ещё, то будет у твоей функции $variable будет всегда NULL. Иначе нужно &$variable писать, чтобы по ссылке передавало. Тогда берёт значение на момент выполнения.
Ответы: >>1028470
Аноним 2017/07/18 21:03:00  №1028008 285
>>1027976

Если ты вызываешь функцию sequence без указания step или start то они должны быть равны 1 и 0 соответственно.
Ответы: >>1028026
Аноним 2017/07/18 21:05:36  №1028010 286
>>1027987

Не надо писать комментарии, которые ничем не помогают и не содержат полезной информации.
Аноним 2017/07/18 21:32:04  №1028026 287
1234.jpg (98, 870x593)
593x870
>>1028008
У меня почему-то в голове переклинило, что требования были к возвращаемой функции, и моск завис.
Ответы: >>1028153
Аноним 2017/07/19 01:00:49  №1028153 288
>>1028026

Да, там вообще не очень легко разобраться, так как тут функция возвращает другую функцию и не очень понятно, как их различать.
Аноним 2017/07/19 01:22:38  №1028155 289
Может кто просветить про пхп-уязвмимости?
Как не обосраться в том случае, если какой нибудь мамкин мистер робот решит взломать твой сайт?
Ответы: >>1028161
Аноним 2017/07/19 01:44:59  №1028161 290
Ответы: >>1028171
Аноним 2017/07/19 02:25:17  №1028164 291
>>1027510

В данном случае это примерно такой же вопрос, а почему нет замены unix для серверных машин, потому что 80% на этом работает. Хорошо это или плохо -- вопрос уже сугубо субъективных частностей.
Ответы: >>1028172
Аноним 2017/07/19 03:51:18  №1028171 292
Ответы: >>1028178
Аноним 2017/07/19 03:54:42  №1028172 293
>>1028164
Чем отличается какой нибудь питон/руби/ещё что то фреймворк от пхп?
Лёгкостью? А в чем эта легкость заключается?
сорре за тупой вопрос
Ответы: >>1028488
Аноним 2017/07/19 04:16:11  №1028178 294
someApprentice 2017/07/19 07:19:25  №1028199 295
Важный вопрос которые мне не дает покоя, и я не могу продолжить решать задачу пока не разберусь с ним

https://arhivach.org/thread/261841/#1000397
>Насчет проектирования БД - там тоже много тонкостей есть, можно делать нормальзованную схему, но лучше денормализовывать ради повышения производительности. Ну например, возьмем то же сообщение. Можно хранить его в одном экземпляре, а можно в двух - в inbox получателя и в outbox отправителя. Это может облегчить выборку последних N сообщений, так как твой запрос с OR вряд ли хорошо ложится на индексы (вдобавок у тебя еще и сортировки там нет).
Безусловно, нужно хранить сообщения в нескольких экземплярах для отправителя и для получателя, чтобы в дальнейшем было удобно шифровать их для каждого пользователя соответственно. Но я не понимаю как хранить ID сообщений - получается что для каждого пользователя оно теперь будет своё. Из этого вытекает, что нельзя будет как-то преобразовывать эти сообщения т.е. редактировать или удалять. В принципе от этой идеи можно оказаться, как это сделано в популярных мессенджерах А я всё думал, почему же они это не сделали, просто странно иметь разные ID.
Хотя, можно сделать отдельную колонку, которая не имеет PRIMARY_KEY, и заполнять ID как-то программно.

Думаю лучше отложить пока идею с редактированием\удалением.


Такой же вопрос, и с inbox и outbox - в них те же самые сообщения будут иметь разные ID. Это неизбежно делать отдельную колонку и генерировать ID программно?

Или я не правильно понял структуру этих таблиц?


Никак не могу сформулировать структуру при реализации конференций... Попробую представить это здесь

Conferences
id
tete-a-tete //true or false (приватные переписки тоже будут представлены как конференции из двух человек для унификации кода)


Participants
id //Не уверен что от этой колонки будет толк, обычно всегда делают id
conferenceID
userID

Contacts
id
userID
conferenceID

Inbox
id
conferenceID
userID // ID пользователя которому принадлежит ящик
messageID
authorID
content
...

Outbox
id
conferenceID
userID // ID пользователя которому принадлежит ящик
messageID
authorID
content
...

Соответственно получение сообщений происходит одним запросом SELECT FROM Inbox WHERE conferenceID = :conferenceID AND userID = :userID UNION SELECT FROM Outbox WHERE conferenceID = :conferenceID AND userID = :userID

Вроде должно быть так?

----

Забыл ещё спросить в предыдущем посте

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

https://jsfiddle.net/jsqt57hz/

MVC style:
https://jsfiddle.net/hmgz7200/

Чтобы это пификсить нужно убрать с элемента обработчик функцией .off()

//Странно что не получилось написать $('body).off('submit', form, handleFormSubmit), как в примере мануала
https://jsfiddle.net/jsqt57hz/1/

Я всё правильно делаю?



>>1027651
>У меня есть идея как при отключенном js опускать окно диалога до последнего сообщения - использовать якори. Я уже делаю что-то подобное при получении более старых сообщениях (при выключенном js):
>Но для этого нужно сделать несколько лишних запросов к БД:
Это должно быть сделано с помощью функций JOIN и GROUP:

SELECT Contacts.userID, Messages.messageID as lastMessage
FROM Contacts
INNER JOIN Messages ON Contacts.userID= Messages.userID
GROUP BY Contacts.userID
ORDER BY Messages.date DESC



Простите что трачу ваше время. Мне действительно очень очень жаль так поступать. Надеюсь у меня всё получиться чтобы всё было не зря.
Ответы: >>1028309 >>1028550 >>1028560
Аноним 2017/07/19 13:55:34  №1028309 296
>>1028199
Обратись в баз данных тред, может там помогут.
Аноним 2017/07/19 16:33:23  №1028373 297
в Yii2 нельзя использовать CamelCase в названии контроллера с prettyUrl ? Если можно то как получить доступ к контроллеру SomeCamelCaseController к actionIndex ?
Ответы: >>1028510
Аноним 2017/07/19 16:38:45  №1028374 298
Аноним 2017/07/19 19:46:20  №1028469 299
помогите решить задачку

Ответ на любой вопрос это же google!

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

Подсказка: здесь тебе могла бы помочь функция array_rand()

http://ideone.com/eyM8V0

главная проблема не выводится значение массива
Ответы: >>1028510
Аноним 2017/07/19 19:46:32  №1028470 300
>>1028003

>Тогда берёт значение на момент выполнения

Как это понять? Если у меня выше по коду например вообще нет такой переменной, что будет взято в &$variable?
Ответы: >>1028473 >>1028510 >>1030006
Аноним 2017/07/19 19:52:35  №1028473 301
Аноним 2017/07/19 20:28:37  №1028488 302
>>1028172
>Чем отличается какой нибудь питон/руби/ещё что то фреймворк от пхп?
>Лёгкостью? А в чем эта легкость заключается?
>сорре за тупой вопрос


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

Аноним 2017/07/19 21:24:23  №1028510 303
>>1028373
Дефисы у меня работали. Первая же ссылка в гугле подтверждает: https://github.com/yiisoft/yii2/issues/493

>>1028469
> главная проблема не выводится значение массива
В документации array_rand написано "returns the key (or keys) of the random entries.", то есть функция возвращает ключ (индекс элемента), а не значение: http://php.net/manual/en/function.array-rand.php
Тебе нужно обратиться к элементу массива под этим новым случайным индексом, тогда получишь значение.

>>1027942
В PHP, в отличии от JS, функция не может обращаться к внешним переменным, то есть к тем, которые существуют за пределами этой функции. Такой код вызовет ошибку:

$n = 3;
array_filter([1,2,3,4,5], function ($el) { return $el > $n; });

PHP скажет, что $n не определена внутри функции.
А с этим кодом всё ок:

$n = 3;
array_filter([1,2,3,4,5], function ($el) use ($n) { return $el > $n; });

>>1028470
Тебе же никто не запрещает просто взять и проверить.

>>1027969
Интересные задачи, нужно порешать.
Ответы: >>1028673 >>1028685
Аноним 2017/07/19 22:51:21  №1028550 304
>>1027942

use описан тут http://php.net/manual/ru/functions.anonymous.php

Он позволяет передать копию значения переменной снаружи внутрь анонимной функции (по умолчанию в функции доступны только созданные внутри нее переменные). Если использовать &$foo вместо $foo, то передается не копия значения, а ссылка на саму переменную, и код внутри функции может менять эту переменную.

>>1028199

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

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

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

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

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

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

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

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

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

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

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

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

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

Также, вопрос еще, где хранить ключи. Можно иметь единый ключ пользователя, хранящийся на сервере и зашифрованный паролем (устройства скачивает шифрованный ключ и расшифровывает локально). Либо же можно для каждого устройства иметь свой ключ и не сохранять его на сервер. Но тогда отправитель или сервер должен шифровать каждое сообщение всеми пользовательскими ключами, чтобы его можно было прочесть на любом устройстве. По моему так сделано в iMessage: https://images.apple.com/business/docs/iOS_Security_Guide.pdf , страница 43:

> When a user turns on iMessage on a device, the device generates two pairs of keys for
use with the service: an RSA 1280-bit key for encryption and an ECDSA 256-bit key on
the NIST P-256 curve for signing. The private keys for both key pairs are saved in the
device’s Keychain and the public keys are sent to Apple’s directory service (IDS), where
they are associated with the user’s phone number or email address, along with the
device’s APNs address.

> The user’s outgoing message is individually encrypted for each of the receiver’s
devices.

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

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

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

> Никак не могу сформулировать структуру при реализации конференций..
Таблица "чаты": chat.id, chat.name, таблица для хранения списка участников (с периодом времени): participant.userId, participant.chatId, participant.since, participant.till. Ну и соответственно таблицы для хранения сообщений, вид которых зависит от выбранной схемы.

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

Что касается твоей схемы, вместо 2 таблиц inbox/outbox можно сделать одну с полем типа сообщения.

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

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

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

В твоем примере кода, когда ты вставляешь HTML код из template в DOM, тогда же надо и ставить обработчики, и делать это только один раз. То есть сделать например так:

Widget.prototype.handleShowFormButton = function() {
this.view.button.click(this.showForm.bind(this));
}

Widget.prototype.showForm = function () {
if (!this.view.isFormCreated()) {
this.view.createForm(); // создает форму без проверки, есть она или нет
this.handleFormSubmit(); // ставит на нее обработчики
}
};

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

> Чтобы это пификсить нужно убрать с элемента обработчик функцией .off()
Выглядит как костыль. Проще просто не ставить обработчик несколько раз.

> У меня есть идея как при отключенном js опускать окно диалога до последнего сообщения - использовать якори.
> Это должно быть сделано с помощью функций JOIN и GROUP:
Я не очень понял, как выравнивание сообщений связано с SQL-запросами?

> трачу ваше время.
А я отвечаю только когда есть свободное время, так что ничего страшного
Ответы: >>1029290 >>1029721
Аноним 2017/07/19 23:15:05  №1028560 305
>>1028199

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

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

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

Ну и если есть желание, то почитать информацию о протоколе Tox:

- https://en.wikipedia.org/wiki/Tox_(protocol)
- https://github.com/Tox-Docs/Text/tree/master/src_text

и Signal:

- https://en.wikipedia.org/wiki/Signal_Protocol
- https://whispersystems.org/docs/
Ответы: >>1028568
Аноним 2017/07/19 23:28:43  №1028568 306
Аноним 2017/07/20 00:04:41  №1028581 307
14673673006040.jpg (7, 225x225)
225x225
нахуя вы изучаете эту парашу?вам делать нехуй?
Ответы: >>1028589
Аноним 2017/07/20 00:18:06  №1028589 308
>>1028581
Так некуда деваться, в мухосрансках есть только два стула, 1C и сладкий хлебушек. Но 1C это вообще не программирование.
На фрилансе тоже хуй найдешь заказы на Java ну или desktop разработку.
Ответы: >>1028769
Аноним 2017/07/20 00:29:40  №1028597 309
А вообще у человека гибкая психика, он ко всему привыкает. Можно привыкнуть жрать тухлятину с червями. Можно привыкнуть к сидению у параши и ебле в жопу. А уж писать код на PHP это вообще ерунда, как нехуй делать. Только первый месяц неприятно, потом привыкаешь ко всему: и к доллару, и к переменным без объявления, и к другому порядку тернарного оператора, и к отсутствию code style в стандартных функциях... Главное, что за это тебе деньги платят.
Ответы: >>1028655 >>1030006
Аноним 2017/07/20 01:03:15  №1028606 310
Аноним 2017/07/20 01:17:52  №1028612 311
Аноны помогите пожалауйста не могу понять.

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

Гуглил но как то ничего не поняля тупой
Ответы: >>1029522
Аноним 2017/07/20 07:24:54  №1028655 312
>>1028597
Ваистену!

мимо 110k php-джун
Аноним 2017/07/20 09:30:57  №1028673 313
>>1028510
> главная проблема не выводится значение массива
В документации array_rand написано "returns the key (or keys) of the random entries.", то есть функция возвращает ключ (индекс элемента), а не значение: http://php.net/manual/en/function.array-rand.php
Тебе нужно обратиться к элементу массива под этим новым случайным индексом, тогда получишь значение.

спасибо гуру
Аноним 2017/07/20 10:09:59  №1028685 314
>>1028510
Теперь понятно.

Без use — undefined

use ($variable) — только внутрь

use (&$variable) — внутрь и наружу

Единственный вопрос остался: зачем это нужно вообще, если есть аргументы??
Ответы: >>1030006
Аноним 2017/07/20 13:50:00  №1028769 315
>>1028589
Много работы по верстке и жсу.
Ответы: >>1028780 >>1028781
Аноним 2017/07/20 14:10:46  №1028780 316
>>1028769
А фронтенд прям не параша, да?
Ответы: >>1028818
Аноним 2017/07/20 14:11:31  №1028781 317
>>1028769
>верстке и жсу.
Увлекательно.
Ответы: >>1028818
Аноним 2017/07/20 15:08:32  №1028818 318
Ответы: >>1028838
Аноним 2017/07/20 15:43:39  №1028838 319
>>1028818
При чём здесь жаба? Тут пхп-тред.
Аноним 2017/07/21 03:00:15  №1029108 320
>>1027976
Это ПХП? Если так то синтаксис так на С похож.
Я нуфак, только вкатился в ваш тред.
Ответы: >>1029521
Аноним 2017/07/21 08:02:41  №1029130 321
Повесил функцию из замыкания на листенер, следящий за нажатиями клавиш. Она должна вызывать другую функцию из этого же замыкания, но не видит её. Теперь по this ей передаётся window!
Решил проблему, сославшись в функции на глобальную переменную самого замыкания. А как это сделать нормально?
Ответы: >>1029147
Аноним 2017/07/21 09:45:59  №1029147 322
Ответы: >>1029274
Аноним 2017/07/21 09:52:16  №1029149 323
пыха.png (1, 511x32)
32x511
Как передавать в конструктор значение с поля класса? Мне лень в каждый объект ручками все добавлять, когда все эти значения и так есть в классе. Делаю задачу ОПа. http://ideone.com/1z228K
Ответы: >>1029161 >>1029519 >>1030004
Аноним 2017/07/21 10:15:14  №1029161 324
>>1029149
>Мне лень в каждый объект ручками все добавлять, когда все эти значения и так есть в классе.

Убери параметры из конструктора( или сам конструктор, судя по описанию, он тебе только мешает), он просто будет выполнять код при создании объекта.
2017/07/21 11:25:23  №1029194 325
хочу сделать запись реквестов несуществующих страниц
по типу
кто-то пытается зайти на
site.com/analplugs
его редиректит на главную
site.com
а site.com/analplugs записывается в бд
редирект понятно через какой-нибудь htaccess можно сделать, но как это совместить с записью в бд?
Ответы: >>1029221 >>1029518 >>1030004
Аноним 2017/07/21 13:31:35  №1029221 326
>>1029194
Сервак и без тебя ведет логи запросов ко всем ресурсам, в том числе и несуществующим.
Ответы: >>1029262
Аноним 2017/07/21 13:58:35  №1029230 327
Привет, что почитать по паттернам?

И может кто, предложить решение этой задачи?
https://pastebin.com/Mmiz1HDU
Я смог наваять только такое:
https://pastebin.com/bwMZHvkg
Понимаю что криво, но куда копать не пойму.
Может, подскажите чего?
Ответы: >>1029515 >>1030004
Аноним 2017/07/21 14:52:41  №1029262 328
>>1029221
хочу именно через бд
Аноним 2017/07/21 15:18:38  №1029274 329
>>1029147
Да, похоже, оно. Благодарю.
someApprentice 2017/07/21 15:43:30  №1029290 330
>>1028550
>В общем, есть 2 варианта, предлагаю сравнить их преимущества и недостатки.
Остановимся на первом варианте, т.к. во втором переусложнена генерация ключей. Может быть и нет, сначала мне нужно разобраться с шифрованием

>> Но я не понимаю как хранить ID сообщений - получается что для каждого пользователя оно теперь будет своё. Из этого вытекает, что нельзя будет как-то преобразовывать эти сообщения т.е. редактировать или удалять.
>Можно сделать 2 таблицы, одна для хранения id сообщений, другая для хранения зашифрованных копий сообщений для каждого получателя.
>При этом, чтобы связать сообщения, можно сделать какой-нибудь добавочный id. Можно например сделать таблицу сообщений (где и будет этот id), и отдельно таблицу, которая хранит копию сообщения для конкретного получателя.
Действительно, можно создать таблицу специально чтобы только хранить id, а ящики Inbox и Outbox будут хранить ещё и всё остальное (автора, контент, дату и т.д.).

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


Шифрование

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

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

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

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


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

>либо же (если есть много однотипных элементов) выгоднее ставить не много обработчиков, а один обработчик на родительский элемент и ловить всплывающие снизу дерева DOM события.
Вот так https://jsfiddle.net/jsqt57hz/2/ ?

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

https://arhivach.org/thread/266631/#1018809
>> А что если элемент появляется не сразу? Логично будет задать тогда при его выводе элемента (то есть обработчик будет частью отображения) или в контроллере?
>Во-первых, "установка обработчика" не обязательно значит "установка обработчика на DOM элемент". В виджете может быть своя система событий, и ставится обработчик на внутреннее событие виджета, а не на DOM элемент.


> У меня есть идея как при отключенном js опускать окно диалога до последнего сообщения - использовать якори.
> Это должно быть сделано с помощью функций JOIN и GROUP:
Я не очень понял, как выравнивание сообщений связано с SQL-запросами?
Не выравнивание, а опускание скролла сообщений до последнего сообщения, если я правильно понял терминологию.

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

><a class="contact" ... href="conversation.php? ... #message-ID">someUser</a>
><div id="message-ID ... class="message">

Заодно можно сделать и сортировку контактов по последним полученным сообщениям.
Ответы: >>1030003
Аноним 2017/07/21 16:28:31  №1029314 331
Привет, помогите советом

Как дебажить Request/Response между React+Redux и Silex?

Я пытаюсь отправить POST запрос с помощью метода Fetch() на api своего приложения.
В хроме я вижу что запрос отправлен, и содержит некоторые данные, которые я отправляю.
Но, не могу получить эти данные в контроллере из Request с помощью all() и записать их в лог,
Monolog пишет пустую строку (или ноль).
Данные перед отправкой обрабатываю JSON.stringify(data) https://github.com/enotocode/birthday_reminder/blob/master/src/client/Login/actions.js#L49
на сервере массив из реквеста превращаю в строку implode() и пишу info(printf(data)) https://github.com/enotocode/birthday_reminder/blob/master/src/server/Controllers/SignupController.php#L23
Лог https://github.com/enotocode/birthday_reminder/blob/master/src/server/public/development.log#L51
Почему не получается вытянуть из реквеста данные? В чем может быть проблема?
Ответы: >>1029319 >>1029335 >>1029339
Аноним 2017/07/21 16:33:42  №1029319 332
bug.jpg (159, 1304x768)
768x1304
Ответы: >>1029322
Аноним 2017/07/21 16:37:01  №1029322 333
Ответы: >>1029324
Аноним 2017/07/21 16:48:25  №1029324 334
>>1029322
А как посмотреть?
Monolog выводит в лог пустую строку: log=implode($_POST); info(log)
Ответы: >>1029327 >>1030002
Аноним 2017/07/21 17:00:46  №1029327 335
>>1029324
просто сделай
var_dump($_POST, $_GET);exit;
и глянь в хроме ответ сервера
Ответы: >>1029332 >>1029335
Аноним 2017/07/21 17:14:52  №1029332 336
>>1029327
>var_dump($_POST, $_GET);exit;

array(size=0)
array(size=0)
Аноним 2017/07/21 17:23:04  №1029335 337
>>1029314
>>1029327
После того как указал заголовки для запроса в аргументах к fetch ('Content-type', 'application/json; charset=utf-8'), монолог записал данные из запроса в лог. Но $_POST все равно пустой на момент срабатывания request->all()
Аноним 2017/07/21 17:28:15  №1029339 338
>>1029314

Смотреть надо в инструментах разработчика - на тип запроса, на Content-Type и тело запроса (можно нажать view source рядом с request payload).

PHP при поступлении POST-запроса разбирает тело запроса и помещает параметры в переменную $_POST, откуда их берет Request.

Но PHP разбирает не любые данные, а только данные в 2 форматах (которые использует браузер для форм):

http://php.net/manual/ru/reserved.variables.post.php

> Ассоциативный массив данных, переданных скрипту через HTTP метод POST в случае использования в запросе в качестве HTTP Content-Type application/x-www-form-urlencoded или multipart/form-data .

Ты передаешь данные в каком-то своем придуманном формате и естественно что PHP их игнорирует. Причем формат у тебя странный - данные передаешь как JSON но с типом plain/text.

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

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


Также, завис на этом коде, пока не понял, что тут 2 функции:

> .then(
> response => response.json(),
> error => console.log('An error occured.', error)
> )

Ну и синтаксис они придумали в новом JS, нечитаемый абсолютно.

Также, по моему у тебя ошибка в обработчике ошибок. error => console.log('An error occured.', error) возвращает null и это значит что дальше выполнится блок then с этим null ( json => dispatch(recieveInputs(json)) ). То есть ты как бы "обработал" ошибку и превратил ее в успешный результат. Если ты не выбросил исключение то это значит что ошибка полностью обработана.

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


Чтобы проверить, что ты разбираешься, вот тебе вопрос.

Что если сервер вернет неправильный JSON? В этом случае response => response.json выкинет исключение, then() его перехватит и что будет дальше? Выведется ли сообщение об ошибке или будет потеряно?

Ответы: >>1029394 >>1029581
Аноним 2017/07/21 19:22:49  №1029394 339
>>1029339
>Но PHP разбирает не любые данные, а только данные в 2 форматах (которые использует браузер для форм)
Значит переменные $_POST и $_GET будут всегда пусты, если передавать данные в JSON формате? Существуют еще удобные способы проверять данные, которые получил PHP в теле запроса POST?

>Причем формат у тебя странный - данные передаешь как JSON но с типом plain/text.
Исправил, добавив заголовок ('Content-type', 'application/json; charset=utf-8');

>Проще всего не использовать JSON, а использовать один из стандартных способов кодирования.
Почему так проще? Для urlenencoded и form-data нужно специально кодировать данные менее удобным способом, чем JSON.stringify(). Или ты имеешь ввиду если передавать их из формы?

>Также, по коду я бы советовал вынести работу с API в отдельный слой, а не мешать все в кучу в actions.
>Также, по моему у тебя ошибка в обработчике ошибок.
Это условный код из мануала Redux, я еще не смотрел как сделаны реальные приложения. Но написано, что тут в конце цепочки не следует добавлять блок catch во избежание цикла с ошибкой 'Unexpected batch number' если рендеришь результат. Каменистое дно.

>Что если сервер вернет неправильный JSON? В этом случае response => response.json выкинет исключение, then() его перехватит и что будет дальше? Выведется ли сообщение об ошибке или будет потеряно?
Браузер вероятно выведет ошибку в консоли, и наверное она попадет в качестве аргумента в recieveInputs(json)
Аноним 2017/07/21 19:36:49  №1029411 340
>>1029394

charset добавляется только для содержимого с типом text/*. В JSON кодировка определена стандартом и указывать ее не надо.
Ответы: >>1029583
Аноним 2017/07/21 23:53:02  №1029508 341
test
Аноним 2017/07/21 23:57:36  №1029515 342
>>1029230
сохранение через сингелтон очевидно ,
> некоторых упражнений способ сохранения может измениться и нужно, чтобы это можно было сделать легко.
тут я думаю нужно делать как то через фабрику

ну и точно нужно делить расчёт балов в модель\AR
Ответы: >>1029823
Аноним 2017/07/21 23:58:51  №1029518 343
>>1029194
нужно писать хендлер , и когда реквест будет на не существ страницу , ловить это и записывать в бд после делать редирект на главную
Аноним 2017/07/22 00:00:49  №1029519 344
>>1029149
если они уже есть в классе то в методе класса ты можешь ими оперировать через $this->foo , очевидно если это не статический метод
Аноним 2017/07/22 00:02:08  №1029521 345
>>1029108
это js , синтаксис на c похож у многих языков , так как они почти все дети с языка
Ответы: >>1029579
Аноним 2017/07/22 00:04:17  №1029522 346
Ответы: >>1029537
Аноним 2017/07/22 00:09:40  №1029523 347
>>1029394
>Значит переменные $_POST и $_GET будут всегда пусты, если передавать данные в JSON формате? Существуют еще удобные способы проверять данные, которые получил PHP в теле запроса POST?
>
пост будет пуст да , способы есть https://stackoverflow.com/questions/40108736/php-get-json-post-data
Аноним 2017/07/22 00:55:41  №1029537 348
>>1029522
пиздец. Просто пиздец всё оказалось настолько просто. Спасибо тебе огромнейшее я столько думал над этим.
Аноним 2017/07/22 00:57:55  №1029538 349
Скока надо дрочиться, чтобы получать 100 к ? За год полтора так вырасти можно ??
Аноним 2017/07/22 01:02:56  №1029540 350
>>1029538
Все же от тебя зависит. От того как ты усваиваешь информацию и от того, сколько времени ты будешь уделять своему обучению.

Всё в твоих руках.
Ответы: >>1029614
Аноним 2017/07/22 02:01:05  №1029553 351
>>1029538

Маловероятно. Если бы все было так просто, все бы давно уже устроились работать программистами. Так как в РФ средняя зарплата за апр. 2017 - 38906 руб, а медианная (50% людей получают меньше этой цифры) - около 30 000 р

Лучше поспрашивать у анонов, которые уже прошли обучение и устроились на работу. Например, в работа-треде который тут где-то есть.
Ответы: >>1029613
Аноним 2017/07/22 02:40:50  №1029569 352
>>1029538
если дрочиться только ради 100к то примерно никогда ...
Ответы: >>1029610
Аноним 2017/07/22 04:35:41  №1029579 353
Аноним 2017/07/22 07:00:18  №1029581 354
>>1029394
>>1029339
>>Что если сервер вернет неправильный JSON? В этом случае response => response.json выкинет исключение, then() его перехватит и что будет дальше? Выведется ли сообщение об ошибке или будет потеряно?
>Браузер вероятно выведет ошибку в консоли, и наверное она попадет в качестве аргумента в recieveInputs(json)

Прочитал про промисы статью кантора внимательнее, и провел эксперимент, если метод response.json() выкинет ошибку, то она не будет отображаться в консоли пишет кантор (но Chrome ее выводит), и поскольку следующий блок then() не имеет функции rejected, чтобы его вызвать, и в конце цепочки нет catch, то можно считать, шибка будет потеряна.
Ответы: >>1029839 >>1030000
Аноним 2017/07/22 07:35:49  №1029583 355
>>1029411
>charset добавляется только для содержимого с типом text/*. В JSON кодировка определена стандартом и указывать ее не надо.
Лол, пример взял из учебника Кантора. Проверил сам, действительно в стандарте написано что JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32, и UTF-8 по дефолту. Но разве это не подходит под случай "явное лучше не явного"?
Ответы: >>1029999
Аноним 2017/07/22 10:21:22  №1029610 356
>>1029569
Почему ты так считаешь?
Аноним 2017/07/22 10:25:54  №1029613 357
>>1029553
>средняя зарплата за апр. 2017 - 38906 руб
Чиво, блядь? Я про ДС, есличо. Тут стажёр эти ёбаные 40к будет получать уже в первый месяц работы.
Ответы: >>1029999
Аноним 2017/07/22 10:27:41  №1029614 358
>>1029540
Два чая, ток тут не про обучение будет верно, а вообще про все. Если сильно захочет то будет и 200к получать, конечно если хватит ума, а так если он обычный таракан который решил, что это легко и на этом можно навариться, то правильно его тралят.
Ответы: >>1029622 >>1029999
Аноним 2017/07/22 10:31:11  №1029617 359
Поцаны смотрите че сделал
file:///C:/Users/microwavenovka/Desktop/HTML5/Learning/Learn1.html
Ответы: >>1029681 >>1029997
Аноним 2017/07/22 10:36:50  №1029622 360
>>1029614
>конечно если хватит ума
Помимо ума ещё нужны soft skills. За 200к их от тебя будут требовать, ибо выполняемые тобой функции будут выходить за рамки тупого кодинга.
Аноним 2017/07/22 13:29:59  №1029681 361
someApprentice 2017/07/22 15:17:52  №1029721 362
>>1028550
>Что касается твоей схемы, вместо 2 таблиц inbox/outbox можно сделать одну с полем типа сообщения.
А можно вообще не указывать этот тип. Зачем это может пригодиться?
Ответы: >>1029997
Аноним 2017/07/22 18:36:28  №1029807 363
Начал вкатываться, какую версию php ставить?
Пятую или седьмую?
Ответы: >>1029813 >>1029997
Аноним 2017/07/22 18:43:21  №1029813 364
>>1029807
можешь начать с 5.6 базовые знания применимы и для 7 , но на 5.6 ещё много легаси кода что == работе
Ответы: >>1029817
Аноним 2017/07/22 18:46:59  №1029817 365
>>1029813
А 7 и 5.6 совместимы или нет?
Ответы: >>1029818
Аноним 2017/07/22 18:49:14  №1029818 366
>>1029817
Всё, что написано на 5.6, будет работать на 7.
Аноним 2017/07/22 18:57:37  №1029823 367
>>1029515
>сохранение через сингелтон очевидно
Я подумал, что подразумевается, что будет использоваться фрейворк и такое можно опустить.
>через фабрику
Зачем фабрику, почему не декоратор?

>ну и точно нужно делить расчёт балов в модель\AR
Это вообще не понял.
Ответы: >>1029845
Аноним 2017/07/22 19:09:24  №1029832 368
фвый23.jpg (69, 879x681)
681x879
Аноны, почему ideone ничего не выводит?

Ответы: >>1029846 >>1029847
Аноним 2017/07/22 19:49:31  №1029839 369
>>1029581

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

Потому в спецификации добавили "костыль" (на мой взгляд костыль) - они сделали вывод необработанных ошибок в консоль на следующем шаге цикла событий и сделали событие, по моему unhandledrejection, чтобы ловить такие ошибки программно. Потому ты видишь сообщение в консоли.
Аноним 2017/07/22 20:09:38  №1029845 370
>>1029823
>декоратор
так как декоратор расширяет класс , а фабрика описывает действие которое может быть реализовано в разных типах вопросов по разному
Аноним 2017/07/22 20:13:19  №1029846 371
>>1029832
Потому что тело твоего цикла не выполняется ни разу. Уже в самом начале условие продолжения цикла $credit <= 5000 ложно.
Ответы: >>1029859
Аноним 2017/07/22 20:14:21  №1029847 372
>>1029832
так как 1 всегда будет меньше 5000 , перечитай как работают циклы
Ответы: >>1029859
Аноним 2017/07/22 20:14:30  №1029848 373
Почему здесь все таки няши, Рика в ОПпосте и хорошая шапка? Спасибо вам за то, что вы есть
Аноним 2017/07/22 20:35:49  №1029859 374
Аноним 2017/07/22 20:38:47  №1029861 375
Аноны, а как сделать, что бы вместо локалхост в адресной строке было название папки, в которой лежит сайт? Wamp сервер
Ответы: >>1029878 >>1029997
Аноним 2017/07/22 21:28:50  №1029878 376
>>1029861
1. Настроить сервер и C:\Windows\System32\drivers\etc\hosts
2. Использовать протухший денвер
3. Перестать насиловать мозг бессмысленной херней и использзваь php -S 127.0.0.1:8888
Ответы: >>1029882 >>1029891
Аноним 2017/07/22 21:30:27  №1029880 377
Блять как мне нравится название треда, благослави опа анон.
Аноним 2017/07/22 21:30:46  №1029882 378
>>1029878
>использзваь
использовать
Аноним 2017/07/22 21:51:40  №1029891 379
>>1029878
Про последнее не понял, что это такое, анон?
В денвере, кстати, тоже локалхост
Ответы: >>1029916
Аноним 2017/07/22 21:52:33  №1029892 380
9317528640.png (49, 900x450)
450x900
Анон, такое дело. Первый день вообще пытаюсь делать скрипты из мануала. Решил улучшить задание на "условия", сделав дополнительный 3-ий кубик. Дополнительное условие на "дабл" получилось, на трипл - нет. Подскажи, пожалуйста, как лучше вбить 3 параметра в условие. Алсо, может есть какие замечания по имеющемуся коду?
Ответы: >>1031117 >>1031220
Аноним 2017/07/22 22:48:13  №1029906 381
Аноны, как прикрутить дебаггер к phpStorm?
Ответы: >>1029911
Аноним 2017/07/22 22:55:12  №1029911 382
Ответы: >>1029914
Аноним 2017/07/22 23:04:46  №1029914 383
>>1029911
Ебать, я такое в жизни не осилю
Аноним 2017/07/22 23:07:20  №1029916 384
environment.png (348, 800x599)
599x800
>>1029891
Учи матчасть. Браузер узнает ip адрес сайта c благодаря dns или файлу hosts. Денвер перезаписывал на лету hosts в соответствии с именем папки. Но это все мхом поросло, c тех пор как в php встроили сервер и все современные фреймворки умеют запускать сайт в режиме разработки через него. Это обязательная часть скафолдинга. Ты сам можешь сам запускать php -S ip:port из папки с сайтом. Открой папку в проводнике и введи адресной строке cmd, нажми enter. Появится консоль. Введи в нее php -S 127.0.0.1:8080, жми enter.
Открой в браузере адрес 127.0.0.1:8080 или пропиши в hosts:
название_сайта 127.0.0.1.
Тогда можешь открывать сайт по имени. Главное необходимо прописать путь к php в переменную среды Path, как на пике.
Ответы: >>1029930
Аноним 2017/07/22 23:44:22  №1029930 385
>>1029916
лол править hots , говорить что всё мхом поросло
не проше использовать тот же OpenServer который делает это всё автоматом при запуске
Ответы: >>1029938
Аноним 2017/07/23 00:00:41  №1029938 386
>>1029930
Нахуя вооще что-то править, превращать десктоп в сервер. Запускай laravel через artisan, попивая смузи.
Если надо больше - используй VM и готовые аплиансы или vargant https://app.vagrantup.com/boxes/search
Ответы: >>1029941 >>1029943
Аноним 2017/07/23 00:05:24  №1029941 387
Аноним 2017/07/23 00:11:16  №1029943 388
>>1029938
можно то и doker но проблема в том что зачем мне пердолиться с всей этой штукой день , если я могу поставить опен сервер и запустить вс в 2 клика ?
Ответы: >>1029948
Аноним 2017/07/23 00:18:14  №1029948 389
>>1029943
А зачем тогда сервер? Достаточно только php, ну и composer. В php есть сервер для разработки, есть sqlite
Ответы: >>1029993
ОП, проверь задачи, пожалуйста Аноним 2017/07/23 00:55:01  №1029961 390
Ответы: >>1043577 >>1043579
Аноним 2017/07/23 03:45:50  №1029993 391
>>1029948
редисы , постгресы и тд
Аноним 2017/07/23 06:24:53  №1029997 392
>>1027835

Про фигурные скобки - тут http://php.net/manual/ru/language.types.string.php#language.types.string.parsing

> кубы http://ideone.com/LitWO1

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

> айфон http://ideone.com/lHOqEL
Ок, тоже верно.


>>1029861

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

>>1029807

Любую, можно 7, только выучи отличия между этими версиями.

>>1029721

Не знаю, если ты можешь без этого обойтись, то можно и не делать.

>>1029617

Ты дал ссылку на файл на своем компьютере.
Аноним 2017/07/23 06:25:16  №1029999 393
>>1029614

Сильно захотеть недостаточно.

>>1029613

Это в общем по стране, а не среди сотрудников определенной специальности в отдельном городе.

>>1029583

Я посмотрел RFC, который определяет тип application/json: https://tools.ietf.org/html/rfc4627

Там написано:

> The MIME media type for JSON text is application/json.
> Required parameters: n/a
> Optional parameters: n/a
charset - это именно parameter и тут он не определен.

Также, там написано, что кодировка определяется по кодированию первых 2 символов в JSON-данных.

Также, для надежности, я глянул еще RFC по MIME-типам: https://tools.ietf.org/html/rfc2046#section-4.1.2

> Charset Parameter
> A critical parameter that may be specified in the Content-Type field
> for "text/plain" data is the character set
> ....
> The specification for any future subtypes of "text" must specify
> whether or not they will also utilize a "charset" parameter, and may
> possibly restrict its values as well.
> ...
> Other media types than subtypes of "text" might choose to employ the
> charset parameter as defined here, but with the CRLF/line break
> restriction removed.
> ....
> The "charset" parameter has been defined primarily for the purpose of
> textual data, and is described in this section for that reason.
> However, it is conceivable that non-textual data might also wish to
> specify a charset value for some purpose, in which case the same
> syntax and values should be used.

То есть этот параметр определен для тестовых данных. Хотя там написано что он может использоваться и для других типов данных, в описании application/json мы такого не видим. И конечно, браузеры могут его интерпретировать или игнорировать, но стандартом поведение никак не определено.
Ответы: >>1030018
Аноним 2017/07/23 06:25:57  №1030000 394
>>1029581

> и поскольку следующий блок then() не имеет функции rejected, чтобы его вызвать
Вот тут неточность. Ошибка теряется не поэтому.

Если ты не передаешь функцию onRejected в then, то вместо нее будет подставлена функция function Thrower(e) { throw e; }. Это не вызывает потерю ошибки.

Ошибка в твоем коде в том, что функция-обработчик ошибки error => console.log(error) не выкидывает исключение, а возвращает null и это значит, что ошибка обработана и новый промис резолвится в это значение, и этот null передается дальше по цепочке then.

То есть, разберем такой пример:

var p = new Promise(function (resolve, reject) {
reject(new Error);
});

var p2 = p.then(function () {}, function (e) {
console.log(e);
return null; // ошибка, должно быть throw
});

p2.then(....);

В данном примере - p будет rejected, но p2 будет resolved в значение null, так как мы обработали ошибку в then и вернули новое значение. Чтобы p2 также была rejected, мы должны вместо return null поставить throw e; то есть перевыбросить исключение.

То есть функция-обработчик (onFullfilled, onRejected) может либо выбросить исключение - в этом случае p2 будет rejected, либо что-то вернуть - в этом случае p2 ресолвится в это значение.

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

Вообще, может быть, тебе стоит разобрать пример реализации промисов вот тут: https://www.promisejs.org/implementing/ ?

----

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

var result = array.filter(function (x) { return x > 0; });
var result = array.filter(x => x > 0);

В этом примере код со стрелочной функцией короче и читабельнее.

Но в твоем примере, error => console.log(error) - я не уверен, что использование стрелочной функции тут улучшает читабельность кода. Хотя бы потому, что в твоем коде подразумевается { return console.log(error); } и я не понимаю, зачем тут return.

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

К сожалению, и в официальных мануалах этого не понимают. Вот пример из документации MDN ( https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions ):

> // Destructuring within the parameter list is also supported
> var f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
Это какой-то антипример, как писать ни в коем случае не надо, так как я это даже прочесть не могу. Что это вообще такое?

К тому же они умудрились создать конфликт в синтаксисе стрелочных функций с синтаксисом литералов-объектов:

> var func = () => { foo: 1 };
> // Вызов func() возвращает undefined!

Впрочем, для тех, кто с веб-технологиями и JS знаком не первый день, ничего нового. Они всегда разрабатывались так же бестолково.
Аноним 2017/07/23 06:26:56  №1030002 395
>>1029394

> Существуют еще удобные способы проверять данные, которые получил PHP в теле запроса POST?
Ты можешь прочитать тело POST и распарсить его самостоятельно или используя какую-нибудь библиотеку (а можешь даже написать и опубликовать свою): http://php.net/manual/ru/wrappers.php.php#wrappers.php.input

> Для urlenencoded и form-data нужно специально кодировать данные менее удобным способом, чем JSON.stringify().
Некоторые библиотеки (jQuery) умеют кодировать их автоматически, также доступен объект FormData, который умеет их кодировать. Наверно, кодировать на стороне клиента их было бы проще, чем впиливать поддержку на стороне PHP, но я в общем-то ничего против передачи JSON не имею - стандартам это никак не противоречит при указании корректных Content-Type/Content-Length

> Но написано, что тут в конце цепочки не следует добавлять блок catch во избежание цикла с ошибкой 'Unexpected batch number' если рендеришь результат.
Лучше бы разобраться, что это значит, так как я, например, вообще ничего не понял и первый раз слышу про эту ошибку.

В любом случае, ошибки нужно обрабатывать. Ты не должен полагаться на то, что сервер будет доступен в 100% случаев и всегда выдавать корректные ответы. Вот мой урок про аякс, перечитай его, если еще не читал, там упоминаются ошибки: https://github.com/codedokode/pasta/blob/master/js/ajax.md

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

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

>>1029324

Для дампа данных лучше использовать не implode, а print_r(..., true) или var_export или (внезапно) json_encode. Я обычно просто ставлю var_dump(); die() и смотрю в отладчике ответ.

Кстати, в отладчике Хрома в Network есть несколько полезных функций, вызываемых через правую кнопку. Это replay request и возможность скопировать командную строку для curl для отправки такого же запроса со всеми заголовками из консоли.
Аноним 2017/07/23 06:27:24  №1030003 396
>>1029290

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

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

> Действительно, можно создать таблицу специально чтобы только хранить id, а ящики Inbox и Outbox будут хранить ещё и всё остальное (автора, контент, дату и т.д.).
Еще можно рассмотреть вариант - добавить в сообщение внутренний id, который генерируется на клиенте, шифруется и не виден серверу. При редактировании сообщения мы просто посылаем второе сообщение с таким же внутренним id, и контакт понимает, что оно было отредактировано.

> Я уже немного знаком с ним, но почему-то даже не могу придумать функцию которая будет шифровать сообщения.
Поискать готовую в библиотеке openssl: http://php.net/manual/ru/book.openssl.php

Вот статья например https://www.devco.net/archives/2006/02/13/public_-_private_key_encryption_using_openssl.php - можно то же самое делать с использованием функций openssl.

Погугли по "openssl encrypt data asymmetric"

Также, можно посмотреть протоколы Tox, Signal, и расширение OTR для Jabber и посмотреть как поступают они.

> Меня сначала смутило что без js тогда не будет работать приложение,
Чтобы приложение работало без JS, мы должны доверить операции шифрования/расшифровки (и все наши ключи) серверу. То есть поступиться безопасностью.

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

То есть чтобы работать без JS, нужно снизить степень защищенности и доверять серверу.

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

Я тут не вижу проблемы. Вот допустим, у нас есть кнопка на странице. Мы нашли ее, поставили на нее обработчик DOM события и больше не добавляем. Или мы создаем кнопку, вставляем в DOM, ставим один раз обработчик и больше не добавляем его. Не важно, контроллер это или view делает, лишь бы DOM-обработчик ставился один раз. Нужно это так спроектировать. MVC тут вообще не при чем.

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

>>либо же (если есть много однотипных элементов) выгоднее ставить не много обработчиков, а один обработчик на родительский элемент и ловить всплывающие снизу дерева DOM события.
> Вот так https://jsfiddle.net/jsqt57hz/2/ ?
да. Это обычно применяют для каких-то списков, где много однотипных элементов.

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

Когда я говорил, про "свои" события, я имел в виду систему, когда view сам ставит DOM-обработчик (например, клика на контакт в списке), обрабатывает это событие и генерирует свое, искуственное событие вроде onContactSelect. И контроллер подписывается именно на это искуственное событие, а не лезет в DOM.

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

> Не выравнивание, а опускание скролла сообщений до последнего сообщения, если я правильно понял терминологию.
Это лучше делать через JS с помощью scrollTop. Его можно ставить в значение scrollHeight - clientHeight. Если хочется без JS, то да, можно просто в конец списка сообщений засунуть якорь, но это ненадежно, так как прокрутиться может еще что-нибудь, лучше наверно так не делать и без JS ничего не прокручивать (либо можно сделать ифрейм с сообщениями, и в нем якорь в конце списка сообщений).

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

> Заодно можно сделать и сортировку контактов по последним полученным сообщениям.
Через группировку это будет неэффективно, так как будет обзодиться большое число записей (все сообщения для каждого контакта). Такую сортировку лучше сделать денормализацией, добавив поле lastMessageTime в таблицу контактов. Опять же, стоит помнить что это лишняя незащищенная информация.
Ответы: >>1030039 >>1030074
Аноним 2017/07/23 06:28:13  №1030004 397
>>1029230

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

AnswerInterface никуда не годится, так как в нем нет методов. Как ты им собрался пользоваться?

В checkAnswer ничего не передается - что он проверяет? Та же проблема в CalcScore.

SaveAndGEtResult явно должен быть в контроллере, а не в модели упражнения Exercise.

В твоем коде я вижу проблемные места - например, статический метод работы с БД, который не позволит тут использовать DI (урок по DI https://github.com/codedokode/pasta/blob/master/arch/di.md ). Мануалов по Юи перечитался?

Ну и по ощущениям, у тебя тут многовато интерфейсов, хотя не могу найти, почему бы это было плохо.

>>1029194

При заходе на несущ. страницу надо показывать страницу 404, а не редиректить. Редирект значит "эта страница есть, но по другому адресу".

Логгировать очень просто - пишешь данные в файл или вставляешь строку в таблицу в БД. Не понял, что именно тут непонятно. Ну и тебе правильно написали, Апач умеет логгировать такие обращения.

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

>>1029149

> Как передавать в конструктор значение с поля класса?
Обычным образом. Какого-то специального синтаксиса для этого нет.

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

Прокомментирую еще:

> public $endStavka; // окончательная ставка, вычисляется через функцию EndStavka
Не стоит хранить данные, которые вычисляются из других полей, так как в этом случае ты обязан их обновлять при изменении любого из исходных полей и тут легко что-то пропустить. Храни только исходные данные, а вычисляемые не храни вообще. То есть сделай метод для вычисления зарплаты.

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

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

Аноним 2017/07/23 06:28:47  №1030006 398
>>1028685

Потому что обычно ты не можешь что-то передать в аргументы. Вот например array_filter, она принимает на вход функцию и передает в нее элементы массива, и что-то другое ты в аргументы передать не можешь.

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

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

>>1028597

У тебя такие аналогии, я надеюсь, они не на твоем жизненном опыте основаны.

>>1028470

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

>>1027651

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

> Как-то не хочется оставлять пустую функцию
Не вижу в чем тут проблема.

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

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

> Почему у меня не вбрасываются эти ошибки (ошибки не появляются в консоле)? Это из-за асинхронного кода?

Это особенности промисов. В then(onFulfilled, onRejected) ты передаешь 2 функции-обработчика, и промис перехватывает любые выброшенные в них исключения и использует это как сигнал об ошибке обработки и режджектит следующий в цепочке промис. Вот пример кода:

// p резолвится в значение 1
var p = new Promise(function (resolve, reject) {
resolve(1);
});

// обработчик выбрасывает исключение, потому p2 реджектится в эту ошибку
var p2 = p.then(function (val) {
throw new Error();
});

Что-то ты не очень знаешь, как работают промисы. Может быть, тебе стоит разобрать пример реализации вот тут: https://www.promisejs.org/implementing/ ?

И еще, напомню, что промисы jQuery не соответствуюют спецификации Promise/A+, которая используется в языке JS. У них свои несовместимые промисы.

И еще, у тебя обработка ошибок странно сделана:

> that.backend.postMessage(to, message, token).then(
> ....
> function(jqXHR, textStatus) {
> ...
> that.backend.handleError(jqXHR, textStatus);
> }

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

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

> К сожалению, у меня не получилось найти в ejs аналог функции nl2br и при этом чтобы экранировались тэги. В таком случае, будет приемлемым оставить этот костыль?
nl2br не экранирует теги, она только заменяет \n на <br>, если я не путаю.

Насколько я понял, у тебя проблема в том, что ejs экранирует данные и твой <br> выводится как текст? В документации ( https://github.com/mde/ejs/blob/master/docs/syntax.md ) написано что есть 2 вида тегов, один принимают текст, экранируют его и выводят, другой тег принимает HTML код и вставляет его как есть.

В чем именно сложность-то? Можно сделать так <%- convertMessageToHtml(message) %>

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

Сам метод public function send($apiMode = false) явно нарушает MVC и представляет пример "толстого" контроллера. Метод отправки должен быть в модели.

Что касается if ($apiMode), тут тоже все как-то странно, тут можно было бы это обобщить, например, сделать специальное исключение ApiError, ловить его и в зависимости от режима выдавать разный ответ.

То есть нет, сделано конечно неудачно. Стена кода какая-то с 7 уровнями вложенности.

> Я плохо понял что такое REST. Это просто архитектура которая позволяет обрабатывать запросы с методами вроде PUT\DELETE?

Это набор принципов, которые можно использовать при проектировании API. Что есть ресурсы (URL), с которыми можно делать разные действия (выражаемые методами). Ну например, PUT /user/ivan/inbox - отправить сообщение Ивану. Лучше посмотреть на примере REST API Яндекс-диска например.

Чистый REST не для каждой задачи хорошо подходит, конечно.

> Я никак не могу придумать как выводить только новые сообщения. Определенно, нужен setTimeout\setInterval чтобы постоянно обновлять данные с сервера, но как при этом выводить только те сообщения которые ещё не выведены в шаблон?
Для этого клиент должен "знать", какие сообщения выведены, и запрашивать с сервера только новые, и добавлять только новые. Чтобы это реализовать, нужно спроектировать изменения в нескольких компонентах:

- придумать поведение пользовательского интерфейса при обновлении данных (как это должно выглядеть)
- в виджете сообщений сделать возможность частичного обновления списка
- где-то в какой-то модели хранить список/диапазон загруженных сообщений
- добавить в АПИ методы и параметры для частичного получения данных

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

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

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

> У меня есть идея как при отключенном js опускать окно диалога до последнего сообщения - использовать якори
Есть вещи, которые нормально без JS не сделать. Ну то есть можно сделать ифрейм с сообщениями, в нем якорь после последнего сообщения - но это усложнит верстку. Может быть, не надо пытаться повторить то же поведение, что есть при наличии JS, а изменить интерфейс - например, вообще убрать прокрутку сообщений или ограничить их количество, чтобы их не надо было прокручивать?

> Не подвергаю ли я пользователей опасности, открывая кукисы для js?
Нет наверно.

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

И конечно, странно, что у тебя token хранится в view.

> У меня есть переменные, которые пишутся ни как camelCase или snake_case, например moremessages. Я знаю, что это плохой плохой вариант, но мне он кажется вполне читабельным. Лучше будет переимновать?
Да, переименовать. Я бы не сказал, что это читабельно.
Ответы: >>1039350
Аноним 2017/07/23 06:29:15  №1030007 399
>>1027168

Тут написано http://php.net/manual/ru/language.variables.scope.php

>>1026920

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

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

>>1026318

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

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

Наверно, тебе подойдут сценарии. Погугли.


>>1026257

В фронт-контроллере (или входном скрипте). Хочу только предупредить, что сессии плохо подходят для авторизации так как умирают через 30 минут неактивности.

> И где проверять может ли пользователь находиться на странице, private метод контроллера checkAuth() в каждом экшне?
Можно метод в базовом контроллере, можно отдельный класс для этого сделать.

>>1026198

Я Юи2 не использовал, так что сказать, увы, ничего не могу.


Аноним 2017/07/23 07:53:42  №1030018 400
>>1029999
>Сильно захотеть недостаточно.
Поэтому ты на том уровне где ты и есть.
someApprentice 2017/07/23 10:01:05  №1030039 401
>>1030003
>> Меня сначала смутило что без js тогда не будет работать приложение,
>Чтобы приложение работало без JS, мы должны доверить операции шифрования/расшифровки (и все наши ключи) серверу. То есть поступиться безопасностью.
>То есть чтобы работать без JS, нужно снизить степень защищенности и доверять серверу.
Можно сделать режим для шифрования\расшифровки сообщений.

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

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

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

Иметь собственное приложение - это хорошо.

Если взломать сервер, то может произойти всё что угодно.

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

https://github.com/someApprentice/chat/blob/master/public/js/contacts.js#L71

Я вывожу окно переписки

и вот здесь

https://github.com/someApprentice/chat/blob/master/public/js/conversation.js#L121-L124

я вывожу форму и ставлю на неё обработчики.

Ну да, здесь можно было сделать обработчик частью отображения, либо просто сделать проверку что элемент уже выведен и ставить его только при создании формы.
Аноним 2017/07/23 11:51:07  №1030066 402
>>1029538
Можно.

мимо 110k php-джун
someApprentice 2017/07/23 12:15:39  №1030074 403
>>1030003
>> Я уже немного знаком с ним, но почему-то даже не могу придумать функцию которая будет шифровать сообщения.
>Поискать готовую в библиотеке openssl: http://php.net/manual/ru/book.openssl.php
А шифровать копию сообщения собеседника, если его ключ зашифрован паролем?
Ответы: >>1030075 >>1030299
someApprentice 2017/07/23 12:16:17  №1030075 404
Аноним 2017/07/23 12:32:51  №1030078 405
Заказчику нужно парсить выдачу гугла, какие подводные камни кроме возни с проксями? Это вообще законно?
Ответы: >>1031757
Аноним 2017/07/23 14:00:37  №1030104 406
ОП, выручай, вот мой говнокод по Вектору http://ideone.com/FMRyCa.
но функция которая возвращает окончательную ставку сотрудника работает неправильно, подскажи что не так
Аноним 2017/07/23 14:04:32  №1030106 407
>>1030104
Откуда берётся ранг?
Ответы: >>1030124
Аноним 2017/07/23 14:35:43  №1030117 408
Ответы: >>1030124
Аноним 2017/07/23 14:52:26  №1030124 409
Ответы: >>1030132
Аноним 2017/07/23 15:29:08  №1030132 410
>>1030124
А в какой момент ранг появляется в сотруднике? А в какой момент считается endStavka? А в какой момент в поле сотрудника записывается endStavka?
Ответы: >>1030153 >>1030176
Аноним 2017/07/23 16:04:40  №1030149 411
>>1030104
Честно говоря, ничего не понятно. Сам почему не можешь найти? xDebug не настроил?
Аноним 2017/07/23 16:12:44  №1030152 412
>>1030104
Хотя. Ошибка в том, что ты создаёшь работника, не передавая ему ранг. Конструктор считает уже конечную ставку с коэффициентом 1, т.к. ранг у тебя не 2 и не 3 (null). Потом ты уже назначаешь работнику ранг (зп после этого, конечно, не пересчитывается) и загоняешь работника в массив.
Ответы: >>1030153
Аноним 2017/07/23 16:15:19  №1030153 413
>>1030152
Разобрался сам? Молодец!
Помог анону? Сомневаюсь.
Он получил бы больше, если бы нашёл свою ошибку сам, ответив на вопросы: >>1030132
Аноним 2017/07/23 16:49:20  №1030174 414
Что лучше xDebug или ZenDebug?
Ответы: >>1030199
Аноним 2017/07/23 16:52:16  №1030176 415
>>1030132
Ранг присваивается в цикле, после создания объекта,но как заставить работать именно после присвоения ранга я не знаю, только если всегда повторно вызывать метод
Аноним 2017/07/23 17:00:45  №1030184 416
>>1019301 (OP)
Няши,есть задача: распарсить при помощи xgettext все строки и создать словарь, но эта мразь парсит все,что в двойных кавычках. Как заставить эту пиздоту хватать только то, что обрамлено в _("хуй пизда сковорода")?
Ответы: >>1030199 >>1033109
Аноним 2017/07/23 18:10:03  №1030198 417
Пытаюсь заставить работать gettext и пока абсолютно безуспешно.
Что имею: OpenServer 5.2.2, PHP Version 5.5.38
Код скрипта: https://gist.github.com/anonymous/2a2fccdb72f02fef15847fbc633a24aa

Скрипт index.php, рядом с ним папка locale/en_EN/LC_ALL/mydomain.po и mydomain.po

Также есть папка с русскими переводами: locale/ru_RU
Содержимое po файлов: https://gist.github.com/anonymous/677ae340489f3db983c1270b194931b5

mo компилирую при помощи https://po2mo.net/

Практика показала, что локали ru_RU не существует, но есть ru, потому я переименовал папки ru_RU в ru и не помогло - всегда gettext возвращает английский текст.

Пробовал папку LC_ALL переименовывать в LC_MESSAGES - толку никакого.

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

Надеюсь мудрый анон подскажет где здесь косяк.
Ответы: >>1030244 >>1033108
Аноним 2017/07/23 18:11:46  №1030199 418
>>1030174
Разные вещи, если ты об этом: https://github.com/zendframework/zend-debug
Эта штука по сути var_dump для HTML, но тот же symfony/var-dumper гораздо мощнее. xdebug это PHP расширение на Cи, которое позволяет отслеживать выполнение программы и изменять значения переменных во время исполнения кода. Пользуются им обычно через IDE.

>>1026198
Я не ОП, но то, что описано в статье - всем давно известно, странно что подобная статья тебя останавливает. Мне тоже в Yii не нравятся пустые интерфейсы, их собственные сеттеры/геттеры, доступность Yii::$app отовсюду и прочее, но Yii по-прежнему остаётся инструментом, с помощью которого можно быстро и эффективно решать задачи.

>>1030184
> мразь
> пиздоту
> хуй пизда
Ты из /b вылез?
Ответы: >>1030200
Аноним 2017/07/23 18:12:47  №1030200 419
>>1030199
>Ты из /b вылез?
С хуевыми инструментами только так и получается.
Аноним 2017/07/23 19:55:37  №1030244 420
>>1030198
Не работает на винде, хоть и ошибок не выдает.
Вопрос решен.
Аноним 2017/07/23 21:27:20  №1030299 421
>>1030074

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

Этот же подход позволяет передавать сообщения вообще без сервера, напрямую через p2p.

Возникает вопрос - а где взять открытый ключ (ключи, если устройств несколько) пользователя B? Тут есть 2 варианта: либо сервер ведет реестр открытых ключей и клиент запрашивает его с сервера, либо при добавлении в контакты клиенты обмениваются ключами.

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

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

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

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

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

Ответы: >>1032659
Задание на побитовые операторы Аноним 2017/07/23 22:11:13  №1030326 422
>>1027969
https://3v4l.org/GNWKP

> сделай функцию countBits, которая принимает на вход число и возвращает число единиц в его двоичном представлении
Тут ведь нужно без циклов через побитовые операторы делать? Не понимаю как сделать, можно подсказку?
Ответы: >>1030330
Аноним 2017/07/23 22:18:33  №1030330 423
Аноним 2017/07/24 14:00:34  №1030557 424
Ответы: >>1030799
Аноним 2017/07/24 19:49:06  №1030786 425
Я только вкатываюсь, мне нужен XAMPP?
Или можно без него обойтись?
Ответы: >>1030799 >>1031432 >>1031474
Аноним 2017/07/24 19:51:42  №1030787 426
Аноны, я уже заебался. Решил поизучать Laravel.
В рот его топтать, это слишком тяжело - просто взять и установить эту хуету.
Устанавливал на мак.
С горем пополам у меня это получилось, я использовал их Homestead, для которого понадобился Vagrant и VirtualBox

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

Но как мне войти в свой проект-то?
Я смог написать php artisan serve и захожу на сайт через localhost:8000/.
Как это пофиксить? Что надо сделать?

Как мне подключиться к БД? Как использовать ебаный phpMyAdmin?

Почему все так сложно, а в документации этого нет?
Ответы: >>1030798 >>1030799 >>1033106
Аноним 2017/07/24 20:12:19  №1030798 427
>>1030787
The Hosts File

You must add the "domains" for your Nginx sites to the hosts file on your machine. The hosts file will redirect requests for your Homestead sites into your Homestead machine. On Mac and Linux, this file is located at /etc/hosts. On Windows, it is located at C:\Windows\System32\drivers\etc\hosts. The lines you add to this file will look like the following:

192.168.10.10 homestead.app
Make sure the IP address listed is the one set in your Homestead.yaml file. Once you have added the domain to your hosts file and launched the Vagrant box you will be able to access the site via your web browser:

http://homestead.app


https://laravel.com/docs/5.4/homestead
--------------------------------------------------------------------------------


ssh https://www.vagrantup.com/docs/cli/ssh.html

sudo apt-get install phpmyadmin
Ответы: >>1030806 >>1033107
Аноним 2017/07/24 20:12:27  №1030799 428
>>1030557
Я толком не смотрел, но с ООП у автора серьёзные проблемы (пик).

>>1030786
Для начинающего гораздо проще встроенный в PHP веб-сервер, который не требует установки и настройки: https://github.com/codedokode/pasta/blob/master/soft/web-server.md#Встроенный-в-php-сервер/

>>1030787
> В рот его топтать, это слишком тяжело - просто взять и установить эту хуету.
Одна строчка в терминале, куда уже проще?

> я использовал их Homestead, для которого понадобился Vagrant и VirtualBox
Для новичка это лишние стены абстракций, зачем они тебе? Читай о том, с чем работаешь и думай, нужно ли оно тебе. Бездумным перепечатыванием команд ничего не добьёшься.

> Я смог написать php artisan serve и захожу на сайт через localhost:8000/.
> Как это пофиксить?
Что фиксить? Команда artisan serve запускает встроенный веб-сервер в PHP, там нет виртуальных хостов как в апаче.

> Как использовать ебаный phpMyAdmin?
Laravel не имеет вообще никакого отношения к phpMyAdmin.

> Как мне подключиться к БД?
> а в документации этого нет?
Вот тут я уже подумал, что ты троллишь. По твоему нежеланию читать документацию и обилию нытья можно однозначно сказать то, что тебе рано лезть во фреймворки.
Ответы: >>1030802 >>1030803 >>1030872
Аноним 2017/07/24 20:24:16  №1030802 429
>>1030799
у меня просто случился бугурт
тяжело это дается как-то

>Одна строчка в терминале, куда уже проще?
а вот ни разу не одна, я часа два устанавливал
к слову, мне кажется, я мог вообще не париться и поставить просто Valet

>Для новичка это лишние стены абстракций, зачем они тебе? Читай о том, с чем работаешь и думай, нужно ли оно тебе. Бездумным перепечатыванием команд ничего не добьёшься.
Полностью согласен. Но я читал документацию с начала. Русскую. Там ребята начали с того, что хорошо было бы поставить homestead.
К слову, я на маке недавно и вполне представляю, как настраивается обычный AMP на винде. А для своих целей, так я бы вообще не парился и поставил Open Server, потому что у меня ничего, кроме самообразования особо-то и нет.

>Что фиксить? Команда artisan serve запускает встроенный веб-сервер в PHP, там нет виртуальных хостов как в апаче.
Ну хорошо, допустим. Но как мою проблему решить, я так и не догнал. У меня не работает http://homestead.app
Точнее, он как бы работает и пишет No input file specified.

>Laravel не имеет вообще никакого отношения к phpMyAdmin.
Ну и что? Я хочу использовать MySQL, а там привык юзать phpMyAdmin. Хотел бы знать, как это использовать в связке с Laravel. Как установить, как начать пользоваться.

>Вот тут я уже подумал, что ты троллишь. По твоему нежеланию читать документацию и обилию нытья можно однозначно сказать то, что тебе рано лезть во фреймворки.
Здесь я просто бомбанул. Все там про БД написано.
Ответы: >>1031431 >>1033107
Аноним 2017/07/24 20:26:56  №1030803 430
>>1030799
>с ООП у автора серьёзные проблемы (пик).
А как для нубов лучше реализовать M в паттерне MVC?
ActiveRecords? Новички в страхе убегут...
Ответы: >>1033106
Аноним 2017/07/24 20:31:43  №1030806 431
>>1030798
В /etc/hosts у меня добавлен 192.168.10.10 homestead.app все по гайду
Толку от этого?
У меня есть проект, который я создал через composer. Но он никак не связан с тем, что в hosts
Ответы: >>1030813 >>1033107
Аноним 2017/07/24 20:37:05  №1030813 432
>>1030806
Где добавлен? На маке или в убунте хомстид?
Ответы: >>1030830
Аноним 2017/07/24 20:42:06  №1030814 433
Ребят, я начал тут изучать веб-кодинг, и у меня возникла проблема с адресацией ссылок.

У меня в шапке сайта есть несколько кнопок, по нажатию которых я перемещаюсь в разные места своего высерасайта. Каждая из кнопок включает свой скрипт, который лежит по адресу php/скриптнейм.php. В каждом скрипте так же прогружается(require) эта самая шапка (файл main.php, из которого я щелкаю по кнопкам), которая лежит в одной директории с папкой php. Проблемы возникают тогда, когда мне нужно из любого из нескольких скриптов вернуться в main.php, либо из какого-либо скрипта переместиться в другой.

В main.php для всех кнопок (на самом деле это ссылки, но неважно) написан путь "php/скриптнейм1.php", "php/скриптнейм2.php" и т.д. Если я, будучи в одном из этих скриптов, захочу переместится в какой-либо из других оставшихся скриптов (или в main.php), браузер пошлет меня нахуй, ибо т.к я нахожусь уже в папке php, ссылку мне нужно задавать относительно нее, а она имеет вид "php/..." (такая же, как была загружена через require 'main.php').

Я бы конечно мог все эти файлы поместить в одну директорию, но так не интересно. Стили тоже не загружаются. Как можно решить данную проблему? Спасибо заранее! надеюсь нормально все объяснил.
Ответы: >>1030818 >>1030957
Аноним 2017/07/24 20:49:02  №1030818 434
Ответы: >>1031428
Аноним 2017/07/24 21:07:15  №1030830 435
Ответы: >>1030834
Аноним 2017/07/24 21:16:36  №1030834 436
>>1030830
Может не будешь создавать себе трудности и установишь php и composer на мак. Ларавел устанавливай через композер. Апач не нужен.
Ответы: >>1030863
Аноним 2017/07/24 21:28:54  №1030840 437
Почему не работает? Как изъять элемент из массива, если его ключ равен нулю? https://ideone.com/Dtw40D
Ответы: >>1030844
Аноним 2017/07/24 21:33:01  №1030844 438
>>1030840
>for($z = 0; $z++; $z <= count($bills)) {
Чиво?
Ответы: >>1030847
Аноним 2017/07/24 21:36:07  №1030847 439
>>1030844
Он перебирает элементы массива по индексу, и если оный ключ сего индекса равен нулю, то изымает. Так я задумывал.
Ответы: >>1030850
Аноним 2017/07/24 21:38:51  №1030850 440
>>1030847
Перечитай еще раз мурзилку как пользоваться for.
Ответы: >>1030925
Аноним 2017/07/24 21:49:26  №1030863 441
>>1030834
попробовал через docker, один хуй не получается
не догоняю, что куда копировать, какие где файлы создавать
я сделал контейнер, все работать должно, куда сайт заливать не понимаю
пиздец, какой же я тупой
Ответы: >>1033106
Аноним 2017/07/24 21:57:34  №1030872 442
>>1030799
>Для начинающего гораздо проще встроенный в PHP веб-сервер, который не требует установки и настройки
Я хочу PhpStorm использовать, хз как там встроенный сервер. Он подойдет?
Ответы: >>1033105
Аноним 2017/07/24 23:48:47  №1030925 443
Ответы: >>1030929 >>1033105
Аноним 2017/07/25 00:07:24  №1030929 444
Ответы: >>1031009
Аноним 2017/07/25 00:08:30  №1030930 445
2jDaQjpkNpk.jpg (100, 960x640)
640x960
Антоны, поясните ньюфагу за синтаксис:
$actionName = isset($_GET['action']) ? $_GET['action'] : 'index';

Если переданный гет парамент не null, то устанавливаем переменной его значение, иначе - индекс.
Почему условие прописано так? "?", ":" - dgthdst cnfkrbdf.cm
Ответы: >>1030934
Аноним 2017/07/25 00:13:07  №1030934 446
Аноним 2017/07/25 01:29:43  №1030957 447
>>1030814

Тебе правильно советуют сделать единую точку входа, и уже в этом скрипте смотреть, какой URL и что надо вызвать. Но советую тебе также почитать про относительные ссылки и научиться собирать любые виды ссылок: https://github.com/codedokode/pasta/blob/master/network/urls.md

Аноним 2017/07/25 04:47:12  №1030994 448
123456789.jpg (26, 451x485)
485x451
Почему он не умножает?
Ответы: >>1030999
Аноним 2017/07/25 05:07:37  №1030999 449
>>1030994
потому что знак умножения записан как строка
Ответы: >>1031001
Аноним 2017/07/25 05:13:23  №1031001 450
>>1030999
Спасибо, туплю-торможу.
Аноним 2017/07/25 07:48:12  №1031009 451
>>1030929
Если z элемент массива равен нулю, то изымает.
Ответы: >>1031010
Аноним 2017/07/25 07:52:40  №1031010 452
>>1031009
Перечитай еще раз мурзилку как пользоваться = и ==
Аноним 2017/07/25 12:17:04  №1031117 453
>>1029892
В даблах забыл сравнение кубов анон1 == анон3.
На трипл единственное, что приходит в голову - чтобы строка не была вырвиглазно большой, можно вынести сравнения в отдельные переменные и потом в проверку условия подставлять только их.
Мимо-3-день-в-клубе-кун
Ответы: >>1031139
Аноним 2017/07/25 12:23:36  №1031120 454
Ответы: >>1031417 >>1033105
Аноним 2017/07/25 12:28:48  №1031122 455
Получается background-image запилить только для body, если делаю для какого-нибудь div'a, то оно не отображается. Как с этим разобраться, аноны?
Ответы: >>1033105
Аноним 2017/07/25 12:41:29  №1031129 456
2017-07-25 (1).png (9, 1186x117)
117x1186
Аноны, как сделать в шторме, чтобы в окне ошибок показывалось одно упоминание об ошибке, а не несколько?
Ответы: >>1031132 >>1031204
Аноним 2017/07/25 12:47:58  №1031132 457
>>1031129
Ну и что? Тут перекатывальщики тредов иногда пытаются всю шапку в заголовок запихнуть
Ответы: >>1031136
Аноним 2017/07/25 12:52:09  №1031136 458
Ответы: >>1031141
Аноним 2017/07/25 12:53:25  №1031138 459
Обязательно ли нужны регулярки в вебе?
Они нужны в каждом проекте?
Ответы: >>1031145 >>1031148
Аноним 2017/07/25 12:53:38  №1031139 460
Ответы: >>1031188
Аноним 2017/07/25 12:54:21  №1031141 461
>>1031136
Очевидно первая строчка - заголовок сообщения, а вторая - само сообщение
Ответы: >>1031144
Аноним 2017/07/25 12:56:50  №1031144 462
>>1031141
Так в заголовке написано то же самое, что и в сообщении. Я хочу что-нибудь одно.
Аноним 2017/07/25 12:57:07  №1031145 463
>>1031138
Какие проекты, если ты не знаешь даже регулярки
Ответы: >>1031146
Аноним 2017/07/25 13:01:05  №1031146 464
>>1031145
Ну так я и спрашиваю: они часто используются или нет?
Ответы: >>1031149
Аноним 2017/07/25 13:04:15  №1031148 465
>>1031138
Помню дрочил задачи по регуляркам уже почти 3 года назад, жаловался другу который уже работал в яндексе или еще где на тот момент, что мол хуево и сложно. Он сказал что нахуй их, они ирл не нужны почти, а если и нужны то простые которые за 3 сек гуглятся по типу https://code.tutsplus.com/tutorials/8-regular-expressions-you-should-know--net-6149

или заменяются знанием вот этой вот хуйни
http://php.net/manual/ru/function.filter-var.php

Но это что касается бекэнда, когда я немного ковырял фронтэнд, там нужны знания регулярок немного, потому что много хуеты с заполнением полей пользователем и прочее.
Аноним 2017/07/25 13:05:06  №1031149 466
>>1031146
Тебя просто уволят за некомпетентность, если не "Рога и копыта"
Ответы: >>1031157
Аноним 2017/07/25 13:13:47  №1031157 467
>>1031149
Не, скорее в галере а собеседовании будет задача с регуляркой в тесте-хуесте. На которой если ты не обосрешься и устроишься, то больше никогда с регулярками не столкнешься.
Ответы: >>1031171
Аноним 2017/07/25 13:19:13  №1031171 468
>>1031157
Что за галера? Там код пишут?
Ответы: >>1031176
Аноним 2017/07/25 13:25:15  №1031176 469
>>1031171
>Что за галера?
Любая большая контора с кучей кодеров, штатом hr-шлюшек иерархией и прочим. Мб даже автоматизированным собеседованием, когда просто решаешь задачки или тесты проходишь как раз, вместо того что бы разговаривать со своим будущим начальником, как в какой-нибудь веб студии.
Аноним 2017/07/25 13:27:01  №1031179 470
Что делать, если я тупой и не могу в решение задач?
Особенно тех, которые ближе к концу.
Ответы: >>1031180 >>1031182 >>1033105
Аноним 2017/07/25 13:28:38  №1031180 471
>>1031179
Какую задачу ты не можешь решить?

Надо раскладывать сложные задачи на подзадачи и решать каждую из них.
Ответы: >>1031183
Аноним 2017/07/25 13:30:30  №1031182 472
>>1031179
Ближе к концу основная задача как бы штаны не обосрать. На нее мозгов не надо.
Аноним 2017/07/25 13:31:40  №1031183 473
>>1031180
Почти все, лол.
Вот, например, вот эту.
Как вообще разбивать задачу на несколько маленьких? Я даже не могу придумать алгоритма к этой задаче.
Ответы: >>1031194 >>1031914
Аноним 2017/07/25 13:40:11  №1031188 474
>>1031139
А зачем арсорт?
3-день-кун
Ответы: >>1031196
Аноним 2017/07/25 13:51:05  №1031194 475
>>1031183
Даа, помню это, на таких задачах тоже сидел по неделе и не прогрессировал тупо чувствуя собственное бессилие. Это оп на самом деле тонкий троль, под видом простеньких задачек на 20 строк засунул пусть и типовые, но сложные алгоритмы, над которыми сотни людей ебутся в попытке их решиь наскоком без гугла.

Я вот сейчас хуй решу наверное опять его.

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

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

Остался остаток 4650, смотришь какие другие купюры идут следом у тебя, если тысячные есть в наличии, то ими выдаешь 4 * 1000, и далее остаток в виде 550 рублей добить.

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

Например: передаешь в неё, что разменять надо 12345 рублей пятитысячными, если в наличии много пятитысячных, то она тебе в ответ: 2, 2345
если у тебя одна пятитысячная, то она тебе: 1, 7345
ну и если нету, то: 0, 12345.

Далее думаю сообразишь, что остаток в виде 2345 можно отдавать опять же этой функции но уже с другими купюрами, и так далее пока всё не сойдется или не сойдется :(
Аноним 2017/07/25 13:53:45  №1031196 476
>>1031188
Там я игрался с большим количеством костей в процессе, и ели вардамп раскоментить, то что бы по возрастанию красиво всё выдавало (просто так кароче он там)
Аноним 2017/07/25 13:57:22  №1031198 477
1111.jpg (32, 643x356)
356x643
Анончики, что не так?
Ответы: >>1031199
Аноним 2017/07/25 14:01:28  №1031199 478
>>1031198
Первым аргументом в preg_match() должна идти регулярка, а вторым - строка, к которой применяется регулярка.
Ответы: >>1031202
Аноним 2017/07/25 14:07:57  №1031202 479
>>1031199
Опять я обсираюсь на невнимательности.
Спасибо, анон
Аноним 2017/07/25 14:17:58  №1031204 480
>>1031129

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

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

Исправить сиутацию можно отключив display_errors только для консоли (иначе в браузере тоже перестанет отображаться ошибка). Это можно сделать с помощью настроек в php.ini или ключа командной строки -d error_reportng=0 в настройках, где указывается команда для запуска интерпретатора в командной строке.
Ответы: >>1031207
Аноним 2017/07/25 14:34:14  №1031207 481
>>1031204
>-d error_reportng=0
Это отключит все сообщения об ошибках.
Я же сделал -d log_errors=Off, чтобы лог не велся.
Ответы: >>1031221
Аноним 2017/07/25 14:57:06  №1031220 482
>>1029892

Тройного сравнения нет, потому надо сравнить

(кубик1 == кубик2) && (кубик2 == кубик3)

Для удобства (чтобы if не был гигантским) можно вынести результат сравнения (true/false) в переменную:

$isTripleAnon = ($кубик1 == $кубик2) && ($кубик2 == $кубик3);
$isTripleRobot = ...;

if ($isTripleAnon && $isTRipleRobot) { ... }

Но если это сложно, то можно все в if писать.

У тебя на скриншоте в проверке на трипл почему-то стоит "или" (||) в условии вместо "и".

А вообще, правильно делаешь, что усложняешь задачи.
Аноним 2017/07/25 14:57:59  №1031221 483
>>1031207

А, перепутал, правильно display_error=0, точно, не надо писать error_reporting=0.
Ответы: >>1031223
Аноним 2017/07/25 14:58:56  №1031223 484
Аноним 2017/07/25 15:12:54  №1031227 485
я эти селекторы никогда не пройду
Аноним 2017/07/25 15:35:47  №1031246 486
Делал кто телеграм бота?
Если да, то подскажите, как мне отправлять $bot->command каждую минуту бесконечно?
Если нет, то подскажите, почему while($i < 300){ $i++; code.... } не работает, а зависает?
Ответы: >>1031372
Аноним 2017/07/25 16:58:14  №1031372 487
Аноним 2017/07/25 17:12:04  №1031384 488
Анончики, есть знатоки Лары?
Почему у меня после юнит-теста бд удаляется? Причем похуй успешно или нет.
Аноним 2017/07/25 17:25:35  №1031397 489
>>1031384
Все пральна, за собой убирать надо.
При запуске тестов должна создаваться новая бд с фикстурами, а по окончании тестов — удаляться.
Ответы: >>1031410
Аноним 2017/07/25 17:27:15  №1031400 490
>>1031384
Лол. По хорошему, надо ещё и файлы на хостинге тереть, а домен разделегировать.
Ответы: >>1031402
Аноним 2017/07/25 17:30:09  №1031402 491
>>1031400
Когда становится скучно и нечего делать, мы запускаем тесты на прод-окружении?
Ответы: >>1031408
Аноним 2017/07/25 17:36:54  №1031408 492
Аноним 2017/07/25 17:39:22  №1031410 493
>>1031397
Ну на видосах у челика не удаляется ничего после тестов, и да я в phpunit.xml вот такие строчки добавил:
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
Ответы: >>1033104
Аноним 2017/07/25 17:46:03  №1031417 494
>>1031120
Ищи причину ошибки в логе, например. Или выведи их (подробные сообщения об ошибках) на экран.
Ответы: >>1031457
Аноним 2017/07/25 17:54:40  №1031428 495
>>1030818
Народная казахская мудрость
Аноним 2017/07/25 18:01:41  №1031431 496
>>1030802
Кто тебе вообще сказал, что будет легко? Приготовься учиться лет 10 до нормального уровня или сразу уёбывай.
Аноним 2017/07/25 18:04:23  №1031432 497
>>1030786
Для винды XAMPP сейчас, пожалуй, самый удобный комплект разработчика из подобных "из коробки", юзай.
Ответы: >>1031473 >>1033105
Аноним 2017/07/25 18:46:51  №1031457 498
>>1031417
Собственно все в порядке, даже обычный хеловорлд не работает.
Ответы: >>1031467
Аноним 2017/07/25 19:19:01  №1031467 499
Ответы: >>1031475
Аноним 2017/07/25 19:24:55  №1031473 500
>>1031432
И чем же он удобнее чем OpenServer, например?
Ответы: >>1031477
Аноним 2017/07/25 19:25:41  №1031474 501
Ответы: >>1031477 >>1033104
Аноним 2017/07/25 19:26:32  №1031475 502
>>1031467
Нихуя не помогло. Обычные скрипты работают нормально, а вот встроенные в phpstorm сервер никак не хочет работать.
Аноним 2017/07/25 19:28:32  №1031477 503
>>1031473
>>1031474
Хуй знает, во всем мире используют XAMPP, а тут какая-то руснявая сборка
Ответы: >>1031479 >>1031490
Аноним 2017/07/25 19:33:07  №1031479 504
>>1031477
Ты еще расскажи о том, что Денвер в свое время был непопулярным.

ОпенСерверу уже хуй знает сколько лет и пришел он как раз на смену денверу.
Аноним 2017/07/25 19:38:30  №1031490 505
>>1031477
>руснявая сборка
Ни один xampp/lamp/wamp не сравнится с этой сборкой по возможностям.
Ответы: >>1031534 >>1033104
Аноним 2017/07/25 19:49:18  №1031495 506
Аноним 2017/07/25 20:21:08  №1031533 507
Сколько данных можно записывать в сессии? Через сколько мегабайт сервер начнет писать в штанишки?
Ответы: >>1031558 >>1033104
Аноним 2017/07/25 20:21:20  №1031534 508
>>1031490
>lamp
>не сравнится с этой сборкой по возможностям.
LoL. Прочувствовал расхожее мнение про пхпешников
Ответы: >>1031585
Аноним 2017/07/25 20:29:38  №1031558 509
>>1031533
сессия это просто файл
sessid - это просто кука
Аноним 2017/07/25 20:50:59  №1031585 510
>>1031534
И не говори!
К нам джун из битриксоидов пришёл — такие темы задвигает, шояебал..
Аноним 2017/07/25 22:28:46  №1031671 511
как мне печет,что много важной инфы только на ангельском
Ответы: >>1031740 >>1033104
Аноним 2017/07/25 22:48:36  №1031689 512
Допустим нужно написать нечто вроде словаря. На экране поле для ввода слов и кнопка Поиск, по которой делается запрос в БД и выводится перевод. Стоит ли ебаться в таком случае с фреймворками или лучше делать всё ручками?
Ответы: >>1031705 >>1031769
Аноним 2017/07/25 22:52:03  №1031692 513