«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP и webdev #98 Аноним 2018/01/11 05:00:50  №1118555 1
15156360508040.png (33, 500x500)
500x500
15156360508041.jpg (157, 1024x683)
683x1024
15156360508062.jpg (194, 1024x768)
768x1024
15156360508073.jpg (202, 1024x768)
768x1024
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

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

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

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

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

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

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

С чего начать

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

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

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

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

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

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

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

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

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

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

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания 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 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Аноним 2018/01/11 05:13:07  №1118556 2
15156367872510.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
Аноним 2018/01/11 05:23:59  №1118558 3
Напомню себе проверить:

>>1117075 >>1117974 7 янв https://github.com/moabit/student-list
>>1118051 10 янв https://github.com/TheSidSpears/testhub/

Уже проверил:

- https://github.com/pmaprog/codedokode-html - тут >>1117863
- https://github.com/dsgaljkeguhodgiosetuhsegjposguh/studlist2 - тут >>1118527 >>1117864

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

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

Ответы: >>1121562 >>1135039
Аноним 2018/01/11 06:35:24  №1118564 4
Сап анончики. У меня интересная задачка. В прошлом треде я уже спрашивал но тут мне понадобилось кое что уточнить.


Суть такова.
Допустим есть карта (просто jpg изображение на котором карта ).
Нужно поверх этого изображения разместить ещё 40-50 мелких изображений (20*20px).
При этом если первое изображение карта занимает всю страницу, то другие изображения будут мелкими типа маркеров на гуглмапсе.
При это каждое из 40 мелких должно иметь свои координаты.
В прошлом треде мне помогли с координатами z index и CSS скинув очень годные ссылки.

Эти
https://www.w3schools.com/cssref/pr_pos_z-index.asp
https://www.w3schools.com/css/css_positioning.asp


Но теперь вопрос как будет лучше это всё размещать так чтобы небыло говнокода. И при этом работало.
Например есть карты с 59 обьектами (или 23, или вовсе 2 чтобы вы поняли). Я скриптом прохожусь чтобы узнать количество обьектов, потом формирую страницу, и сразу генерирую CSS встроенный в страницу чтобы создать 59 обьектов и сразу дать им координаты? Или можно это всё сделать по другому, например через JS?
Ответы: >>1118611
Аноним 2018/01/11 07:17:37  №1118578 5
>>1118287
Я не смог применить эти функции, у меня с ними не работает и я так до конца и не понял, каким образом их использовать.
>>1118475
>Ты каждый раз заполняешь строку в ручную, а нужно делать это программно, чтобы программа работала с заведомо неизвестным количеством массивов и элементов
Ну эту проблему я тоже не смог решить, до оепратора точка не додумался.
>>1118548
>// Идем по массиву массивов слов и на каждом шаге выбираем 1 слово
foreach ($allWords as $variants) {
var_dump($variants);
}
Но как он будет случайные слова подбирать? Он же их просто перебирает.
Ответы: >>1118581 >>1118645
Аноним 2018/01/11 07:32:16  №1118580 6
Свежий хлеб! Опчик, дорогой, делай так почаще
Аноним 2018/01/11 07:45:21  №1118581 7
>>1118578
Зарандомь $variants и выводи в нужном тебе порядке результат
Аноним 2018/01/11 08:24:06  №1118584 8
15156482463370.png (8, 550x258)
258x550
Такие дела, пацаны. Давно стоял апачи для хтмл, работает исправно. А вот при пхп он тупо выдает мне код, а не выполняет его. Как фиксить?
Аноним 2018/01/11 08:25:24  №1118585 9
>>1118584
Например запускать через браузер. А не просто открывать PHP файл браузером.
Ответы: >>1118586
Аноним 2018/01/11 08:33:27  №1118586 10
>>1118585
Аналогично. Через разные браузеры попробовал даже.
Ответы: >>1118830
Аноним 2018/01/11 10:42:29  №1118608 11
Ответы: >>1118981
Аноним 2018/01/11 10:54:54  №1118611 12
Ответы: >>1118924
Аноним 2018/01/11 11:26:46  №1118617 13
Это снова я со своим массивом, спасибо анончикам за их терпение и помощь, уменьшил количество кода, запилив все циклом с условиями.
https://ideone.com/YMAqiv
Ниже функции пока не пробовал применить, ща буду макакить
>foreach ($allWords as $variants) {
var_dump($variants);
Ответы: >>1118618 >>1118981
Аноним 2018/01/11 11:28:52  №1118618 14
>>1118617
Дополню, что по условиям должно быть
>words1, words2, word3
>words1, words2, words3
>words4, words5
то есть четко поставлены условия, из каких массивов должны быть взяты рандомные слова.
Ответы: >>1118981
Аноним 2018/01/11 12:38:34  №1118638 15
Ответы: >>1118981
Аноним 2018/01/11 12:54:26  №1118645 16
>>1118578
>Я не смог применить эти функции, у меня с ними не работает и я так до конца и не понял, каким образом их использовать.

вместо
$element = count($words['word1']);
$r = mt_rand(0,($element - 1));
$b = $words['word1'][$r];
echo "$b ";

можно написать
echo $words['word'1][array_rand($words['word'1])] . ' ';
Аноним 2018/01/11 13:21:56  №1118655 17
Как вкатится в bootstrap и стоит ли?
Ответы: >>1118701 >>1118707
Аноним 2018/01/11 15:10:25  №1118701 18
>>1118655

Прочитать документацию. Вроде даже русский перевод доступен.

Ну и конечно, надо знать HTML и CSS.
Аноним 2018/01/11 15:18:00  №1118707 19
>>1118655

Правда, я попробовал почитать, русский перевод очень плохой, и сделан явно через Гугл Translate (и это не мешает сайту быть в топе выдачи). Так что по возможности лучше читать исходную документацию на английском.
Аноним 2018/01/11 15:32:05  №1118712 20
Никогда не сталкивался с докером, но сейчас придется. Вопрос у меня вот в чём: достаточно ли одного докера или нужно будет ещё что-то для того, чтобы на чистой убунте создать несколько виртуальных машин на борту, каждая из которых будет загружать определенный контейнер. (хочу потестировать горизонтальное масштабирование)
Ответы: >>1118958 >>1135041
Аноним 2018/01/11 17:34:12  №1118759 21
Возможно очень тупой вопрос: в чем разница между mysql и mariadb?
Ответы: >>1118795
Аноним 2018/01/11 18:52:23  №1118795 22
Аноним 2018/01/11 20:52:12  №1118828 23
Как растянуть контейнер по картинке?
Ответы: >>1135041
Аноним 2018/01/11 20:53:30  №1118830 24
>>1118586
Ты хоть в конфигурации пхп то указал?
Ответы: >>1118930 >>1119002
Аноним 2018/01/11 21:24:51  №1118843 25
Имеются более менее знания python/django, знаю что такое ООП и нахуя оно, БД так сяк.
Вопрос стоит ли вкатиться в php? (в основном из-за большего количества как вакансий, так и заказов на фрилансе)
И смогу ли уложиться в 3 месяца (начинаю прям щас), если буду ебашить прерываясь только на поспать и посрать?
Ответы: >>1118998 >>1119340
Аноним 2018/01/11 21:35:20  №1118846 26
https://ideone.com/goHGCT
что думаете по поводу такого решения? в задании говорилось про цикл, но я не понял, как его там задействовать
Ответы: >>1118981
Аноним 2018/01/11 22:02:38  №1118851 27
Ответы: >>1129969
Аноним 2018/01/11 23:02:22  №1118864 28
Начал вкатываться. Писал пару пробных чятиков и гостевуху, теперь хочу поближе познакомиться с основами, скачал какое-то приложение на телефон, вникаю.
Язык не нравится. Как сишника, отталкивает буквально всё. Но учу. Зачем? Потому что простой. Потому что хочу понимать различные технологии, а не говноедствовать, задрачивая на один язык.
Ответы: >>1129954
Аноним 2018/01/12 05:10:37  №1118924 29
>>1118611
>Вопрос, как ты хранишь эти изображения и их координаты?
Изображения - это просто jpg. Координаты в базе данных, 2 поля x и y.
Аноним 2018/01/12 05:48:21  №1118930 30
>>1118830
Нет. Я не знаю, как это делается.
Аноним 2018/01/12 10:13:31  №1118954 31
Есть код https://ideone.com/x30EQK

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

Можно ли написать этот код без трех циклов, вложенных друг в друга?
Ответы: >>1118955 >>1118981
Аноним 2018/01/12 10:15:22  №1118955 32
>>1118954
Сразу скажу: 2 скобки просто не добавил в код, но так они у меня есть и все работает.
Аноним 2018/01/12 10:32:08  №1118958 33
>>1118712
Насколько я понял, докер разворачивает каждый процесс как отдельный контейнер, и так как я думал: nginx + php-fpm + mysql в одном контейнере не выйдет, или я ошибаюсь? Или посоветуйте что-то для быстрого деплоя/развертывания одного проекта на N-нод
Ответы: >>1135041
Аноним 2018/01/12 12:19:10  №1118981 34
>>1118608
Да

>>1118617
http://archive-ipq-co.narod.ru/l1/strings.html
>Подсказка: так как первая и вторая строка формируются по одинаковому принципу, то незачем копировать код 2 раза, можно использовать цикл из 2 шагов.
Тебе просто нужно выполнить два раза циклом склеивоние 1-ых по 3-их слов и добавить перенос строки, и затем отдельно вначале добавить "Я", и склить 4-ые и 5-ые

>>1118618
>Подсказка: можно упростить программу, сделав что-то вроде шаблона для генерации стиха на основе массива. В каждый элемент массива мы кладем массив вариантов слова или строки, из которого надо сделать выбор: [$word1, $word2, $word3, ["\n"], ...]. Мы добавляем массив с "\n", чтобы в нужном месте вывелся перевод строки. Остается только пройти по массиву циклом и сгенерировать стих..
В этом случае можно будет воспользоваться foreach

>>1118638
https://3v4l.org/Qk3jJ

>Parse error: syntax error, unexpected '<' in /in/Qk3jJ on line 3

Нужно заключить её в ковычки

>>1118846
Другое дело

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

>$piece1 = array_rand($word1);
>$piece2 = array_rand($word2);
>$piece3 = array_rand($word3);

//тут тоже
>$piece4 = array_rand($word1);
>$piece5 = array_rand($word2);
>$piece6 = array_rand($word3);

>$pieceOfPoem1 = $word1[$piece1] . $word2[$piece2] . $word3[$piece3];
>$pieceOfPoem2 = $word1[$piece4] . $word2[$piece5] . $word3[$piece6];


Так же, код можно упростить $word1[array_rand($word1)]

У тебя проблемы с циклами и массивами - изучи уроки по ним ещё раз

>>1118954
Скинь массив результата таблицы
Ответы: >>1119264 >>1119406
Аноним 2018/01/12 13:12:27  №1118998 35
>>1118843
если видел большие проекты, то хватит
Аноним 2018/01/12 13:27:01  №1119002 36
Ответы: >>1119009
Аноним 2018/01/12 13:46:37  №1119009 37
Ответы: >>1119016
Аноним 2018/01/12 14:13:46  №1119016 38
>>1119009
Благодарю, добра тебе.
Аноним 2018/01/12 17:11:18  №1119098 39
>>1118584

Чтобы Апач выполнял PHP код, а не отдавал, нужно:

- установить PHP на компьютер
- в конфиге Апача подгрузить модуль mod_php и прописать, что PHP файлы должен обрабатывать он

Директивы для конфига Апача можно найти тут http://php.net/manual/ru/install.unix.apache2.php

Если ты запускаешь простые скрипты, то тебе может быть проще просто использовать встроенный в PHP веб-сервер как описано по ссылке, которую дал анон выше.
Аноним 2018/01/12 17:11:50  №1119100 40
>>1118584

После правки конфига не забудь перезапустить Апач.
Аноним 2018/01/12 17:35:25  №1119115 41
пацаны, подскажите лоху в верстке.

есть код
<div class="sidebar-module">
<ol class="list-unstyled">
<li><a href="#">October 2013</a></li>
</ol>
</div>

я допустим хочу сделать стайл для всех ссылок, которые лежат в диве с классом sidebar-module

пишу в style.css
a.sidebar {color: #555;}

но нихуя не работает. подскажите, что в стайл прописать
Ответы: >>1119122
Аноним 2018/01/12 17:49:43  №1119122 42
>>1119115
.sidebar-module a {color: #555;}

Гугли наследование css селекторов, поймёшь всё очень быстро. Если коротко, то ты даёшь стиль элементу а внутри класса sidebar-module, а если ты напишешь a.sidebar-module, то получиться, что ты даёшь стиль всем элементам a с классом sidebar-module.
Ответы: >>1119126
Аноним 2018/01/12 18:13:38  №1119126 43
Аноним 2018/01/13 00:08:34  №1119242 44
кто фронтом и версткой занимается, как вы это делаете вообще? решил себе сайт запилить, абсолютно невозможно спрогнозировать, что сколько времени займет. можно за 5 минут приделать всплывающую подсказку для формы поиска, а потом час равнять два дива по высоте. и главное в итоге удовольствия никакого (в отличие от бэкенда)
Ответы: >>1119246
Аноним 2018/01/13 00:20:55  №1119246 45
>>1119242
>равнять два дива по высоте
загугли ебаные флексбоксы
Аноним 2018/01/13 00:30:10  №1119250 46
Как правильно кнопки оформлять? Я сейчас не про внешний вид, а про сам код. Задавать через <a href="#"> и потом их оформлять я уже заебался, подкидывая при этом <a>дский костёр градиенты, вертикальные линии и ставя красивые границы, а ещё нужно стили убрать, ух бля. Знаю про элемент button, но нигде не видел по этому поводу, формы не подходят изначально, они для другого сделаны, для отправки данных на сервер, или я долбоёб? Скажите что-то по этому поводу, вкатился недавно и верстаю себе очко пока что, через неделю-две вкатываюсь в джс и нужно до конца отдрочить этот html/css.
Ответы: >>1119251 >>1119267
Аноним 2018/01/13 00:32:40  №1119251 47
>>1119250
Знаю элемент button, но нигде не видел связанных с ним внятных статьей или хорошего кода

быстрофикс
Ответы: >>1119266
Аноним 2018/01/13 01:12:19  №1119264 48
>>1118981
анон, я разобрался и программа получилась на столько короткой, что я просто ахуел, спасибо
https://ideone.com/4OINVC
Ответы: >>1119325
Аноним 2018/01/13 01:20:38  №1119266 49
>>1119251
>сбрасываешь стили
>ставишь дисплей блок
>оформляешь как обычный див
>profit...
Мимо вкатывальщик из фронт-энд треда, а еще есть фреймворки типа бутстрапа...
Аноним 2018/01/13 01:22:17  №1119267 50
>>1119250
Смысл вкатываться через две недели. Мне вот надоедает дрочить верстку долго, жс тоже надоедает дрочить. Поэтому обмазываюсь ими по очереди.
Аноним 2018/01/13 07:11:57  №1119300 51
Ответы: >>1119328
Аноним 2018/01/13 08:31:21  №1119307 52
Аноны если мне нужно в слиме в middleware доступ к бд.
А получить через контейрнер его я там не вижу как. То это хуевая реализация. Или мне создать свой пдо в нем?
Ответы: >>1119326
Аноним 2018/01/13 11:02:30  №1119325 53
>>1119264
А с помощью foreach сможешь решить?
Ответы: >>1119358
Аноним 2018/01/13 11:12:41  №1119326 54
>>1119307
Разве ты не регистрируешь __invoke() класс в контейнере прежде чем добавить его в промежуточный слой?
В нём и добавляй все зависимости через конструктор.

Должно получиться.
Ответы: >>1119344
Аноним 2018/01/13 11:19:29  №1119328 55
>>1119300
Нет, у тебя там 3 функции с одинаковым кодом, это плохо - копипаста. У тебя должна быть одна функция, а переменные, которые ты задаешь в начале, должны передаваться через аргументы.
Аноним 2018/01/13 11:49:17  №1119337 56
Ответы: >>1119341 >>1119343 >>1119367
Аноним 2018/01/13 11:53:09  №1119340 57
>>1118843
>если буду ебашить прерываясь только на поспать и посрать?
Выгоришь же
Аноним 2018/01/13 11:56:34  №1119341 58
>>1119337
А что такого? Вообще нейросети довольно старое понятие, их ещё в прошлом веке наверное с 60ых годов разрабатывали, потом хайп ушел так как не хватало мощностей, сейчас вторая волна началась (может и не вторая, а N-волна). Во-вторых кому-то надо будет поддерживать эту верстку, кому-то надо будет работать с самими нейронками, заказчики сами этого не сделают. Я глазами пробежал, там только статика? Сейчас любой сайт, это наполовину js-приложение, которое без js зачастую просто развалится либо превратится в тыкву. Ну и в третьих, это даже хорошо когда механические задачи больше не надо будет делать.
Ответы: >>1119539
Аноним 2018/01/13 12:01:30  №1119343 59
Аноним 2018/01/13 12:03:56  №1119344 60
>>1119326
спасибо анон. вообще я сразу так не делал потому что в документации он примерно вот так делает
$app->add( new NEwMiddleware());
Ответы: >>1119406
Аноним 2018/01/13 12:51:46  №1119358 61
>>1119325
смог, хотя не уверен, что это именно то, что ты имел ввиду типа цикл в цикле получился
https://ideone.com/Ehcsuj
Ответы: >>1119406
Аноним 2018/01/13 13:21:04  №1119367 62
>>1119337
по правде говоря, тот самый "верстальщик", который 10 лет назад верстал статику, уже не существует в природе. щас любую статику можно сделать быстро и без гемора с помощью существующих инструментов (бутстрап, например) при наличии минимального опыта. то есть, такой профессии уже давно нет, сейчас есть фронты.
Аноним 2018/01/13 15:20:04  №1119406 63
>>1119344
У тебя получилось?

Прежде чем создать какой-то сервис нужно зарегистрировать его в контейнере. Но это не точно.

>>1119358
>хотя не уверен, что это именно то, что ты имел ввиду
В задаче сначала был массив массивов $words с всеми словами

В посте >>1118981 есть подсказка как решить такую задачу
>>Подсказка: можно упростить программу, сделав что-то вроде шаблона для генерации стиха на основе массива. В каждый элемент массива мы кладем массив вариантов слова или строки, из которого надо сделать выбор: [$word1, $word2, $word3, ["\n"], ...]. Мы добавляем массив с "\n", чтобы в нужном месте вывелся перевод строки. Остается только пройти по массиву циклом и сгенерировать стих..
Ответы: >>1119447 >>1120498 >>1126159
Аноним 2018/01/13 16:20:43  №1119435 64
Какие фреймворки нужно знать в php?
Ответы: >>1119518
Аноним 2018/01/13 16:39:58  №1119447 65
>>1119406
да. в итоге вот так теперь $app->add($container['newMiddleware']);
Ответы: >>1119524
Аноним 2018/01/13 18:59:23  №1119518 66
>>1119435
Лучше не к фреймворкам привязываться, а делать упор на фундаментальные вещи - сети, ООП, линукс. Я к примеру устраивался Symfony джуном и за полгода успел поработать с Laravel, Yii2, Zend. При том, что ранее с этими фреймворками знаком не был.
Ответы: >>1119540 >>1119543
Аноним 2018/01/13 19:12:09  №1119524 67
>>1119447
Вроде, даже можно просто написать просто $app->add('newMiddleware') если оно зарегистрировано в контейнере.
Ответы: >>1119527
Аноним 2018/01/13 19:20:41  №1119527 68
>>1119524
рли сработало. спасиб анон
Аноним 2018/01/13 20:05:31  №1119539 69
>>1119341

Вот именно. Плотники и обработчики металла не исчезли с появлением станков и циркулярных пил.
Аноним 2018/01/13 20:07:25  №1119540 70
>>1119518
а зачем линукс в пхп?
Ответы: >>1119542
Аноним 2018/01/13 20:12:53  №1119542 71
>>1119540
пхп как бы не только в окошечке браузера работает. большую часть современных больших приложений составляют cli-скрипты.
также потому что ты будешь подключаться по ssh к удаленному серверу, который на линуксе.
плюс гит. плюс баш-скрипты автоматизации на дев-сервере. плюс перезапуск сервисов, сборка фронта, еще куча всего.
Ответы: >>1119545
Аноним 2018/01/13 20:16:37  №1119543 72
>>1119518
>устраивался Symfony джуном
какие вопросы задавали на собесе?
Ответы: >>1119783
Аноним 2018/01/13 20:24:20  №1119545 73
>>1119542
а на окнах это всё не работает?
Ответы: >>1119577
Аноним 2018/01/13 21:28:37  №1119577 74
>>1119545
учитывая, что я тебе говорю про удаленный сервер, не работает, т.к. такой вещи как винда+пхп на продакшне не существует.
Ответы: >>1119867
Аноним 2018/01/13 22:12:27  №1119594 75
>>1118555 (OP)
>пишите один большой пост вместо нескольких маленьких
Лол, как в исходники Moodle заглянул.
Аноним 2018/01/13 22:47:13  №1119604 76
Ответы: >>1135041
Аноним 2018/01/13 23:55:36  №1119631 77
А PDO полностью можно заменить msqli? Как на это пдо создать форму отправки значений в базу данных?
Ответы: >>1135041
Аноним 2018/01/14 01:04:01  №1119669 78
как же всё заебало
Ответы: >>1119720
Аноним 2018/01/14 07:04:46  №1119720 79
>>1119669
И не говори. Никто не заставляет учить, и в итоге получается так что пердолишься в лучшем случае 15 часов в месяц
Аноним 2018/01/14 10:19:55  №1119742 80
>>1118555 (OP)
Кто хочет поучаствовать в пет-проекте за опыт напишите в телегу @monada
Ответы: >>1119877
Аноним 2018/01/14 12:41:57  №1119783 81
>>1119543
>> устраивался Symfony джуном
> какие вопросы задавали на собесе?
Конкретно по Symfony не спрашивали ничего серьёзного - какие FormType использовать если есть сущность и связанные с ней через 1:M другие сущности, какие существуют способы описания метаданных сущностей, в чём преимущества недостатки у каждого из способов, какие бандлы юзал и т.д.

Больше было общих вопросов, например как работают сессии, что такое DNS, зачем используются трейты/итераторы/генераторы, магические методы, какие новые фичи в PHP7. Тестовые задания не просили делать, видимо из-за аккаунта на гитхабе, но было пару задачек на проектирование простой иерархии классов и на рекурсивный обход массива (у ОПа как раз есть эта похожая задача: https://github.com/codedokode/pasta/blob/master/interview-tasks.md#%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE ). Код на листочке не писал (как этим любят запугивать в перезвоним-тредах), описывал алгоритмы словами.

По JS - чем отличаются call и apply, почему теряется this, что нового в ES6, что такое прототипы (ни разу не юзал их за всё время что работаю, но на собесе ответил, так как решал здесь задачи). Ещё немного тут писал: https://phpclub.tech/pr/res/1067944.html#1075232
Ответы: >>1119794
Аноним 2018/01/14 13:15:37  №1119794 82
>>1119783
спасибо. судя по вопросам, должна быть хорошая контора.

щас сам симфони учу, начал сразу как вышла 4. очень интересно, но местами сложновато и неочевидно.

а что ты имеешь в виду под метаданными? записи типа @ORM\Table(name="blog") или что-то другое?
Аноним 2018/01/14 13:38:25  №1119800 83
не могу понять сакральный смысл данного кода. нашел в одном скрипте. зачем столько кавычек?

preg_replace(array("`'`", "`[^A-z0-9]+`"), array("", "-"), $str)
Ответы: >>1119815 >>1119836
Аноним 2018/01/14 14:11:05  №1119815 84
>>1119800
Автор не знал об волшебстве бекслеша и обошел проблему по-своему.
Ответы: >>1119828
Аноним 2018/01/14 14:28:12  №1119828 85
15159292925770.gif (122, 200x112)
112x200
Аноним 2018/01/14 14:30:11  №1119829 86
Как вообще называется этот символ `
И как пхп с ним работает?
Ответы: >>1119832
Аноним 2018/01/14 14:32:40  №1119832 87
>>1119829
>Как вообще называется этот символ `
гравис

>И как пхп с ним работает?
оператор исполнения
Ответы: >>1119835
Аноним 2018/01/14 14:40:54  №1119835 88
Аноним 2018/01/14 14:43:35  №1119836 89
>>1119800
Полагаю автор соснул. Его использование обратной кавычки делало код бесполезным для санации строки.
Аноним 2018/01/14 15:02:27  №1119847 90
Ответы: >>1119940 >>1119941
Аноним 2018/01/14 15:35:23  №1119867 91
>>1119577
Вообще ещё есть такие товарищи, кто крутит продакшн на IIS.
Ответы: >>1119910 >>1126835
Аноним 2018/01/14 15:53:00  №1119877 92
>>1119742
Где поучавствовать? Кокой скилл нужен?
Ответы: >>1119902
Аноним 2018/01/14 16:21:49  №1119895 93
А есть какой-нибудь чатик? телеграмм какой-нибудь где можно помочь/получить помощь?
Ответы: >>1119898 >>1119900
Аноним 2018/01/14 16:25:04  №1119898 94
>>1119895
Дискорд было вроде. Го туда
Ответы: >>1119901
Аноним 2018/01/14 16:39:12  №1119900 95
>>1119895
Шарящие люди не будут сидеть в чатике. А здесь мимокрокодилы отвечают.
Ответы: >>1119909
Аноним 2018/01/14 16:42:08  №1119901 96
Аноним 2018/01/14 16:42:29  №1119902 97
>>1119877
любой напиши обсудим
Аноним 2018/01/14 16:49:01  №1119905 98
15159377419700.jpg (54, 600x424)
424x600
Нампоню как всё начиналось 20 лет назад.
Аноним 2018/01/14 17:02:13  №1119909 99
>>1119900
В том и дело, хотел пообщаться с кем-то по поводу докера и систем виртуализации в целом, но никто не отвечает. В чате может быстрее это произошло бы
Ответы: >>1119911
Аноним 2018/01/14 17:03:35  №1119910 100
>>1119867
есть. тут даже был один, который пытался версию пхп обновить что ли. просто я к тому что это не повод не учить линукс в надежде, что попадется виндос сервер (который поди еще замороченнее линукса в изучении).
Аноним 2018/01/14 17:03:41  №1119911 101
>>1119909
@monada напиши добавлю в конфу
Обработка ошибок Аноним 2018/01/14 17:07:35  №1119912 102
15159388560010.jpg (34, 700x350)
350x700
Такая задача:
Необходимо написать скрипт парсера, который будет выполняться несколько дней неиспользуйпхпшники идут нахуй.

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

Соответственно скрипт упадет. А мне этого ненужно.

Пишу перехватчики через set_error_handler() и set_exception_handler() при получении ошибки - шлю к себе на почту. Но как быть в случае fatal error? Как сделать так, чтобы при получении таковой ошибки скрипт продолжил выполнение?

Можно конечно обвешать все try catch throwable, но это хуита ибо не всего не учесть. Ваши предложения?
Ответы: >>1120168 >>1120180 >>1135041
Аноним 2018/01/14 18:16:11  №1119932 103
15159429714240.png (24, 1192x420)
420x1192
я правильно нарисовал?
Ответы: >>1119939 >>1119959 >>1135042
Аноним 2018/01/14 18:33:45  №1119939 104
>>1119932
а почему слева рядом с таблицей две палочки, а справа одна?
Ответы: >>1119947 >>1135042
Аноним 2018/01/14 18:36:40  №1119940 105
>>1119847

Ты обещал ридми сделать и до сих пор так и не сделал.
Ответы: >>1120095
Аноним 2018/01/14 18:37:15  №1119941 106
>>1119847

Я конечно, все равно проверю, как будет время, но ридми бы не помешал.
Ответы: >>1120095
Аноним 2018/01/14 19:01:35  №1119947 107
>>1119939
ошибся, хотел справа поставить тоже две.

вот тут у меня основной вопрос: одна палочка значит "один", а две - "один и только один". в чем разница между ними?
Ответы: >>1119954 >>1135042
Аноним 2018/01/14 19:14:18  №1119954 108
>>1119947
>один и только один
Попахивает индексом Unique для поля в БД. В принципе, в твоем случае идентификация происходит по Primary key а он всегда unique. А какой программой ты пользуешься для моделирования?
Ответы: >>1120023 >>1135042
Аноним 2018/01/14 19:27:56  №1119959 109
Ответы: >>1120023
Аноним 2018/01/14 21:05:21  №1120014 110
Можно ли вкатиться в веб без изучения пхп? Не хочется просто учить лишний язык
Ответы: >>1120024
Аноним 2018/01/14 21:20:25  №1120023 111
Ответы: >>1120038 >>1120126
Аноним 2018/01/14 21:22:55  №1120024 112
>>1120014
новые проекты на пхп не пишут, вкатывайся.
Аноним 2018/01/14 21:32:15  №1120028 113
Как решить первую задачу? Скопировал оба параметра и поставил знак умножения, не работает.
Ответы: >>1120889
Аноним 2018/01/14 21:50:14  №1120038 114
>>1120023
>но я уже не уверен, что это относится к проектированию бд.
это я имел в виду про одинарную черточку, т.к.
они там моделируют далеко не только бд. возможно в бд достаточно обозначить тип связи и все
Аноним 2018/01/14 22:34:34  №1120065 115
ОП, посмотри задачу про антикризисные меры, пожалуйста

https://3v4l.org/h4J4X
Ответы: >>1135043
Аноним 2018/01/15 00:06:41  №1120095 116
Аноним 2018/01/15 01:20:56  №1120109 117
>public function setRank(int $rank): void
>{ $this->rank = $rank; }
Правильно ли я понял, что ПХП внезапно стал языком со строгой типизацией?
Ответы: >>1120110 >>1120216 >>1120265
Аноним 2018/01/15 01:22:46  №1120110 118
>>1120109
Судя по всему ты вообще не понимаешь что такое строгая типизация.
Ответы: >>1120112 >>1120216
Аноним 2018/01/15 01:25:35  №1120112 119
>>1120110
Может быть и не знаю, но вопрос тем не менее остаётся в силе, с каких пор в пхп можно или нужно указывать типы данных при объявлении функций?
Ответы: >>1120113 >>1135044
Аноним 2018/01/15 01:28:08  №1120113 120
>>1120112
Очевидно с 7 версии.
Аноним 2018/01/15 01:32:23  №1120116 121
ОП, а можно свой проект пилить по мотивам задачи "Список студентов"? Ты тогда посмотришь ошибки?
Ответы: >>1120404 >>1120418
Аноним 2018/01/15 01:36:19  №1120117 122
www.bananagiveaway.com
Аноним 2018/01/15 02:42:57  №1120126 123
>>1120023
>https://www.lucidchart.com/
Не вижу там возможности экспорта схемы БД. Подобный софт должен это делать в форматах SQL и XML, да еще и с тестовыми данными, как это делает Sybase Power Designer. А в идеале он еще должен генерировать классы для работы с базой и фреймворка, как это делает Skipper (ORM Designer), но для него кряка нет, а он стоит баков 300 отсоси у тракториста.
Аноним 2018/01/15 03:03:22  №1120128 124
Ананасы, такая проблема:

Есть у меня допустим страница с кнопками от бутстрапа. Есть файл php скрипта.
Как их законектить самым простым способом? Чтоб при нажатии на кнопку выполнялся скрипт.

Гуглением нашел всякие ассинхронные фреймворки, но мне нужен максимально простой способ.
Или хотя бы хороший пример - потому что в гугле тонна примеров сабмит формы, но мне это не очень подходит.
Ответы: >>1120204
Аноним 2018/01/15 08:38:53  №1120168 125
Ответы: >>1120234
Аноним 2018/01/15 09:43:36  №1120180 126
>>1119912
>try catch throwable, но это хуита ибо не всего не учесть.
Это ты хуита. PDO кидает исключение, если база не доступна, его и обрабатывай.
Ответы: >>1120235
Аноним 2018/01/15 09:48:30  №1120183 127
https://ideone.com/Mj4kRe
Уже пару часов не могу доту пить как же сделать переборку слогов, через foreach? ЧЯДНТ?
Ответы: >>1120186 >>1120212 >>1120253
Аноним 2018/01/15 09:52:33  №1120186 128
>>1120183
>не могу дотупить
Т9 на ведре подвёл.
Аноним 2018/01/15 10:53:30  №1120204 129
>>1120128
-можешь положить все кнопочки в форму в которой у тебя прописан action='твой скрипт'
-Можно с помощью жквери. Типа присваиваешь функцию кнопочке, а в функции у тебя аякс.
Ответы: >>1120326
Аноним 2018/01/15 11:47:35  №1120212 130
>>1120183
>$randomText = array();
>foreach ($letters as $randomText);
>$randomText = implode($letters);

Во первых учи PSR и юзай скобки!!!
Во вторых, у тебя тут цикл по пустому массиву $randomText, чего ты ожидаешь?
Во третьих, ты украл чей то код?
>/ Выкидываем случайное число (count - число элементов в массиве) /
>/ Точка склеивает 2 строки в одну /
Эти комменты указывают на вещи которые не используются в коде, а должны бы.
Ответы: >>1120214
Аноним 2018/01/15 11:51:53  №1120214 131
>>1120212
>Во вторых, у тебя тут цикл по пустому массиву $randomText, чего ты ожидаешь?
Что я несу, совсем обджиэсился.
У тебя цикл по ВСЕМ слогам,
$randomText это переменная цикла - значение каждого слога,
но в цикле ты присваиваешь ей новое значение, что бессмысленно
Ответы: >>1120237 >>1120241
Аноним 2018/01/15 11:55:28  №1120216 132
>>1120109
>>1120110
с седьмой версии можно указать строгую типизацию с помощью declare(strict_types=1)
Ответы: >>1120218 >>1120265
Аноним 2018/01/15 11:55:35  №1120217 133
Здравствуйте, нулевый болванчик итт.
Есть сайт на одной из страниц которого лежат изображения, нужно их заменить на новые.
Скачал фтп, все залез, нашел где лежат данные картинки.
Но не могу найти файл где они прописаны что они должны находится на именно той странице сайта (не знаю как правильно объяснить но вы поняли)
Т.е на сайте они лежат по адресу www.site/wp-content/uploads/2011/12/filename.jpg
На фтп они там есть. Искал через notepad++ во всех файлах упоминание filename.jpg, его там тупо нету. Что я делаю не так?
Ответы: >>1120267 >>1120270 >>1120271
Аноним 2018/01/15 11:57:37  №1120218 134
>>1120216
Я знаю, но это опциональное применение. Товеть ты можешь это применять, а можешь и нет.
Ответы: >>1120236
Аноним 2018/01/15 12:46:28  №1120234 135
>>1120168
они там поди генерятся динамически и их названия лежат где-то в бд в отдельной ячейке или генерятся по названию статьи, хз. может кто-то, знающий вп, ответит более конкретно
Ответы: >>1120235
Аноним 2018/01/15 12:52:13  №1120235 136
>>1120234
Какое ВП? Какая база, поехавший?
>>1120180
Жопой читаешь? Поясню сокращенно: вешаю обработчик на set_exception_handler() можно как-то сделать, чтобы в случае fatal error скрипт не падал, а продолжал выполнение? Повторю: Я НЕ ХОЧУ ОТЛАВЛИВАТЬ КАЖДЫЙ ПУК ЧЕРЕЗ try catch
Ответы: >>1120238 >>1120250 >>1120271
Аноним 2018/01/15 12:52:35  №1120236 137
>>1120218
да, просто эта возможность тесно связана с тайп-хинтом аргументов и возврата, о котором спрашивал анон.

алсо, я тут пытаюсь использовать эту строгую типизацию, она конечно прикольная, но какая-то недоделанная по сравнению с джавой. нельзя указать тип переменной например int $count; надо писать обязательно $count = 0; но это хуета в принципе, а вот что нельзя сделать массив строк или массив интов - это недоработка по мне.

плюс есть некоторые функции, которые исторически выдают либо фолс, либо тру, либо число, либо массив. допустим preg_replace возвращает либо массив, либо строку, либо нулл.
Аноним 2018/01/15 12:54:56  №1120237 138
>>1120214
Это же пример с гайда по обучению,который здесь лежит. Просто поленился комменты тереть.
Аноним 2018/01/15 12:56:27  №1120238 139
>>1120235
вордпресс

оно на то и фатал еррор, чтобы останавливать программу. можешь свечку поставить, чтобы он не вываливался лол
Ответы: >>1120292
Аноним 2018/01/15 13:03:46  №1120240 140
>>1120236
>нельзя указать тип переменной например int $count;
Чел ну это не недоделанность, это другой синтаксис. А ты что думал, что выучишь джаву и всё? Везде так будет?
Ответы: >>1120242
Аноним 2018/01/15 13:06:05  №1120241 141
>>1120214
Так я и пытался через выгрузку в пустой массив отдельных слогов запилить склейку имени. Но что-то пошло не так.
Ответы: >>1120257
Аноним 2018/01/15 13:08:46  №1120242 142
>>1120240
>выучишь джаву и всё?
вообще было бы круто лол

это понятно, но в джаве можно написать int a, b, c; а у нас как? только через жопу типа $a = $b = $ c = 0;
Ответы: >>1120246
Аноним 2018/01/15 13:09:56  №1120243 143
>>1120236
Видимо ты не правильно пользуешься функцией preg_replace. Так как регулярные выражения в php работают очень хорошо и никаких проблем не вызывают
Ответы: >>1120252
Аноним 2018/01/15 13:12:14  №1120244 144
>>1120236
preg_replace() возвращает массив, если параметр subject является массивом, иначе возвращается строка.
Если найдены совпадения, возвращается новая версия subject, иначе subject возвращается нетронутым,
в случае ошибки возвращается NULL.
Ответы: >>1120251 >>1120265
Аноним 2018/01/15 13:14:26  №1120246 145
>>1120242
Можно написать так:
$a = 0;
$b = 0;
$c = 0;
Нет никакой необходимости объявлять несколько переменных в одной строке.
Ответы: >>1120252
Аноним 2018/01/15 13:17:36  №1120250 146
>>1120235

Не стоит так в нашем треде разговаривать. Тебе ведь никто помогать не захочет.

По поводу исключений, у меня есть урок (если он вдруг нужен): https://github.com/codedokode/pasta/blob/master/php/exceptions.md

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

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

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

Ответы: >>1120296
Аноним 2018/01/15 13:21:03  №1120251 147
>>1120244
Ну и что в этом такого необычного? В php это обычная практика делать функции, которые возвращают разные типы данных в зависимости от различных параметров.

У ответа ведь все равно всегда можно проверить тип данных при помощи функций is_bool, is_double, is_string, is_array и так далее.
Ответы: >>1120261 >>1120265
Аноним 2018/01/15 13:22:09  №1120252 148
>>1120243
это просто пример того, что встроенные функции под возврат нужного типа не приспособлены. таких примеров много. в случае с preg_replace можно возразить "ну шли туда всегда строку и будет возвращаться строка", но тут другой нюанс: допустим, я хочу обернуть логику в свой метод, в других языках для обработки разных типов данных есть перегрузка, а тут ее нет, придется писать replaceString(), replaceArray()

>>1120246
убедил лол

я вообще это не к тому, что все плохо, а к тому, что еще есть что допилить в направлении строгой типизации.
Ответы: >>1120263
Аноним 2018/01/15 13:25:33  №1120253 149
>>1120183

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

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

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

Я дам тебе пример, как сгенерировать имя из 2 цифр (согласен, странное имя, но это ради простоты):

$number1 = сгенерировать случайную цифру от 1 до 6;
$number2 = сгенерировать случайную цифру от 1 до 6;
$result = склеить $number1 и $number2 в одну строку;
вывести $result;

И теперь перевод этого кода на PHP:

$number1 = mt_rand(1, 6);
$number2 = mt_rand(1, 6);
$result = $number1 . $number2;
echo $result;
echo "\n";

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

Попробуй свое решение записать так же. Если ты не понимаешь, какие должны быть шаги, напиши, дадим еще подсказки.
Ответы: >>1120257
Аноним 2018/01/15 13:31:15  №1120257 150
>>1120253
>>1120241
Спасибо за развернутый ответ, анон. Мой же пост. Понимаю как это выглядит в русском языке, но знаний в php не хватает для отражения онного же в коде. Немного не ту версию кода засейвил на работе, поэтому так и выглядит. А исходник лежит на домашнем пека.
Ответы: >>1120270
Аноним 2018/01/15 13:37:04  №1120261 151
>>1120251
Я к тому, что я смог найти это в доках за 5 секунд. PHP не идеален, но блин вот эта функция по моему работает вполне внятно. Ладно не буду превращать тред в чатик.
Аноним 2018/01/15 13:39:21  №1120262 152
В чем отличия и надо ли использовать ссылки?
Например тут
function trim_value(&$value)
{
$value = trim($value);
}
Я бы бы через foreach перебрал. Чем мой вариант хуже кроме того что он длиннее?
Ответы: >>1120268 >>1120270 >>1120373
Аноним 2018/01/15 13:39:42  №1120263 153
>>1120252
>в других языках для обработки разных типов данных есть перегрузка

В php конечно же нет перезагрузки функций, т.е. создание функций с одинаковыми названиями, но разными параметрами. Но этого обычно и не требуется, так как во-первых, можно объявить параметры с default-значениями:
function func($int, $string = ''),

а еще можно проверять тип данных параметра:
function func2($var) {
if (is_array($var)) //сделай это
else if (is_string($var)) //сделай что-то другое
else //сгенерируй сообщение об ошибке
}

Обе эти возможности на 100% заменяют перезагрузку функций.
Аноним 2018/01/15 13:42:42  №1120265 154
>>1120109

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

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

>>1120216

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

>>1120236

Для массива строк или интов, или коллекции каких-то объектов нужны generics:

https://wiki.php.net/rfc/generic-arrays
https://wiki.php.net/rfc/generics

Эти предложения пока не приняты, и код, как я понимаю, не написан. Но все еще возможно.

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

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

>>1120244

По моему субъективному мнению, отсутствие единого типа аргументов или результатов ухудшает код и повышает вероятность ошибок. Я бы сделал для массивов отдельную функцию preg_replace_array.

А вот возвращать что-то или null вполне допустимо. null для этого и придуман.

>>1120251

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

Ну и разным анализаторам кода тоже будет легче.
Ответы: >>1120271
Аноним 2018/01/15 13:43:06  №1120267 155
Аноним 2018/01/15 13:43:22  №1120268 156
>>1120262
Ссылки в php нужно использовать как можно реже или лучше даже совсем от них отказаться.
Ответы: >>1120270
Аноним 2018/01/15 13:51:17  №1120270 157
>>1120257

А может ты тогда напишешь код (внутри цикла) на русском и на PHP, а я или кто-то еще скажет, где ты ошибся при переносе с русского на PHP?

>>1120262

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

Насчет ссылок, в мануале описано, что у них много подводных камней, потому лучше не использовать их без надобности: http://php.net/manual/ru/language.references.php

>>1120217

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

Но ты можешь заменить файлы картинок, оставив те же самые имена.

>>1120268

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



Аноним 2018/01/15 13:55:25  №1120271 158
>>1120235
>Какое ВП? Какая база, поехавший?
а, это я не тебе. это я >>1120217 анону

алсо, валерианочку попей.

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

плюс если перекатываться, там будет явно меньше зп вначале, но это уже для другого треда разговор.
Аноним 2018/01/15 13:58:40  №1120272 159
15160139206910.png (7, 199x177)
177x199
>>1120270
>Редактировать их можно в случае вордпресса через админку, в которую тебе должны были выдать доступ.
Не совсем понял, но полный доступ к хостингу, фтп вот к этому всему есть.
Пикрил - список плагинов.
Да, я так уже и сделал - заменил изображения на новые с такими же именами, но одно изображение исчезло (пустое место) но кликабельность и ссылка на него осталась, блин
Ответы: >>1120280
Аноним 2018/01/15 14:07:52  №1120273 160
>>1120270
https://ideone.com/IlvuRW
Не понимаю как из $letters перетащить данные последовательно по слогу. Поэтому собственно и спрашивал о переборке через foreach.
Ответы: >>1120274 >>1120277 >>1120280
Аноним 2018/01/15 14:08:32  №1120274 161
>>1120273
Бтв. Первые джва дня пытаюсь вкатится, поэтому скорее всего много глупостей говорю.
Аноним 2018/01/15 14:12:35  №1120275 162
>>1120270
>>У нас обучающий тред, желательно писать, почему. А то без аргументов выглядит как чье-то личное мнение.
>У нас обучающий тред, желательно писать, почему. А то без аргументов выглядит как чье-то личное мнение.

Причина очень проста. Использование ссылок делает код более трудным для понимания и для поддержки, не давая почти ничего взамен
Аноним 2018/01/15 14:28:12  №1120277 163
Аноним 2018/01/15 14:33:58  №1120280 164
>>1120272

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

>>1120273

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

// Берем случайный элемент массива и сохраняем в random его ключ (не значение, то есть не сам слог)
$random = array_rand($letters);

// Создаем пустой массив и помещаем в переменную
$randomText = array();

// склеиваем все 16 слогов из массива letters в одну длинную строку и помещаем в randomText,
// удаляя хранившийся там ранее массив
$randomText = implode($letters);

Соответственно, тебе надо немного вернуться и повторить такие вещи:

- что массив состоит из элементов, у каждого есть ключ (=индекс) и значение. Ключи уникальны и не повторяются внутри одного массива.
- как, имея массив слогов и ключ одного слога, получить значение этого слога? Подсказка: использовать квадратные скобки. Может, в уроке это плохо описано, но конструкция вида массив[ключ] возвращает значение элемента с данным ключом. Здесь "ключ" может быть переменной, числом, строкой в кавычках, сложным выражением.
- далее, получая на каждом шаге цикла один слог, как их собрать в массив? Надо до цикла создать пустой массив, а в цикле добавлять в него еще один элемент. Добавление элемента в массив (внутри цикла) делается так: массив[] = значение; При этом ключ для нового элемента генерируется автоматически. Ну а после цикла ты уже можешь склеить собранные слоги из массива в одну строку.

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

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

$january = [
'math' => 4,
'physics' => 5,
'literature' => 2
];

$february = [
'math' => 5,
'physics' => 5,
'literature' => 2
];

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

- по каким предметам оценки остались неизменными
- по каким улучшились
- по каким ухудшились

Выводиться данные должны сгруппированно, в таком виде:

Оценки не изменились: physics, literature
Оценки улучшились: math
Оценки ухудшились: (таких нет)

Ответы: >>1120321
Аноним 2018/01/15 14:37:41  №1120282 165
Привет всем анонам. Всё еще пилю сайт про студентов. Я много слышал про разделение логики приложения и логики представления, но с пагинацией я немного запутался, есть класс, в одном из методов которого я просто через цикл печатаю ссылки на экран, а потом объект пагинации передаю во вью, так нормально делать? Альтернативой будет сделать цикл в отдельном шаблоне, и передавать туда объект, а потом еще и написать тыщу геттеров для полей класса, я ж инкапсулирую.
И еще вопрос по неймспейсам, если у меня например класс вью называется App\View\View , а шаблоны лежат например в App/templates, как лучше всего подключить шаблоны уровнем ниже(выше?) неймспейса? Я пытался как-то изворачиваться с двойными точками, но полное понимание так и не пришло.
Ответы: >>1120363 >>1120365 >>1120889
Аноним 2018/01/15 14:39:31  №1120283 166
Вот все говорят что задачку из учебника на генератор стишков нужно делать через цикл склеивающий строки. Но не будет ли быстрее (по производительности) прост дважды склеить строку, без цикла? (Вопрос из опыта на питоне, где все встроенные функции написаны на С и без цикла обработалось бы быстрее).
На пхп второй день, хз че у него под капотом.
Ответы: >>1120361
Аноним 2018/01/15 14:40:11  №1120284 167
15160164113180.png (106, 1278x914)
914x1278
15160164113191.png (54, 913x903)
903x913
Задача на телефонные номера, на regex101 вроде все работает, теперь же не находит ничего. Где я обосрался?
Ответы: >>1120290
Аноним 2018/01/15 14:42:26  №1120286 168
Как в Symfony сделать форму для свойства, которое хранится как массив, а в БД как json. Для хранения переменного числа характеристик. Использовал пока CollectionType, в котором кастомный keyValueType (key, value поля).
Получается в БД поле такого вида:
[
{"key": "Материал", "value": "металлический каркас"}, {"key": "Цвет подставки", "value": "черный"}
], а хотелось бы такого: [
{"Материал": "металлический каркас"}, {"Цвет подставки": "черный"}
].
Или вообще только массив, без объектов внутри, но теперь, так понимаю, json_array в Doctrine теперь deprecated.
Что можно придумать, чтобы при этом формы редактирования выводились в два поля: название характеристики и ее значение. Data Transformer? Вроде не то.
Пробовал через FormEvents::PRE_SUBMIT, тоже не вышло ключи изменить у коллекции. Возможно, это я неправильно делал.
На крайний случай можно через Event[Subcriber|Listener] Доктрины, но кажется, что это кривые костыли.
Ответы: >>1135044
Аноним 2018/01/15 14:47:38  №1120290 169
>>1120284
ебать ты монстра родил, вот моя регулярка, вродь норм отработала
$regexp = '/^ (\\+ 7|8)([ (-][0-9][ )-]){10}$/';
Ответы: >>1120291 >>1120308
Аноним 2018/01/15 14:49:27  №1120291 170
15160169672590.png (66, 662x559)
559x662
Ответы: >>1120308
Аноним 2018/01/15 14:52:09  №1120292 171
>>1120238
Я знаю что вп - это вордпресс причем он тут?
>оно на то и фатал еррор, чтобы останавливать программу
через try catch throwable не останавливает
Ответы: >>1120296
Аноним 2018/01/15 14:56:11  №1120296 172
>>1120250
>>1120292
>через try catch throwable не останавливает при фатал еррор
Аноним 2018/01/15 15:11:44  №1120308 173
15160183051010.png (105, 1274x923)
923x1274
>>1120290
>>1120291
Забавно твой код на ideone работает, а на regex101 нет. В чем разница?
Ответы: >>1120316 >>1120952
Аноним 2018/01/15 15:23:03  №1120316 174
>>1120308
Также, на regex101 https://regex101.com/r/qF7vT8/3 уже введены номера и можно простестировать свою регулярку. Помни что на этом сайте надо писать бекслеш один раз, например \s, а не \\s. Флаг m там стоит чтобы ^ и $ в регулярке обозначали «начало и конец любой строки», а не «начало и конец всего текста». Флаг g (его нет в PHP, он только на этом сайте) значит что надо искать все совпадения с регуляркой, а не только первое.
Там в уроке все написано, внимательнее будь
Аноним 2018/01/15 15:34:03  №1120320 175
кто подскажет?
использую симфони4+доктрину. хочу чтобы доктрина сама обновляла created_at и updated_at для полей. такая возможность была раньше в бандле расширений доктрины https://github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/doc/timestampable.md
там именно так как я хотел - в аннотации указываешь по какому событию обновлять дату и не паришься. но проблема в том, что оно работает только для симфони2.

есть какое-то более актуальное расширение? понятно, можно вручную добавлять, но вдруг кто-то уже запилил готовое.
Ответы: >>1120368 >>1120379
Аноним 2018/01/15 15:34:44  №1120321 176
>>1120280
Нашел эту самую БД, да там что то есть и наверно то что нужно. Но там очень много всего и чот очень сложно. Ладно спасибо все равно.
Аноним 2018/01/15 15:43:38  №1120326 177
>>1120204
>можешь положить все кнопочки в форму в которой у тебя прописан action='твой скрипт'
>Можно с помощью жквери. Типа присваиваешь функцию кнопочке, а в функции у тебя аякс.
Можешь пожалуйста пример привести?
Ответы: >>1120344
Аноним 2018/01/15 15:57:54  №1120332 178
15160210746620.jpg (214, 1280x853)
853x1280
Есть данные в двумерном массиве. Необходимо вности в БД. А теперь вопрос. Например есть 10000 строк. То как лучше внести данные? Какой способ быстрее и выгоднее для сервера?
1) Построчно прогоняя массив через форыч вносить в базу каждый раз используя INSERT:

INSERT INTRO <название таблицы> SET <имя столбца1> = <значение1>, <имя столбца2> = <значение2>...

2) Или же сформировать один большой запрос как делается при SQL дампе и использовать INSERT всего 1 раз:

INSERT INTRO <название таблицы> (`имя столбца1`,`имя столбца2`,...) VALUES ('значение11', 'значение12'...), ('значение21', 'значение22'...), ('значение31', 'значение32'...),...
Ответы: >>1120345 >>1120350 >>1135044
Аноним 2018/01/15 16:24:34  №1120342 179
>>1120270
>А может ты тогда напишешь код (внутри цикла) на русском и на PHP
Взять случайный элемент из массива и добавить к имеющемуся слову:
$name = $name . $letters[rand(0, 15)];
Ответы: >>1120346
Аноним 2018/01/15 16:27:19  №1120344 180
>>1120326
1)
<form method="post" action="имяскрипта.пхп">
<button type=submit>
</form>
2) <button onclick="ajaxfunction">
Ответы: >>1120499
Аноним 2018/01/15 16:27:22  №1120345 181
>>1120332
на 10000 строках не будет особо различий.Сделай обоими способами и измерь время
Аноним 2018/01/15 16:29:47  №1120346 182
>>1120342
Обля, еще проще. Есть готовая функция, возвращающая случайный элемент массива:
$name = $name . array_rand($letters);

Сокращенный синтаксис конкатенации строк опускаю. Новичку проще так.
Аноним 2018/01/15 16:40:11  №1120350 183
>>1120332
Один большой запрос всегда быстрее, чем много мелких. Однако, у БД есть ограничение на размер запроса, поэтому возможно потребуется разбить его на несколько множественных инсертов. Заметим, что при импорте дампа отключают для ускорения отключают проверку foreign key и удаляют индексы:
SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE mytable DROP INDEX myidx;
По окончании импорта эти параметры восстанавливают.
Аноним 2018/01/15 16:57:33  №1120355 184
у тебя в регексе жопа с метлой
([-)( 8]...
круглые скобки получают приоритет перед квадратными. эскейпи их
([-\)\( 8]...
Ответы: >>1135044
Аноним 2018/01/15 17:05:59  №1120361 185
>>1120283
Implementation language
C (primarily; some components C++)
Аноним 2018/01/15 17:16:36  №1120363 186
>>1120282
Пагинация относится исключительно к представлению. Класс, в котором метод печатает ссылки на экран, не должен находится в модели. Только в представлении. Контроллер должен запрашивать у модели данные с двумя параметрами: $number_of_results, $skip_results, где первое - количество результатов на страницу. А второе = $number_of_results х $номер_страницы
Аноним 2018/01/15 17:22:18  №1120365 187
>>1120282
>Альтернативой будет сделать цикл в отдельном шаблоне, и передавать туда объект, а потом еще и написать тыщу геттеров для полей класса
Цикл в шаблоне - это нормально, если оформлен по канонам

<?php foreach (...) : ?>
хтмл хтмл <?= $viewObject->joba->getNum(); ?>хтмл хтмл
<?php endforeach; ?>
Ответы: >>1120378
Аноним 2018/01/15 17:29:42  №1120368 188
>>1120320
не шарю в doctrine, но автоматическое обновление полей с датой - это функция БД. Для этого у поля типа timestamp прописывается дефолтное значение CURRENT_TIMESTAMP.
Ответы: >>1120379
Аноним 2018/01/15 17:39:41  №1120373 189
>>1120262
В php по умолчанию всегда неявным образом передает в функцию ссылку на параметр. Переменная создается в памяти только, когда ты внутри функции начинаешь её менять.
Аноним 2018/01/15 17:49:37  №1120378 190
>>1120365
Да, цикл в шаблоне не представляет никаких проблем в стилистическом плане и модели MVC не противоречит
Аноним 2018/01/15 17:51:06  №1120379 191
>>1120320
это я напиздел. с 4 все работает нормально, вот: https://packagist.org/packages/stof/doctrine-extensions-bundle
щас буду ебаться с настройкой

>>1120368
1. у меня не мускул.
2. это можно делать где угодно (в принципе), но если ты используешь такую жирную абстракцию как ОРМ, то логично всю работу с БД делегировать ей. а как она там технически будет добавлять - мне пока неважно. возможно, она это делает по-разному в зависимости от БД.
Ответы: >>1120386
Аноним 2018/01/15 18:02:46  №1120386 192
>>1120379
Возможно, дефолтное значение поля БД должно быть прописано в твоей XML схеме, которую доктрина использовала для генерации БД и классов.
Ответы: >>1120407
Аноним 2018/01/15 18:27:59  №1120404 193
>>1120116
Повторюсь. Можно ли свой проект вместо студентов делать? ОП будет помогать тогда? Хочу сделать порезанную версию Anki, что бы дни для spaced repetition считались, а то руками в календаре отмечать я утомился.
Ответы: >>1120418
Аноним 2018/01/15 18:41:59  №1120407 194
>>1120386
да нет, вот пример:

/
@var \DateTime $created

@Gedmo\Timestampable(on="create")
@ORM\Column(type="datetime")
/
private $created;

/

@var \DateTime $contentChanged

@ORM\Column(type="datetime", nullable=true)
@Gedmo\Timestampable(on="change", field={"title", "body"})
/
private $contentChanged;

очень удобно.

короче настроил всю хуйню тупо по инструкции https://symfony.com/doc/master/bundles/StofDoctrineExtensionsBundle/index.html
если кому надо, подскажу
Ответы: >>1120412
Аноним 2018/01/15 19:00:21  №1120412 195
>>1120407
>@Gedmo\Timestampable(on="create")
>@Gedmo\Timestampable(on="change", field={"title", "body"})
О чем я и говорил. Это функция БД, которую ты включил с схеме базы.
Ответы: >>1120425
Аноним 2018/01/15 19:08:04  №1120418 196
>>1120116
>>1120404

Можно, но при условии, что ты прочитаешь комментарии к задаче про студентов и будешь стараться делать, как там написано, стараться соблюдать лучшие практики и тд. То есть, если ты собираешься чему-то учиться.
Аноним 2018/01/15 19:20:54  №1120425 197
>>1120412

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

- https://github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/lib/Gedmo/Timestampable/TimestampableListener.php
- https://github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/lib/Gedmo/AbstractTrackingListener.php
- https://github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/lib/Gedmo/Timestampable/Mapping/Event/Adapter/ORM.php

Судя по коду, генерируется это в событиях onFlush и prePersist.

Аноним 2018/01/15 19:27:35  №1120429 198
Посоветуйте какой-нибудь сервер для ньюфагов.
Где можно аджакс, сикуэл и прочие пхп поднять.

Устанавливал месяца 2 назад, но название забыл.
Ответы: >>1120430 >>1120436 >>1120439
Аноним 2018/01/15 19:31:20  №1120430 199
>>1120429
наверное, речь о XAMPP?
Он один из самых популярных вроде?
Аноним 2018/01/15 19:48:04  №1120436 200
Ответы: >>1120439
Аноним 2018/01/15 19:52:36  №1120439 201
>>1120436
>denwer
>PHP 5.3.13, MySQL 5.1, PostgreSQL 8.4 etc
это говно мамонта. зачем советовать людям говно мамонта?

>>1120429
open server. я когда сидел на винде, сравнивал его с xampp, первый намного пизже. больше функционала, удобный доступ к конфигам, удобное переключение, прочие плюшки
Аноним 2018/01/15 20:39:13  №1120471 202
Поднял я апач сервер, запустил пхп скрипт.

Можно ссылку на тутор, где показано как это все связать с обычным хтмл? (Хочу использовать бутстрап).
Ответы: >>1135044
Аноним 2018/01/15 21:48:19  №1120498 203
>>1119406
так тот цикл в цикле был близок к этому или вообще не то?
Ответы: >>1120880
Аноним 2018/01/15 21:51:55  №1120499 204
>>1120344
А я вот ещё не понимаю одной вещи.

Есть у меня какой-то условный index.html и script.php.
Привязываю я скрипт к кнопке в индексе.
Как он будет работать?
Индекс то я могу и в хроме посмотреть, а вот пхп?
Нужно запускать какой-нибудь сервер, чтоб все заработало?
Ответы: >>1120503
Аноним 2018/01/15 21:59:10  №1120503 205
Аноним 2018/01/15 23:47:21  №1120574 206
Господа! А базы данных сложная вещь? Тот же PDO посильно освоить?
Ответы: >>1120586 >>1120604 >>1120622
Аноним 2018/01/16 00:05:54  №1120586 207
>>1120574
Бля, PDO - это прослойка между скриптом пхп и базой данных. Системы управления базами данных это Oracle, MSSQL, MySQL, PostgreSQL - это программы на подобие Excel, только текстовые. Они все управляются одним языком SQL. И если ты хочешь освоить базы данных, то тебе нужно освоить этот язык.
Аноним 2018/01/16 00:14:46  №1120589 208
пацаны, еще вопрос по доктрине есть.

у меня короче есть две сущности: Article и Tag. у них будет bidirectional связь manyToMany (у многих статей может быть много тегов, для каждой статьи хочется знать ее теги и наоборот).

я после прочтения мануала http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-bidirectional короч пишу такой (псевдо)код:
//Article.php
@ORM\Table(name="articles")
class Article

@ORM\ManyToMany(targetEntity="Tag", inversedBy="articles")
@ORM\JoinTable(name="articles_tags")
private $tags;

//Tag.php
@ORM\Table(name="tags")
class Tag

@ORM\ManyToMany(targetEntity="Article", mappedBy="tags")
private $articles;

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

далее делаю php bin/console doctrine:migrations:diff, создается файл миграции, но там ДВЕ промежуточные таблицы:
$this->addSql('CREATE TABLE articles_tags (article_id INT NOT NULL, tag_id INT NOT NULL, PRIMARY KEY(article_id, tag_id))'); // эта моя
$this->addSql('CREATE TABLE tag_article (tag_id INT NOT NULL, article_id INT NOT NULL, PRIMARY KEY(tag_id, article_id))'); // эта такая же, но автоматически сгенерированная

как так-то? почему их две? как сделать так, чтобы создавалась и использовалась только та, которую я указал?
Ответы: >>1120597
Аноним 2018/01/16 00:20:11  №1120597 209
>>1120589
нашел свой косяк лол. я оказывается в обоих сущностях писал inversedBy, а надо в одной писать mappedBy.
Аноним 2018/01/16 00:31:27  №1120604 210
>>1120574
как и везде, на начальном уровне несложная. пдо - это не только про БД, как правильно сказали, сначала надо освоить азы sql, уметь создавать таблицы, выбирать-добавлять-изменять-удалять данные через консоль. пдо - это встроенная библиотека пхп, предоставляющая несколько классов для работы с БД и предполагающая, что ты будешь использовать определенный подход при работе с ней
Ответы: >>1120622
Аноним 2018/01/16 01:44:33  №1120618 211
15160562738940.jpg (138, 1501x1058)
1058x1501
Привет! Прохожу урок по работе со встроенным в PHP веб-сервером.
Почему-то не работает пример из урока, который должен был посчитать сумму двух чисел. Браузер выводит просто пустую страницу. Хотя hello world из прошлого примера срабатывает нормально.
Подскажите пожалуйста,что я делаю не так?
Ответы: >>1120619 >>1120620 >>1120621
Аноним 2018/01/16 01:46:17  №1120619 212
Ответы: >>1120620
Аноним 2018/01/16 01:57:02  №1120620 213
>>1120618
>>1120619
Разобрался сам. Ошибка была в том, что я забыл сохранить этот файлик, что пытался запускать ._.
Ответы: >>1120627
Аноним 2018/01/16 01:57:44  №1120621 214
>>1120618
укажи в начале страницы (до хедера)
error_reporting(E_ALL);
ini_set("display_errors", 1);

и посмотри, что выводится. по коду должно все ок быть
Аноним 2018/01/16 02:15:42  №1120622 215
>>1120574
>>1120604
>выбирать-добавлять-изменять-удалять данные через консоль.
Лучше через phpmyAdmin или его аналог для других баз. Там наглядно можно видеть текст запроса, манипулируя интерфейсом. Пробовать менять запрос, вводить свои.
Аноним 2018/01/16 02:20:42  №1120627 216
>>1120620
Вот для таких случаев и придуман дебаггер. Прямо построчно выполняет программу и после каждого шага ты можешь посмотреть значения любой переменной.
Аноним 2018/01/16 06:24:13  №1120657 217
Аноны, а кто-нибудь из вас согласился бы поучастовать бесплатно в написании просмотрщика трейсов от xdebug? "Поучаствовать" здесь значит "сделать проект целиком", конечно.

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

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

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

Есть такой проект: https://habrahabr.ru/post/242275/ - но он вроде не показывает время и вообще, это не то.

Есть такой: https://github.com/tungnguyenson/xdebug-trace-explorer

Есть такой: https://github.com/corretge/xdebug-trace-gui

Есть такой: https://www.splitbrain.org/blog/2016-02/27-visualizing_xdebug_traces - это очень отдаленно напоминает то, что хотелось бы увидеть.

Есть такой http://thomashamba.ch/xdebug-trace-file-parser.html

Есть вопрос на SO: https://stackoverflow.com/questions/1456395/xdebug-trace-gui



Ответы: >>1120662
Аноним 2018/01/16 06:27:38  №1120660 218
Еще в Хроме в отладчике есть мощные средства для просмотра разных трейсов (вроде https://chromedevtools.github.io/timeline-viewer/ ), можно еще рассмотреть вариант конвертировать PHP трейс в JSON, который скушает и отобразит Инспектор.
Аноним 2018/01/16 06:28:49  №1120661 219
Аноним 2018/01/16 06:28:57  №1120662 220
>>1120657
> просмотрщика трейсов от xdebug?
Там что-то может быть сложным?
Ответы: >>1120664
Аноним 2018/01/16 06:30:30  №1120664 221
>>1120662

Чем ты трейсы просматриваешь/просматривал бы при условии что они начинаются с несколько десятков Мб и соответственно сотен тысяч вызовов?
Ответы: >>1120667
Аноним 2018/01/16 06:49:57  №1120667 222
>>1120664
Ну тот же екселевский файлик на гиг ты же парсишь как-то. В чём тут сложности?
Аноним 2018/01/16 11:09:46  №1120711 223
>>1118555 (OP)
Анон, подскажи, как запилить передачу даты из формы?

У меня затуп, как правильно передать GET.
Ответы: >>1120998
Аноним 2018/01/16 15:48:26  №1120805 224
Какой же у пхп хреновый мануал. это просто невыносимо.
http://php.net/manual/ru/
Ответы: >>1120840
Аноним 2018/01/16 17:10:22  №1120840 225
>>1120805
ты бы сначала сравнил с мануалами других языков, что ли
Ответы: >>1120858
Аноним 2018/01/16 17:40:32  №1120858 226
>>1120840
у жс нормальный мануал.
Аноним 2018/01/16 17:53:08  №1120864 227
Вопрос по вёрстке.
Есть ячейка <td></td> произвольной ширины.
Внутри должен быть <input></input> и <button></button>.
Кнопка строго 23х23 пикселя, прижата вправо. А инпут должен быть резиновым, занимая всё оставшееся место ячейки.
Вроде простая задача, но я не осилил.
Ответы: >>1120868 >>1120880 >>1120892
Аноним 2018/01/16 18:02:15  №1120867 228
Анон, подскажи регулярку для preg_split, чтобы в массив уходили только числа.
Ответы: >>1120880
Аноним 2018/01/16 18:02:53  №1120868 229
>>1120864
Шаманить с padding, marning и bottom, не?
Ответы: >>1120870
Аноним 2018/01/16 18:05:57  №1120870 230
>>1120868
Шаманю. Результат - либо фиксированная ширина инпута, либо элементы выходят за пределы ячейки и всю таблицу разносит к хренам.
Ответы: >>1120871
Аноним 2018/01/16 18:11:45  №1120871 231
>>1120870
Чтобы не было фиксированной нужно задавать не в пикселях значения. Залей пример кода на пастебин или ещё куда
Ответы: >>1120875
Аноним 2018/01/16 18:19:02  №1120873 232
Пожалуйста, подскажите почему это не работает.
Вроде нормально сделал, но INSERT не проходит.
https://ideone.com/EYyhPq
Ответы: >>1120902 >>1120967
Аноним 2018/01/16 18:36:16  №1120875 233
>>1120871
Что-то типа такого: https://jsfiddle.net/dj03n8sj/
Только там вообще даже в одну строку всё не умещается. У мен уже голова квадратная, с утра получше сделаю.
Ответы: >>1120888
Аноним 2018/01/16 18:48:17  №1120880 234
Ответы: >>1121122
Аноним 2018/01/16 19:20:35  №1120888 235
Ответы: >>1121260
Аноним 2018/01/16 19:26:25  №1120889 236
>>1120028
Первую задачу где?

>>1120282
>Я много слышал про разделение логики приложения и логики представления, но с пагинацией я немного запутался, есть класс, в одном из методов которого я просто через цикл печатаю ссылки на экран, а потом объект пагинации передаю во вью, так нормально делать?
Не совсем, ты должен передавать в шаблон переменные с результатом, и уже в нём (шаблоне) выводить циклом

Например

for ($i = 0; $i < $pageCount; $i++) {
<a ...>$i</a>
}

>И еще вопрос по неймспейсам, если у меня например класс вью называется App\View\View , а шаблоны лежат например в App/templates, как лучше всего подключить шаблоны уровнем ниже(выше?) неймспейса? Я пытался как-то изворачиваться с двойными точками, но полное понимание так и не пришло.
__DIR__ . '/../level/up/path'

Вообще, обычно, папка с шаблонам находятся снаружи снаружи папки приложения
Аноним 2018/01/16 19:32:38  №1120892 237
>>1120864
У td пишешь display: flex у инпута width: 100%;
Ответы: >>1121260
Аноним 2018/01/16 19:50:05  №1120902 238
>>1120873
Бамп вопросу, вы что, pdo не знаете? Не стыдно?
Ответы: >>1120919
Аноним 2018/01/16 21:03:26  №1120919 239
>>1120902
Не пиши на венде локалхост. Это так, к слову.
По поводу кода: мы тут не обязаны угадывать "у миня там ни праходит ряяя". Пиши четко, какая ошибка. Если пусто ,как у тебя в голове, въеби PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION и оберни скрипт в try—catch, опять же скажешь ошибку сюда, ну пшёл бля нах быстра!
Ответы: >>1120964
Аноним 2018/01/16 22:03:34  №1120952 240
>>1120308
Сука уже подумал что это мой скрин. Сталкнулся с точно таким же говном и тоже номера телефонов ебашил. В бэкслеше броблема
Аноним 2018/01/16 22:14:14  №1120964 241
>>1120919
А как писать если не локалхост? Работает же.
А в коде, в 13 строчке $dbh->execute([NULL,$task,0,$taskDate]) or die ("Problems adding!"); срабатывает or die ("Problems adding!").
Ответы: >>1120977
Аноним 2018/01/16 22:21:17  №1120967 242
>>1120873

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

http://php.net/manual/ru/pdo.error-handling.php

Ставить try/catch не требуется. Просто включи у себя display_errors= 1 в php.ini и ошибка будет выведена на экран. Если проблема на хостинге, то на экран может и не вывестись, смотри тогда логи ошибок.


Аноним 2018/01/16 22:32:39  №1120977 243
>>1120964
По крайней мере у меня, по крайней мере на семерке локалхост в майэскуэл работает намного медленнее 127.0.0.1 , попробуй поменять? На хрюше было норм, десятку нахуй родили непонятно.

Экзекьют возвра... ты читал доки а?? Не маневрируй — это тебе не поможет! Ошибку давай сюда але.
Аноним 2018/01/16 23:33:23  №1120998 244
>>1120711
Форму правильней передать POSTом. Для этого в теге <form .... method=POST>

Параметры в скрипте будут доступны в массивах $_POST и $_REQUEST
Ответы: >>1121055 >>1121122
Аноним 2018/01/17 02:01:15  №1121055 245
>>1120998

Метод зависит от вида формы.

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

POST - для форм, меняющих состояние сервера, для форм с закачкой файлов, для больших объемов данных. Ссылкой поделиться нельзя, при обновлении страницы выскочит предупреждение.
Ответы: >>1121122
Аноним 2018/01/17 07:19:11  №1121079 246
15161627517080.jpg (32, 600x439)
439x600
>New google search design
Аноним 2018/01/17 08:50:35  №1121098 247
У меня вопрос по бутсрапу. После добавления php кода из урока с ООП перестал работать hover.
https://ideone.com/ZSKmtw
Что я делаю не так и как отлаживать такие моменты?
Ответы: >>1121100 >>1121159 >>1135045
Аноним 2018/01/17 08:51:49  №1121100 248
Аноним 2018/01/17 10:04:49  №1121122 249
>>1121055
>>1120998
Мне говорили, что с ВЕБ формы все уходит строкой и передается только get-ом.

>>1120880
https://ideone.com/cNjfkw

У меня какая-то хуйня в массив попадает.
Ответы: >>1121156 >>1121197
Аноним 2018/01/17 10:44:50  №1121136 250
mb_internal_encoding("UTF-8")
не работает на ideone.com?
Ответы: >>1121144
Аноним 2018/01/17 11:19:02  №1121144 251
Ответы: >>1121146
Аноним 2018/01/17 11:20:36  №1121146 252
>>1121144
Сорре, в глаза долблюсь, не увидел ideone.
Аноним 2018/01/17 11:56:17  №1121156 253
>>1121122
Нумерной массив всегда начинается с индекса 0, а ты полагаешь с единицы.
Ответы: >>1121158
Аноним 2018/01/17 12:02:27  №1121158 254
>>1121156
Костыль.
При юзанье этого кода https://ideone.com/ZTztnt получается такой результат: -----12------13array(3) { [0]=> string(0) "" [1]=> string(2) "12" [2]=> string(2) "13" } 1213
Ответы: >>1121164
Аноним 2018/01/17 12:03:23  №1121159 255
>>1121098
Ты выбрал нелучшее место для php кода. Если пхп покажет warning, то этот текст попадет в код твоей страницы между head и body. Броузер интерпретирует этот текст как начало body, а реальный боди будет игнорировать.
Ответы: >>1121160
Аноним 2018/01/17 12:06:22  №1121160 256
Ответы: >>1121181
Аноним 2018/01/17 12:12:04  №1121164 257
>>1121158
Это точно так задумано что в качестве разделителя строки на массив выступает комбинация 0- ?
Ответы: >>1121166
Аноним 2018/01/17 12:15:26  №1121166 258
>>1121164
Я искал любые меры, чтобы выбросить нуль, который забирается в первый индекс массива.
[0]=> string(0) ""
Ответы: >>1121172 >>1121186
Аноним 2018/01/17 12:33:53  №1121172 259
>>1121166
В уроке по регуляркам была нужная тебе функция.
Ответы: >>1121174
Аноним 2018/01/17 12:39:44  №1121174 260
>>1121172
Я попробовал все 4, но проблема в самом регулярном выражении.
Аноним 2018/01/17 13:06:12  №1121181 261
Аноним 2018/01/17 13:15:29  №1121186 262
>>1121166
>[0]=> string(0) ""
ПОНЯтно. Это потому что твой разделить срабатывает на начало строки.
Ответы: >>1121233
Аноним 2018/01/17 13:30:57  №1121197 263
>>1121122
>Мне говорили, что с ВЕБ формы все уходит строкой и передается только get-ом.
задумайся о круге своего общения лол
Ответы: >>1121233
Аноним 2018/01/17 14:12:17  №1121233 264
>>1121186
Хз. Я уже и так написал:

$regexp = '/[\s]+/';
$str = preg_replace("/\D/", ' ', $_GET[num]);
echo $str;

$nig= preg_split ($regexp, $str);

Воз и ныне там.

>>1121197
Ну я ж хикка!

И как тогда правильно передавать значения с формы в пхп-скрипт?
Ответы: >>1121241
Аноним 2018/01/17 14:32:04  №1121241 265
https://symfony.com/blog/the-end-of-silex
силекс все

>>1121233
>И как тогда правильно передавать значения с формы в пхп-скрипт?

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

также тебе никто не мешает передавать пост-запрос вместе с гет-параметрами (просто подставляя их в УРЛ). тогда и в $_POST, и в $_GET прилетят данные. подробнее (в комментах хорошее пояснение про неадекватность названия массива $_GET):
http://grokbase.com/t/php/php-general/112ckcxw97/using-both-get-and-post-in-the-same-page
Ответы: >>1121244
Аноним 2018/01/17 14:46:15  №1121243 266
Ребята, хочу удалить все аудиозаписи в vk. Вручную удалять не вариант. Один анон советовал полгода назад мне этот скрипт:

// ==UserScript==
// @name 2
// @author 1
// @match https://vk.com/audio*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
// ==/UserScript==

var a = $('#delete').click();
location.reload();

Я кидал его в tampermonkey и все работало. А сейчас не получается. Подскажите, что можно сделать?
Аноним 2018/01/17 14:49:55  №1121244 267
>>1121241
Мне не нужны закладки, но у меня была проблема в том, что через форму поступает тип данные не "дата", а строка.
Пришлось даже массивом разбивать и собирать заново, чтобы привести к формату, который требуется.
Ответы: >>1121280
Аноним 2018/01/17 16:13:47  №1121260 268
>>1120892
Блин, точно, флекс. Спасибо.
>>1120888
Не знал, что такое есть. Ведёт себя немного по другому, но тоже подходит.

Ещё вопрос по бутстрапу. Какой путь кастомизации бутстрапа в Yii2 наиболее фен-шуйный? Мне нужно убрать padding у ячеек таблицы. В tables.less написано padding: @table-cell-padding;, а сам этот параметр прописан в variables.less. Но его изменение ничего не даёт. Гугл заводит то в перекомпиляцию бутстрапа, требующую NodeJS и ещё чего-то, то в принудительное отключение бутстрапа из зависимостей Yii и ручное подключение бутстрапа, сгенерированного с нужными параметрами на https://getbootstrap.com/docs/3.3/customize
Как это вообще делается правильно?
Ответы: >>1121283
Аноним 2018/01/17 17:11:16  №1121280 269
>>1121244
у тебя по-моему нет понимания что за что отвечает. в пхп и нет такого типа "дата". это может быть ты имешь в виду тип поля в html, он не имеет никакого отношения к типу данных, который есть в ЯП.

для пхп (и для других языков) "дата" - это циферки, которыми он манипулирует с помощью функций и классов, описанных у ОПа в уроке
https://github.com/codedokode/pasta/blob/master/php/datetime.md

или озвучь вопрос более конкретно.
Ответы: >>1121285
Аноним 2018/01/17 17:13:09  №1121283 270
>>1121260
Раньше лепили float ко всему где только можно, теперь flex и grid. У ячейки таблицы есть свой display, а менять его на flex? А нужна ли тогда таблица вообще? Таблица — для вывода табличных данных. Да, понятно что соблазнительно воспользоваться ей для автоматического выранивания сеточки, но мне лично кажется это неправильным.

Да, при желании содержимым ячейки можно поставить span или div c флексбоксом, внутрь которого запихнуть хоть анус Девы Марии, так чего бы весь сайт не засунуть туда а не только инпут с кнопкой?

>кастомизации бутстрапа
А какие варианты есть?
1) В своем стиле переопределить селекторы и подрубить его поверх.
2)
>ручное подключение бутстрапа, сгенерированного с нужными параметрами
Это когда уже определился со стилями, на финалочку.

>Have an existing configuration? Upload your config.json to import it.
Может быть, у тебя уже есть основное, загрузи и подредактируй что нужно.

3)
>Но его изменение ничего не даёт
Ну как бы ты не должен лезть в папку vendor, если я тебя правильно понимаю. Все изменения должны накатываться в твоем приложении.

А если я неправильно понимаю, может быть ты что-то неправильно сделал, поэтому оно не отобразилось.
Ответы: >>1121289
Аноним 2018/01/17 17:17:47  №1121285 271
>>1121280
Окей, тогда опишу целиком систему:
Пользователь вводит дату через форму HTML с type="date"
Дату нужно привести к определенному формату.
После этого, она вставляется в ссылку.
Я кликаю по ссылке и перехожу на сайт, который хавает геты и выдает мне нужное окно.

Как я это сделал:
https://ideone.com/nVbAXT
Ответы: >>1121302 >>1121306
Аноним 2018/01/17 17:34:00  №1121289 272
>>1121283
>В своем стиле переопределить селекторы и подрубить его поверх.
Не плучается. Подключаю css, в нём стили для td (к примеру). border почему-то удаётся изменить, а padding и margin нет, как будто они не учитываются вообще. Не понимаю, почему так происходит.
>Это когда уже определился со стилями, на финалочку.
Тоже не совсем понятно. Просто сгенерировать bootstrap на сайте и заменить им потороха папки vendor\bower\bootstrap ? Или отключить дефолтный бутстрап и рядом положить сгенерированный, подключив его в Ассетс?
Ответы: >>1121301
Аноним 2018/01/17 17:59:56  №1121301 273
>>1121289
>Не плучается
Твой стиль подключаешь последним в списке? Может фреймворк где-то после тебя сует стили, а ты не видишь.

Если уверен что ты папа:

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

Бутстрап с помощью js может тебе нагадить уже после загрузки страницы.


Еще раз: ты не должен лезть в вендор! Эти вещи писал не ты, и не тебе их редактировать. Раз ты используешь bower, там должно быть что-то наподобие нашего composer-овского конфига, вот в нем ты можешь переписать пути на папку assets (ну или как там это в твоем фреймворке делается вообще ;))
Аноним 2018/01/17 18:00:45  №1121302 274
>>1121285
почему такие странные названия переменных? зачем массив - str_replace же есть?
+ валидация где?

я бы так сделал:
$userDate = array_key_exists($_GET['from']) ? strval($_GET['from']) : '';

if (!preg_match('~^(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$~', $userDate)) {
throw new InvalidArgumentException('Incorrect data format'); // можешь на die() заменить
}

$date = str_replace('-', '/', $userDate);
Ответы: >>1121305 >>1121306 >>1121611
Аноним 2018/01/17 18:09:59  №1121305 275
>>1121302
Ему надо поменять местами в дате год месяц число (отформатировать как требует сторонний ресурс).
Ответы: >>1121306 >>1121336
Аноним 2018/01/17 18:13:36  №1121306 276
>>1121285
>>1121302
>>1121305
Алсо просто ору
>With HTML5 support, web designer no longer needs to download fancy Javascript control for basic date input. Exactly what you need to do is just <input type="date"/> Once again HTML5 has made our life easier!
Аноним 2018/01/17 18:13:48  №1121307 277
Привет, анончик. Есть два массива.

$names = ['Helen', 'Mike', 'Alice', 'Lena', 'Ana', 'Max', 'Bob'];
$rates = [1, 4, 5, 3, 8, 9, 10];

Можно ли c помощью какой-нибудь команды сделать значения массива $names индексами массива $rates?
Или по любому придется назначать индексы вручную?Как-то не очень удобно.
Ответы: >>1121315
Аноним 2018/01/17 18:26:01  №1121315 278
Ответы: >>1121350
Аноним 2018/01/17 19:15:20  №1121336 279
>>1121305
а. ну тогда
$date = date('d/m/Y', strtotime($userDate));
Ответы: >>1121611
Аноним 2018/01/17 19:47:13  №1121350 280
Аноним 2018/01/17 23:34:02  №1121464 281
Решил дописать в урок про студентов раздел про контроль версий и хостинги репозиториев. Естественно, я не хочу всех отправлять на гитхаб, а хочу предложить выбор, и решил добавить битбакет. Замучался искать пример какого-нибудь хорошо оформленного PHP проекта. Вы такого не знаете?
Ответы: >>1121641
Аноним 2018/01/17 23:37:44  №1121466 282
А тут есть фрилансеры?
Аноним 2018/01/17 23:42:14  №1121468 283
А в чем отличие жс треда, от этого или фронтэнд треда в воркаче? Надо и вас почитать наверное.
Ответы: >>1121641
Аноним 2018/01/18 03:51:24  №1121556 284
15162366844200.jpg (137, 900x1200)
1200x900
Поясните за такую хуйню в PHP.
Превращаю все варнинги в эксепшены.

function exception_error_handler($severity, $message, $file, $line) {
throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler('exception_error_handler');

Пишу такой код:
try {
$content = file_get_contents($url, false, stream_context_create($request_headers));
} catch (ErrorException $e) { // обрабатываю }

Без превращения варнингов в эксепшены переменная $content всегда определена.
А, сука, если превращать - то при эксепшене undefined variable, сука! Да как так-то?! А как мне вытянуть значение функции, если там незначительный нотис выскочил (а при этом нотисы я хочу тоже кидать исключениями)? На самом деле ясно как - надо писать воркараунд в exception_error_handler для конкретного, сука, варнинга, и не кидать на него исключение.
Это же пиздец. Кто это проектировал?! Почему нельзя запустить exception_error_handler после того, как строка отработала, а не во время работы функции! Процедурный код же не рассчитан на такое поведение, он рассчитан, что он срет ошибками и при этом невозбранно возвращает значение! Ааааааааааааа

Вот что мне делать, если я хочу получать $content и при этом кидать эксепшены? Хуячить собаку на file_get_contents, затем чекать error_get_last()? А как я узнаю, что это ошибка именно с предыдущей строки?
Ответы: >>1121561
Аноним 2018/01/18 04:41:52  №1121560 285
объясните плизки что за параша registerServiceWorker в create-react-app? все на england языке никак понять не могу
Ответы: >>1122021
Аноним 2018/01/18 04:54:32  №1121561 286
>>1121556

Надо создать и заполнить переменную $content в catch.
https://github.com/moabit/student-list/ Аноним 2018/01/18 04:55:37  №1121562 287
>>1117075
>>1117974
>>1118558

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

> https://github.com/moabit/student-list/blob/master/composer.json#L5
> "fzaninotto/faker":"^1.7.1"

Это лучше было бы прописать в require-dev, то есть в зависимости для разработки. На продакшене ведь faker не требуется.

> https://github.com/moabit/student-list/blob/master/config.json
Этот файл используется в git и тут есть проблема: если разработчик склонирует твой проект и пропишет какие-то настройки, то он может закоммитить назад в проект измененный файл. Решение я описал в уроке: https://github.com/codedokode/pasta/blob/master/student-list.md#%D0%A1%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B5-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2-%D0%B8%D0%B7-%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F

> https://github.com/moabit/student-list/blob/master/public/index.php
> ini_set('display_errors', 1);
Это лучше прописывать в php.ini, а то не хочется, чтобы на продакшене ошибки выводились. Можно конечно прописать настройку в конфиге, но непонятно зачем дублировать функционал php.ini.

> https://github.com/moabit/student-list/blob/master/app/container.php#L20
> SET NAMES utf8mb4,
Вроде в PDO сделали опцию charset в конструкторе или в DSN.

https://github.com/moabit/student-list/blob/master/app/container.php#L35
> $container['pager'] = function ($c) {
Это не имеет смысла, так как у Pager есть конструктор. Также, ты по идее должен не переиспользовать один экземпляр Pager, а создавать каждый раз новый.

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

> throw new RouterException('Неправильный путь');
надо назвать класс лучше, так как этот класс генерирует 404 и должен использоваться только в таких ситуациях, когда надо отдать 404. Например, RouteNotFoundException или Http404Exception.

> https://github.com/moabit/student-list/blob/master/app/Controllers/Controller.php#L18
> protected $view;
Эту переменную наверно лучше назвать twig

https://github.com/moabit/student-list/blob/master/app/Controllers/Controller.php#L37
Может, тут лучше было сделать абстрактную функцию index?

https://github.com/moabit/student-list/blob/master/app/Controllers/Controller.php#L42
> protected function getUserData()
Не очень понятно назначение метода. Он точно должен быть в каждом контроллере?

https://github.com/moabit/student-list/blob/master/app/Controllers/ProfileController.php
здесь наверно лучше было бы сделать все же общую функцию для редактирования/регистрации, чтобы не передавать данные через поля. Такая передача данных затрудняет анализ логики кода.

> if (Util::checkCSRFToken() == false) {
Можно писать if (!Util::checkCSRFToken()), почитай про булевы значения.

https://github.com/moabit/student-list/blob/master/app/Controllers/ProfileController.php#L60
> $this->c['authorisation']->signIn($token);
> $student->setToken($token);
вот тут есть тонкий момент. Что, если мы сгенерируем токен, поставим куку, а потом скрипт упадет, не записав данные в БД. Пользователь останется с кривым токеном. Это не проблема? Хотя, если сделать наоборот, может получиться, что мы создадим пользователя в БД, а куку не выдадим - будет еще хуже.

https://github.com/moabit/student-list/blob/master/app/Controllers/ProfileController.php#L97
> $student->setName(ucfirst(trim(strval($_POST['name']))));
ucfirst не работает: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

https://github.com/moabit/student-list/blob/master/app/Controllers/ProfileController.php#L93
> $student = new Student;
> if ($this->user) {
> $student->setID($this->user->getID());
> }
При обновлении данных лучше сделать так: загрузить студента из БД и затем обновить ему поля из POST. А то в твоем случае, если добавить какие-то новые поля, которые не редактируются через форму, но хранятся в БД и есть в объекте, то они могут потеряться при редактировании.

> private function editUser($token): void
Для $token можно поставить тайп-хинт

https://github.com/moabit/student-list/blob/master/app/Database/StudentDataGateway.php#L36
> if ($search != null) {
> $search = trim($search);
Если передать строку из одних пробелов, найдутся все студенты.

https://github.com/moabit/student-list/blob/master/app/Database/StudentDataGateway.php#L54
> @return array
> public function getStudents
лучше писать @return Student[] - это несет больше информации - смотри мануал https://docs.phpdoc.org/guides/types.html

> public function getStudents($orderField, $direction, $limit, $offset, $search = null):
Тайп-хинтов бы сюда завезти...

> throw new \PDOException('Неверный параметр сортировки');
В сообщение можно добавить значение ошибочных параметров для упрощения отладки.

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

https://github.com/moabit/student-list/blob/master/app/Helpers/Authorisation.php#L75
> return $this->isAuth;
тут не return null должно быть?

https://github.com/moabit/student-list/blob/master/app/Helpers/ErrorHandler.php#L33
> header("HTTP/1.0 404 Not Found");
> echo "Страница с таким адресом не существует";
без указания кодировки кириллица может не отобразиться. Добавь либо Content-Type либо тег meta charset. Также, на мобильных надпись будет выводиться очень мелко, можно добавить meta viewport.

https://github.com/moabit/student-list/blob/master/app/Helpers/Util.php#L27
> throw new ConfigException('Ошибка в файле конфигурации');
Стоит тут добавить текст JSON ошибки.

https://github.com/moabit/student-list/blob/master/app/Helpers/Util.php#L58
> $_COOKIE['CSRFToken'] != $_POST['CSRFToken']
Тут надо использовать строгое сравнение. Также, надо проверить случай, когда оба значения пусты.

https://github.com/moabit/student-list/blob/master/app/Validators/StudentValidator.php
Тайп-хинтов бы побольше.

https://github.com/moabit/student-list/blob/master/app/addStudents.php
Это лучше было наверно сделать в виде cli скрипта.

> $student->setSurname($faker->lastName.'а');
Faker не умеет в женские фамилии? Не хочешь исправить этот баг и законтрибутить исправление в Faker на благо всех? Сначала, конечно, надо повнимательнее изучить Faker, может там уже есть решение.

https://github.com/moabit/student-list/tree/master/app/views/templates
Может, стоит эту папку вынести на верхний уровень?

https://github.com/moabit/student-list/blob/master/app/views/templates/studentlist.twig
> {% if students is not empty %}
> много строк
> {% else %}
> <h4 class="text-center m-4 text-muted">По вашему запросу ничего не найдено</h4>
> {% endif %}
Лучше может быть короткий блок ставить сверху. Для читабельности.

> >{{ pager.search|e }}
В твиге автоэкранирование.

> {% elseif pager.notify=='registered' %}
Это как-то неправильно, что pager используется для хранения нотификаций, согласись? Это не его задача.

> <a href="?{{ pager.getSortingLink('name') }}"
Лучше возвращать ссылку уже с вопросом, а не собирать ее так по кускам.

Для twig надо бы включать strict_variables. Иначе он не скажет об отсутствующей переменной.

Вообще, код выглядит очень неплохо. Ты ведь наверно не начинающий? Может тогда автоматические тесты сделаешь? Урок есть: https://gist.github.com/codedokode/a455bde7d0748c0a351a
Ответы: >>1122873 >>1131535
Аноним 2018/01/18 11:33:52  №1121611 288
>>1121302
>почему такие странные названия переменных?
Это лишь часть кода.

>зачем массив - str_replace же есть?
Нужно поменять местами.

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

>$userDate = array_key_exists($_GET['from']) ? strval($_GET['from']) : '';
Сорян, такой код для меня сложен. Можешь объяснить?

>>1121336
Т.е. это создаст переменную date из формата 'd/m/Y' и переменной strtotime($userDate) ?
Ответы: >>1121636 >>1121639
Аноним 2018/01/18 12:26:59  №1121636 289
>>1121611
UPD разобрался.

Премного благодарен, анон!
Аноним 2018/01/18 12:36:27  №1121639 290
>>1121611
>Сорян, такой код для меня сложен. Можешь объяснить?

мы не можем просто так взять из гета элемент массива, т.к. если этот параметр (from) не передадут, мы получим нотис от пхп undefined array index 'from'. чтобы этого не было, мы сначала должны убедиться, что элемент с таким ключом существует. мы это делаем внезапно функцией array_key_exists. strval нам приводит значение к типу "строка", как часть валидации опять же.

а тернарный оператор - это такой сахар для задания значения переменной в зависимости от условия. пример:
$foo = isset($bar) ? $bar : $somethingElse;
значит тоже самое, что
if ($isset($bar) {
$foo = $bar;
} else {
$foo = $somethingElse;
}

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

>Т.е. это создаст переменную date из формата 'd/m/Y' и переменной strtotime($userDate) ?
да
Ответы: >>1121644
Аноним 2018/01/18 12:40:08  №1121641 291
Ответы: >>1121645 >>1122021
Аноним 2018/01/18 12:45:59  №1121644 292
>>1121639
>мы не можем просто так взять из гета элемент массива
Погоди.. что? Я просто написал $datefrom = date('d/m/Y', strtotime($_GET[from])); и все сработало.

>т.к. если этот параметр (from) не передадут
Я просто указал value="2018-01-01" . Я так понял, это костыль был?

Черт! Я только сейчас понял. У меня там ещё одно значение из get бралось и пустое значение дальше передавалось для обработки.
Чтобы этого избежать я написал:

if (empty($country)){
} else{

ну и дальше весь оставшийся код.
Ответы: >>1121655
Аноним 2018/01/18 12:47:06  №1121645 293
>>1121641

Нет, мне интересен пример хорошо оформленного проекта на битбакете, а не на гитхабе. У них раньше была ссылочка /explore, но сейчас она убрана, подозреваю, из-за того, что на нем мало публичных известных проектов.
Аноним 2018/01/18 13:00:31  №1121655 294
>>1121644
ну я не знаю, какой у тебя код и поэтому говорю в общем случае.

если ты запросишь $_GET[blahblah], а его не передадут, то ты получишь php notice в процессе выполнения своего кода. поэтому данную ситуацию надо предусмотреть.

>if (empty($country)){
>} else{

тут два пути. если ты работаешь менеджером или в ТП, а тебя начальник загрузил какой-то временной задачей, то делай как работает и забей. а если ты планируешь дальше работать с пхп для себя или перекатиться, то имеет смысл изучить какой-то минимум основ. иначе будет постоянная боль и непонимание где сломалось, а каждая задача будет отнимать кучу времени.
Ответы: >>1121691 >>1121703
Аноним 2018/01/18 14:42:07  №1121691 295
>>1121655
>если ты запросишь $_GET[blahblah], а его не передадут, то ты получишь php notice в процессе выполнения своего кода. поэтому данную ситуацию надо предусмотреть.
Дай угадаю: если у меня там дальше SQL-запрос (сам скрипт для внутреннего пользования и можно не бояться инъекций), то у меня вылезет целая куча говна?

>если ты работаешь менеджером или в ТП,
Этот случай.
НО!

>а если ты планируешь дальше работать с пхп для себя или перекатиться
Посему, воспользуюсь тем, что написал ты.
Ответы: >>1121783
Аноним 2018/01/18 14:55:20  №1121703 296
>>1121655
По поводу это строчки:
$userDate = array_key_exists($_GET['from']) ? strval($_GET['from']) : '';

есть ощущение, что я что-то недопонимаю.

array_key_exists - это функция для проверки существует ли что-то в массиве.
1.Для переменных сгодится isset?
Вот так, например.
$userDate = isset($_GET['from']) ? strval($_GET['from']) : '';
2.А разве можно передать массив через форму?

strval - функция для превращения числа в строку. Как итог ты используешь логику "если есть что-то в массиве (у меня "в переменной"), то преврати полученное из гета в строку. в противном случае - пусть будет пустота.
Ответы: >>1121719 >>1121736
Аноним 2018/01/18 15:20:51  №1121719 297
Ответы: >>1121723
Аноним 2018/01/18 15:23:43  №1121723 298
>>1121719
А. Ну через JS. Через html, как я понимаю, нельзя или как-то совсем изъебисто?
Ответы: >>1121989
Аноним 2018/01/18 15:38:25  №1121736 299
>>1121703
>А разве можно передать массив через форму?
Форма это и есть массив. У элементов формы есть name и value. И если не ошибаюсь, multiple select может прислать однотипный массив из всех выбранных option value.

$_POST("select") / ["option 1","option 2", ...]

Еще (поправьте меня если нет) можно через URL передать массив:

my.dot.com/?somearray=[eat,my,shorts]&somethingelse=1488

>strval - функция для превращения числа в строку
Не только числа, а всех типов. Приведение к строке (если это возможно). Можно даже объекты в строку превращать и массивы.

>в противном случае - пусть будет пустота
Вернется пустая строка. Именно строка! (пустая, да)

До кучи про тернарный:
(условие) ? (инструкция если условие вернуло true) : (инструкция если условие вернуло false)
Ответы: >>1121747
Аноним 2018/01/18 15:51:34  №1121747 300
15162798948190.gif (2906, 480x327)
327x480
>>1121736
Стопэ, посан! Т.е. все это время, когда я брал данные из формы, я брал их из ассоциативного массива?!
Аноним 2018/01/18 16:20:56  №1121783 301
>>1121691
>вылезет целая куча говна?
она может не вылезти, если у тебя на продакшн-сервере не проставлено error_reporting E_ALL (а оно на проде не проставлено), но в любом случае надо это предусмотреть, т.к. на дев сервере обычно стоит максимально многословный вывод ошибок (если там не легаси) и намеренно генерировать нотисы - это говнокод.

>1.Для переменных сгодится isset?
для простых типов данных годится isset или !empty, в зависимости от того, что нужно (см таблицу сравнения типов в пхп https://secure.php.net/manual/en/types.comparisons.php)

для проверки наличия элемента массива принято использовать array_key_exists. в мануале написано почему https://secure.php.net/manual/ru/function.array-key-exists.php (смотри пример 2).

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

>2.А разве можно передать массив через форму?
можно <input name="arrayname[item1]">
Ответы: >>1121874
Аноним 2018/01/18 16:24:36  №1121787 302
блядь, в доктрине сделал var_dump($entity) и комп подвис на 15 минут, прежде чем я смог его перезагрузить. а у меня на нем крузис запускался лол

заменил его на https://symfony.com/doc/current/components/var_dumper.html
все ок заработало
Ответы: >>1122021
Аноним 2018/01/18 16:59:11  №1121818 303
Посоны поставил php сервер, но он жалуется на mb_ функции Uncaught Error: Call to undefined function mb_internal_encoding(), такой вопрос, а вообще на php7 multibyte string работает?
Ответы: >>1121848
Аноним 2018/01/18 17:15:11  №1121835 304
<?php
error_reporting (-1);
mb_internal_encoding('utf-8');
$a = "Добра тебе \n Выпей чаю";
$b = mb_strlen($a);
echo $b;
Вот код из задачи, при исполнении в браузере выдает следущее
Fatal error: Uncaught Error: Call to undefined function mb_internal_encoding()
Ответы: >>1121848 >>1121863
Аноним 2018/01/18 17:22:35  №1121844 305
15162853556680.jpg (8, 480x360)
360x480
Библиотека сама есть, кавычки в конфигурационном файле удалил, памагити111
Ответы: >>1121870
Аноним 2018/01/18 17:26:32  №1121848 306
Аноним 2018/01/18 17:37:22  №1121863 307
>>1121835
>вообще на php7 multibyte string работает
нет, блядь, решили удалить. она же нахуй никому не нужна.

какой смысл спрашивать то, что можно найти в гугле на первой строчке?
Аноним 2018/01/18 17:43:18  №1121870 308
>>1121844
а, сорян, не увидел. ну php --ini напиши для начала. посмотри, должно быть что-то типа
Configuration File (php.ini) Path: /etc/php/7.2/cli
Loaded Configuration File: /etc/php/7.2/cli/php.ini
Scan for additional .ini files in: /etc/php/7.2/cli/conf.d
Additional .ini files parsed: /etc/php/7.2/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.2/cli/conf.d/10-opcache.ini,
...
/etc/php/7.2/cli/conf.d/20-mbstring.ini,

если такой конфиг есть, посмотри php -m, выдаст установленные расширения

потом попробуй в cli запустить свой код (php -a) и если работает, скопируй конфиг в fpm или cgi, чем ты там пользуешься
Ответы: >>1121878
Аноним 2018/01/18 17:47:33  №1121874 309
>>1121783
Не, тут такая ситуация: у меня значение из гет передается в preg_split, чтобы разбить вводимую строку на значения.
Потом эти значения втупую скармливаются sql-запросу и далее, после переработки результата, запиливаются ссылки.
Ответы: >>1122003
Аноним 2018/01/18 17:49:45  №1121878 310
>>1121870

Configuration File (php.ini) Path: C:\WINDOWS
Loaded Configuration File: (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
Ответы: >>1121898 >>1121993
Аноним 2018/01/18 17:55:16  №1121880 311
Кароче, я понял, что проще апач накатить, чем с этой хуйней ебаться.
Аноним 2018/01/18 18:00:42  №1121887 312
помогите с PDO,нихуя не работает. и какой в xammpe пароль?
Аноним 2018/01/18 18:08:17  №1121898 313
>>1121878
>
>Configuration File (php.ini) Path: C:\WINDOWS
>Loaded Configuration File: (none)
>Scan for additional .ini files in: (no
хуита какая-то. на винде поставь опен сервер, там все из коробки работает
Аноним 2018/01/18 18:17:43  №1121908 314
15162886632910.png (1356, 1128x2908)
2908x1128
Не понятно что там с php на картинке, какие будут варианты?
Ответы: >>1121988
Аноним 2018/01/18 20:39:36  №1121988 315
>>1121908
Индеец стоит на бубнах над С, перепутав голову с задом
Ответы: >>1122276
Аноним 2018/01/18 20:41:47  №1121989 316
>>1121723
Нет. JS нахуй. Вот чистый HTML:

<form action="" method=GET>

<input name="yoba[1]" value="23">

<input name="yoba[2]" value="24">

</form>

В пхп скрипте будет доступно по
$_GET['yoba'][1]; // тут 23
$_GET['yoba'][2]; // тут 24

А на самом деле в форме индекс в скобочках можно не указывать. Тогда в скрипте будешь обходить массив
foreach ($_GET['yoba'] as $item) {
echo "$item \n";
}

Вывод:
22
23
Ответы: >>1122346 >>1122352
Аноним 2018/01/18 20:48:49  №1121993 317
>>1121878
Файл php.ini положи в одном месте - в директории с php.exe. В файле php.ini расскомменти строку, где подключается mbstring. Убедись, что эта библиотека присутствует у тебя на диске. В файле php.ini также должна быть правильно указана директория extensions. После всех изменений перезагрузи вебсервер.
Аноним 2018/01/18 21:11:24  №1122003 318
>>1121874
>эти значения втупую скармливаются sql-запросу
enjoy your SQL injection
Ответы: >>1122279
Аноним 2018/01/18 21:17:08  №1122007 319
Крч, есть сайт и надо, чтобы он выглядел как архив, кидаю файл через программу на C#, а она идёт туда и пишет дату, название и его можно открыть (тхт файлы)
Часть на шарпе я то напишу, но вот с пхп не знаю, что делать ;d

отправка ftp
Ответы: >>1122012
Аноним 2018/01/18 21:23:45  №1122012 320
>>1122007
Тебе нужен Apache а не php. Даже писать ничего не придется. Программа кидает, а он показывает сразу с датой закидки и его можно октрыть.
Аноним 2018/01/18 21:31:18  №1122021 321
>>1121787
Нужно документацию читать, а не туториалы от васянов. В первых страницах документации есть объяснение, почему вариант с var_dump работать не будет.

>>1121641
Читал обновления в уроке, мне кажется автор переборщил с выбором. Зачем новичку знать про Mercurial, когда от джуна почти 100% будут требовать Git? Зачем другие хостинги кода, если аккаунт на GitHub всё равно рано или поздно появится, ведь без него не создашь issue и не отправишь патч в популярную библиотеку. А тот же BitBucket лежит регулярно, у нас он на работе и я думаю склонять людей к GitLab после этого: https://www.theregister.co.uk/2018/01/10/bitbucket_outage/

Особенности работы с pg-функциями без PDO, ИМХО, стоит вынести в отдельный урок, уж слишком специфично, у новичка глаза разбегутся от обилия информации. Есть ещё такой анти-паттерн - soft coding, его можно применить не только к программированию: идея в том, что человек потерятеся, если дать ему слишком большой выбор. Хорошо, что выбор есть, но тут, как мне кажется, он только усложнит жизнь.

>>1121560
https://habrahabr.ru/post/279291/
Мне кажется, что по дефолту добавлять это в CRA это не стоило. Тут до сих пор обсуждают целесообразность этого решения: https://github.com/facebookincubator/create-react-app/issues/2554
Ответы: >>1122065 >>1122073
Аноним 2018/01/18 22:21:15  №1122056 322
Посоветуйте, как сделать drag and drop загрузку файлов. Может уже есть какие-то хорошие готовые решения или мне самому ее писать? Я в жс не очень, поэтому такой вопрос задаю.
Ответы: >>1122064 >>1135045
Аноним 2018/01/18 22:37:41  №1122064 323
>>1122056
название файлов в php будут в массиве $_FILES, оттуда их можно переместить в нужную директорию.
Аноним 2018/01/18 22:37:53  №1122065 324
>>1122021
>Нужно документацию читать, а не туториалы от васянов
о, профессионалы с ценными советами в треде
Аноним 2018/01/18 22:44:57  №1122073 325
>>1122021
>Мне кажется, что по дефолту добавлять это в CRA это не стоило. Тут до сих пор обсуждают целесообразность этого решения: https://github.com/facebookincubator/create-react-app/issues/2554

чем это от обычного листенера ноды отличается?
Ответы: >>1122199
Аноним 2018/01/19 01:52:42  №1122199 326
>>1122073
Тем что листенер деды использовали, а это модное нововведение которое решает множество проблем (тоесть ничем).
Ответы: >>1122227
Аноним 2018/01/19 03:09:49  №1122227 327
>>1122199
можешь пожалуйста объяснить как эта штука вообще работает?
до менять что-то совсем не доходит
Аноним 2018/01/19 03:15:48  №1122230 328
Аноны, лучей добра если кто-то укажет как улучшить решение задачки про зарплаты из раздела про основы ООП
https://repl.it/repls/NippyGraciousCrayfish
Ответы: >>1135045
Аноним 2018/01/19 09:27:06  №1122272 329
Аноны, помогите кто знает, как можно в php проиграть несколько wav файлов подряд, один за другим?
Ответы: >>1135045
Аноним 2018/01/19 09:35:44  №1122276 330
>>1121988
>Индеец стоит на бубнах
Апач стоит на базе данных

>над С
пропасть это С?

>перепутав голову с задом
очень сложно

Аноним 2018/01/19 09:45:08  №1122279 331
>>1122003
Погодь, но sql-инъекция - это только вид взлома БД. Какое это может иметь отношение к багам?
Аноним 2018/01/19 12:24:55  №1122346 332
>>1121989
Подожди, я не совсем понимаю твои действия.

То что ты описал - это же простое обращение к форме.

<input name="yoba[1]" value="23">
$_GET['yoba'][1]; // тут 23

<form action="" method="get">
<p><b>Введите название страны:</b><br>
<input type="text" name="country"></p>
$first= preg_split ($regexp, $_GET[country]);


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

Вопрос знатокам: а можно как-то в html-форме задать дате всегда актуальный день?

<p><b>Выберите дату:</b><br>
<input type="date" name="from" value="2018-01-01">

Пока что я вижу путь только через JS.
Аноним 2018/01/19 12:48:51  №1122352 333
>>1121989
UPD.
Я перечитал твой пост 20 раз, заглянул в предыдущие и все понял.
Проще говоря, ты задаешь поля, как индексы массива, а он уже "собирается" в php скрипте.

Да, из-за своей невнимательности я запутался.

Короч, через форму мне нужно передать только отдельные значения, а не элементы массива. Тот вопрос был больше теоретическим.
Аноним 2018/01/19 13:19:56  №1122366 334
Вопрос по SPA задаче. В подсказках написано что нужно сохранять состояние приложения если у клиента оборвалась связь. Окей, если он не закрыл вкладку. А как можно сделать, чтобы он мог в оффлайне открыть это приложение, или если он закрыл уже вкладку с нашим сайтом или вообще браузер/телефон/компьютер перезагрузил?

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

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

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

Этого я не понимат.
Ответы: >>1122375 >>1122455
Аноним 2018/01/19 13:47:43  №1122375 335
Ответы: >>1122460
Аноним 2018/01/19 15:00:13  №1122411 336
кто vps использует для хостинга сайтов клиентов? вопросики есть:

1. как вы расчитываете мощности? по наитию (тормозит - докупили) или какими-то инструментами/методиками?

2. насколько сильное значение для задержки имеет физическое расположение сервера? допустим, vps в амстердаме, а сайт русский. по идее задержка минимальная, но почему-то все используют русские vps для таких целей.
Ответы: >>1122457
Аноним 2018/01/19 15:02:57  №1122413 337
Подскажите, какая цель таких вот запросов?
SELECT CHAR(113)+CHAR(107)+CHAR(113)+CHAR(107)+CHAR(113)+(SELECT (CASE WHEN (4622=4622) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(107)+CHAR(107)+CHAR(106)+CHAR(113))
Да, это sql-инъекции, но какая их роль? В данном случае это просто текст 'qkqkq1qkkjq0', у меня залогированно несколько подобных запросов которые получают текст 'qkqkq1qkkjq0' разными запросами.
Ответы: >>1122446
Аноним 2018/01/19 16:04:20  №1122446 338
>>1122413
Посмотреть проходит ли инъекция и какая БД установлена. Скорее всего запросы спамит робот.
Ответы: >>1122472
Аноним 2018/01/19 16:18:34  №1122455 339
>>1122366

Там есть варианты (да, какие-то сервис-вокеры), но если ты почитаешь описание, то увидишь, что это самая кривая и неудачная архитектура из всех, что можно было придумать. Поэтому предлагаю не делать такой функционал. Если у клиента постоянно нет связи, для него лучше сделать оффлайн приложение.
Ответы: >>1122460
Аноним 2018/01/19 16:20:08  №1122457 340
>>1122411

Русские впс используют, потому что они дешевые (poiskvps). У хостеров часто можно попросить тестовый период и протестировать сайт под нагрузкой. Можно также предложить оплатить эти несколько дней. Также, можно читать отзывы.
Ответы: >>1122476
Аноним 2018/01/19 16:42:49  №1122460 341
>>1122375
>>1122455
Да уже почитал, выглядит как костыли, не удивительно, что я даже не слышал про такое.

Может быть есть еще варианты? Если сайт ну никак не доступен, взять хоть что-нибудь из кеша (например памятку или инструкцию) и показать?
Ответы: >>1135045
Аноним 2018/01/19 16:58:11  №1122462 342
Изучаю ООП, и параллельно курю MVC. Верно ли суждение, что при создании экземпляра класса, у которого отсутствует конструктор, будет вызываться конструктор родительского класса?
Ответы: >>1122473 >>1122476 >>1122477
Аноним 2018/01/19 17:24:06  №1122472 343
>>1122446
Да, робот спамил, так как там порядка 5-6 запросов в секунду приходило. Я тоже подумал, что скорее всего проверка чисто на получение ошибки БД. Нагуглить похожих запросов не вышло и само слово вроде как рандомное, но тогда не ясно, зачем именно это слово впихивалось разными способами в запросы
Аноним 2018/01/19 17:26:18  №1122473 344
>>1122462
Да но только в случае если у родительского класса конструктор не private метод, так как дочерний класс наследует все public/protected методы от своих родителей
Аноним 2018/01/19 17:29:51  №1122476 345
Аноним 2018/01/19 17:29:54  №1122477 346
>>1122462

Да. А если этот конструктор приватный/защищенный, то будет выдана ошибка. Такие конструкторы используют, чтобы запретить создание объекта через new снаружи класса.
Аноним 2018/01/19 18:23:29  №1122497 347
15163754097750.gif (981, 245x245)
245x245
котаны, где искать пхп макак? смотрю на апворке цены по 50 баксов в час, они там ебанулись вообще?
Ответы: >>1122500 >>1122586 >>1122833
Аноним 2018/01/19 18:29:49  №1122500 348
>>1122497

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


Ответы: >>1122586
Аноним 2018/01/19 21:54:05  №1122586 349
>>1122500
изящно, лол

>>1122497
так это ж ПРОГРАММИРОВАНИЕ. профессия будущего.

если хочешь дешевле, ищи школьников, правда возможно потом будешь с ошпаренной жопой искать кого-нибудь, кто выправит их говнокод, и тебе 50 баксов в час покажутся выгодной сделкой. но ты видать предприниматель, поди любишь риск, азарт, адреналин
Аноним 2018/01/19 22:13:11  №1122603 350
кто на vps ставил vestaCP или другие панели? ответьте на вопрос, зачем они нужны, если можно ручками в консоли все поставить самому? особенно учитывая, что они жрут ресурсы, которых на vps мало
Аноним 2018/01/20 11:31:21  №1122771 351
15164370811940.jpg (4668, 3035x2035)
2035x3035
Решил зайти поблагодарить ОПа за всю его работу, что он делает и отчитаться об успехах. Не уверен на 100%, что нынешний ОП - тот самый, но, надеюсь, что это так. В любом случае рапортую: в конце 2015 - в начале 2016 года каждый день сидел в этих тредах, изучая погромрование по сайту опа и слушая его советы. На прошлой неделе повысили до миддла бекендщика, компания одна из топовых в рашке. Стек - symfony3, doctrine, redis. Всё пока складывается охуeнно, то ли ещё будет.
Cпасибо, опушка, за всё.
Аноним 2018/01/20 12:30:00  №1122782 352
>>1116765

> Чтобы вывести ссылку, ты пишешь в шаблоне {{ path(...) }} . Вместо этого можно сделать класс UrlGenerator, в нем методы вроде getTestsByTagUrl(Tag $tag): string. И использовать их. Выгоды:

Я тебя правильно понял? https://github.com/TheSidSpears/test_hub/commit/48de6c290d05ca63a48a5aa7bf8fbf67fb67fb5f

>> По переменным окружения - не стоит ли добавить им уникальный префикс вроде TH_..., чтобы они были гарантированно уникальными?
> И тут тоже не понял, о каких переменных ты говоришь
Переменные окружения в env.dist - больше их вроде нигде нету.
В этом файле стандартные переменные APP_ENV и DATABASE_URL. Зачем их переименовывать и как их система прочтет? (в этом разобраться самому)


>У Симфони есть куцая статья https://symfony.com/doc/current/testing/database.html и первый вариант (mock entity manager) я не советую делать, это будут очень некачественные и хрупкие тесты

Нужно тестировать репозитории на копии основной БД? А как держать эту БД актуальной? Это ж нужно миграции и там и там проводить. Как-то не удобным это кажется

> Set number of failed attempts for instantly created item
> public function setFailedAttempts($failedAttempts)
Вот такого лучше избегать. Увеличивать число попыток в тесте лучше тем же способом, каким это будет делать приложение, а не делать костыли там, где без них легко обойтись.
> Более того, смотри, ты добавил метод setFailedAttempts для тестов, а затем еще и написал тест для него. Ты тесты ради тестов пишешь, получается? Так делать не надо, это просто трата времени. Тестировать надо тот код, который будет использовать приложение.

Нет, эти 2 ф-ии используются исключительно для заполнения Fixtures. Вот тут https://goo.gl/FB1ikp Собственно, я и тестирую, что они отрабатывают первый раз и больше не срабатывают

>> public function findByTag(Tag $tag){
> Вообще, Доктрина генерирует методы finxByXXX, findOneByXXX, они тут не подошли бы?
Я попытался разобраться https://drive.google.com/file/d/1Gvt38WwASpFcdFU3z9ZDuvrZ3pfaWbun/view?usp=sharing
Видимо, не подойдёт


> Я тут еще хотел посоветовать использовать faker в fixtures, но погуглил, и увидел, что он там уже используется (через alice), интересно. не знал про такую штуку. Ну прекрасно, если вдруг не знаком с ним, изучи faker, пригодится.

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


https://github.com/TheSidSpears/test_hub/blob/master/templates/base.html.twig#L22
>> {% if isMainRoute is defined and isMainRoute == true %}

> Вот это мне не нравится. У тебя переменная может быть передана, а может не быть. Как писать надежный код в такой ситуации?

А как быть то? Передавать isMainRoute во всех контроллерах избыточно, а как-то определять, что "вид вызван из MainController" надо

https://github.com/TheSidSpears/test_hub/blob/master/templates/tests/list.html.twig#L34
>Это костыли, нужна нормальная функция-хелпер для склонения чисел, а еще лучше сразу использовать синтаксис для переводимых (локализумых) строк, так как в разных языках правила выбора формы слов разные.

использовать синтаксис для переводимых строк? Это как?

>> public function tagList(Request $request, PaginatorInterface $paginator)
> Почему пагинатор передается в аргументы метода контроллера? Это такой DI?

Как я понял, нужно в конструкторе его определять?

> if ($form->isSubmitted() && $form->isValid()) {
> $searchString = $form->getData()['text'];
> } else {
> $searchString = $request->query->get('text');
> }

> А зачем else?
При переходе на следующую страницу, условие $form->isSubmitted() уже не выполняется, поэтому я беру $searchString из get-параметра

https://github.com/TheSidSpears/test_hub/blob/master/templates/tests/by_tag_list.html.twig
Проверь, соответствует ли имя шаблона гайдлайнам Симфони (я сам не помню).

>Я такого не нашел. Но вот в исходниках имена разделяются нижним подчеркиванием
Ответы: >>1135047
Аноним 2018/01/20 12:35:10  №1122787 353
>>1122771
Кстати, у меня тоже повышение. Спрыгнул с bitrix'а на symfony в другую компанию. Скоро выхожу, думаю, эти полгода-год будут насыщенными.

Спасибо ОПу!
Аноним 2018/01/20 12:59:47  №1122794 354
>>1122787
>Спрыгнул с bitrix'а на symfony
Поздравляю, братишка. Привыкай к ООП-парадигме, и никогда не возвращайся в битрикс, ни за какие деньги, иначе умрёшь в душе как специалист
Аноним 2018/01/20 13:09:08  №1122799 355
>>1122787
не представляю, как у тебя хватило сил работать с битриксом.
Аноним 2018/01/20 14:15:12  №1122830 356
>>1122787
тот же стул но без пик
Аноним 2018/01/20 14:22:18  №1122831 357
15164473388700.png (388, 307x848)
848x307
Программач, ищу подработку от 10-20к в неделю, т.к зп на ништяки не хватает. PHP, неплохо знаю Yii2 и хотелось именно на ней работать, js/jquery разумеется. Ещё могу парсеры писать на selenium+python, покрайней мере один для себя написал. Телеграм @hysdop.
Ответы: >>1122833
Аноним 2018/01/20 14:25:45  №1122833 358
Ответы: >>1122835
Аноним 2018/01/20 14:27:44  №1122835 359
>>1122833
>пхп макак
Обидно, но правда
github Аноним 2018/01/20 15:31:41  №1122855 360
15164515019110.png (10, 400x256)
256x400
сосоны, на гитхабе можно как-то отсортировать свои репы по категориям? Типа: Мусор, Работа, Хуёта и т.д.?
Ответы: >>1122901
Аноним 2018/01/20 16:22:10  №1122869 361
15164545308190.jpg (29, 340x176)
176x340
В новых проектах постоянно предлагает добавить под гит кэш и вендор. Раньше такой фигни не было. Они автоматом былы подсвечены серым и содержимое игнорилось. В .gitignre строки нужные есть
/var/
/vendor/

Кто-нибудь в курсе, как фиксить?
Аноним 2018/01/20 16:27:59  №1122873 362
>>1121562
ОП, добра тебе, что посмотрел!
>вот тут есть тонкий момент. Что, если мы сгенерируем токен, поставим куку, а потом скрипт упадет, не записав данные в БД. Пользователь останется с кривым токеном. Это не проблема? Хотя, если сделать наоборот, может получиться, что мы создадим пользователя в БД, а куку не выдадим - будет еще хуже.
Я подумал, может лучше через транзакцию в бд добавление/редактирование студента сделать? Или после редиректа проверять куку, и если она кривая, то ее удалять?
>Faker не умеет в женские фамилии?
Фейкер умеет только в женское имя и ФИО. Метод lastName не примает параметр $gender как, например, метод для генерации ФИО. Можно было бы генерировать женское ФИО, и затем выдерать из строки имя и фамилию, но я подумал, что проще просто сделать фамилию и добавить 'а'.
Ответы: >>1123868
Аноним 2018/01/20 17:19:52  №1122901 363
>>1122855

Там есть теги, не подойдут?
Ответы: >>1122906
Аноним 2018/01/20 17:21:25  №1122903 364
>>1122869

Если в консоли сделать git status, он эти папки показывает? Если да, то гитигнор настроен неправильно, если нет, то проблема в phpstorm и стоит начать с гугления по словам phpstorm gitignore not working.
Ответы: >>1122967
Аноним 2018/01/20 17:36:46  №1122906 365
>>1122901
Что-то более классическое бы. Нет такого?
Аноним 2018/01/20 17:40:49  №1122910 366
какой фреймворк самый простой для изучения?
Ответы: >>1122912 >>1122959 >>1122967
Аноним 2018/01/20 17:41:03  №1122911 367
>>1122869
скриншот .gitignore лучше бы сделал
Ответы: >>1122967
Аноним 2018/01/20 17:42:08  №1122912 368
>>1122910
я симфони4 учу, мне кажется достаточно легко все.
Ответы: >>1122967
Аноним 2018/01/20 18:28:58  №1122953 369
Ответы: >>1122955
Аноним 2018/01/20 18:29:50  №1122955 370
Аноним 2018/01/20 18:35:17  №1122959 371
Ответы: >>1122963
Аноним 2018/01/20 18:38:22  №1122962 372
Пилю файлообменник на Слиме и вот возник вопрос.

Во всяких гайдах добавление модели в базу выглядит вот так.

File::create(['name' => $filename,
'size' => $size,
'created_at' => $created_at,
'comment' => $comment]);
Класс файл наследует Illuminate\Database\Eloquent\Model

И вот я решил посмотреть что за метод такой create. В моделе Eloquent'a такого метода нет. Но есть функция
public static function __callStatic($method, $parameters)
{
return (new static)->$method(...$parameters);
}
Я так понимаю что функция создает инстанс модели и запускает статический метод, как обычный. Но метода create нет в модели и нет в интерфейсах которые она реализует и нет в трейтах которые она наследует. Ну собственно вопрос что за метод такой и откуда он берется.
Ответы: >>1122978 >>1123867
Аноним 2018/01/20 18:38:54  №1122963 373
>>1122959
Но изучать все же симфони, уй, ларавел. Вкатывальшик => конкуренция => работа
Аноним 2018/01/20 18:46:06  №1122967 374
15164631666150.png (35, 371x561)
561x371
>>1122903
>>1122911
git status эти папки не показывает. Ща буду гуглить

>>1122910
А зачем тебе самый простой? самый простой - это какой-нибудь недофреймворк 10-летней давности Учи самый полезный, например >>1122912


ОП, ты советовал использовать роутинг в yaml файлах вместо аннотаций. Но я тут столкнулся с проблемой и покопался в доках. Есть такая магическая вещь, как @ParamConverter (https://symfony.com/doc/master/bundles/SensioFrameworkExtraBundle/annotations/converters.html)

Она определяет что в
/
@Route('/tests/tag/{name}')
/
public function testsByTag(Tag $tag){
...
}

{name} это $tag->getName()
И как я понял, это фишка аннотаций.

Получается при использовании yaml-роутинга нужно будет писать типа
public function testsByTag(string $name){
$tag = $tagRepository()->findByName($name);
...
}


По-моему, это только усложнения. Или есть еще варианты?
Ответы: >>1122987 >>1123867
Аноним 2018/01/20 19:10:36  №1122978 375
>>1122962
> Я так понимаю что функция создает инстанс модели и запускает статический метод, как обычный.
__callStatic создаёт инстанс модели и обращается к нестатическому методу create. Этого метода в сущности нет, поэтому срабатывает __call: https://github.com/laravel/framework/blob/5.5/src/Illuminate/Database/Eloquent/Model.php#L1470
Там видно, что создаётся Builder (построитель запросов, метод newQuery) и уже у этого билдера вызывается метод create, который находится тут: https://github.com/laravel/framework/blob/5.5/src/Illuminate/Database/Eloquent/Builder.php#L750

Это очень специфичная для Laravel магия, не уверен, что тебе нужны эти кишки. И не знаю, что там у тебя за васян-гайд, но created_at самому ставить не нужно, он и так сгенерируется благодаря трейту HasTimestamps. Лучше почитай: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
Ответы: >>1122993 >>1123113
Аноним 2018/01/20 19:30:26  №1122987 376
>>1122967
зато точно можно сказать, что не в .gitignore проблема лол
Аноним 2018/01/20 19:41:53  №1122993 377
>>1122978
Спасибо большое!
Опа мануалы прочитал уже все.
Просто хотелось использовать именно готовое решение. Изначально делал свой класс работы с бд.
Ответы: >>1123867
Аноним 2018/01/20 22:31:40  №1123094 378
Как можно phpstorm ускорить? Пека старый, долго загружается, иногда зависает.
Ответы: >>1123110 >>1123228 >>1123867
Аноним 2018/01/20 23:30:13  №1123110 379
>>1123094
там power saving mode есть, можешь попробовать. но вообще, если он тормозит даже когда все проиндексировал, это повод проапгрейдиться.
Аноним 2018/01/20 23:33:49  №1123113 380
>>1122978
если ты тот анон, про которого я думаю, то у тебя паранойя: тебе мерещится, что все кругом читают "васян-туториалы", а один ты в мире знаешь о существовании мануала
Аноним 2018/01/21 02:40:26  №1123152 381
>>1122787
>>1122771
У меня пока рост с "саппорт по коду, умеющий только читать иногда правильно мычать", к "недо-джуниор, который боится JS как тней и делает весь код процедурами", но тоже благодарен этому треду за существование!
Аноним 2018/01/21 13:07:35  №1123228 382
>>1123094
>Как можно phpstorm ускорить?
Подсказки отключи.
Аноним 2018/01/21 14:14:07  №1123251 383
Возможно ли применение TDD в верстке под вордпресс или нет?
Ответы: >>1123864
Аноним 2018/01/21 15:03:14  №1123273 384
>>1118555 (OP)
Посоны, допустим на сайте вам нужно выбирать данные из базы для формирования странички. Допустим же, что для этого нужно больше, чем один или даже два запроса к базе. Вы что их последовательно делаете что ли? Или, всё-таки, параллельно? Если параллельно, то кто как это делает? Я пришёл к вам из питона и немного охуел что нет одного хорошего простого решения, которым бы все пользовались. Помогите понять и определиться.
Аноним 2018/01/21 15:07:33  №1123276 385
>>1123273
Запросы делаются последовательно. Про параллельные запросы на пхп впервые слышу, хотя, наверное можно форкнуться в пхп и сделать их. Нормальная практика делать по 50-100 запросов на страничку. Кто крут в SQL может все данные достать за один запрос с подзапросами и хранимыми функциями.
Ответы: >>1123281
Аноним 2018/01/21 15:13:46  №1123281 386
>>1123276
>Нормальная практика делать по 50-100 запросов на страничку
shiiiiiii~
>Кто крут в SQL может все данные достать за один запрос с подзапросами и хранимыми функциями.
Это-то как раз несложно. Вот только потом обрабатывать это в контроллере ебанёшься.

Мда, видимо в пхп-мирке свои понятия нормальности. Придётся приспосабливаться. Хотя вот я нагуглил php-icicle и там есть вот такое
https://github.com/amphp/mysql
Ответы: >>1123296
Аноним 2018/01/21 15:21:04  №1123290 387
Анон, я делал простенький код для генерации ссылок с использованием БД, но вот мое задание изменили и мне теперь нужно вместо обращений к БД использовать обращение к массивам.

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

Как это можно сделать?
Ответы: >>1123540
Аноним 2018/01/21 15:26:18  №1123296 388
>>1123281
есть разные варианты, погугли по теме "асинхронный php" или "php pthreads". разные запросы К СКРИПТУ выполняются параллельно и так. если тебе требуется ускорять обращения к бд в рамках одного запроса к скрипту, то это наверное надо делать не распараллеливанием, а оптимизацией запроса.

другое дело, если у тебя один запрос выполняется 10 секунд, второй 10, они никак не зависят друг от друга и оба нужны для вывода данных, то можно заморочиться с асинхронностью или multithreading. но это история для каких-то внутрисерверных cli-ситуаций, а не для формирования страничек пользователям.
Аноним 2018/01/21 15:41:14  №1123311 389
>>1122771
> одна из самых
> год от макаки до мидла
кому ты пытаешься пиздеть
Ответы: >>1123316 >>1123317
Аноним 2018/01/21 15:43:31  №1123316 390
>>1123311
тонко.

но если пришел уже мидлоджуном с опытом, то почему нет.
Ответы: >>1123321
Аноним 2018/01/21 15:44:11  №1123317 391
>>1123311
хорошо работая в одной и той же компании макакой ровно год и не получить повышения - надо быть дебичем
Аноним 2018/01/21 15:45:08  №1123321 392
>>1123316
Этот прав, пришёл в компанию джуном-обосрышем с полугодичным опытом макакинга
Аноним 2018/01/21 15:51:02  №1123325 393
Тоже хочу поблагодарить ОПа из этого треда и ОПа из версткотреда. Работаю щас фуллстаком под вордпресс.
Изучал где-то с 2012 по 2016. В 2017 переехал в дс и нашел работу. Всем спасибо. До миддла пока не повысили, но получаю довольно таки миддловскую зарплату судя по рынку
Аноним 2018/01/21 16:15:48  №1123352 394
>>1123325
>довольно таки миддловскую зарплату
сколько?
Ответы: >>1123399 >>1123400 >>1123404
Аноним 2018/01/21 16:57:20  №1123399 395
Аноним 2018/01/21 16:57:44  №1123400 396
Аноним 2018/01/21 16:59:02  №1123404 397
Ответы: >>1123407 >>1123438
Аноним 2018/01/21 17:00:54  №1123407 398
>>1123404
Сейчас набегут дебилы которые "Да я как только Hello World" написал сразу за 100к работу нашол. А потом получил опыт 7 дней и сразу синьюр помидор 300к релокейт релокейт в гугол. Я вот даже не знаю откуда столько желчи в людях.
Аноним 2018/01/21 17:17:52  №1123438 399
>>1123404
Так понимаю, что это настоящий ответ автора поста >>1123325, что ж, неплохо. Через год уже на 100+ выйдешь. Посоветовал бы только уходить от вордпресса.
Ответы: >>1123445
Аноним 2018/01/21 17:22:15  №1123445 400
>>1123438
>>1123325
Пару лет как обучился у опа, нахватался всяких гайдов с интернета, даже 2 месячный курс купил по PHP. Но дальше фриланса так и не вкатился, причём получаю с него тыщ 15 в месяц(имею основную работу). Не ххватает уверенности в силах хоть убей. всё кажется что возьмусь сейчас за работу, а там 9000 подводных камней, подведу работодателя. Больше всего мешает то, что не знаю досконально Wordpress, laravell, а от симфони я вообще в обморок падаю. Столько то там наворотов.
Я наверное один такой неудачник.
Ответы: >>1123502 >>1123861
Аноним 2018/01/21 17:34:11  №1123468 401
Аноны, у меня базовый вопрос.

Как правильно вызывать php-скрипты из html?

Вот есть у меня html страница и php скрипт, где я там должен прописать что-то типа execute main.php?
Или это как-то по другому работает?

Пол дня гуглил, но не могу понять такую базовую вещь.
Аноним 2018/01/21 17:39:48  №1123474 402
Аноним 2018/01/21 17:42:28  №1123480 403
>>1123468
Ты что-то делаешь не так. PHP создан для того чтобы из него создавать HTML, а не наоборот.
Ответы: >>1123674
Аноним 2018/01/21 17:58:28  №1123501 404
>>1123468
В любом отображаемом месте хтмл страницы нужно прописать специальный тег
<?php echo "пхп рабоатет"; ?>
Ответы: >>1123553 >>1123674
Аноним 2018/01/21 17:58:38  №1123502 405
>>1123445
Не расстраивайся. Сидя в своей Мухосрани я даже фриланс за 15к не смог найти, поэтому пришлось рвануть в дс.
Тоже был дикий страх подвести, моментами в начале работы хотелось просто послать все, менеджеров, тестеров, всех.
И было такое, что поначалу сильно говнокодил.
В одной конторе даже сайт положил без восстановления XD. Но они и сами виноваты, там не было ни гита, ни других кодеров.
Свалил оттуда на следующий день, оформление не по ТК было.
Но ничего, вытянул, с вордпрессом немного помог удаленный кодер, который давно на нем сидит. Постепенно дали нормального лида, который ведет все переговоры по срокам и ТЗ и вообще сильно помогает. Помогает то, что многие чуваки в айти натурально сидят на бордах, т.е. с ними проще на одной волне быть.
Ответы: >>1123529
Аноним 2018/01/21 18:13:29  №1123529 406
>>1123502
Спасибо за стори анон, прямо мёд для моего сердца (или как-то так). Буду пытаться вкатываться. Всю жизнь мечтал быть программистом, да только в моём мухосранске платят больше не программистам. Буду дальше искать работу мечты.
Ответы: >>1123554
Аноним 2018/01/21 18:14:06  №1123531 407
>>1123273
>Я пришёл к вам из питона
Где вместо FastCGI используется WSGI, такой же синхронный интерфейс вебсервера.
Ответы: >>1123605
Аноним 2018/01/21 18:16:27  №1123540 408
>>1123290
В reference manual почитай array functions. Их много и под все нужды. Советую ограничиться двумерными массивами. Пхп очень много памяти на многомерные тратит, ему может не хватить, упрется в ограничение в настроке.
Аноним 2018/01/21 18:16:57  №1123541 409
>>1123273
Мне вот просто интересно а параллельное выполнение вопроса, какую задачу решает? Ну так, просто чтобы в курсе быть.
Ответы: >>1123605
Аноним 2018/01/21 18:23:40  №1123553 410
>>1123501
вообще-то fwrite(STDOUT, "hello");
Ответы: >>1123556
Аноним 2018/01/21 18:24:26  №1123554 411
Ответы: >>1123559
Аноним 2018/01/21 18:25:42  №1123556 412
>>1123553
Ты тред с питоном не перепутал?
Ответы: >>1123586
Аноним 2018/01/21 18:26:13  №1123559 413
Аноним 2018/01/21 18:34:04  №1123576 414
15165488449310.jpg (70, 400x472)
472x400
Как настроить PHP, так, чтобы через функции, которые лезут в сеть, можно было достучаться только до одного доменного имени, либо до нескольких из белого списка?
На всякий случай. А то нашел небольшой баг у себя, при некорректном ответе внешнего API можно исказить URL для следующего запроса.
Ответы: >>1123856
Аноним 2018/01/21 18:39:07  №1123581 415
Ответы: >>1123619 >>1123856
Аноним 2018/01/21 18:41:02  №1123584 416
Нужен ли pixel perfect, или достаточно примерного (ну, скажем, расхождения есть, но на глаз не отличить) соответствия дизайну? Что большее зло: расхождение с pp, или всякие магические margin-top: 3px, потому что расходится с дизайном?
Ответы: >>1123856
Аноним 2018/01/21 18:42:02  №1123585 417
А если мне сейчас 26 лет, учу несколько месяцев язык, до этого пробовал си шарп немного, есть ли смысл в таком возрасте вообще учить кодинг, или на работу все равно потом хуй устроишься?
Ответы: >>1123587 >>1123880
Аноним 2018/01/21 18:42:12  №1123586 418
>>1123556
>питоном
Тогда уж с С. Но на самом деле в php это тоже рабочий код.
fwrite - функция вывода в resource-первый-аргумент строки второго-аргемента
первый аргумент - константа стандартного потока-вывода STDOUT, второй - строка.

По сути так и работает под капотом echo или print. Я, например, люблю все эти fwrite, fputs, fgets и тп
Аноним 2018/01/21 18:42:55  №1123587 419
>>1123585
>сейчас 26 лет,
имеет, устроишься.

мимо-вылезатор в 30
Ответы: >>1123591
Аноним 2018/01/21 18:46:22  №1123591 420
>>1123587
Спасибо, успокоил, а вообще пойдет ли в плюс при трудоустройстве, что я в сфере ИТ работаю и образование инженера?
Ответы: >>1123613
Аноним 2018/01/21 19:01:43  №1123605 421
>>1123541
Ээ... ну как бы сокращение общего времени запросов к базе. Что быстрее:
- 10 последовательных запросов к базе
- 10 параллельных запросов к базе

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


>>1123531
Я про запросы к базе из скрипта. Допустим, у тебя есть контроллер, где ты вызываешь несколько методов, которые возвращают тебе из базы результат.
Ответы: >>1123853 >>1124040
Аноним 2018/01/21 19:13:56  №1123613 422
>>1123591
Будут на собесы приглашать чаще, чем вкатывальщика из другой области.
А на практике не поможет, будет столько же страгглинга на первых порах, как и у всех. Разве только если ты не пм какой, тогда тех процессы тебе понятней будут, но они и так не сложные.
Аноним 2018/01/21 19:25:00  №1123617 423
15165519005850.png (15, 578x184)
184x578
15165519005851.png (19, 653x368)
368x653
А можно как-то указать, что мне нужно именно 10 цифр, а не 10 символов?
Ответы: >>1123624 >>1123633 >>1123692
Аноним 2018/01/21 19:28:37  №1123619 424
Ответы: >>1123621
Аноним 2018/01/21 19:29:52  №1123621 425
Аноним 2018/01/21 19:33:01  №1123624 426
>>1123617
Через if else и так десять раз.
Ответы: >>1123627
Аноним 2018/01/21 19:40:21  №1123627 427
>>1123624
> десять раз.
Но ведь количество символов между цифрами может быть любым.
Аноним 2018/01/21 19:51:50  №1123633 428
Аноним 2018/01/21 20:47:59  №1123674 429
>>1123480
>>1123501
А можно пример как это должно работать?
Ответы: >>1123771
Аноним 2018/01/21 21:13:33  №1123692 430
15165584140960.png (20, 650x329)
329x650
>>1123617
Я разобрался, надо было сделать вот так.
Аноним 2018/01/21 22:29:41  №1123771 431
Аноним 2018/01/21 22:52:20  №1123809 432
>>1123468
>Вот есть у меня html страница и php скрипт, где я там должен прописать
Переименуй файл с html страницей в .php и напиши в началит файла <?php include "script.php"; ?> имя и путь к скрипту свои.
Ответы: >>1123840
Аноним 2018/01/21 23:19:25  №1123840 433
15165659655280.png (19, 940x608)
608x940
Ответы: >>1123899
Аноним 2018/01/21 23:23:28  №1123853 434
>>1123468

На твой вопрос так просто не ответить. Это ведь зависит от конфигурации сервера. Обычно сервер настраивают так:

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

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

> где я там должен прописать что-то типа execute main.php?
Надо настроить сервер, чтобы он файлы html выполнял бы как PHP код. Как именно, зависит от используемого веб-сервера. Но я не очень понимаю, зачем и что тебе мешает назвать файл .php или использовать ЧПУ.

>>1123605
>>1123273

Ты в своем расчете кое-что не учел:

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

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

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

Ну и я плохо представляю, как можно распараллелить ORM, с наличием там "ленивых" запросов. Это все функции в сущностях надо переделывать на асинхроонную модель.

Так что сомневаюсь, что это так просто и всегда оправданно.

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

Ну и ты еще исходишь из предположения, что запросы к БД это самая долгая часть выполнения скрипта. Я смотрел трейсы в PHP-приложениях, и могу сказать, что это далеко не всегда так. Оптимизированный запрос с индексами на хорошем сервере может выполняться меньше 1 мс. Нужно ли его распараллеливать?

На Питоне все SQL запросы выполняют параллельно? Теперь уже я удивлен, первый раз про такое слышу. Покажи-ка ссылочку.

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

Аноним 2018/01/21 23:23:51  №1123856 435
>>1123584

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

А что мешает делать, как на макете?

>>1123581

> $text = str_ireplace(" ", null, $text);
Заменять на null нелогично, так как в строку можно вставить только другую строку (например, пустую). Также, ireplace тут использовать нелогично, так как тут не нужна проверка регистра символов. Ну, и наконец, хочу сообщить, что эта функция в принципе нерабочая (в том, что касается регистра символов): https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

> $perebor1
можно было назвать char1

> };
Точка с запятой после такой скобки не нужна

А так, сделано верно.

>>1123576

В PHP был так называемый safe mode, где ставились разные ограничения, но это все работало плохо и всегда находились какие-то обходные пути. Глупо пытаться ограничивать программу, работая на том же уровне привилегии, то есть имея равные с ней возможности. Для твоей задачи больше подойдет такой подход:

- сделать в linux отдельного пользователя
- запускать приложения из-под него
- с помощью iptables настроить список IP, с которыми он может соединяться. Чтобы он не сливал данные через DNS, вместо доступа к настоящему DNS даем ему доступ только к своему DNS-серверу, который резолвит только жестко прописанные в конфиге имена доменов (это умеет делать dnsmasq, я такое делал для того, чтобы телефон не мог сливать данные через DNS запросы).
- как альтернатива, можно вообще не давать прямого доступа в сеть, а перенаправлять трафик на squid (как прозрачный прокси, прозрачный тут значит, что клиент о нем не подозревает), в котором настроить правила фильтрации

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

Я так фильтровал трафик с андроид-телефона: все DNS-запросы шли на dnsmasq, все HTTP-соединения перехватывались и отправлялись в squid, все остально резалось. Возни, конечно, много, пока во всем этом разберешься и отладишь, сразу скажу, что чтением документации вряд ли обойдешься. Мне пришлось даже немного пропатчить сквид ради такого перехвата HTTPS, который мне был нужен, с подменой сертификатов.

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

Ответы: >>1125356
Аноним 2018/01/21 23:24:25  №1123861 436
>>1123445

Ну вот, жаль, что так получается, что человек, который в нашем треде учился - и не может найти нормальную работу. Если у тебя есть возможность, я советую попробовать все же изучать технологии более глубоко - в ОП посте, например, есть задача на TestHub, которую можно делать на Симфони, ну и конечно, подучить то, что плохо знаешь - ООП там, HTTP, linux, тестирование. Может, изучить современные сложные JS фреймворки. Развиваться, расширять кругозор. А то иначе, если изучить только основы, то ты будешь конкурировать с тысячами таких же начинающих.

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

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

Но конечно, в некоторых задачах требуется знать гораздо больше. Вот например, тебе скажут "сайт тормозит" - и тут надо будет смотреть его разными инструментами (htop, strace), профайлить, может, оптимизировать SQL запросы, настраивать кеширование - то есть тут уже нужен другой уровень, нужно знание линукса, индексов в SQL итд. Обычный "разработчик ВП" не справится (я с такой ситуацией сталкивался).

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

>>1123325

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

>>1122771

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

Не надо конкурировать с настройщиками вордпресса, вы по цене их не перебьете.

Аноним 2018/01/21 23:24:49  №1123864 437
>>1123251

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

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

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

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

----

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

- "заголовок должен быть черного цвета, крупнее основного текста и прижат влево"?
- "картинка должна быть отцентрирована в блоке вертикально"?
- "карточка отеля не должна разваливаться, даже если у отеля очень длинное название"? (это, кстати, мне уже нравится)
- "карточка отеля должна отображаться корректно, на какую бы страницу мы ее не вставили"?
- "карточка отеля на мобильной версии с узким экраном не должна вылезать за его пределы"?
- "карточка отеля должна выглядеть в ИЕ9 аналогично виду в Хроме"?

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

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

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

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

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

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

Могу дать еще ссылки про тестирование верстки:

- https://habrahabr.ru/company/yandex/blog/200968/
- https://habrahabr.ru/company/2gis/blog/277457/ (тут вроде ручные тесты)
- https://habrahabr.ru/post/114256/ (ручные)
- https://events.yandex.ru/lib/talks/?audience=testirovschiki
- https://readymag.com/tehnovedro/488569/5/
- https://habrahabr.ru/post/271379/
- https://toster.ru/q/373556

Если у тебя есть каике-то интересные идеи, и тем более, ты готов их испробовать, мне было бы очент интересно почитать, и я может быть могу где-то помочь советом. Мне это интересно, так как у нас есть задачи на CSS и мне было бы пригодилась возможность автоматически проверять их решения.
Аноним 2018/01/21 23:25:19  №1123867 438
>>1123094

Памяти достаточно? В своп не выпадает? Смотри диспетчером задач хотя бы.

>>1122962

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

Также, узнать, какие функции вызываются в ходе работы программы, можно, освоив xdebug и сделав трейс, и да!!!, я все еще интересуюсь, не хочет ли кто сделать визуализатор логов трассировки? Ссылка: https://xdebug.org/docs/execution_trace

>>1122993

Конечно, стоит изучить готовые решения.

>>1122967

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

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

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

Но это мое субъективное мнение.

Что касается @ParamConverter, это же часть контроллера, его можно наверно оставить в аннотации. Нельзя? Предложи исправить это.
Ответы: >>1124850
Аноним 2018/01/21 23:25:41  №1123868 439
>>1122869

Смотри настройки гит-плагина, а также погугли, не баг ли это.

>>1122873

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

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

> Фейкер умеет только в женское имя и ФИО.
Не хочешь допилить и поделиться решением со всеми? Придется расковырять фейкер, понять, как он рабоатет, и может обсудить это с его разработчиками.
Ответы: >>1125254
Аноним 2018/01/21 23:30:46  №1123880 440
>>1123585
как вы заебали, реально. вот тебе на дваче скажут "нет смысла, иди таксистом рабоать" и что дальше? пойдешь?

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

короче иди учи
Аноним 2018/01/21 23:39:43  №1123899 441
>>1123840
сделай что говорит
Аноним 2018/01/21 23:47:14  №1123914 442
кто занимается версткой на линуксе или маке, вы как тестируете сайты в IE? стоит ли доверять таким сервисам? https://www.browserling.com/internet-explorer-testing

сам бэкендом занимаюсь, верстку умею на уровне потыкать бутстрап, поэтому нихуя не шарю в тонкостях
Ответы: >>1123920 >>1135048
Аноним 2018/01/21 23:52:30  №1123920 443
>>1123914
Виртуальные машины.
Ответы: >>1123928
Аноним 2018/01/21 23:55:00  №1123925 444
15165681009400.png (11, 595x136)
136x595
15165681009411.png (27, 774x523)
523x774
Решил эту задачу вот так, но ведь это очевидно не самый оптимальный вариант. Как можно поменять части элементов массива без перевода массива в строку? Нашел только array_replace, но это вроде не то. Либо я не разобрался.
Ответы: >>1135048
Аноним 2018/01/21 23:57:52  №1123928 445
>>1123920
эх.
ну так-то вайн есть, но заебно.

перекатывался на линукс, чтобы запускать там ИЕ лол
Ответы: >>1123930 >>1123932 >>1123935
Аноним 2018/01/21 23:59:58  №1123930 446
>>1123928
Кроме IE есть еще Edge и Safari
Аноним 2018/01/22 00:00:24  №1123932 447
>>1123928
И у самого IE несколько версий
Аноним 2018/01/22 00:01:16  №1123935 448
>>1123928
А вообще зуй щнает, я не могу заниматься версткой без фотошопа. Мне все макеты так или иначе приходят в psd
Ответы: >>1124213
Аноним 2018/01/22 00:54:14  №1123984 449
Я не люблю всякие гайды и туториалы, так как они часто ничего толком не объясняют и заключаются в просто выкладывании готовых кусков кода с краткими объяснениями. Вот пример правильного туториала, который мне нравится: https://vulkan-tutorial.com/
Аноним 2018/01/22 02:10:52  №1124033 450
>>1118555 (OP)
Впервые тут у вас. Заглянул в первый гайд для новичков в шапке и охуел.
Кто и зачем так постарася?
Гайд правда толковый или только выглядит так?
Ответы: >>1124035 >>1124077
Аноним 2018/01/22 02:16:16  №1124035 451
>>1124033
>Гайд правда толковый или только выглядит так?
Это лучший гайд, на мой взгляд. Книжек нормальных по пхп нет, только мануал очень хороший.
Аноним 2018/01/22 03:14:18  №1124040 452
>>1123605
Я вот просто на физическом уровне пытаюсь представить распаралеленный запрос к бд и что-то не могу. Просто потому-что знаю как устроены запросы внутри большинства бд. Ну тоесть допустим у тебя есть "Select from users" и "Select from questions" (это гипотетические запросы выдуманные для примера, не надо до синтаксиса докапываться).
И обычная скажем MSSQL смотрит когда был подан запрос и тупо выполняет сначала тот который был раньше, а потом тот который был позже.
А тут как ты себе представляешь это? Сначала БД выбирает первую запись первого запроса, потом первую запись второго, и так пока до конца не дойдёт? Что-то тут не так мне кажется.
Ответы: >>1124078 >>1124458
Аноним 2018/01/22 05:12:32  №1124077 453
Аноним 2018/01/22 05:13:48  №1124078 454
>>1124040

С микросервисами так можно, если у тебя данные для разных частей страницы формируют разные микросервисы, работающие на разных серверах, то можно параллельно им запросы отправить.
Аноним 2018/01/22 12:50:36  №1124213 455
>>1123935
ну там не то чтобы прямо верстка по макету, просто у друга условный автосервис, он заказал сайт "шоб читалось легко". и главное не объебаться с тем, что везде все нормально, а в
ИЕ все пополам складывается.
Ответы: >>1135048
Аноним 2018/01/22 13:05:27  №1124222 456
посоны, у кого свой ВПС или кто работает близко к эксплуатации, вы что думаете про это http://www.phpinternalsbook.com/php7/build_system/building_php.html#why-not-use-packages ?

я для себя выделил такие аргументы против использования готовых пакетов:
1. сложно дебажить
2. нет предупреждений об утечках памяти
3. нельзя использовать thread safety
4. возможная несовместимость патчей внутри одного пакета

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

кто-то реально заморачивается с самостоятельной пересборкой? допустим, есть некий хостинг, они когда обновляют версию, они сами ее компилируют из исходников?
Ответы: >>1124457 >>1124458
Аноним 2018/01/22 15:23:20  №1124343 457
Вопрос по проектированию базы данных. Задача файлообменник. У меня получается три базы данных:
1. files (
id
name
size
linkaname
created_at
updated_at
lifetime
user_id
public
comment
status)
2.comments (
id
user_id
parent_id
child_id
comment)
//Вообще для комментариев будет две базы данных для реализации древовидных комментариев. Здесь просто указаны поля
3.users (
id
name
email
avatar?
hash)
Ну и собственно вопрос. Нормально ли что у меня в таблице files столько столбцов? Есть ли какое-то ограничение на колличество? Ну и вообще правильно ли спроектировал?

Ответы: >>1124346 >>1124460 >>1124466
Аноним 2018/01/22 15:41:44  №1124346 458
>>1124343
сколько столбцов надо, столько и нормально. вроде нормально, но приложи еще внешние ключи для того, чтобы удостовериться.

также по поводу вложенных комментариев, у ОПа есть урок https://github.com/codedokode/pasta/blob/master/db/trees.md

где он предлагает для реализации closure table (которую ты, судя по всему, вырбал) использовать дополнительную таблицу связей. ты же кладешь parent_id и child_id в ту же таблицу комментов, а поле указания глубины не используешь. в итоге как ты собираешься строить структуру комментариев?

от себя добавлю, я бы использовал nested_sets, они быстры на выборку, а для манипуляций с перемещением-удалением есть библиотеки для той же Доктрины (наверняка еще миллион standalone). если конечно не стоит задачи написать все самому.
Ответы: >>1124371 >>1124460
Аноним 2018/01/22 16:23:46  №1124371 459
>>1124346
Древовидные комментарии уже реализовывал отдельно. Все получилось, как раз клоужер тейбл использовал.

Внешние ключи.
files id, user_id
comments user_id, id
users id
Ответы: >>1124460
Аноним 2018/01/22 17:11:45  №1124403 460
значение по умолчанию функциях,это типа резервное значение,на случай,если не будет других параметров?
передача аргументов по ссылке устарело?
Ответы: >>1124409
Аноним 2018/01/22 17:20:19  №1124409 461
>>1124403
на случай, если ты не передашь этот конкретный параметр. значение по умолчанию в качестве аргумента значит, что этот аргумент необязательный.

что значит устарело? deprecated? нет, оно не депрекейтед, если ты имеешь в виду указание ссылки в определении функции типа
function foo(&$number) {...}

а вот указание ссылки при ВЫЗОВЕ функции с 5.4 (кажется, точно не помню) запрещено:
function foo($number) {...}
$a = 5;
echo foo(&a); // это вызовет ошибку
Аноним 2018/01/22 17:52:00  №1124432 462
Мой очередной нубский вопрос: есть один объект, он передается через конструктор в качестве свойства в другой объект. Как туда передается первый объект - по ссылке или он клонируется? То есть, если я изменю через второй объект, какое то свойство первого объекта-свойства, то измениться ли оно в первом глобальном объекте?
Ответы: >>1124435 >>1124460
Аноним 2018/01/22 17:55:22  №1124435 463
>>1124432
Объекты всегда передаются по ссылке.
Что бы их склонировать, надо делать это явно.
Аноним 2018/01/22 18:22:49  №1124446 464
У меня не совсем типичный вопрос.

Как отрефакторить пхп так, чтоб нельзя было уличить в плагиаторстве?

Помимо очевидного переименовывания переменных и функций
Ответы: >>1125109
Аноним 2018/01/22 18:37:14  №1124457 465
>>1124222
> сложно дебажить
На продакшен сервере не дебажат. На память просто поебать. Тем не менее, у нас он скомпилирован админом вместе с использованными нами библиотеками. Дополнительно он там какие-то заплатки прикомпилил, чтобы не похакали. Из минусов только то, что при необходимости добавить или поменять библиотеку приходится дергать админа, чтобы он все заново перекомпилил.
Аноним 2018/01/22 18:38:21  №1124458 466
>>1124040

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

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

Если тебе интересно про то, как с точки зрения архитектуры устроены серверы, в том числе СУБД, есть паста: https://gist.github.com/codedokode/ffd520440a970c07c1c6

>>1123273

Вот кстати в mysqli есть асинхронные запросы, можно еще в эту сторону копать: http://php.net/manual/ru/mysqli.poll.php

>>1124222

Я стараюсь у себя локально использовать готовые пакеты, так как это быстрее. Расширения тоже ставлю через apt-get, а если их там нет, то под линуксом они легко компилируются одной командой через pecl install.

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

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

> 1. сложно дебажить
Ну, мне это и не требуется и я не силен в gdb

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

> 2. нет предупреждений об утечках памяти
Это да. Но я не сталкивался с проблемами из-за них.

> 3. нельзя использовать thread safety
Версия PHP под винду, кстати, thread-safe.

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

Думаю, они используют phpenv или что-то аналогичное. Хотя, собрать PHP не так и сложно. Я, например, собирал PHP7 под XP (пришлось чуть-чуть пропатчить), а под линуксом это вообще стандартно делается, configure + make + make install.
Аноним 2018/01/22 18:39:01  №1124460 467
>>1124343

> linkaname
> created_at
Надо писать названия в едином стиле, по умолчанию можно использовать SQL style guide http://www.sqlstyle.guide/ru/

Не забудь также комментарии к неочевидным колонкам ( https://github.com/codedokode/pasta/blob/master/db/comments.md )

Не забудь внешние ключи, ограничения уникальности полей. Если твоя БД поддерживает ограничение CHECK (например: postgres и sqlite), используй его там, где это уместно.

comment лучше наверно заменить на description.

Про древовидные данные в БД есть урок, если что: https://github.com/codedokode/pasta/blob/master/db/trees.md

> Нормально ли что у меня в таблице files столько столбцов?
Да

> Есть ли какое-то ограничение на колличество?
да, изучи документацию по твоей БД или набери в Гугл <db> columns limit.

> Ну и вообще правильно ли спроектировал?
Выглядит верно.

>>1124346

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

Для комментариев чаще всего применяют (не заглядывайте раньше времени) material path material path material path

>>1124371

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

>>1124432

Объект передается как будто по ссылке. Если быть точным, то в PHP объекты хранятся в отдельной области памяти, а в переменной хранится лишь идентификатор (указатель) объекта. И ты передаешь в функцию не копию объекта, а просто его идентификатор. Чтобы сделать копию, используется оператор clone.
Ответы: >>1124816
Аноним 2018/01/22 18:44:48  №1124466 468
>>1124343
>Вообще для комментариев будет две базы данных для реализации древовидных комментариев.
1. Прекрати называть таблицу базой данных. У тебя три таблицы в одной базе.

2. На вскидку, я не вижу повода создавать две таблицы для древовидных комментов. Просто каждая запись комментария будет содержать поле со ссылкой на предыдущий комментарий.
Ответы: >>1124539
Аноним 2018/01/22 19:25:40  №1124496 469
15166383403690.jpg (323, 2656x1762)
1762x2656
Есть простая страница, которая выводит несколько изображений на экран с текстом справа.
Получилось сделать так, чтоб выводил элементы в столбик.

Как сделать в виде таблицы (по 2-3 элемента в строку)?

В теге <style> прописал такой вот код для вывода в столбик:

#results .result .image {height: 200px;width: 300px;float: left;padding: 2px;overflow: hidden;position:relative;}
#results .result .image img {width:300px;}
#results .result .image p {position: absolute;top: 85px;margin: 5px;padding: 0px;color: white;text-rendering:optimizelegibility;text-shadow: 0 0 3px rgba(0, 0, 0, .8);}
#results .result .stats {width:260px;float:right;}

Ответы: >>1135048
Аноним 2018/01/22 20:13:22  №1124539 470
Аноним 2018/01/22 23:58:39  №1124649 471
Вопросо по юнит тестам. Вот, допустим, у меня файл пдо в контейнере. Как лучше сделать тест класса, который работает с БД - подключать весь контейнер во время тестов, или в тесте в методе setUp создавать тестовое подключение к БД?
Ответы: >>1124891
Аноним 2018/01/23 00:10:21  №1124655 472
ребятки, есть вопрос один.

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

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

в идеале на уровне конфига нжинкса повесить какую-то авторизацию по ключу, например. есть какой-то такой вариант?
Аноним 2018/01/23 00:15:31  №1124661 473
>>1124655
Вот ты жмотяра, пиздец. Нахуй так жить вообще. Уууу, чтоб ты сдох нахуй и семья твоя вся сдохла. Пидор, уебок, жлобяра.
Аноним 2018/01/23 06:27:32  №1124725 474
15166780522650.png (11, 362x185)
185x362
Как средствами PHP преобразовать текст пикрелейтед в читаемый вид? Может уже есть стандартные функции. Вообще, забыл, как называется это кодирование? (аналогично преобразуются русские символы в адресной строке браузера)
Ответы: >>1124773
Аноним 2018/01/23 09:38:56  №1124744 475
15166895363720.png (84, 997x533)
533x997
Привет, делаю базуданых для birthday-remider, посмотрите пожалуйста пикрил, все ли ок.
Пример записей, которые должно показывать приложение:
1. "23 января 1905 г. день рождение Антона Голубцова, напомнить 22 января 2018 г."
2. "01 июля 2018 г. свадьба Антона Голубцова и Тани Яотиной, напомнить 25 июня 2018 г. (купить подарок), 30 июля 2018 г. (помыться)"

Записи можно сортировать по датам, по событиям, по участникам. Напоминаний и участников у события может быть несколько. Типы событий можно добавлять.
Ответы: >>1124745 >>1124889 >>1125113
Аноним 2018/01/23 09:47:23  №1124745 476
>>1124744
Представил как одним запросом СУБД захватывает аж 6 таблиц и немного погрустнел. И ведь целая система нормализации есть. Только непонять в чём профит, столько данных тащить. На ум приходит только тотальная и маниакальная экономия дискового пространства.
Ответы: >>1124748 >>1124762 >>1124889
Аноним 2018/01/23 10:16:52  №1124748 477
>>1124745
>Представил как одним запросом СУБД захватывает аж 6 таблиц и немного погрустнел


хуяк-хуяк подобрал индексы шоб ниормазило и в продакшон. Чо ты как нипацан.
Ответы: >>1124762
Аноним 2018/01/23 10:56:03  №1124762 478
>>1124745
>>1124748
ок, можно избавиться от таблицы Event-types, пускай названия событий будут в таблице Events, но как совместить Events + Participants + Reminders в одной таблице, учитывая что там отношения один к многим?

>>Только непонять в чём профит, столько данных тащить
А как по другому сделать?
Аноним 2018/01/23 11:33:46  №1124771 479
>>1124655
>в идеале на уровне конфига нжинкса повесить какую-то авторизацию по ключу, например. есть какой-то такой вариант?
Ну естественно так и надо делать. Это для доступа по ssh. И не забудь после отключить доступ по паролю.
А если у тебя есть веб-морда к серверу, то очевидно нужно закрыть доступ для незарегистрированных в системе юзеров - проще говоря страницу логина добавь, если таковой по умолчанию нет.
Ответы: >>1124797
Аноним 2018/01/23 11:34:39  №1124773 480
Аноним 2018/01/23 12:40:37  №1124797 481
>>1124771
про доступ по ssh это да. но у меня грубо говоря есть сайт, к которому я хочу ограничить доступ. есть возможность в https логиниться по ключу?
Ответы: >>1124814
Аноним 2018/01/23 13:01:19  №1124814 482
>>1124797
Нет, такой возможности нет. Зачем тебе это нужно вообще? Настрой ssh доступ и делай пулы/пуши через ssh. Ну либо по https - но нужен будет пароль.
Тебе нужно ограничить доступ к веб-морде? Используй страницу логина либо, если известны адреса клиентов, добавь их в белый список веб-сервера, а остальным айпи просто заблокируй доступ.
Аноним 2018/01/23 13:02:12  №1124816 483
15167017326260.png (32, 1017x239)
239x1017
>>1124460
>Надо писать названия в едином стиле, по умолчанию можно использовать SQL style guide http://www.sqlstyle.guide/ru/

Поясните, пожалуйста, с чем связана такая рекомендация?
Ответы: >>1124839 >>1124890
Аноним 2018/01/23 13:34:32  №1124824 484
>>1118555 (OP)
Посоны, у меня вопрос по базам данных. Какие ключи лучше использовать - автоинкрементальные или генерируемые? Какие недостатки/преимущества есть у тех и других?
Я вижу серьёзное преимущество генерируемых в том, что при добавлении записи во множество таблиц, мне не нужно сначала вставлять данные в основную таблицу, получать автоинкрементальный айди и потом только делать вставку с этим айди в дочерние таблицы. Я просто генерирую айди и распихиваю связанные по этому айди данные в нужные таблицы без лишних телодвижений.
Единственный серьёзный недостаток, который я вижу в генерации, это возможность коллизий. Но всегда можно подобрать алгоритм генерации, который сведёт такие случаи к нулю.
Ответы: >>1124853 >>1124860 >>1124890
Аноним 2018/01/23 14:09:11  №1124839 485
>>1124816
вот эти рекомендации тоже особо никто не выполняет:
>Всегда используйте ключевое слово AS для лучшей читаемости.
>По возможности избегайте объединения названий двух таблиц для построения таблицы отношений. Например, вместо названия cars_mechanics лучше подойдёт services.
Ответы: >>1124891
Аноним 2018/01/23 14:24:38  №1124850 486
>>1123867
> Что касается @ParamConverter, это же часть контроллера, его можно наверно оставить в аннотации. Нельзя? Предложи исправить это.

До такого я не додумался. Попробую, посмотрю, как юудет
Аноним 2018/01/23 14:28:15  №1124853 487
>>1124824
вопрос-то хороший. вот мои возражения:

1. в мускуле надо делать два запроса, а в постресе есть RETURNING.
2. по инкрементному айди можно отсортировать, а по сгенерированному нет.
3. генерация по-настоящему уникального значения - более дорогая операция.
4. он займет больше места для хранения и в теории поиск по индексу будет чуть медленнее.

по мне оно того не стоит
Ответы: >>1124890
Аноним 2018/01/23 14:30:49  №1124858 488
Аноним 2018/01/23 14:33:22  №1124860 489
>>1124824
>2. по инкрементному айди можно отсортировать, а по сгенерированному нет.

то есть, тебе надо заводить дополнительное поле для сортировки по нему. created_at не подойдет - в одну секунду может прилететь 10 записей. только если хранить microtime.

короче, для каких-то случаев может и проканает
Ответы: >>1124891
Аноним 2018/01/23 15:07:30  №1124889 490
>>1124655

Также есть более серьезная мера защиты - клиентские SSL сертификаты: https://habrahabr.ru/post/213741/

>>1124744

role - не лучше ли сделать ENUM или foreign key на другую таблицу?

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

Ключом в event_type наверно лучше сделать id. Он меньше места занимает.

Меня конечно беспокоит наличие похожих сущностей (users - participants, events - reminders), тут явно просится наследование или еще какое-то обобщение, но не станет ли из-за этого схема БД сложнее...

>>1124745

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

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

Если номализованные данные работают медленно, всегда можно сделать денормализованную копию, в каком-нибудь отдельном хранилище, заточенном под поиск, вроде сфинкса или кеша. Но там свои подвохи.
Аноним 2018/01/23 15:07:47  №1124890 491
>>1124824

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

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

Не очень понятно, а в чем тут выгода? Что мешает вставить сначала запись, а потом связанные с ней?

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

Да, и они давно уже придуманы.

>>1124853

> по инкрементному айди можно отсортировать, а по сгенерированному нет.
Можно добавить дату вставки и сортировать по ней.

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

>>1124816

Я прочитал это предложение в англ. версии и там добавлено слово simply:

> Where possible avoid simply using id as the primary identifier for the table.

Также, в английской версии внизу есть ссылки на обсуждения: http://www.sqlstyle.guide/ и пояснения автора https://www.simonholywell.com/post/2016/12/sql-style-guide-misconceptions/?utm_source=sqlstyle.guide-sqlstyle.guide&utm_medium=link&utm_campaign=footer-link

> id columns and surrogate keys
> You do not need them [surrogate keys] in most cases as better keys often exist in the data already.

Также, можно попросить пояснений в issues: https://github.com/treffynnon/sqlstyle.guide/issues

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

- он останется ключом даже при смене условий задачи (ты сделал номер паспорта ключом, а потом узнал, что паспорта можно менять и в каких-то случаях иметь несколько)
- он мало весит, а размер полей влияет на размер индекса и объем требуемой под них памяти в больших таблицах. Индексы с 100-символьным колонками работают совсем не так хорошо, как индекс из интов (желательно подтвердить это тестом).
Аноним 2018/01/23 15:08:04  №1124891 492
>>1124839

Я иногда пишу AS. Насчет второго - да, редко.

>>1124649

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

>>1124860

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

Аноним 2018/01/23 15:25:41  №1124903 493
Блядь, я прошел самый первый гайд по основам основ, за пару недель. Но я даже и представить не могу, как можно связать то что я прошел с чем то на сайтах. Мне дурно становиться, когда я осознаю что для того что бы потом зарабатывать хотя бы 15-20к надо еще года 2 учить и читать, пиздееееец.
Ответы: >>1124904 >>1124918
Аноним 2018/01/23 15:26:01  №1124904 494
Аноним 2018/01/23 15:37:11  №1124918 495
>>1124903
1. лучше полюбить процесс изучения и чтения, т.к. это придется делать всю жизнь.
2. для начала работы полгода за глаза хватит
Ответы: >>1124920
Аноним 2018/01/23 15:39:25  №1124920 496
>>1124918
Ты имеешь ввиду полгода для начала чтоб меня взяли в какую нибудь контору? Но что делать, если я школьник 16 лвл? Я даже если выучу сейчас то, с чем меня возьмут на какую никакую работу, то из за возраста все пойдет нахуй.
Ответы: >>1124925
Аноним 2018/01/23 15:40:45  №1124922 497
>>1124889
>Также есть более серьезная мера защиты - клиентские SSL сертификаты
спасибо. это в принципе то, что я и хотел
Аноним 2018/01/23 15:45:08  №1124925 498
>>1124920
изучай, пили свои проекты, чтобы в 18 тебя с руками оторвали. в айти нет дискриминации по возрасту, как многие вкатывальщики думают, но есть особая любовь многих компаний к молодым "перспективны" студентикам. также на фрилансе можешь работать без ограничений по возрасту.

плюс когда я учился в школе, у меня не было вопросов "но что делать". я помню тусил с друзьями, пытался поебаться, гулял.
Ответы: >>1124926
Аноним 2018/01/23 15:50:19  №1124926 499

>>1124925
>чтобы в 18 тебя с руками оторвали
ты хочешь сказать, что если я буду до 18 изучать php и пилить проекты(сайты, как я понял?), то меня могут просто взять в какую нибудь компанию, без вышки и прочего?
Ответы: >>1125043
Аноним 2018/01/23 16:02:31  №1124929 500
Тяжело ли освоить AJAX, если практически не можешь в жс? Пилю задачу от ОПа на файлообменник, хочу, чтобы комменты на странице после отправки сразу отображались. Как вообще такое реализуется, через фреймворк? Или на чистом жс тоже можно?
Ответы: >>1124966
Аноним 2018/01/23 16:30:45  №1124948 501
>>1124889
>role - не лучше ли сделать ENUM или foreign key на другую таблицу?

пожалуй ENUM норм, т.к. пока будет только одна роль user.

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

да, в таблице Event_types, поле is_annual, например тип "день рождения" is_annual: true. Но можно его перенести в таблицу Events. Я не стал этого делать, потому что хотел избежать при создании нового события необходимость выставлять периодичность, когда выбрал один из типов событий, который ее предполагает.
Если периодичность перенести в таблицу Events, то это поле будет или дублироваться или придется каждый раз указывать периодичность. Насколько приемлемо дублирование, нужно выбрать то, которое будет приоритетное?
Можно еще сделать два события "ежегодное событие без названия" и "разовое событие без названия", которые будут присваиваться событию, если не выбран тип но периодичность.

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

>>1124889
>Ключом в event_type наверно лучше сделать id. Он меньше места занимает.
А если в таблице появится поле owner_user_id, то ключом можно сделать сочетание type и owner_user_id? Или id будет удобнее?

>>1124889
>Меня конечно беспокоит наличие похожих сущностей (users - participants, events - reminders), тут явно просится наследование или еще какое-то обобщение, но не станет ли из-за этого схема БД сложнее...
Пойду полистаю аниме про базы данных, там наверняка есть про наследование.
Ответы: >>1135048
Аноним 2018/01/23 16:43:36  №1124964 502
Аноны, все тот же долбоеб 16 лвл , стоит ли вообще поступать в вуз, если есть возможность? Насчет армии похуй, я уже вроде не годен из за сколиоза 2 степени и бронхиальной астмы. Если я буду сейчас вкатываться, то к 18-19 я наверное смогу найти днищеработку макакой за 15-20к? А там уже по нарастающей.
Ответы: >>1124975 >>1125043
Аноним 2018/01/23 16:46:44  №1124966 503
>>1124929
Это можно сделать на жс без фреймворков. В оп посте есть задачи по js.

Еще есть фрейморк Jquery, который несколько упрощает запросы к элементам на странице и работу с Ajax. Но использование его без знания основ js - это путь на темную сторону.

Аноним 2018/01/23 17:02:15  №1124975 504
>>1124964
>стоит ли вообще поступать в вуз
да, стоит, даже если не возможности. Не факт, что ты в конечном итоге свяжешь свою жизнь с программированием, и при трудоустройстве на любую другую работу наличие диплома о во будет играть если не решающую роль, то наверняка скажется на твоей зарплате. Многим приходится заканчивать заочку в 30+ лет, чтобы получить повышение или определенную должность. И чем старше ты будешь, тем более значимым будет диплом или его отсутствие. Устроиться в днищеконтору ты всегда успеешь, а если тебе придется выбирать, на что потратить свою молодость, то универ будет лучшим выбором. Если ты будешь заниматься, то сможешь подрабатывать, главное не соглашайся на полную ставку, пока не закончишь универ.
Ответы: >>1124976 >>1125034
Аноним 2018/01/23 17:04:08  №1124976 505
>>1124975
спасибо за совет, анон
Аноним 2018/01/23 18:26:35  №1125021 506
пиздец,сел за изучение лаварела,а там сука хуева куча команд,и где он сука легче чистого пхп?
Ответы: >>1125034 >>1125758
Аноним 2018/01/23 18:28:32  №1125023 507
ideone не работает :с
Аноним 2018/01/23 18:40:26  №1125034 508
>>1124975
>будет играть если не решающую роль, то наверняка скажется на твоей зарплате
скажется на зарплате, серьезно? ты в каком мире живешь? я в дс работаю, тут все хуй клали на дипломы.

>Многим приходится заканчивать заочку в 30+ лет
а может ты просто в россельхознанотехнологиях работаешь?

>>1125021
для изучения фреймворков нужно знать сам язык, чтобы понимать, что к чему. он не легче и не тяжелее, а избавляет тебя от рутинных операций. допустим, орм тебе дает возможнсть не писать запросы самому, но для того чтобы ее использовать, нужно сначала пописать их вручную, построить связи между таблицами и т.д.
Ответы: >>1125351 >>1125351
Аноним 2018/01/23 18:49:06  №1125043 509
>>1124926
пхп многогранен, на нем можно пилить большие проекты, не только сайты. тебя могут легко взять в компанию, если ты будешь обладать хорошими навыками и знать фундамент. если ты будешь еще параллельно студентом, это дополнительный плюс, не более.

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

но сам по себе вуз (нормальный) - это заебись. я когда учился, было весело.
Аноним 2018/01/23 19:36:25  №1125075 510
задам нубский вопрос-можно ли связать пхп и жабаскрипт?
Ответы: >>1125114 >>1125119
Аноним 2018/01/23 20:21:01  №1125109 511
Аноним 2018/01/23 20:27:55  №1125113 512
>>1124744
У тебя все связи реализованы через промежуточные таблицые. Такое используют используют только для реализации связей многие-ко-многим. Ты уверен что оно тебе надо. Как минимум, в случае reminder-to-event мне не приходит в голову сценария когда на один reminder будет несколько событий.
Ответы: >>1125364
Аноним 2018/01/23 20:28:28  №1125114 513
>>1125075
также как пхп и хтмл. или конкретнее задай вопрос
Аноним 2018/01/23 20:34:09  №1125119 514
>>1125075
>пхп и жабаскрипт?
Да, раньше для этого была библиотека xajax, но сейчас достаточно json на стороне php и jquery на клиенте.
Аноним 2018/01/23 20:38:44  №1125121 515
Давайте вспомним величайшие веб-проекты, работающие на php.

Facebook
PornHub
Аноним 2018/01/23 23:55:14  №1125254 516
>>1123868
>Не хочешь допилить и поделиться решением со всеми? Придется расковырять фейкер, понять, как он рабоатет, и может обсудить это с его разработчиками.
Посмотрел исходники фейкера, по ходу это надо на уровне ядра библиотеки менять, чтобы такую возможность добавить. Я пока что наверное слишком ньюфаг для такого, но мб потом, когда опыта наберусь.
Аноним 2018/01/24 00:21:53  №1125265 517
Приветствую анонов. У меня вопрос про класс валидации. Я смотрел несколько разных вариантов его реализации, но так и не пришел к единому решению. В одном варианте есть один класс валидации, и работает он образно в духе isValid = validator->validate(['username' => 'required']), в самом классе много методов и переменных, сообщения об ошибке могут храниться как в нем, так и во вспомогательном классе, но в целом много разных циклов работы с массивами, их ключами и т.д. То есть в целом сам класс выглядит как большая обёртка функций скорее, ну или мне так просто кажется. Другой подход это делать очень много громоздких классов валидаторов, где каждый класс отвечает за определенное правило, например EmailValidator или LenghtValidator, они могут наследовать абстрактный валидатор, это выглядит более "правильно", каждый класс делает только то, что от него нужно, но кода получается значительно больше, еще и объекты "лишние" нужно создавать, при том что в задаче про студентов довольно много инпутов у формы. Я не знаю насколько сильно нужно заморачиваться по этому поводу, и насколько одно работает быстрее другого.
Ответы: >>1125758
Аноним 2018/01/24 06:25:20  №1125338 518
Кто пробовал HHVM? Говорят годнота, хоть и толком на нём ничего не написано.
Ответы: >>1125343
Аноним 2018/01/24 07:00:32  №1125343 519
>>1125338
Был актуален лет 5-7 назад. Сейчас PHP7 из коробки делает его по производительности раза в два.
Ответы: >>1125758
Аноним 2018/01/24 07:44:23  №1125351 520
>>1125034
>скажется на зарплате, серьезно? ты в каком мире живешь? я в дс работаю, тут все хуй клали на дипломы.
Твой опыт не показателен, т.к. вероятно тебе меньше 30 и ты работаешь в ойти. Мало информации, чтобы сделать достоверный вывод о том, насколько скажется диплом на зп или нет.

>>1125034
>а может ты просто в россельхознанотехнологиях работаешь?
Именно. Гос сектор и обслуживающий его бизнес самый крупный работодатель в РФ. А трактористом дают дополнительные балы за диплом. И если он будет учиться не только для корочки, то это только прибавит возможностей для последующего трудоустройства. Хорошие специалисты нужны всегда и везде.
Ответы: >>1125355 >>1125428 >>1125572
Аноним 2018/01/24 07:49:19  №1125355 521
>>1125351
Хорошие спецы и без корочки нужны, поверь. Знакомый 3 фирмы держит, постоянно ищет спецов, ибо именно спецов в России очень сильно не хватает.
Аноним 2018/01/24 07:49:24  №1125356 522
>>1123856
Ого, как сложно. Я остановился на том, что сделал обертку для file_get_contents, кидающую эксепшн на домен не из вайт-листа, а саму fgc для интернета не использую.
Аноним 2018/01/24 07:54:56  №1125360 523
15167696969010.jpg (50, 604x402)
402x604
Поясните за полиморфизм.
Есть объект А, он реализует метод lol(int $digit). Есть объект B extends A, который реализует lol по-своему, а именно ему для работы нужно два параметра - lol(int $digit, bool $flag). Флаг мне этот жизненно необходим, он участвует в переопределнной реализации. Задать через конструктор я его не могу, потому что флаг может быть разным при каждом вызове метода. Метод может вызываться много раз за жизнь объекта. Хуячить по объекту каждый раз, чтобы вызвать lol, мне кажется хреновой идеей.
Что делать? Можно так ломать сигнатуру метода, если очень надо?
Ответы: >>1125362 >>1125758
Аноним 2018/01/24 07:58:41  №1125362 524
>>1125360
А, только что в голову шибануло. Если я сделаю lol(int $digit, bool $flag = false), то, значит, полиморфизм я не нарушу.
Ответы: >>1125758
Аноним 2018/01/24 08:07:07  №1125364 525
>>1125113
>Как минимум, в случае reminder-to-event мне не приходит в голову сценария когда на один reminder будет несколько событий.
На один event может быть несколько reminder. Reminder это дата+время когда должно сработать напоминание. Т.e. связь один-к-многим. Например, когда нужно сделать несколько дел заранее, найти подарок - на это потребуется неделя, и погладить носки - это можно сделать накануне события. Думаю, что этот функционал нужно реализовать. Но можно обойтись без промежуточной таблицы, добавив в reminder поле event_id. Поскольку я нубас, не сразу понял, что можно сделать проще. Какого отношение выгоды к геморрою обоих решений?
Аноним 2018/01/24 10:17:22  №1125392 526
15167782424630.jpg (671, 2560x1920)
1920x2560
PDO или mysqli?
первый более современый,но меньше разжеваной инфы,второй старый
нубяра кун
Ответы: >>1125397 >>1125758
Аноним 2018/01/24 10:35:40  №1125397 527
>>1125392
>PDO
Конечно это, потому что универсальный. В смысле мало инфы? С чем у тебя конкретная проблема?
Ответы: >>1125398 >>1125399
Аноним 2018/01/24 10:38:28  №1125398 528
>>1125397
инфа есть,но вот хорошо разжеваной,почти нет.приходиться скакать по сайтам и собирать инфу на каждое действие
Аноним 2018/01/24 10:39:50  №1125399 529
>>1125397
и все?ну как бы мне другие БД не нужны
Ответы: >>1125422
Аноним 2018/01/24 11:37:59  №1125417 530
Подскажите пожалуйста как вставить функцию в строку, чтобы работало :

$predl=preg_replace('регулярка', 'функция от $0', 'текст');
Ответы: >>1125757
Аноним 2018/01/24 12:01:48  №1125422 531
>>1125399
>и все?
Во-первых, одно это уже должно быть определяющим фактором в выборе, во-вторых, mysqli не поддерживает именованные параметры, в-третьих, pdo - уже давно стандарт в разработке, в-четвёртых, гугл ит pdo vs mysqli
Ответы: >>1125423
Аноним 2018/01/24 12:05:48  №1125423 532
>>1125422
окей.щас я подошел к теме регистрации на сайте,так что в течении дня я буду задавать вопросы по этой теме
нубяра кун
Аноним 2018/01/24 12:22:45  №1125428 533
>>1125351
>Именно. Гос сектор и обслуживающий его бизнес самый крупный работодатель в РФ
ну все, вопросов нет тогда. у вас-то реально тимлидом без диплома не станешь. а так поучиться в хорошем вузе - это не то чтобы плохо, я и не агитировал против этого. главное - работать параллельно. а то я на одной работе видел много выпускников, которые свои дипломные проекты делали про машинное обучение, а в офисе два дня не могли понять как послать апи-запрос.
Аноним 2018/01/24 12:47:04  №1125431 534
Есть один nginx на дебиане со следующим конфигом:

location ~ \. {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_pass ...;
}

tcpdump показывает, что параметр script_filename каждый раз "/". Если в конфиге прописать путь к скрипту, работает.
Это ведь не нормально?
Ответы: >>1125433
Аноним 2018/01/24 13:01:04  №1125433 535
>>1125431
Docker-образ NGINXа по умолчанию делает envsubst, чтобы было удобнее менять host etc. Теперь надо все $ эскейпить. Мда.
Аноним 2018/01/24 13:22:46  №1125441 536
15167893663350.jpg (69, 414x702)
702x414
15167893663361.jpg (44, 413x705)
705x413
Пытаюсь в могильную верстку.

Понравилась данная полоска у гугла. Попробовал сделать своими силами, получилось только через костыль "width: max-content; display: flexbox;", ползает. Полез проверить себя в код страницы гугла, а там нет флексбокса и ширина нигде не затрагивается вообще (блоки в блоках в блоках...) и офк работает у них. Пытался проследить стили, не могу понять как они такого эффекта добились с использованием базовых параметров только.

У моего решения недостаток:
https://caniuse.com/#search=max-content

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

Может заглядывают фанаты верстки, поднаправьте пожалуйста в нужное русло.
Ответы: >>1125757 >>1128193
Аноним 2018/01/24 13:36:22  №1125443 537
а я могу арендоавть свой впс и самостоятельно разбить его еще на несколько виртуалок?
Ответы: >>1125451 >>1125757
Аноним 2018/01/24 13:53:49  №1125451 538
>>1125443
Неправильная постановка вопроса. Для чего тебе это нужно? Какую задачу тебе нужно решить?
Ответы: >>1125456
Аноним 2018/01/24 13:57:26  №1125456 539
>>1125451
допустим, почтовую рассылку вынести в отдельный виртуальный сервер внутри моего впс. ну или вообще проект поделить на микросервисы.

тут главный вопрос - можно ли тенхически сделать виртуалку внутри виртуалки и насколько это будет костыльное решение.
Аноним 2018/01/24 14:00:12  №1125457 540
код подключения к БД нужно вынести в отдельный файл,или писать и в коде регистрации на сайте и в коде входа на сайте?
Ответы: >>1125756
Аноним 2018/01/24 14:29:57  №1125476 541
Анон, скажи, как сделать условие с успешным выполнением функции?

Есть простенький код:
Ответы: >>1125477
Аноним 2018/01/24 14:31:06  №1125477 542
>>1125476
Преждевременное отправление.

$zip = new ZipArchive;
$zip->open($_GET[name]);
$zip->extractTo('./');
$zip->close();
echo "Ok!";

Я хочу, чтобы было так:

if (функция ебашит){
echo 'Ok!';
}else{
echo 'haha, faggot!';
}
Ответы: >>1125487 >>1125756
Аноним 2018/01/24 14:38:36  №1125482 543
БД тред молчит, поэтому попробую здесь.
Помогите пожалуйста спроектировать оптимальную архитектуру в mysql для хранения примерно таких поступающих данных:
{
mark: 4.77,
timestamp: 1516785655,
[{
question_text: 'some text',
answers_text: ['some', 'array', 'with', 'text', 'values'],
selected_answers: [0, 2],
},
{
question_text: 'some other text',
answers_text: ['some', 'other', 'array', 'with', 'text', 'values'],
selected_answers: [1, 2],
}]
}
Сам бы сделал что-то вроде такого:
sessions(id: unsigned_bigint, mark: decimal[1,2], timestamp: timestamp),
questions(id: unsigned_bigint, session_id: unsigned_bigint, text: text),
answers(id: unsigned_bigint, question_id: unsigned_bigint, text: text),
selected_answers(id: unsigned_bigint, question_id: unsigned_bigint, value: unsigned_smallint).
Насколько пригодна в реальном мире предложенная мной структура?
Ответы: >>1125756
Аноним 2018/01/24 14:47:57  №1125487 544
>>1125477
Твоя функция должна возвратить некое значение, которое в общем случае можно привести к true/false

тогда

if (функция ебашит === TRUE){
echo 'Ok!';
}else{
echo 'haha, faggot!';
}

(Только у тебя не функция, а объект с методами)
Ответы: >>1125490
Аноним 2018/01/24 14:52:56  №1125490 545
>>1125487
>Твоя функция должна возвратить некое значение, которое в общем случае можно привести к true/false

Т.е. по факту выполнения действия логику построить нельзя?

>(Только у тебя не функция, а объект с методами)
Я немножко гомонитарий3
Ответы: >>1125493
Аноним 2018/01/24 15:05:35  №1125493 546
>>1125490
Если есть документация к этому ZipArchive, посмотри, как там выбрасываются наружу ошибки (а может быть он сам с ними что-то делает?), вот эти ошибки (или исключения) тебе и нужно ловить.

В целом каждый этап может возвращать какие-то результаты, тебе может понадобиться проверять их все, а может ни одного, надо смотреть в класс объекта.
Аноним 2018/01/24 16:26:03  №1125519 547
За пять месяцев я переписал сервис по автоматизации отслеживания грузов охранниками с голого php на Yii2 и добавил некоторую функциональность. А именно "Постовую ведомость" - журнал выданного охранникам оружия. Плюс отдельную таблицу для оружия и таблицу связей "многие ко многим" между таблицами охранников и оружия, чтобы в постовой ведомости можно было выбрать охранника и далее выбирать только те стволы, которые принадлежат именно ему. Писал это в качестве хобби, в свободное время, для текущей работы (работаю не программистом).

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

https://github.com/tsubaku/flights.yii
Ответы: >>1125542 >>1125571 >>1133624
Аноним 2018/01/24 17:04:15  №1125542 548
>>1125519

Конфиг подключения к бд не стоит хранить в системе контроля версий.

Контроллер SiteController слишком жирный, потому что ты свалил туда в кучу вообще всё. Надо разделить логически на меньшие контроллеры, примерно как у тебя сделано с моделями.
Ответы: >>1125546
Аноним 2018/01/24 17:16:02  №1125546 549
>>1125542
>Конфиг подключения к бд не стоит хранить в системе контроля версий.
Блин, не заметил. Выпилить весь файл config/db.php через .gitignore?
>Контроллер SiteController слишком жирный
Сам подумывал, но как-то не собрался. Разобью. Так же, по отдельному контроллеру для каждой модели/странице, или делить по другим признакам?
Ответы: >>1125560 >>1125755
Аноним 2018/01/24 17:41:10  №1125560 550
>>1125546
>Блин, не заметил. Выпилить весь файл config/db.php через .gitignore?
Ну да. И добавить туда пример конфига.
>Так же, по отдельному контроллеру для каждой модели/странице, или делить по другим признакам?
Нужно руководствоваться логикой приложения и удобством последующей разработки-рефакторинга. Когда вся логика загрузки файлов, например, у тебя в отдельном контроллере, то это удобно, например.
Ответы: >>1125956
Аноним 2018/01/24 18:00:32  №1125571 551
>>1125519

Я пока еще не проверил код, с удовольствием проверю позже, а пока дам совет не использовать размытие для скрытия приватных данных, а использовать черные или серые плашки. А еще лучше - вбить у себя на локалхосте фейковые данные и сделать скриншоты с ними. Статья про восстановление размытых картинок: https://habrahabr.ru/post/152885/

Ответы: >>1125956
Аноним 2018/01/24 18:05:25  №1125572 552
>>1125351
>Гос сектор и обслуживающий его бизнес самый крупный работодатель в РФ
но не самый привлекательный
Аноним 2018/01/24 18:12:11  №1125576 553
>>1118584
Самый простой способ это XAMPP
Аноним 2018/01/24 18:25:04  №1125583 554
как сделать простую систему авторизации c PDO?
Аноним 2018/01/24 23:40:39  №1125754 555
test
https://github.com/tsubaku/flights.yii Аноним 2018/01/24 23:41:05  №1125755 556
>>1125546

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

Ну например, контроллер GuardController с методами actionList, actionEdit, actionDelete может отвечать за вывод списка охранников и его редактирование. Но не за все сразу.

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

Название SiteController ничего не значит - Site тут ничего не знаичт и остается просто "контроллер" непонятно чего.

Верстка кривовата - если есть желание разобраться, в ОП посте есть задания на HTML/CSS.

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

https://github.com/tsubaku/flights.yii/blob/master/models/Client.php
тут надо почистить код, отформатировать по стандартам (phpformatter.com) и сделать красиво.

Перед классом надо бы написать, чему он соответствует. А то не очень понятно. Понятно, что клиент, но что за клиент - непонятно. Это организация-клиент, или клиент в смысле HTTP клиент?

Формы и модели БД - не лучше ли хранить в 2 отдельных папках?

https://github.com/tsubaku/flights.yii/blob/master/views/site/manager.php
В шаблонах не надо использовать echo, надо использовать <?= ?>. для вывода HTML вообще не надо писать echo. Почитай урок про шаблоны: https://github.com/codedokode/pasta/blob/master/php/templates.md

При выводе данных нужно использовать экранирование (Html::escape или как-то так).

> echo "<td><div class='$container'>$fio</div></td>"; //

Тут может быть XSS. Урок https://github.com/codedokode/pasta/blob/master/security/xss.md

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

> public function actionManager()
> if ( Yii::$app->request->post('add-button') ) {
Добавление надо бы сделать отдельным действием.

В контроллере не должно быть SQL запросов. Вместо этого должно быть обращение к методу модели. То есть разделение таке: модель отвечает за получение/исправление данных в БД, а контроллер - за прием параметров запроса (GET/POST) и вывод результатов. Не так:

> $query = "SELECT * FROM flight WHERE data_vyezda between :date1 and :date2";
> $listFlight = flight::findBySql($query, [':date1' => $date1, ':date2' => $date2])->with('photo')->asArray()->all();

А так:

$flights = $flightsModel->getFlightList($date1, $date2);

И в таком варианте мы например можем повторно использовать код модели, вызывая getFlightList где-то еще.

Урок про MVC, посмотри, как там это сделано: https://github.com/codedokode/pasta/blob/master/arch/mvc.md

> $cellColumn = Yii::$app->request->post('column_in_db');
> $model = Flight::findOne($cellId); //Выбрать из таблицы Flight первую запись с id=$cellId
> $model->$cellColumn = $cellValue; //Выбрать из этой записи ячейку в столбце $cellColumn и записать туда $cellValue
В таком подходе есть недостаток: ты не проверяешь, какие поля можно редактирвать, а какие нельзя. Должен быть белый список разрешенных к редактированию полей. Удобно описать его где-то в модели.

По поводу аякса - проверь сам, выполняются ли рекомендации из этого урока: https://github.com/codedokode/pasta/blob/master/js/ajax.md
Ответы: >>1125956
Аноним 2018/01/24 23:41:46  №1125756 557
Аноны, если вдруг у кого-то не работает отправка сообщений, и не показывается капча, то очистите куки, и оно может починиться.

>>1125482

Я не вижу, где sessions во входных данных.

>>1125477

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

> $zip->open($_GET[name]);

Читаем мануал: http://php.net/manual/ru/ziparchive.open.php

> Возвращаемые значения
> Возвращает TRUE при успешном завершении или код ошибки.
> ZipArchive::ER_EXISTS
> Файл уже существует.
...

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

И так по каждой использованной функции. Некоторые IDE умеют показывать такие подсказки прямо не выходя из редактора.

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

>>1125457

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

Немного есть в этом уроке, хотя он сложный: https://github.com/codedokode/pasta/blob/master/arch/di.md

Аноним 2018/01/24 23:42:03  №1125757 558
>>1125443

Скорее всего ты не сможешь использовать аппаратное ускорение виртуализации,то есть будет медленно. Кроме виртуализации есть еще паравиртуализация (OpenVZ) и linux контейнеры (lxc, docker), которые делают примерно то же, но без тормозов. Ну и наконец, может тебе просто сделать несколько linux-пользователей? linux довольно хорошо изолирует пользователей друг от друга.

Для микросервисов пойдут контейнеры.

И еще можно вместо одной виртуалки купить несколько, но поменьше.

>>1125441

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

Я вижу такие варианты с классическим CSS2.1:

1) сделать враппер width: 100%, overflow: auto (hidden, если хочешь прокручивать яваскриптом), в него вложить див .line с display: inline-block, white-space: nowrap и картинками с display: inline-block. Плюс: вертикальное выравнивание. Подвох: пробелы между картинками, статья с костылями http://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html . Подвох: nowrap надо отключать для подписей к каринкам. Плюс: Можно использовать text-align для выравнивания .line по центру, когда картинок мало.

Объяснение: картинка или див с inline-block ведет себя как слово в тексте, nowrap запрещает перенос слов и они выстраиваются в длинную линию. inline-block на родителе (.line) нужен, чтобы он тянулся по ширине содержимого, просто block по умолчанию принимает ширину 100% родителя и не годится.

Для любопытных: на ширину содержимого тянутся такие блоки: inline-block, float, pos: abs, table-cell. Там исопльзуется алгоритм shrink-to-fit: https://github.com/codedokode/pasta/blob/master/html/shrink-to-fit.md

Еще немного информации: https://github.com/codedokode/pasta/blob/master/html/positioning.md

2) сделать враппер width 100%, ovf auto;. В него вложить блок div с width=суммарная ширина картинок,вычисленная JS или на сервере, и с clearfix. В него вложить блоки картинок, каждая с float: left. Плюс: нет пробелов между блоками.

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

3) сделать враппер width 100%, ovf: auto, в него вложить таблицу из 1 строки и множества колонок. Таблицу сделать не тегом table, а дивами с display: table, table-row, table-cell. Плюс: выравнивание как угодно, в том числе вертикально, железобетонность конструкции. Минус: у таблиц куча ограничений в плане позиционирования. Например, нельзя делать pos abs относительно ячейки.

Я бы сделал все 3 варианта и протестировал, и вбросил ссылочки в тред.

>>1125417

Используй preg_replace_callback. Раньше там был другой способ, но он небезопасен и открывает уязвимости.
Ответы: >>1125804 >>1125951 >>1128751
Аноним 2018/01/24 23:43:00  №1125758 559
>>1125392

Гугли сравнение, например начать можно с мануала

http://php.net/manual/ru/mysqlinfo.api.choosing.php
http://php.net/manual/ru/mysqli.overview.php

> второй старый
не старый.

>>1125360

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

$a->lol($digit)

То он должен корректно работать с обоими классами.

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

>>1125362

Это не очень красиво конечно получается. Ты скорее всего что-то плохо спроектировал.

>>1125343

не уверен. Ссылка на тесты?

>>1125265

> и работает он образно в духе isValid = validator->validate(['username' => 'required'])
Плохо, что тут не возвращается сам список ошибок. Какой смысл возвращать его как-то обходными путями?

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

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

Ну например, сделать так:

- классы элементарных валидаторов
- класс для хранения набора правил и прогона валидаторов по данным
- класс-билдер для задания набора правил
- класс для информации об ошибках

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


>>1125021

Сначала надо изучить чистый PHP и ООП.
Ответы: >>1125831
Аноним 2018/01/25 01:45:33  №1125804 560
Ответы: >>1125829
Аноним 2018/01/25 02:11:43  №1125807 561
Поясните мне за исключения.
Вижу примеры кода, когда наследуют кучу исключений от базового \Exception, а потом ловят их в set_exception_handler(function { }). Если видов исключений много и обрабатывать их надо по разному, то скоро вырастет простыня кода. Как от этого избавится?
Видел, что бросают исключения при валидации пользовательского ввода. Это вообще хорошая практика?
Ответы: >>1125829
Аноним 2018/01/25 02:36:45  №1125816 562
Гайд в шапке еще актуален?
Просто делаю задачку, а там доллар по 32
Ответы: >>1125817 >>1126211
Аноним 2018/01/25 02:37:48  №1125817 563
Аноним 2018/01/25 04:21:24  №1125829 564