Это копия, сохраненная 6 октября 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пожалуйста, не устраивайте чат и не постите оффтопик.
Этот тред подходит для начинающих. Не написал за свою жизнь ни одной программы и имеешь тройку по математике? Ты наш человек.
Предыдущий тред был тут: >>1033564 (OP) . Еще предыдущие треды ищутся в гугле по словам "клуб php" или в архиваче. Еще есть такой архив тредов: phpclub.rf.gd (в процессе разработки).
Мейлач лежит? Есть запасной тред на доброчане: /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 месяцев
- Посоветуйте редактор кода - Sublime Text 3, Notepad++, PhpStorm
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
- Что самое главное для программиста? Умение аккуратно оформлять код.
- ОП, сделай за меня мою работу или домашнее задание? — Это конечно, хорошая идея, но нет.
- Подскажи сайты для поиска работы, я не умею гуглить? — hh.ru, geekjob.ru, moikrug.ru (склеен с brainstorage.me), fl.ru, upwork.com (бывший одеск). Имей в виду, что кроме фриланса есть еще постоянная удаленная работа (remote job) когда тебе не надо тратить время на поиск заказов и переговоры с неадекватными заказчиками.
Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.
Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492
Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:
PSR-1: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
------------------
Итак, ты зашел в тред и решил помочь какому-то анону, дав ему совет или подсказку. Спасибо! Но прочти сначала эти напоминания, чтобы твоя помощь действительно была полезной.
Давай удочку, а не рыбу
Лучше не давать готовое решение проблемы, а рассказать как его искать. Может дать ключевые слова для гугла или ссылку. Но помогай, а не пытайся показать превосходство. Если даешь ссылки на нерусскоязычные статьи, упомяни об этом.
Будь доброжелателен
Не годится: «Ты мануал хоть раз в жизни открывал, обезьяна?»
Не годится: «В гугле забанили?»
Не годится: «Твой код плохой»
Хорошо: «Вот, как можно улучшить этот код: ...»
Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»
Не придирайся к знанию английского или русского языка.
Объясняй
Не очень хорошо: «сделай как в этом коде»
Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)»
Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»
Не проповедуй
Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.
Не придирайся к знанию английского языка, анон пишет как умеет.
Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.
Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492
Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:
PSR-1: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
------------------
Итак, ты зашел в тред и решил помочь какому-то анону, дав ему совет или подсказку. Спасибо! Но прочти сначала эти напоминания, чтобы твоя помощь действительно была полезной.
Давай удочку, а не рыбу
Лучше не давать готовое решение проблемы, а рассказать как его искать. Может дать ключевые слова для гугла или ссылку. Но помогай, а не пытайся показать превосходство. Если даешь ссылки на нерусскоязычные статьи, упомяни об этом.
Будь доброжелателен
Не годится: «Ты мануал хоть раз в жизни открывал, обезьяна?»
Не годится: «В гугле забанили?»
Не годится: «Твой код плохой»
Хорошо: «Вот, как можно улучшить этот код: ...»
Хорошо: «Ты неправильно используешь функцию abc(). Вот ее описание: ссылка, и как видишь ей надо передать строку, а не массив»
Не придирайся к знанию английского или русского языка.
Объясняй
Не очень хорошо: «сделай как в этом коде»
Хорошо: «если ты вставляешь текст от пользователя в SQL запрос, то получается SQl-инъекция, которая позволяет взломать твой сервер (ссылки). Чтобы этого избежать, надо вставлять данные с помощью плейсхолдеров (ссылки)»
Хорошо: «Помни, что код пишется для людей. Если писать такие большие функции, то в них становится трудно разобраться...»
Не проповедуй
Мы учим использованию самых распространненных подходов, стандартов, библиотеки фреймворков. Если ты не любишь ООП, пробелы в коде, jQuery, сам PHP, то рассказать об этом стоит в каком-нибудь другом треде.
Не придирайся к знанию английского языка, анон пишет как умеет.
Ах да. Если тебе кажется, что что-то в учебнике или задачах можно сделать лучше — пиши, обратная связь всегда очень полезна.
array_push только добавляет новый элемент в массив, не заменяя и не удаляя ничего. Так что добавится новый элемент, в котором будет то, что ты укажешь.
let data = {
id: id,
search_data: {
props: proposals,
airports: airports,
airlines: airlines,
gates: gates_info
}
};
Доступ к id я могу получить через $_POST['data']['id'];
Доступ к props я не могу получить через $_POST['data']['search_data']['props'] ровно как не могу его получить и к 'search_data' - Undefined index: search_data
Чому?
Предлагаешь нам угадывать без кода? Функцию json_decode с параметром true вызываешь? Не думал просто var_dump'ом вывести $_POST и посмотреть что там приходит?
laracast весь прошел, в том числе и платные видеокурсы за подписку, сделал свой каталог а куда дальшедвигаться хз.
https://theknacker.github.io/TheKnacker/default.html
Адаптивный пока не делал, но могу. Делал сайт почти без подглядываний, которые были в общем случае бесполезны. У гитхаба слетают шрифты, странно что верхний у лого не слетел.
нубсишник
Пк нет, а принести планшет/ноут нельзя.
Можно ли со смарта учиться?
Какой лучше подойдет?
Программки какие надо установить?
Клаву может какую скачать поудобнее?
Понимаю, что если захотеть, то можно без всего этого обойтись, но все же, может есть какие ахуительные/платиновые перделки о которых я просто не знаю?
Книгу купи, лол.
Со смарта можно что угодно делать, накачай на карту памяти видосов и смотри.
set_include_path('C://wamp64/www/application/third_party/library');
include('fld/lib.php');
На время выполнения скрипта путь для подключения будет полным для этой библиотеки и все замечательно работает.
Но я много где читал что таким способом уже давно никто не подключает и все используют неймспейсы. Так вот, котоны, покажите пожалуйста на простом примере как мне заменить мою конструкцию на модные неймспейсы.
здравствуйте, я гей
Ну и что ты делаешь в PHP треде? Это район для четких поцанчиков в шапках-гандонках.
Это баг в библиотеке, не надо использовать относительные пути при include. А вообще, сейчас используют автозагрузку, PSR-4 и композер, урок https://github.com/codedokode/pasta/blob/master/php/autoload.md
>>1050189
На каком?
на своем.как создать систему для авторизации на сайте,к примеру на форуме,чтобы оставлять комменты
Решил для себя сначала потратить месяц на html/css. Мне почему-то кажется, что лучше это выучить перед php. Зато больше уже не придется к этому возвращаться.
Потом уже пройду все задачи из шапки и просмотрю этот курс.
А у нас в шапке есть и на HTML/CSS задачи (только задачи, но зато хорошо проверяют понимание HTML).
> Адаптивный пока не делал, но могу.
Желательно наверно сделать, это же наверно учебный проект и ты хочешь получить опыт создания адаптивных версий страниц? Если у тебя нет возможности просмотреть сайт на смартфоне, в инструментах разработчика можно включить эмуляцию мобильных устройств.
Также, мне бы очень хотелось, чтобы при разработке адаптивной версии ты бы подумал и спроектировал верстку, удобную пользователям. По моему опыту, многие просто сводят "адаптивность" к тому, что выстраивают блоки вертикально. Это приводит к тому, что на мобильном устройстве получается длинная простыня из огромных (рассчитанных на десктоп) блоков, которую неудобно прокручивать, в которой трудно ориентироваться. Хотелось бы, чтобы ты избегал бы такой "механической" адаптации.
Вот например, работа, которую делал другой анон, и которую я в свое время хорошо оценил: http://nsdvw.github.io/template.html - но в ней адптивная версия слабая. Это конечно мой косяк, что тогда не обратил на это внимание и не сделал соответствующие замечания. Я сам на смартфоне сайты почти никогда не просматриваю и потому в адаптивности не очень хорошо разбирался.
Насчет шрифтов - ты просто как-то неправильно опубликовал сайт на gh-pages. Судя по файлам _config.yml, ты используешь генератор статических сайтов Jekyll. Вообще, можно и без этого обойтись - сделать в гите ветку gh-pages на основе master и файлы из нее будут видны на сайте. А судя по https://help.github.com/articles/configuring-a-publishing-source-for-github-pages/ можно даже обойтись без этого и просто сделать содержимое ветки master публично доступным.
К сожалению, из-за отсутствия шрифтов трудно понять, верно ли выдержаны отступы и размеры в верстке.
По сайту:
- надпись see portfloio на кнопке надо средствами CSS сделать заглавными буквами
- иконки соцсетей внизу надо центрировать горизонтально
- кнопку see portfolio можно сделать ссылкой к блоку с картинками внизу
- нужно средствами CSS (+ можно добавить JS для не поддерживающих CSS3 браузеров) сделать, чтобы кнопки выбора категории (All/Graphic/Illustration) работали. То есть надо назначить картинкам категории и скрывать/показывать их при нажатии кнопок с помощью CSS3. Можно с анимацией. Картинка может относиться к нескольким категориям. Нужно сделать привязку картинки к категориями с помощью HTML-разметки (например, атрибутов или классов) как можно логичнее и удобнее.
- картинки портфолио должны быть ссылками на работы
- логотип не соответствует макету
- логотип не реагирует на наведение мыши
- размер текста в меню меньше, чем на макете
- размеры шрифта, отступы в шапке не соответствуют макету. Попробуй рядом открыть макет и скриншот сайта и сравни. Например, отступ под кнопкой не соответствет макету, размеры шрифта в 'We are' и 'Webpaint' разные.
- размер шрифта в Consectetur неправильный
- мне кажется, что размер заголовка "Our Featured Works" не соответствует макету. Или это только у меня?
- отступ между абзацем "Curabitur blandit tempus porttitor. Maecenas faucibus mollis interdum." и кнопками под ним неправильный
- размеры кнопок категорий не соответствуют макету
- надпись "Vestibulum id ligula porta felis euismod semper, malesuada euismod." возможно должна быть блоее бледной (или это просто так шрифты рендерятся? не уверен)
- телефон надо сделать ссылкой с префиксом tel:, адрес - ссылкой на какой-нибудь сервис карт (гугл, яндекс, openstreetmap - любой)
В общем, сравни скриншоты своей верстки и макет. Абсолютно непохоже. Сравни размеры отступов, размеры элементов. Я понимаю, что шрифты могут рендериться по-разному в разных системах, но тут явно прост окривая верстка.
По HTML:
- в заголовке не хватает тега, отключающего совместимость со старыми версиями ИЕ (IE=edge)
> <area href="webpaint.html"> - опечатка?
- в HTML коде у тебя ссылка на логотипе сделана как <a href="webpaint.html">ebpaint</a> - значит, боты проиндексируют слово ebpaint, и его же будут читать программы, озвучивающие текст страницы. Плохо, нужно сделать нормальное название в коде
- <section class="section_one"> - лучше давать более осмысленные названия
- <h1>We are <span>Webpaint</span></h1> - тут наверно стоило применить тег strong для выделения названия
- & - знак & лучше кодировать с помощью HTML-мнемоник
- <div class="service_i">, <div class="service_ii"> - незачем делать классы с номерами, всем им можно назначить один класс. Более того, тут можно вообще было не ставить классы, а просто применить правила ко всем детям контейнера
- <div class="monitor_image"></div> - этот тег не нужен, картинку можно сделать с помощью фоновой картинки либо псевдоэлементов
- <h1>Our Featured Works</h1> - тег h1 не должен встречаться более одного раза
- ALL</a> - заглавные буквы надо делать средствами CSS, а в коде писать нормально
- тег address обозначает блок контактной информации, а не строчку с адресом
- контактную информацию о компании нужно оформить с помощью микроразметки vCard: http://microformats.org/wiki/hcard https://yandex.ru/support/webmaster/hcard/general.html?lang=ru (там есть новая версия формата, можно использовать ее)
- <span href - тут должен быть тег <a>
- <p for="cite"> - что тут делает атрибут for? Ну и тег <p> тут не нужен
В общем обрати внимание на то, что не надо городить лишние элементы, если без них легко обойтись. Также, хорошо бы давать адекватные имена классам. Советую ознакомиться с системой именования классов БЭМ:
- https://ru.bem.info/methodology/naming-convention/
Конечно на одностраничных сайтах это не так принципиально, но на больших сайтах без организации CSS превращается в свалку, возникают конфликты (один разработчик пишет правило, ломающее блок другого разработчика), становится трудно что-то править. Потому важно учиться организоывать код, и БЭМ тут хороший и продуманный вариант (в плане разбиения верстки страницы на независимые блоки).
> Адаптивный пока не делал, но могу.
Желательно наверно сделать, это же наверно учебный проект и ты хочешь получить опыт создания адаптивных версий страниц? Если у тебя нет возможности просмотреть сайт на смартфоне, в инструментах разработчика можно включить эмуляцию мобильных устройств.
Также, мне бы очень хотелось, чтобы при разработке адаптивной версии ты бы подумал и спроектировал верстку, удобную пользователям. По моему опыту, многие просто сводят "адаптивность" к тому, что выстраивают блоки вертикально. Это приводит к тому, что на мобильном устройстве получается длинная простыня из огромных (рассчитанных на десктоп) блоков, которую неудобно прокручивать, в которой трудно ориентироваться. Хотелось бы, чтобы ты избегал бы такой "механической" адаптации.
Вот например, работа, которую делал другой анон, и которую я в свое время хорошо оценил: http://nsdvw.github.io/template.html - но в ней адптивная версия слабая. Это конечно мой косяк, что тогда не обратил на это внимание и не сделал соответствующие замечания. Я сам на смартфоне сайты почти никогда не просматриваю и потому в адаптивности не очень хорошо разбирался.
Насчет шрифтов - ты просто как-то неправильно опубликовал сайт на gh-pages. Судя по файлам _config.yml, ты используешь генератор статических сайтов Jekyll. Вообще, можно и без этого обойтись - сделать в гите ветку gh-pages на основе master и файлы из нее будут видны на сайте. А судя по https://help.github.com/articles/configuring-a-publishing-source-for-github-pages/ можно даже обойтись без этого и просто сделать содержимое ветки master публично доступным.
К сожалению, из-за отсутствия шрифтов трудно понять, верно ли выдержаны отступы и размеры в верстке.
По сайту:
- надпись see portfloio на кнопке надо средствами CSS сделать заглавными буквами
- иконки соцсетей внизу надо центрировать горизонтально
- кнопку see portfolio можно сделать ссылкой к блоку с картинками внизу
- нужно средствами CSS (+ можно добавить JS для не поддерживающих CSS3 браузеров) сделать, чтобы кнопки выбора категории (All/Graphic/Illustration) работали. То есть надо назначить картинкам категории и скрывать/показывать их при нажатии кнопок с помощью CSS3. Можно с анимацией. Картинка может относиться к нескольким категориям. Нужно сделать привязку картинки к категориями с помощью HTML-разметки (например, атрибутов или классов) как можно логичнее и удобнее.
- картинки портфолио должны быть ссылками на работы
- логотип не соответствует макету
- логотип не реагирует на наведение мыши
- размер текста в меню меньше, чем на макете
- размеры шрифта, отступы в шапке не соответствуют макету. Попробуй рядом открыть макет и скриншот сайта и сравни. Например, отступ под кнопкой не соответствет макету, размеры шрифта в 'We are' и 'Webpaint' разные.
- размер шрифта в Consectetur неправильный
- мне кажется, что размер заголовка "Our Featured Works" не соответствует макету. Или это только у меня?
- отступ между абзацем "Curabitur blandit tempus porttitor. Maecenas faucibus mollis interdum." и кнопками под ним неправильный
- размеры кнопок категорий не соответствуют макету
- надпись "Vestibulum id ligula porta felis euismod semper, malesuada euismod." возможно должна быть блоее бледной (или это просто так шрифты рендерятся? не уверен)
- телефон надо сделать ссылкой с префиксом tel:, адрес - ссылкой на какой-нибудь сервис карт (гугл, яндекс, openstreetmap - любой)
В общем, сравни скриншоты своей верстки и макет. Абсолютно непохоже. Сравни размеры отступов, размеры элементов. Я понимаю, что шрифты могут рендериться по-разному в разных системах, но тут явно прост окривая верстка.
По HTML:
- в заголовке не хватает тега, отключающего совместимость со старыми версиями ИЕ (IE=edge)
> <area href="webpaint.html"> - опечатка?
- в HTML коде у тебя ссылка на логотипе сделана как <a href="webpaint.html">ebpaint</a> - значит, боты проиндексируют слово ebpaint, и его же будут читать программы, озвучивающие текст страницы. Плохо, нужно сделать нормальное название в коде
- <section class="section_one"> - лучше давать более осмысленные названия
- <h1>We are <span>Webpaint</span></h1> - тут наверно стоило применить тег strong для выделения названия
- & - знак & лучше кодировать с помощью HTML-мнемоник
- <div class="service_i">, <div class="service_ii"> - незачем делать классы с номерами, всем им можно назначить один класс. Более того, тут можно вообще было не ставить классы, а просто применить правила ко всем детям контейнера
- <div class="monitor_image"></div> - этот тег не нужен, картинку можно сделать с помощью фоновой картинки либо псевдоэлементов
- <h1>Our Featured Works</h1> - тег h1 не должен встречаться более одного раза
- ALL</a> - заглавные буквы надо делать средствами CSS, а в коде писать нормально
- тег address обозначает блок контактной информации, а не строчку с адресом
- контактную информацию о компании нужно оформить с помощью микроразметки vCard: http://microformats.org/wiki/hcard https://yandex.ru/support/webmaster/hcard/general.html?lang=ru (там есть новая версия формата, можно использовать ее)
- <span href - тут должен быть тег <a>
- <p for="cite"> - что тут делает атрибут for? Ну и тег <p> тут не нужен
В общем обрати внимание на то, что не надо городить лишние элементы, если без них легко обойтись. Также, хорошо бы давать адекватные имена классам. Советую ознакомиться с системой именования классов БЭМ:
- https://ru.bem.info/methodology/naming-convention/
Конечно на одностраничных сайтах это не так принципиально, но на больших сайтах без организации CSS превращается в свалку, возникают конфликты (один разработчик пишет правило, ломающее блок другого разработчика), становится трудно что-то править. Потому важно учиться организоывать код, и БЭМ тут хороший и продуманный вариант (в плане разбиения верстки страницы на независимые блоки).
По CSS:
> @font-face {
> font-family: Lato-Black;
> @font-face {
> font-family: Lato-Light;
Неправильно. Это не разные шрифты, а разные начертания одного шрифта (с разным весом). То есть они должны быть объявлены например как Lato, но с разным font-weight/style.
Также, Ты испоьзуешь лишь один формат файлов шрифта (ttf). Он будет наверно не везде поддерживаться, да и не очень оптимален в плане веса. Вот информация о поддерживаемых форматах:
- https://transfonter.org/formats
- http://caniuse.com/#feat=ttf
Так, TTF поддерживается довольно широко, но ты бы мог захотеть добавить еще EOT версию для совсем старых ИЕ (вроде 8). Также, ты бы мог захотеть добавить WOFF2 версию, которая современная и дает хорошее сжатие, но работает только в новых браузерах. Конвертировать шрифты можно на fontsquirrel, однако желательно глазами потом проверить результат.
Также, кроме использования новых форматов, можно вырезать из шрифта неиспользуемые диапазоны символов. Ну например, у тебя файлы шрифтов имеют вес по 600Кб на одно начертание. Это мягко говоря, очень много. загрузка шрифтов также задерживает отображение текста, так что это влияет на производительность сайта. Потому тебе стоит поэкспериментировать с оптимизацией этих шрифтов.
Есть конечно вариант подключать шрифты через Google Fonts - он умеет и генерировать разные форматы, и вырезать диапазоны символов, но хотя бы один раз стоит это сделать вручную, чтобы научиться. Да и в некоторых странах гугл заблокирован, потому выгоднее хранить шрифты на своем сервере.
В любом случае, тебе надо представлять, какие бывают форматы шрифтов и какие у них особенности, как с ними работать.
Для подключения шрифта есть так называемый "Mo Bulletproof Syntax" который с помощью разных хаков пытается обеспечить совместимость с максимальным числом браузеров: http://blog.fontspring.com/2011/02/the-new-bulletproof-font-face-syntax/ Также, можно еще подсмотреть,какой синтаксис использует Google Fonts и сделать аналогично.
Шрифт MyriadPro по моему, принадлежит Adobe. У тебя есть лицензия на его использование?
Также, стоит ли подключать целый шрифт ради логотипа? Ты не мог бы сконвертировать его в кривые и сохранить как SVG например? Либо оптимизировать шрифт логотипа, вырезав из него все лишние символы?
То, что ты смог вытащить из макета SVG - это хорошо. Но адоб в них написал мусора (SVG это текстовый формат, посмотри сам). Нужно посмотреть, есть ли возможность сохранить их без адобовских расширений, либо вырезать их. Обычно там есть опция вроде "Save for Web", которая сохраняет картинки в оптимизированном виде. Гугление показывает что в том же иллюстраторе есть опция Export например.
Тут тоже что-то упомянуто: https://commons.wikimedia.org/wiki/User:Quibik/Cleaning_up_SVG_files_manually#Adobe_Illustrator
> header.main_header
Не нужно тут указвыать название тега, это излишне.
> font-family: Lato-Black;
Нужно указывать стандартный шрифт через запятую (sans, sans-serif, cursive итд) в таких случаях.
> a.portfolio_button {
> display: flex;
Я думаю, что не стоит тут использовать flex. Зачем? У тебя же внутри кнопки ничего нету. Также, flex не везде поддерживается ( http://caniuse.com/#search=flexbox ). Мне кажется, его стоит использовать там, где обычные свойства не справляются.
> div.service_i {
> margin: 6% 0.56em 0 0.5em;
Зачем тут отступ сверху? Его надо было задавать на контейнере, а не на содержимом.
> display: inline-block;
> justify-content: center;
Эти свойства вообще совместимы? тут написано: https://developer.mozilla.org/ru/docs/Web/CSS/justify-content
> Применяется к: flex-контейнеры
Что-то у меня ощущение, что ты и документацию по flex толком не читал.
> div.service_i {
> max-width: 23%;
Тут должно быть width, а не max-width. Или у тебя колонки могут быть разной ширины?
div.service_i, div.service_ii - тут почти одно и то же, надо избавиться от копипасты
> div.service_i p
Странно писать стили специально для абзаца. Мне кажется, тебе там лучше вообще убрать тег p, либо применять стили к тексту внутри блока вообще, а не только внутри p.
Вообще, старайся не применять стили именно к p. Так как это просто часть текста, и логичней задавать правила для текста вообще, а не для отдельного абзаца в нем.
> div.service_i p
> width: 100%;
Для блочных элементов это писать не надо. Ты ведь знаешь, как по умолчанию определяется ширина блочных элементов вроде <p>? Если нет - https://github.com/codedokode/pasta/blob/master/html/positioning.md
Еще, ты задаешь background-size для SVG картинок. А без этого они отображаться не могут? Нельзя его задавать в самих картинках? А то при любом редактировании надо править CSS, чтобы не нарушались пропорции, это ведь неудобно.
Ну и напоследок, про браузерную поддержку. Я как ленивый человек, сделал скриншоты в browserstack. Это довольно мерзкий сервис, он постоянно требует зарегистрироваться, шлет маркетинговый спам, прячет бесплатные пункты в меню, но скриншоты он делает хорошо.
Я обычно выбираю браузеры так: новые версии Chrome, Firefox, Edge, древние версии Firefox/Chrome, все версии IE (8, 9, 10, 11), пара смартфонов постарше.
Вот результат: https://www.browserstack.com/screenshots/a0b41a07928e9c8010b4c58f85a3af4f85a80eb3
- FF3.6 и IE8 конечно древние, но они поддерживают CSS2 и что-то минимально работающее в них должно быть сделать нетрудно. Хотя бы чтобы шапка была не белой, а темной, и картинки не вытсраивались вертикально.
- IE7 - ладно, у него свои проблемы, тебе вряд ли будет интересно с ними разбираться, и он очень древний.
В некоторых других браузерах все разваливается и разъезжается. Это верный признак того, что верстка сама по себе не очень хорошо продумана, а может ты даже подбирал свойства, не понимая, как они работают. Потому что надо пострататься, чтобы сломать верстку в относительно новом Chrome 14 или IE10.
По CSS:
> @font-face {
> font-family: Lato-Black;
> @font-face {
> font-family: Lato-Light;
Неправильно. Это не разные шрифты, а разные начертания одного шрифта (с разным весом). То есть они должны быть объявлены например как Lato, но с разным font-weight/style.
Также, Ты испоьзуешь лишь один формат файлов шрифта (ttf). Он будет наверно не везде поддерживаться, да и не очень оптимален в плане веса. Вот информация о поддерживаемых форматах:
- https://transfonter.org/formats
- http://caniuse.com/#feat=ttf
Так, TTF поддерживается довольно широко, но ты бы мог захотеть добавить еще EOT версию для совсем старых ИЕ (вроде 8). Также, ты бы мог захотеть добавить WOFF2 версию, которая современная и дает хорошее сжатие, но работает только в новых браузерах. Конвертировать шрифты можно на fontsquirrel, однако желательно глазами потом проверить результат.
Также, кроме использования новых форматов, можно вырезать из шрифта неиспользуемые диапазоны символов. Ну например, у тебя файлы шрифтов имеют вес по 600Кб на одно начертание. Это мягко говоря, очень много. загрузка шрифтов также задерживает отображение текста, так что это влияет на производительность сайта. Потому тебе стоит поэкспериментировать с оптимизацией этих шрифтов.
Есть конечно вариант подключать шрифты через Google Fonts - он умеет и генерировать разные форматы, и вырезать диапазоны символов, но хотя бы один раз стоит это сделать вручную, чтобы научиться. Да и в некоторых странах гугл заблокирован, потому выгоднее хранить шрифты на своем сервере.
В любом случае, тебе надо представлять, какие бывают форматы шрифтов и какие у них особенности, как с ними работать.
Для подключения шрифта есть так называемый "Mo Bulletproof Syntax" который с помощью разных хаков пытается обеспечить совместимость с максимальным числом браузеров: http://blog.fontspring.com/2011/02/the-new-bulletproof-font-face-syntax/ Также, можно еще подсмотреть,какой синтаксис использует Google Fonts и сделать аналогично.
Шрифт MyriadPro по моему, принадлежит Adobe. У тебя есть лицензия на его использование?
Также, стоит ли подключать целый шрифт ради логотипа? Ты не мог бы сконвертировать его в кривые и сохранить как SVG например? Либо оптимизировать шрифт логотипа, вырезав из него все лишние символы?
То, что ты смог вытащить из макета SVG - это хорошо. Но адоб в них написал мусора (SVG это текстовый формат, посмотри сам). Нужно посмотреть, есть ли возможность сохранить их без адобовских расширений, либо вырезать их. Обычно там есть опция вроде "Save for Web", которая сохраняет картинки в оптимизированном виде. Гугление показывает что в том же иллюстраторе есть опция Export например.
Тут тоже что-то упомянуто: https://commons.wikimedia.org/wiki/User:Quibik/Cleaning_up_SVG_files_manually#Adobe_Illustrator
> header.main_header
Не нужно тут указвыать название тега, это излишне.
> font-family: Lato-Black;
Нужно указывать стандартный шрифт через запятую (sans, sans-serif, cursive итд) в таких случаях.
> a.portfolio_button {
> display: flex;
Я думаю, что не стоит тут использовать flex. Зачем? У тебя же внутри кнопки ничего нету. Также, flex не везде поддерживается ( http://caniuse.com/#search=flexbox ). Мне кажется, его стоит использовать там, где обычные свойства не справляются.
> div.service_i {
> margin: 6% 0.56em 0 0.5em;
Зачем тут отступ сверху? Его надо было задавать на контейнере, а не на содержимом.
> display: inline-block;
> justify-content: center;
Эти свойства вообще совместимы? тут написано: https://developer.mozilla.org/ru/docs/Web/CSS/justify-content
> Применяется к: flex-контейнеры
Что-то у меня ощущение, что ты и документацию по flex толком не читал.
> div.service_i {
> max-width: 23%;
Тут должно быть width, а не max-width. Или у тебя колонки могут быть разной ширины?
div.service_i, div.service_ii - тут почти одно и то же, надо избавиться от копипасты
> div.service_i p
Странно писать стили специально для абзаца. Мне кажется, тебе там лучше вообще убрать тег p, либо применять стили к тексту внутри блока вообще, а не только внутри p.
Вообще, старайся не применять стили именно к p. Так как это просто часть текста, и логичней задавать правила для текста вообще, а не для отдельного абзаца в нем.
> div.service_i p
> width: 100%;
Для блочных элементов это писать не надо. Ты ведь знаешь, как по умолчанию определяется ширина блочных элементов вроде <p>? Если нет - https://github.com/codedokode/pasta/blob/master/html/positioning.md
Еще, ты задаешь background-size для SVG картинок. А без этого они отображаться не могут? Нельзя его задавать в самих картинках? А то при любом редактировании надо править CSS, чтобы не нарушались пропорции, это ведь неудобно.
Ну и напоследок, про браузерную поддержку. Я как ленивый человек, сделал скриншоты в browserstack. Это довольно мерзкий сервис, он постоянно требует зарегистрироваться, шлет маркетинговый спам, прячет бесплатные пункты в меню, но скриншоты он делает хорошо.
Я обычно выбираю браузеры так: новые версии Chrome, Firefox, Edge, древние версии Firefox/Chrome, все версии IE (8, 9, 10, 11), пара смартфонов постарше.
Вот результат: https://www.browserstack.com/screenshots/a0b41a07928e9c8010b4c58f85a3af4f85a80eb3
- FF3.6 и IE8 конечно древние, но они поддерживают CSS2 и что-то минимально работающее в них должно быть сделать нетрудно. Хотя бы чтобы шапка была не белой, а темной, и картинки не вытсраивались вертикально.
- IE7 - ладно, у него свои проблемы, тебе вряд ли будет интересно с ними разбираться, и он очень древний.
В некоторых других браузерах все разваливается и разъезжается. Это верный признак того, что верстка сама по себе не очень хорошо продумана, а может ты даже подбирал свойства, не понимая, как они работают. Потому что надо пострататься, чтобы сломать верстку в относительно новом Chrome 14 или IE10.
Если вдруг интересно, у меня был урок про верстку под ИЕ: https://gist.github.com/codedokode/855e3970124687b26a1c
Написал метод, который проверяет домен и делает редирект на мой домен с сохранением пути, если на проект заходят с чужого домена.
Теперь думаю, не лучше было бы чтобы в этом случае скрипт выкидывал 404 или еще какую ошибку?
https://menote.ru - домен воришка уже с моим редиретком
У него не редирект. Он просто настроил свой домен, чтобы он резолвился на твой IP адрес (а поисковые системы видимо думали, что у твоего адреса несколько доменов-зеркал).
Тут есть твой косяк, что твой сервер не проверяет Host в запросе и отвечает на запрос с любым Host.
Однако, ты мог бы явно указать поисковикам основной домен в robots.txt: https://yandex.ru/support/webmaster/controlling-robot/robots-txt.html#host?lang=ru
Если ты делаешь редирект, убедись что он идет с кодом HTTP 301 (permanent redirect). А у тебя стоит 302, иди почитай мануалы яндекса.
Вообще, я не знал про такие вещи. Спасибо за информацию. Это явно какой-то трюк для угона домена, и жаль, что поисковые системы его допускают. Ты бы мог написать подробно все это в обратную связь яндекса/гугла, может быть они заинтересуются и закроют уязвимость, хотя у меня есть ощущение, что нет.
Судя по этой статье, они знают про это: https://yandex.ru/support/webmaster-troubleshooting-info/mirrors/mirror-of-another-site.html
Раз так, можно публиковать информацию об уязвимости максимально широко, например, в блоге, пусть ей все пользуются, может тогда поисковики зачешутся.
Также, стоит подключить вебмастер, если он не подключен.
Сенкс. Есть версия что редирект вешают на время чтобы разбанить домен.
А в кружке точно чай? Не врешь?
Есть 3 роута:
1) /catalog/authors и метод контроллера который просто выводит список всех авторов из бд
2)/catalog/authors/{author} метод контроллера который выводит имя автора если я передаю его айди соответственно.
С этими 2мя я справился, но вот с 3им
3)/catalog/authors/{author}/{book} не получается
Суть в том что я хочу вывести первую книгу заданного автора
Отношения между моделями соответственно:
Автор-Книга 1:М
методы books() и author() соответсвенно.
Маршрут вида
/catalog/authors/1/1 Работает, НО на /catalog/authors/1/2 Он выдаёт точной такой же результат(тайтл книги к примеру, как и к /catalog/authors/1/1) Хотя 2ая книга автора вообще не задана в БД, ХЕЛП, постарался объяснить максимально понятно как смог.
Все доки русско и англоязычные уже изучил, но все равно не пойму в чем трабл.
curl -v 'http://другой домен/'
Как ты собрался сайты делать если ты не умеешь вручную HTTP запрос отправить? Основы же.
Вместо командной строки конечно можно любую другую программу использовать.
>>1050533
Ты не дал ссылку на твой код, как мы поймем, в чем ошибка?
Я прошу только подсказать в логике, мб какую-то проверку надо делать? Ну если надо код могу дать.
https://github.com/telepok/php-test/blob/master/oop4.php
>>1050389
>>1050398
Ого, схоронил, спасибо ОП.
Я верстку делал за 16 часов, спать упал часов в 4 утра. Так нельзя делать. Решил попробовать узкие знания. Я ведь даже с этими тонкостями шрифтов не знаком. Все делал как читал спецификации. Тащемта нужно бы поискать ресурсов, где всякие полезности написаны, чтобы улучшить верстку. Алсо в точку ты про псевдо-классы подметил, но с ними нужна практика я думаю, поэкспериментировать для себя хотя бы.
>Ты просто как-то неправильно опубликовал сайт на gh-pages
Я вообще GitHub первый раз использую на самом деле. Буду вики читать.
Ну, я думаю тут и так все понятно, я даже с коллонами не знаком. Наверну литературы, продолжу читать спецификации. Ну и сайтик доделаю, потом сюды кину. А за инфу большое спасибо ОПчик.
Алсо, верстку прям попиксельно делать как на макете? И еще я там нахреначил em, даже писал 0.345em лол, чего навернуть по верстке для утят как я можно? И еще, не можешь подсказать, где такие задания на верстку еще можно взять? Я неправильно гуглю, только вот это нашел -
https://thesiteslinger.com/blog/psd-to-html-slicing-tutorials
Ну и тутор твой изучу конеш, алсо пройду те ссылки в уроках что ты оставил.
1. Создаешь таблицу пользователей со столбцами id, логин и пароль, это минимум.
2. Создаешь на сайте страницу авторизации с полями ввода логина и пароля и кнопкой отправки данных.
3. На кнопку вешаешь обработчик который берет логин, введенный пользователем и создает запрос к базе к таблице пользователей. Если находит такого пользователя, то берет пароль из базы и сравнивает с паролем, введенным пользователем. Если все совпадает, то создаешь сессию на сервере с этими данными, ну и в куки пользователю пишешь логин.
4. На определенных страницах, прежде чем отрисовать ее клиенту, лезешь в куки и смотришь есть там что или нет. Если там есть данные о том, что клиент авторизован - отрисовываешь страницу с возможностью комментирования и т.д.
Ну и естественно в базе хранятся не пароли в чистом виде, а их хэш. И при авторизации запрашиваешь из базы хэш и сравниваешь с хэшем введенного пользователем паролем.
>>1050206
Спасибо, почитаю.
Так а разница-то в чем?
1. Создаешь страницу регистрации юзера с теми же полями.
2. Юзер вводит логин и пароль и клацает по кнопке регистрации.
3. Введенные данные отправляются постом на сервер, где твой код создает запрос к базе и записывает в столбец логина логин, который на сервер отправила форма и в столбец пароля записывает хэш пароля, который так же отправила форма.
А потом редирект на страницу авторизации с сообщением о том что регистрация прошла успешно.
Чем больше нравится.
Вроде задача тривиальная. Можете накидать примерно как это будет выглядить?
А есть маленький кусок выражения из этого длинного, который может быть, а может и не быть
<p class=\"genres\">жанр <a data=\"($complex)\" data-tag=\"[0-9]\" href=\"/genres/($complex)\" class=\"audio-track\" itemprop=\"genre\">$complex</a></p>
Так вот как правильно записать, что этого выражения может не быть? [кусоквыражения]? и [кусоквыражения]*? не работают, удаляю кусок - регулярка работает. Помогите кушать хочется
> А есть маленький кусок выражения из этого длинного, который может быть, а может и не быть
https://regex101.com/r/QyKvVX/1
И ты пользуйся этим сервисом, а то без регулярки сложно понять, что там у тебя не работает.
Алсо парсить HTML регулярками ненадёжно и сложно, лучше взять пакет вроде этого: https://github.com/FriendsOfPHP/Goutte
>>1051069
Сохраняешь в БД "дату когда фапал последний раз". При каждом обращении к странице вычитаешь текущее время от того, которое было сохранено в БД.
>>1051210
Ну так описывай сразу, что есть "реальные задачи", а то толку от твоего поста ноль. ИМХО вполне реальная задача у того анона.
Недавно начал изучать ЖС и понадобился компилятор на шиндовс семь.Какие можете посоветовать?
Интерпретатор JS встроен в браузер, а если ты любишь запускать JS код в консоли (что хорошо) и хочешь отдельный интепретатор, то установи Node.JS.
-курс валют
https://ideone.com/WRyecp
-первая задача про кубик
https://ideone.com/eEgl2a
-вторая задача про кубик
https://ideone.com/CIhPPM
-таблица умножения
https://ideone.com/cHU78n
-задача про банк и кредит
https://ideone.com/Jriuhk
-айфон
https://ideone.com/xPwyQ0
А от чего у тебя горит? Я думал нуфаков нужно учить таким основам в первую очередь.
А че он эти значения не включил?
ну не захотел видимо.
В методе, который отрабатывает по твоему роуту, второй параметр вообще хоть как-нибудь в работе участвует? Такое ощущение что айди книги в него передается, но из базы происходит выборка без его участия. Посмотри модели и запросы. Возможно у тебя в них просто что-нибудь вроде min(book_id) или min(book_year). Как-то так.
А как ты собираешься селектить первую вторую и тд книги у каждого автора?
У книг есть отдельное общее для книг айди, как и отдельное айди для автора?
Поясни какие у тебя там в бд таблички и какие запросы ты используешь?
Ну а вообще берешь и дампишь то, что у тебя влетает в метод.
То есть вот у тебя /catalog/authors/{author}/{book}
пишешь
/catalog/authors/test/kek
дампишь в методе эти переменные, смотришь что они обе получаются и что обе дальше передаются нужным методам модели.
Дальше смотришь эти модельные методы. Тупо берешь и в модели дампишь их перед селектом и смотришь что они там те же что и нужны.
Но я вангую что у тебя в логике ошибка какая-то. Ты написал запрос Селект книгу где id автора = 1 и id книги = 1 и это сработало, потому что у книги с id 1 автор действительно имеет id 1, а некс уже не совпало и попизде логика.
Через месяца 4 если не кинут.
Я немного прогаю на PHP, имею понимание, что такое PHP, есть опыт разработки на WordPress, Laravel + несколько самописных систем.
Сейчас работаю в компании на небольшой зарплате и решаю задачи в духе "поменять цвет кнопки" и "изменить текст", удаленно, занимает, как правило, не больше часа в день. Попутно учусь в университете. Свободными после учебы и подработки остается около 10 часов в день (если все "дыры" закрывать на выходных).
Стоит ли устраиваться на постоянку, которая будет подразумевать 8 часов работы в день? Вопрос о том, насколько это сейчас полезное вложение сил и времени, с учетом того, что я буду полностью выкладываться с таким графиком жизни, насколько мне будет полезен этот опыт. В деньгах особо сильно не нуждаюсь (есть где жить, что кушать и на что гулять), но и лишними они не будут.
Полгода
Нет, вкатываться в программирование ради денег - дурацкая затея, навеянная тебе рекламой различных сомнительных курсов. ЗП у начинающих обычно на уровне кассиров из пятёрочки, только до уровня начинающего тебе потребуется 6-12 месяцев. И всё это время по-хорошему нужно уделять 4-5 часов в день минимум на обучение.
>>1052828
Всунь phpinfo() в скрипт, на странице увидишь полный путь к php.ini, который используется. Его и редактируй.
> винда
Это мало о чём говорит, ты руками сервер ставил или какую-то сборку использовал?
>>1052644
Пробуй. Меня затянуло так, что дропнул вышку.
Очевидно, что для запуска php-скрипта у тебя должен быть установлен интерпретатор php. По умолчанию он устанавливается в c:\php, если у тебя винда.
Далее, копируешь файл php.ini-production в php.ini. И уже в этом php.ini находишь строчку extension=php_mbstring.dll и убираешь символ ; в ее начале.
Сразу же включи там display_errors = On и error_reporting = E_ALL, а то ошибки не будут отображаться.
HTML - https://pastebin.com/Zm0Z2AEc
CSS - https://pastebin.com/urNpQuYn
Да, стоит, так как сейчас у тебя отключены предупреждения об использовании устаревших функций и возможностей.
Лень копаться в симфони, да и она меня устраивает(blade рулит!). Хочется изучить архитектуру, дабы в сложнейших ситуациях не быть связанным по рукам и ногам.
Не хочешь сделать задание на TestHub из ОП поста на ларавеле? Оно по уровню сложности напоминает реальные приложения.
забыл напомнить, что я нулина в англ лэнгвич
Вот само задание: https://gist.github.com/codedokode/8733007
Без знания английского конечно твои возможности сильно ограничены.
я понял, а есть ли еще подобного рода проекты, заранее, так скажем, ибо энтузиазма хоть отбавляй
русская документация и слитые курсы 5.2
Выводит 2.19666239566E+19
Нужно вывести int
Преобразование через (int) дает ноль
Как решить?
>сначала идет +7 или 8, за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов
Первую часть я могу сделать. А вот
>между которыми может быть любое число скобок, минусов, пробелов
не могу придумать как сделать. Похоже что мне нужна регулярка, которая может встречаться где угодно от 0 раз и больше.
([- \\(\\)]*[0-9]){10}
Регулярное выражение, которое находит десять комбинаций вида цифра и перед ней пробел, минус, скобка. Это из первой задачи про номера.
[- \\(\\)]
Это из второй задачи, регулярка ищет все лишние символы и потом меняет их на пустую строку, по сути, выкидывает
$regexp1 = "/[- \\(\\)]/u";
$replace_result = preg_replace($regexp1, "", $number);
Двойные обратные слеши экранируют символы скобки.
print "--------- $link_melodious --------------";
$link_melodious = strval($link_melodious);
print "=========== $link_melodious =============";
printf($link_melodious);
Итог:
--------- 4.55576239566E+19 --------------=========== 4.55576239566E+19 =============4.55576239566E+19
Тобi пизда.
Можно ли создать браузерную MMO RTS используя современные инструменты?
в вопросе есть ответ
Пробовал передавать items кастомную функцию - рендерится стандартный темплейт всегда
->checkBoxList($items, ['item' => function($a,$b,$c...$z) { // }])
Нашел: вместо \yii\widget\ActiveForm использовал \yii\bootstrap\ActiveForm, в первом почему то функция item не отрабатывала
Ђ«ҐЄбҐ©Љ®§«®ў
в базе данных указана UTF8
При подключении '--client_encoding=UTF8'
что не так?
Читаю Котерова сейчас, в пиратском скане, но денег на книгу нет, к сожалению.
Так вот, скрытые чекбоксы делают по той причине, что браузер передает данные о чекбоксе только в том случае, если он нажат. Если не нажат, то совсем ничего не передается. Это может быть неудобным. Скрытый чекбокс передает ноль в любом случае, который перебивается единицей в случае активирования чекбокса.
<input type="hidden" name="known[PHP]" value="0">
<input type="checkbox" name="known[PHP]" value="1">PHP
Если честно, выглядит как какой-то костыль - достаточно переставить местами инпуты (или поменяться алгоритму разбора URL в PHP) и все сломается. Не надо так.
>Не надо так.
Предложите свой вариант. Человек спросил, для чего это вообще делается, я ответил. Я сам занимаюсь изучением две недели от силы и не претендую на истину в последней инстанции, более того, я ссылаюсь на довольно авторитетный источник.
И в общем-то, как может поменяться порядок разбора, если ты знаешь, что перед каждым чекбоксом стоит скрытый чекбокс, стоят они парами, имена элементов у них совпадает, второй видимый элемент всегда переписывает значение невидимого.
Двачую этого. Если не можешь предложить альтернативу - Лучше молчи.
Человек спросил про поведение какого-то компонента в фреймворке. Какой тут может быть альтернативный вариант? Фреймворк на то и фреймворк, что поменять в нем это поведение нельзя.
Если же речь не о фреймворке, то надо просто не ставить скрытые инпуты, а ставить только чекбоксы.
Москва, требуется PHP разработчик в одну крупную компанию.
Проект объемный и долгосрочный, расскажу по скайпу.
По стеку: PHP7, MySql, Redis, RabbitMQ, разумная верстка на Bootstrap + js
По деньгам: 100к+
Коллектив небольшой, зп белая и стабильная(требуется диплом о законченной вышке, увы, но таковы требования).
Нужно хоть что-то уметь на PHP и иметь желание работать и обучаться.
Почта для связи: php-dev-$,DrequiredANUSyL{AandexPUNCTUMr^[-u
Да, полный день, в офисе.
Пхп не хочет понимать катакану, выдает эроры.
Как пример: https://ideone.com/d34lwi
То есть строки с каной не хочет обрабатывать. У меня на локалке такая же ошибка, так что неработоспособность mb_* на идеоне тут не кажется основной проблемой.
Ну и еще раз повторю, проблема не в том, что у меня закорючки вместо символов, а именно:
Parse error: syntax error, unexpected ''こえ'' (T_CONSTANT_ENCAPSED_STRING), expecting ')' in C:\OpenServer\domains\nech.voc\index.php on line 8
Не понимаю просто :(
Видимо сами символы, которые ты подставляешь из базы, или копируешь со страницы, пришли в другой кодировке.
Я взял те же символы с википедии, все норм.
https://ideone.com/b1vlPR
Что самое интересное, даже при удалении символов хираганы, ошибка остается.
https://ideone.com/QmoW9P
Видимо там остаются какие-то невидимые ошметки, спецсимволы или какая-нибудь другая нех.
Короче проблема в копировании из некорректного источника.
Почему так происходит не знаю, нужно суммонить опа.
> хоть что-то уметь на PHP
> обязательная вышка
Вместо того, чтобы брать человека, навыки которого будут приносить вам деньги, вы готовы брать кого попало, но с бумажкой. Я сам учился на программиста и львиная доля моих одногруппников с корочками ничего сложнее цикла написать не могут. Советую пересмотреть ваши странные требования, иначе адекватные разработчики будут обходить вас стороной.
Я сначала думал, что кавычки не в порядке, но потом выяснилось, что затесался нестандартный символ.
В такой ситуации полезно использовать hex-редактор (он тебе все равно может в будущем пригодиться), который позволяет просматривать содержимое файла побайтово и видеть любые невидимые символы.
- https://ru.wikipedia.org/wiki/Hex-редактор
- https://en.wikipedia.org/wiki/Comparison_of_hex_editors
Файл состоит из байтов, каждый байт состоит из 8 бит и может принимать 2 ^ 8 = 256 значений. Их обычно обозначают числами от 0 до 255. В hex-редакторах принято использовать 16-чные числа, так как одна 16-ричная цифра соответствует ровно 4 битам и байт можно записать в виде 2 цифр, от 00 до FF.
В случае utf-8, символы различить довольно просто:
00-1f - невидимые символы вроде перевода строки (0A в линуксе)
20 (=32 десятичное) пробел
21-7e символы ASCII - латинница, цифры, знаки препинания
7f-9f - невидимые и неиспользуемые символы
a0-fe - используются группами для кодирования остальных символов. Кирилица кодируется например парами таких символов. Ну например,
ff - вроде не используется
Если что, кодировки строк описаны в моем уроке https://github.com/codedokode/pasta/blob/master/cs/strings.md
Сам PHP ничего не знает про кодировки, а все специальные символы (знак доллара, кавычки, арифметические операции) располагаются в диапазоне ASCII. Символы с кодами выше 7f для него ничего не значат и могут встречаться только в определенных случаях: строках, именах переменных (да, можно писать переменные кирилицей, если ты любишь 1С) или комментариях.
Скачиваем и открываем твой код в hex-редакторе. Мне было лень искать на компьютере HxD который у меня где-то есть, и я просто взял первый попавшийся онлайн-редактор: https://hexed.it/ и открыл им скачанный с ideone файл. Вот ссылка для ленивых: https://hexed.it#base64:PD9waHAKbWJfaW50ZXJuYWxfZW5jb2RpbmcoInV0Zi04Iik7Cgokdm9jYWJ1bGFyeSA9IGFycmF5KAoJJ9C00L7QvCcgPT4gJ+OBhuOBoScsCgkn0LPQvtC70L7RgScgPT7jgIAn44GT44GIJywKKTsKCnZhcl9kdW1wKCR2b2NhYnVsYXJ5KTs= (содержимое файла закодировано в самой ссылке).
Он довольно удобный, показывает не только коды, но и соответствующие им символы, а также раскодирует выделенные байты в разных форматах.
Открыв файл, мы изучаем по очереди байты, сразу пропуская "обычные" байты с кодами меньше 7f. Смотрим только на байты с кодами старше 7f и проверяем, нет ли там чего странного.
Вот например как кодируется слово "дом": D0 B4 D0 BE D0 BC (проверить коды можно тут http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024 )
А вот строка うち: E3 81 86 E3 81 A1 (проверить: http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12288&number=128 )
Изучи внимательно содержимое файла и попробуй найти там ошибку синтаксиса. Скорее всего она в той строке, которая указана в сообщении об ошибке.
Также вместо hex-редактора можно использовать режим в текстовом редакторе, показывающий не-ascii символы, но полезно будет хоть раз поковыряться в байтах.
Я сначала думал, что кавычки не в порядке, но потом выяснилось, что затесался нестандартный символ.
В такой ситуации полезно использовать hex-редактор (он тебе все равно может в будущем пригодиться), который позволяет просматривать содержимое файла побайтово и видеть любые невидимые символы.
- https://ru.wikipedia.org/wiki/Hex-редактор
- https://en.wikipedia.org/wiki/Comparison_of_hex_editors
Файл состоит из байтов, каждый байт состоит из 8 бит и может принимать 2 ^ 8 = 256 значений. Их обычно обозначают числами от 0 до 255. В hex-редакторах принято использовать 16-чные числа, так как одна 16-ричная цифра соответствует ровно 4 битам и байт можно записать в виде 2 цифр, от 00 до FF.
В случае utf-8, символы различить довольно просто:
00-1f - невидимые символы вроде перевода строки (0A в линуксе)
20 (=32 десятичное) пробел
21-7e символы ASCII - латинница, цифры, знаки препинания
7f-9f - невидимые и неиспользуемые символы
a0-fe - используются группами для кодирования остальных символов. Кирилица кодируется например парами таких символов. Ну например,
ff - вроде не используется
Если что, кодировки строк описаны в моем уроке https://github.com/codedokode/pasta/blob/master/cs/strings.md
Сам PHP ничего не знает про кодировки, а все специальные символы (знак доллара, кавычки, арифметические операции) располагаются в диапазоне ASCII. Символы с кодами выше 7f для него ничего не значат и могут встречаться только в определенных случаях: строках, именах переменных (да, можно писать переменные кирилицей, если ты любишь 1С) или комментариях.
Скачиваем и открываем твой код в hex-редакторе. Мне было лень искать на компьютере HxD который у меня где-то есть, и я просто взял первый попавшийся онлайн-редактор: https://hexed.it/ и открыл им скачанный с ideone файл. Вот ссылка для ленивых: https://hexed.it#base64:PD9waHAKbWJfaW50ZXJuYWxfZW5jb2RpbmcoInV0Zi04Iik7Cgokdm9jYWJ1bGFyeSA9IGFycmF5KAoJJ9C00L7QvCcgPT4gJ+OBhuOBoScsCgkn0LPQvtC70L7RgScgPT7jgIAn44GT44GIJywKKTsKCnZhcl9kdW1wKCR2b2NhYnVsYXJ5KTs= (содержимое файла закодировано в самой ссылке).
Он довольно удобный, показывает не только коды, но и соответствующие им символы, а также раскодирует выделенные байты в разных форматах.
Открыв файл, мы изучаем по очереди байты, сразу пропуская "обычные" байты с кодами меньше 7f. Смотрим только на байты с кодами старше 7f и проверяем, нет ли там чего странного.
Вот например как кодируется слово "дом": D0 B4 D0 BE D0 BC (проверить коды можно тут http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024 )
А вот строка うち: E3 81 86 E3 81 A1 (проверить: http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12288&number=128 )
Изучи внимательно содержимое файла и попробуй найти там ошибку синтаксиса. Скорее всего она в той строке, которая указана в сообщении об ошибке.
Также вместо hex-редактора можно использовать режим в текстовом редакторе, показывающий не-ascii символы, но полезно будет хоть раз поковыряться в байтах.
Скорее всего это не IT-компания, а какая-то компания, где айтишники вспомогательный персонал, отсюда и требования.
>требуется PHP разработчик
>По стеку: PHP7, MySql, Redis, RabbitMQ, разумная верстка на Bootstrap + js
А ещё с++, java, python и опыт в заправке картриджей.
>требования абсолютно нормальные.
Для чего идти к вам если вон в соседнем офисе ерохин юзает только Bootstrap + js.
>Короче проблема в копировании из некорректного источника.
Ну некорректный источник - это когда ставишь кароче японскую раскладку на шинду и можешь писать: あいうえお かきくけこ さしすせそ たちつてと ща попробую с сосаки скопировать
Откуда такие вакансии берутся? Даже грузчики больше получают ведь.
Неужели на них кто-то откликается?
Есть диплом о вышке (МГУ), но гуманитарный. Такой сойдет?
Вполне адекватная вакансия. Если ты хочешь зарабатывать больше, ты должен доказать, что ты этого достоин. Никто не будет тебе платить просто так.
А почему грузчики должны меньше получать? Что там, что тут четырех высших не требуется.
Директор Лидер-М, плиз.
Вакансия больше похожа на поиск дешевой рабочей силы незнающих нюфагов.
"Удалены" - такого нет. Они просто помечены "устаревшими" и не рекомендуются к использованию.
Идея в том, что новый контент должен писаться на HTML5, но браузеры будут поддерживать и более старые стандарты, чтобы можно было отображать старые сайты. Но ты естественно должен использовать HTML5.
Да и те теги, которые помечены устаревшими - справедливости ради, они нигде и не нужны.
Где толстота? Им требуется племянник бухгалтерши который будет обновлять новости на сайте.
Аргументно.
Я там 8 способов позиционирования насчитал: https://github.com/codedokode/pasta/blob/master/html/positioning.md#Виды-позиционирования
Недостаточно? Чего тебе не хватает? Чтобы само собой все работало и угадывало желания, такое вряд ли будет.
а что насчет flexbox?норм тема?
Это в итоге вакансия для какого-нибудь студента с 4-6 часами занятости в день. В итоге на самом деле чему-то научишься и можно сказать что для чела без опыта будет неплохой старт.
>Иметь опыт веб-разработок от 1-го года;
>Режим работы 5 дней в неделю с 09-00 до 18-00
Это точно не для студента
Ребзя, предлагаю вам пройти в https://2ch.hk/pr/res/1055242.html#1055312 (М)
Ма вым перезвоним тред. Тут это как-то неуместно.
Давайте туда проще кто-то позвонит и спросит, рили ли эта вакансия подразумевает опыт работы в 2 года, все вышеперечисленные знания на высоком левеле и полный рабочий день при этом с зп в 15к? Или нужны поверхностные знания в требуемых системах и в итоге неполный день?
Тогда ещё вопрос, возможно, глупый - почему стандарты новых тегов вроде <article> определены 1999 годом (версией 4.01)?
Что именно у тебя не получается?
Возьми и приведи в порядок мысли, у всех такое бывает, когда не можешь додуматься до продуктивного кода.
Почитай: https://geektimes.ru/post/292373/
Да и еще, не принимай всерьез мнение автора, просто прими к сведению, что пойти попить чаек это не смертельно.
Попробуй упростить задачу, раздели на кусочки, нутыпонял.
но теперь встал вопрос,как функция вывода текста в скрипте action приймет этот текст с формы?
Тут https://developer.mozilla.org/ru/docs/Web/HTML/Element/article внизу стоит ссылка на HTML5
В HTML4.01 не было article. Убедись сам: https://www.w3.org/TR/html401/index/elements.html
>С ЛЕНДИНГАМИ МЫ И САМИ ЧАСТИЧНО СПРАВЛЯЕМСЯ
>ХУЯРЬТЕ БИТРИКС
>ОТ ВАС НАДО ПОРТФОЛИО
Ну хоть сказали что нагрузка 4-5 часов в неделю, это рили не напряжно. Хотя может быть рили пиздеж и будут наваливать на тебя всю хуйню которую остальным лень делать и будешь по 50 часов в неделю хуярить и еще и обучаться битриксу повыходным))) Пиздец как же всё плохо иногда :(
отображение в таблице выглядит как utf8->1251 ну и конечно при выгрузке таблице в пхп выглядит точно так же. При этом везде пишут что виндовс в постгре не поддерживает collation utf8 и что делать в этом случае я прям ума не приложу. Спросил в Едином баз данных тренде мне сказали "Collation и Character type выстави как UTF8." но не сказали как. Анонас помогай прошу!
Когда на тебя вешают 10 сайтов, два из которых на битриксе, два на джумле, остальные на магенто, модх и прочей залупе. И ты должен копаться во ВСЕМ этом говне по 10 часов в день за 15к, то это немного выходит за рамки адекватности вообще. Твоя язвительность сосет хуй кароче.
обоже неужели кто-то тральнул? XDD
я бы эти 15 штук завернул в трубочку и запихал ему в попу, а не портфолио.
сайты они переносят, ну так бы и писал - нужен даун заполняющий сайты и переносящих их с модХ на битрикс. Все.
Я их решал. Потом запнулся на регулярных выражениях, а через время стал замечать, что пройденное вылетает из головы. Нужно практиковаться на разных задачах.
А ты понимаешь почему код в данных задачах именно так работает? Нужно пытаться прежде всего понять почему, тогда и вспомнить легче будет.
возможно капитан
Я то понимаю, некоторые из них решал несколько раз, переделывал иначе, на что фантазии хватило.
Ты тупенький? Ну очевидно же что опечатка. И между полным рабочим днем и 5 часовым кстати огромная блядь разница. Я проходил работу и по 4 и по 6 часов. 4х часовой рабочий день вообще не замечаешь в плане нагрузки. Тупо как сходить прогуляться до обеда или на курсы. в 2 свободен и в 3 дома - очень изи.
6 почти тоже самое. Ключевое тут что не нужен считай обед, можно поесть тупо до и после работы. А когда ты работаешь по 8, то внезапно уже оказывается что есть еще и час обеда, который якобы твой, но по факту бывает что и нихуя. В итоге 9 часов минимум на работе. Учитывая дорогу то бывает что между выходом из дома и возвращением уже и 11 часов проходит в худшем случае. А это с учетом сна означает что на всю оставшуюся жизнь включая ужины, завтраки, готовки, стирки, уборки и мытье посуды со своей тушкой у тебя остается 4 часа.
Что бы ты правильно понял к чему я, привиду пример с выходными. Если ты работаешь 5 дней вместо 6, то ты хуяришь не "всего лишь" на 20% больше. Ты отдыхаешь В ДВА РАЗА МЕНЬШЕ ПО ФАКТУ. Чувствуешь разницу:? Так же и с рабочими часами. Каждый рабочий час после 6 в два раза ценнее в плане отнятого у тебя отдыха.
ой да ладно огромная, я со всеми обедами и дорогой до работы от силы часов 6 работаю. А тут прям аж целых 5 часов за 15ку и незвестно еще сколько тебя грузить будут. обычно такие жадины грузят на 10часовой день и еще выходные.
я не понимаю, зачем ты их оправдываешь? таких уебков нужно гнать ссанной тряпкой с хх
Я, пользуясь своими навыками гугления, нашел такие разделы документации постгрес:
https://postgrespro.ru/docs/postgresql/9.6/charset.html
и там
https://postgrespro.ru/docs/postgresql/9.6/multibyte.html
Где серым по белому написано, что utf8 поддерживается, и упомянута какая-то локаль. Про локаль в постгрес и вообще можно почитать тут
https://postgrespro.ru/docs/postgresql/9.6/locale.html
https://wiki.archlinux.org/index.php/Locale_(Русский)
https://www.shellhacks.com/ru/linux-define-locale-language-settings/
и про виндовые локали https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd318716(v=vs.85).aspx
Как я понимаю, чтобы выбрать utf-8 для БД, должна быть задана совместимая с ней локаль при инициализации базы. В линуксе это было бы например en_US.utf-8, но как правильно называется такая локаль в винде, я не уверен. Судя по MSDN https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd373814(v=vs.85).aspx это должно быть en-US.
После того, как ты проиницализировал БД с указанием локали, через initdb (как описано в документации), создай базу с указанием кодировки через createdb или SQL-запрос. Напиши, если что-то не получится.
Соответственно потом, как написано в документации, выводи список баз и убедись что кодировка задана правильно.
Как я понимаю, в постгрес кодировка общая для базы. Это в mysql можно хоть для каждой колонки свою кодировку задать, а тут все проще.
Ну а потом только остается настроить кодировку на клиенте, если ты PDO используешь, там наверняка опция есть.
Я, пользуясь своими навыками гугления, нашел такие разделы документации постгрес:
https://postgrespro.ru/docs/postgresql/9.6/charset.html
и там
https://postgrespro.ru/docs/postgresql/9.6/multibyte.html
Где серым по белому написано, что utf8 поддерживается, и упомянута какая-то локаль. Про локаль в постгрес и вообще можно почитать тут
https://postgrespro.ru/docs/postgresql/9.6/locale.html
https://wiki.archlinux.org/index.php/Locale_(Русский)
https://www.shellhacks.com/ru/linux-define-locale-language-settings/
и про виндовые локали https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd318716(v=vs.85).aspx
Как я понимаю, чтобы выбрать utf-8 для БД, должна быть задана совместимая с ней локаль при инициализации базы. В линуксе это было бы например en_US.utf-8, но как правильно называется такая локаль в винде, я не уверен. Судя по MSDN https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd373814(v=vs.85).aspx это должно быть en-US.
После того, как ты проиницализировал БД с указанием локали, через initdb (как описано в документации), создай базу с указанием кодировки через createdb или SQL-запрос. Напиши, если что-то не получится.
Соответственно потом, как написано в документации, выводи список баз и убедись что кодировка задана правильно.
Как я понимаю, в постгрес кодировка общая для базы. Это в mysql можно хоть для каждой колонки свою кодировку задать, а тут все проще.
Ну а потом только остается настроить кодировку на клиенте, если ты PDO используешь, там наверняка опция есть.
мимо начал заниматься этим как хобби, денежного интереса нет, никуда не спешу
я не понимаю как это работает на практике
Зачем?!!! Чем микроконтроллеры не устроили, как вариант, или всякие контесты типа http://russianaicup.ru. Звучит, как: стал подметать улицы как хобби, денежного интереса нет, никуда не спешу.
Не знаю о чем ты, я начал искать адекватные задачники по хтмл цсс, решил зайти сюда, а тут материал по полному веб стаку который в дальнейшем пригодится и расписанный очень качественно, и плюс то, что я искал. Хорошая шапка, хороший оп.
Ничего не имею против треда, шапки, опа, веба и т.д. Сюда идут зарабатывать деньги, делая веб странички для булочных. Это же рутина рутин!
Ты зря по себе о других судишь. Алсо, не надо тут разводить флуд, для этого есть другие треды.
>Начал оффтоп не по теме
>Начал флудить в ответку
>Не надо флудить тут
Хуя ты жирный.
мимокрок
include ничего никуда не вставляет (у нас тут не Си). include делает 2 вещи:
- если требуемого файла нет, выдает предупреждение
- если есть, выполняет код в нем (выполняется код внутри <?php, остальное просто выводится).
Соответственно если в подключаемом файле не ставить теги <?php, то его содержимое просто выведется как есть, что наверно тебе и нужно. Но для этой цели лучше использовать readfile, который просто выводит файл и не пытается ничего выполнять.
if (файл удалённый) {
скачать;
переместить;
} else {
соединить путь к публичной папке с относительным путём файла;
переместить;
}
[1] - http://php.net/manual/en/language.types.resource.php
Спасибо, просто не могу понять один момент: вчера начал изучать на специалисте, задание было вырезать из блоков html и php код, вынес все в отдельные файлы, использовал include, получилось некорректное отображение сайта
А как ты получишь дескрипто файла для файла в удаленном хранилище?
Если ты хочешь сделать абстракцию, тут можно попробовать ООП - сделать например интерфейс и 2 класса, реализующих его (или абстрактный класс и 2 наследника). С методами вроде удалить, переименовать, получить содержимое итд.
Есть кстати класс SplFileInfo для локальных файлов, но мне он не нравится, там все как-то в кучу смешано.
Но тут есть подвох, что некоторые вещи с удаленными файлами делать неэффективно (например, перебор всех файлов в папке). Соответственно об этом надо будет помнить. И делать абстракцию, только если от нее есть явная выгода.
В твоем случае, если тебе просто надо в паре мест if if поставить, может быть проще просто сделать функции.
>>1056138
трудно сказать где ошибка, не видя кода.
про https://github.com/pricklynut/testhub >>1053064
про https://github.com/telepok/php-test/blob/master/oop4.php >>1056159
вопрос, где можно посмотреть исходники функций сортировки >>1056189
>>1056163
Добавить несколько букв наверно? Вообще, она на изучение функции strtr, если ты ее знаешь, можно не делать.
Годно.
Найди тех, чьи задачи ты можешь решить на ларавеле, предложи им это, получишь точную количественную оценку ценности твоих знаний. Если она слишком маленькая, сиди в нашем треде, решай ООП, студентов и другие задачи (ну или учись любым другим способом).
>>1049956
Насколько я знаю, на Андроиде можно не только читать учебники и писать код, но и запускать PHP, использовать mysql (локально, без интернета). Понадобятся такие вещи:
- редактор для кода
- клавиатура со спецсимволами, на обычной замучаешься переключаться
- интерпретатор php
- БД mysql (если ты хочешь использовать БД)
- веб-сервер, например, Апач или встроенный в PHP
- возможно, консоль для работы с командной строкой
Это все бывает как по отдельности, так и вместе (вместе обычно платно, соответственно придется все собирать по частям). Если искать в маркете - будь осторожен, много мусора с рекламой и прочим. В F-droid (куда подозрительные приложения не принимают), увы, пусто. Старайся искать приложения без рекламы, аналитики, лишних разрешений и с открытым кодом.
Что касается верстки, тут проблем быть не должно - правишь код, сохраняешь файл на карту (диск?) и открываешь в браузере через file://... или встроенным просмотрщиком.
У меня есть андроид-смартфон, я пока не пробовал настроить на нем все для кодинга. Надо будет как-нибудь потом попробовать.
В Google Play - я поискал, ищутся такие вещи:
1) https://play.google.com/store/apps/details?id=com.alfanla.android.pws&hl=en - тут вроде веб-сервер (lighttpd) + PHP/mysql , вроде бесплатно, но с рекламой.
2) Это не в Google Play, а отдельно. Можно установить Script Layer 4 Android - SL4A - https://ru.wikipedia.org/wiki/SL4A - по идее он предназначен для написания приложений используя скриптовые языки, но подойдет и для наших целей. К нему поставить PHP for Android: http://phpforandroid.net/doku.php - и если заработает, можно будет запускать PHP код и использовать встроенный в PHP веб-сервер (а если очень заморочиться, то можно даже писать андроид-приложения на PHP, но пожалуйста, не надо).
Может еще что-то есть, погугли. Поиск в Google Play вываливает кучу вариантов и устанешь каждый проверять.
Если постоянное использование интернета для тебя не проблема, можно арендовать виртуальный сервер (VPS), на него поставить все что нужно, заходить на него через ssh-клиент (я использовал ConnectBot, который есть в F-droid). Кстати, если в ConnectBot выбрать local, то он откроет локальную консоль в андроиде (андроид на ядре линукса и немного утилит для командной строки там есть).
>>1050584
тут проверил >>1056159
Найди тех, чьи задачи ты можешь решить на ларавеле, предложи им это, получишь точную количественную оценку ценности твоих знаний. Если она слишком маленькая, сиди в нашем треде, решай ООП, студентов и другие задачи (ну или учись любым другим способом).
>>1049956
Насколько я знаю, на Андроиде можно не только читать учебники и писать код, но и запускать PHP, использовать mysql (локально, без интернета). Понадобятся такие вещи:
- редактор для кода
- клавиатура со спецсимволами, на обычной замучаешься переключаться
- интерпретатор php
- БД mysql (если ты хочешь использовать БД)
- веб-сервер, например, Апач или встроенный в PHP
- возможно, консоль для работы с командной строкой
Это все бывает как по отдельности, так и вместе (вместе обычно платно, соответственно придется все собирать по частям). Если искать в маркете - будь осторожен, много мусора с рекламой и прочим. В F-droid (куда подозрительные приложения не принимают), увы, пусто. Старайся искать приложения без рекламы, аналитики, лишних разрешений и с открытым кодом.
Что касается верстки, тут проблем быть не должно - правишь код, сохраняешь файл на карту (диск?) и открываешь в браузере через file://... или встроенным просмотрщиком.
У меня есть андроид-смартфон, я пока не пробовал настроить на нем все для кодинга. Надо будет как-нибудь потом попробовать.
В Google Play - я поискал, ищутся такие вещи:
1) https://play.google.com/store/apps/details?id=com.alfanla.android.pws&hl=en - тут вроде веб-сервер (lighttpd) + PHP/mysql , вроде бесплатно, но с рекламой.
2) Это не в Google Play, а отдельно. Можно установить Script Layer 4 Android - SL4A - https://ru.wikipedia.org/wiki/SL4A - по идее он предназначен для написания приложений используя скриптовые языки, но подойдет и для наших целей. К нему поставить PHP for Android: http://phpforandroid.net/doku.php - и если заработает, можно будет запускать PHP код и использовать встроенный в PHP веб-сервер (а если очень заморочиться, то можно даже писать андроид-приложения на PHP, но пожалуйста, не надо).
Может еще что-то есть, погугли. Поиск в Google Play вываливает кучу вариантов и устанешь каждый проверять.
Если постоянное использование интернета для тебя не проблема, можно арендовать виртуальный сервер (VPS), на него поставить все что нужно, заходить на него через ssh-клиент (я использовал ConnectBot, который есть в F-droid). Кстати, если в ConnectBot выбрать local, то он откроет локальную консоль в андроиде (андроид на ядре линукса и немного утилит для командной строки там есть).
>>1050584
тут проверил >>1056159
> И еще, не можешь подсказать, где такие задания на верстку еще можно взять?
Я искал по слову free psd templates, имей в виду, что они обычно не высокого качества и надо их много перебрать. Также, можно взять любой понравившийся сайт, сделать с него скриншот и верстать по нему.
>>1051215
Я мимо проходил, но советовал бы использовать XML/Xpath или phpQuery для разбора HTML.
>>1052377
> -курс валют https://ideone.com/WRyecp
Верно
> -первая задача про кубик https://ideone.com/eEgl2a
Правильно
> -вторая задача про кубик https://ideone.com/CIhPPM
Хорошо, хотя нет проверки на то, что у обоих выпали одинаковые числа и получилась ничья независимо от суммы.
> -таблица умножения https://ideone.com/cHU78n
Верно
> -задача про банк и кредит https://ideone.com/Jriuhk
Верно решено.
> -айфон https://ideone.com/xPwyQ0
Верно, хотя можно было бы решить без копирования echo и $paymentTotal += два раза.
>>1052950
Ты тестхаб сделай сначала, там задач может отказаться больше чем у тебя энтузиазма.
>>1053600
Поискать в старых тредах. Сам автор решений не делал так как для него задачи элементарные и он в любой момент может их решить в голове.
>>1054303
В самой базе данных правильные ли настройки стоят? Вот тут пост был про кодировки в постгрес >>1055933
>>1055002
Требуя диплом, они видимо, экономят деньги на проведении тестирования кандидатов. Хотя конечно с нашими вузами смысл диплома чисто символический. Вот если есть сильный вуз, где без знаний просто экзамены не сдать, то да, диплом такого вуза наверно что-то значит.
> И еще, не можешь подсказать, где такие задания на верстку еще можно взять?
Я искал по слову free psd templates, имей в виду, что они обычно не высокого качества и надо их много перебрать. Также, можно взять любой понравившийся сайт, сделать с него скриншот и верстать по нему.
>>1051215
Я мимо проходил, но советовал бы использовать XML/Xpath или phpQuery для разбора HTML.
>>1052377
> -курс валют https://ideone.com/WRyecp
Верно
> -первая задача про кубик https://ideone.com/eEgl2a
Правильно
> -вторая задача про кубик https://ideone.com/CIhPPM
Хорошо, хотя нет проверки на то, что у обоих выпали одинаковые числа и получилась ничья независимо от суммы.
> -таблица умножения https://ideone.com/cHU78n
Верно
> -задача про банк и кредит https://ideone.com/Jriuhk
Верно решено.
> -айфон https://ideone.com/xPwyQ0
Верно, хотя можно было бы решить без копирования echo и $paymentTotal += два раза.
>>1052950
Ты тестхаб сделай сначала, там задач может отказаться больше чем у тебя энтузиазма.
>>1053600
Поискать в старых тредах. Сам автор решений не делал так как для него задачи элементарные и он в любой момент может их решить в голове.
>>1054303
В самой базе данных правильные ли настройки стоят? Вот тут пост был про кодировки в постгрес >>1055933
>>1055002
Требуя диплом, они видимо, экономят деньги на проведении тестирования кандидатов. Хотя конечно с нашими вузами смысл диплома чисто символический. Вот если есть сильный вуз, где без знаний просто экзамены не сдать, то да, диплом такого вуза наверно что-то значит.
Пацаны, что правильнее всего делать со строками кода, которые нельзя покрыть тестами?
1. codeCoverageIgnore
2. Оставлять непокрытыми и тем самым уменьшать % коверейджа
? Я говорю, например, про ошибки файловой системы. Вот я только что проверил, файл был. Я пытаюсь его открыть, а его уже нет. Повторить такое во время тестов невозможно, это надо свою файловую систему через fuse подключать, и в ней такое отлавливать. Так вот, как быть?
Копия этого вопроса >>1056198 из общего треда
Во-первых, я не уверен что надо гнаться за 100% покрытием. Ведь мы пишем не тесты ради тестов, а для какой-то конкретной цели (уменьшить число ошибок в коде, позволить делать большие рефактоинги, сэкономить время на проверку правок). Стремление к 100% может оказаться экономически невыгодным.
Я думаю, тестировать надо фичи приложения или API класса, а не строчки кода.
codecoveradgeIgnore я думаю, предназначен для автоматически генерируемого кода. Чтобы его не учитывать.
> Вот я только что проверил, файл был. Я пытаюсь его открыть, а его уже нет. Повторить такое во время тестов невозможно
Ты имеешь в виду исчезновение файла между file_exists и fopen например? А такое вообще часто бывает? Если это очень редкая ситуация, можно и не тестировать. Или переписать код так, чтобы это было невозможно (увы, fopen тут не очень под это заточен, можно попробовать перехватывть ошибку при открытии).
Также, ты должен понимать, что тесты это не формальная верификация (доказательство правильности) программы. Даже со 100% покрытием твои тесты ведь не тестируют все возможные входные данные и ситуации. Потому относись прагматически: никакие тесты не гарантируют что приложение на 100% корректно.
Мы пишем тесты, чтобы отлавливать ошибки при правках кода. И тут есть соотношение затраты/выгода (нет тестов - любой рефактринг ломает фичи и это трудно обнаружить, есть 100% покрытие - долго писать эти тесты и любая правка кода их ломает). Нужно максимизировать его, а не покрытие кода.
Вместо этого тестируй фичи/API, например, "пользователь проходит регистрацию при вводе корректных данных" или "функция удаления пробелов действительно удаляет пробелы".
Это другой кун ему отвечал.
> А как ты получишь дескрипто файла для файла в удаленном хранилище?
Через fopen('url', 'r'), а что не так? Мне только читать надо.
> тут можно попробовать ООП - сделать например интерфейс и 2 класса, реализующих его
Проблема в том, что я не могу хранить в сущности полный путь к файлу в локальной ФС. Хорошей практикой считается хранить только относительный путь. Поэтому $file->moveTo($location) будет работать только для удалённых файлов (т.к. в сущности будет храниться URL файла). Подход с ресурсом избавит от этой проблемы.
> А такое вообще часто бывает?
Это не важно. Вообще это крайне редкая ситуация, но рано или поздно она встретится.
> переписать код так, чтобы это было невозможно
Это как бэ невозможно
https://pastebin.com/sWfGEkXf
почему у меня после каждой отправки формы счётчики обнуляются?
Я так понял, что это изза того что в начале скрипта я устанавливаю начальные значения в 0:
if(!isset($_SESSION['numeric']))
$_SESSION['numeric'] = 0;
if(!isset($_SESSION['not_numeric']))
$_SESSION['not_numeric'] = 0;
Но по идее после первого запуска они у меня уже не NULL, поэтому isset должны возвращать true и следовательно if не выполняться. Что я делать не так?
ой, я - еблан, session_start() проебал же
Вечер в хату, аноны
Я немного занимаюсь говнокодерством, и я уже не человек, я уже зверь нахуй, 2 дня подряд борюсь с какой-то элементарной проблемой:
Сейчас возникла задача сделать скрипт, который будет брать товары из определенной страницы сайта А, вычленять оттуда название, пикчу и цену, пикчу схоронять на сервер сайта Б, ссылку на нее, а также название и цену заносить в БД сайта Б. Сайт Б - cms Opencart, если это имеет значение.
Для пиздинга товаров используется библиотека Simple HTML DOM, но я пробовал и другие, во всех случаях один и тот же трабл:
Когда мы берем какой-то элемент из DOM возможно я сейчас неправильно выразился он находится в кодировке UTF-8. Но когда мы пытаемся вычленить из него текст (->plaintext) или какой-то атрибут (->src) кодировка переменной преобразуется в ASCII. Та же хуйня происходит, даже если просто пытаться сделать то же самое с помощью регулярных выражений
При этом iconv() и другие функции для преобразования кодировки ничего не меняют
В БД стобцы, в которые планируется вносить данные, находятся в кодировке utf8_general_ci. И если отправлять в эту БД данные, которые берутся из этих переменных, то не отправляется нихуя, а если переменные в инсерте заменить на обычный текст в ковычках, то все работает
Пикрелейтед - тот самый говнокод
Гугление в т.ч. на пиндосском языке ни к чему не привело
Ситуация такова: есть самописный интернет магазин, которому лет 8 уже. Писало его много разных говнокодеров, код в нем просто пиздец, даже слов нету, чтобы описать.
У него очень много функционала помимо магазина.
Да и сам магазин не самый стандартный.
Например, остатки товара делятся по регионам.
Есть группы пользователей, некоторым группам некоторый товар по масти показывать не положено.
Вот. В общем с этим говном я работаю уже порядка двух лет и пришло время перенести магазин на какой-то фреймворк, или типа того.
Стандартный функционал магазинов с нуля писать не очень хочется, тем более, что опыт работы с фреймворками у меня небольшой (знаю yii2 на среднем уровне, делал на нем сайтец и небольшие знания symfony2), поэтому архитектуру я спроектирую не самую продуманную.
В идеале, анончики, подскажите мне каукую-то cms, или надстройку под магазин, основанную на каком-то фреймворке, чтобы это был и достаточно гибкий инструмент и чтобы не пришлось изобретать стандартные вещи из потребностей интернет-магазина.
Многое из функционала придется менять, поэтому разработка и перепиливание должно быть максимально комфортным, как на чистом фреймворке. А обычные cms очень сильно связывают руки в этом плане.
Заранее большое спасибо тем, кто ответит. Вопрос очень важный и определит вектор развития моей говнокарьеры как минимум на ближайший год.
Сам смотрю в сторону prestashop, основанном на symfony2. Может есть тут кто-то, кто работал с ним?
Больше посоветоваться не с кем, вы моя единственная надежда.
bump
Во-первых, мне не нравится твой слог. Если посмотреть, у себя в посте ты ругаешь всех направо и налево, но на самом деле это ведь ты сам виноват, что толком не изучил PHP, полез что-то делать и теперь не можешь разобраться. Ругать тебе надо в первую очередь себя.
По коду могу сказать следующее:
- mb_detect_encoding не умеет определять кодировку, не веришь мне - погугли или посмотри исходный код этой функции. Вообще, в общем случае кодировку текста определить невозможно.
- ты должен определить кодировку HTML вручную, используя описанные в стандарте правила https://www.w3.org/TR/html5/document-metadata.html#character-encoding-declaration (я согласен, они там немного мутно описаны, но кодировка либо задается в заголовке, либо в метатеге, либо используется кодировка по умолчанию)
- далее, ты используешь simple_html_dom. Откуда она узнает кодировку HTML который ты передаешь? Хорошо, если эта кодировка указана в самом коде через метатег и simple_html_dom умеет ее читать, а если нет? Нужно изучить мануал к библиотеке, посмотреть, как там задается кодировка и задать ее явно
- картинки я бы советовал раскладвыать по папкам, а также не создавать N копий одной и той же картинки
- в mysqli нет репорта ошибок. Ты обязан после любого действия сам проверять. не произошла ли ошибка, посмотри примеры кода в мануале php по mysqli. Я вижу, ты делаешь это при соединении, но надо ставить проверку вообще после любого вызова функций mysqli
- не подставляй переменные в SQL запрос, читай статью https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
- не используй бессмысленные функции вроде htmlspecialchars. Зачем оан тут нужна?
- ты используешь iconv и видно что ты вообще не понимаешь, что такое кодировка. Почитай мой урок, где это подробно разъясняется: https://github.com/codedokode/pasta/blob/master/cs/strings.md (хинт: все символы ASCII имеют точно тот же код и то же представление в utf-8 и это преобразование вообще ничего не меняет)
Огромное спасибо! Все получилось!
>толком не изучил
>полез что-то делать
Да к для того и полез
>mb_detect_encoding не умеет определять кодировку
Вот такого поворота я не ожидал
>далее, ты используешь simple_html_dom. Откуда она узнает кодировку HTML который ты передаешь? Хорошо, если эта кодировка указана в самом коде через метатег и simple_html_dom умеет ее читать, а если нет? Нужно изучить мануал к библиотеке, посмотреть, как там задается кодировка и задать ее явно
По дефолту скрипт ищет на загруженной странице метатег с кодировкой и берет инфу из него. На конкретно моей странице метатег есть. На случай, если кодировку определить не удалось, там есть овер100500 условий когда и какую надо использовать, т.е. там условия вида if(...){ $charset = ' %CharsetName% '}. Я решил попробовать во всех условиях указать кодировку равную ЮТФ-8, ничего не поменялось
Но пусть даже библиотека возвращает ASCII, есть функция, которую ты же мне и посоветовал:
mb_convert_variables(string $to_encoding , mixed $from_encoding , mixed $vars),
где в $from_encoding задаются разделенные запятой все возможные кодировки, ИЗ которых нужно конвертировать. Я залил туда ВООБЩЕ ВСЕ возможные кодировки, список которых я взял из документации php. Но функция ничего не конвертирует, по крайней мере, если верить mb_detect_encoding(), и в БД ничего не подгружается.
Ну и как я уже писал:
>Та же хуйня происходит, даже если просто пытаться сделать то же самое с помощью регулярных выражений
Т.е. есть переменная, которая хранит в себе последовательности цифр, каждая из последовательностей соответствует какому-то символу согласно кодировке UTF-8. Далее мы прогоняем данные из этой переменной через тот же стандартный preg_replace(), и ВНЕЗАПНО там теперь уже другая последовательность цифр, раскодировать которую можно с помощью ASCII
Хотя учитывая, что
>все символы ASCII имеют точно тот же код и то же представление в utf-8
Написанное выше возможно, но почему тогда переменные с кодировкой ASCII я не могу залить в базу конкретно в этот столбец, а с кодировкой UTF-8 могу?
Обе статьи я читал буквально неделю назад, насчет кодировок не знаю, какую инфу из той статьи я не учел для решения этого вопроса, насчет инъекций и картиночек - само собой, но сначала нужно добиться добавления записей в базу данных сайта Б
>толком не изучил
>полез что-то делать
Да к для того и полез
>mb_detect_encoding не умеет определять кодировку
Вот такого поворота я не ожидал
>далее, ты используешь simple_html_dom. Откуда она узнает кодировку HTML который ты передаешь? Хорошо, если эта кодировка указана в самом коде через метатег и simple_html_dom умеет ее читать, а если нет? Нужно изучить мануал к библиотеке, посмотреть, как там задается кодировка и задать ее явно
По дефолту скрипт ищет на загруженной странице метатег с кодировкой и берет инфу из него. На конкретно моей странице метатег есть. На случай, если кодировку определить не удалось, там есть овер100500 условий когда и какую надо использовать, т.е. там условия вида if(...){ $charset = ' %CharsetName% '}. Я решил попробовать во всех условиях указать кодировку равную ЮТФ-8, ничего не поменялось
Но пусть даже библиотека возвращает ASCII, есть функция, которую ты же мне и посоветовал:
mb_convert_variables(string $to_encoding , mixed $from_encoding , mixed $vars),
где в $from_encoding задаются разделенные запятой все возможные кодировки, ИЗ которых нужно конвертировать. Я залил туда ВООБЩЕ ВСЕ возможные кодировки, список которых я взял из документации php. Но функция ничего не конвертирует, по крайней мере, если верить mb_detect_encoding(), и в БД ничего не подгружается.
Ну и как я уже писал:
>Та же хуйня происходит, даже если просто пытаться сделать то же самое с помощью регулярных выражений
Т.е. есть переменная, которая хранит в себе последовательности цифр, каждая из последовательностей соответствует какому-то символу согласно кодировке UTF-8. Далее мы прогоняем данные из этой переменной через тот же стандартный preg_replace(), и ВНЕЗАПНО там теперь уже другая последовательность цифр, раскодировать которую можно с помощью ASCII
Хотя учитывая, что
>все символы ASCII имеют точно тот же код и то же представление в utf-8
Написанное выше возможно, но почему тогда переменные с кодировкой ASCII я не могу залить в базу конкретно в этот столбец, а с кодировкой UTF-8 могу?
Обе статьи я читал буквально неделю назад, насчет кодировок не знаю, какую инфу из той статьи я не учел для решения этого вопроса, насчет инъекций и картиночек - само собой, но сначала нужно добиться добавления записей в базу данных сайта Б
>Ты обязан после любого действия сам проверять. не произошла ли ошибка
Это я упустил
Показывает ошибку: "You have an error in your SQL syntax; check the manual that corresponds to your server version for the right syntax"
Но я в упор не вижу здесь ошибки
При этом как и прежде отлично заносятся записи в столбцы типа int и decimal, varchar не заносятся
Вкатываюсь, задачу на айфон не осилил, потому что еще со школки были проблемы с этими задачами экономическими, боюсь страшно подобных штук! С массивами попроще будет.
>Вот. В общем с этим говном я работаю уже порядка двух лет и пришло время перенести магазин на какой-то фреймворк, или типа того.
Тут уже ничего не поможет, если ты за 2 года не сделал ничео, то и дальше ничего не сделаешь.
Порешал задачи на массивы, есть вопрос.
>Создать переменную, поместить в нее пустой массив. На каждом шаге добавлять в массив новый слог. В конце склеить слоги в массиве в одну строку с помощью implode.
Зачем implode? $name .= $some склеивает без проблем или я что-то не так понял.
https://ideone.com/Zb4lgu
ideone.com/1E9PMW
А вот со следующей испытал знатный батхерт, потому, как мой скрипт всегда говорит, что это палендром, хотя, это не так. Пытался отловить баг, но без дебагера, так и не смог это сделать, хотя логику понял, может флажки работают не так, как в паскале или я просто хочу спать, буду благодарен, если кто-то найдет.
ideone.com/jsaDRp
Про mb_detect_encoding и как она не работает, и про определение кодировок, написано например тут https://habrahabr.ru/post/107945/
> По дефолту скрипт ищет на загруженной странице метатег с кодировкой и берет инфу из него. На конкретно моей странице метатег есть.
Значит, должно работать. Сделай для теста файл с HTML-кодом в utf-8 (можно с того сайта и скачать) и с метатегом и попробуй его загрузить в simple html dom и проверить, получается ли из него что-то получить или нет. Проверь что текст в самом файл именно в utf-8.
И не надо править сторонние библиотеки.
> Но пусть даже библиотека возвращает ASCII
Пусть, но в ASCII нет кирилицы. Ты мой урок почему не читаешь ? https://github.com/codedokode/pasta/blob/master/cs/strings.md
> есть функция, которую ты же мне и посоветовал:
Это не я, и я думаю что это бесполезный совет. Если mb_detect_encoding не работает, то и эта функция не поможет. Как она по твоему определит кодировку текста?
> Далее мы прогоняем данные из этой переменной через тот же стандартный preg_replace(), и ВНЕЗАПНО там теперь уже другая последовательность цифр, раскодировать которую можно с помощью ASCII
Не очень понял о чем речь, но ты не забыл флаг u в preg_replace для поддержки utf-8?
> Написанное выше возможно, но почему тогда переменные с кодировкой ASCII я не могу залить в базу конкретно в этот столбец, а с кодировкой UTF-8 могу?
Может они не в ACSII, может ты еще где-то накосячил.
> Показывает ошибку: "You have an error in your SQL syntax; check the manual that corresponds to your server version for the right syntax"
Это не весь текст ошибки. Там должно дальше идти before XXXXX.
Про mb_detect_encoding и как она не работает, и про определение кодировок, написано например тут https://habrahabr.ru/post/107945/
> По дефолту скрипт ищет на загруженной странице метатег с кодировкой и берет инфу из него. На конкретно моей странице метатег есть.
Значит, должно работать. Сделай для теста файл с HTML-кодом в utf-8 (можно с того сайта и скачать) и с метатегом и попробуй его загрузить в simple html dom и проверить, получается ли из него что-то получить или нет. Проверь что текст в самом файл именно в utf-8.
И не надо править сторонние библиотеки.
> Но пусть даже библиотека возвращает ASCII
Пусть, но в ASCII нет кирилицы. Ты мой урок почему не читаешь ? https://github.com/codedokode/pasta/blob/master/cs/strings.md
> есть функция, которую ты же мне и посоветовал:
Это не я, и я думаю что это бесполезный совет. Если mb_detect_encoding не работает, то и эта функция не поможет. Как она по твоему определит кодировку текста?
> Далее мы прогоняем данные из этой переменной через тот же стандартный preg_replace(), и ВНЕЗАПНО там теперь уже другая последовательность цифр, раскодировать которую можно с помощью ASCII
Не очень понял о чем речь, но ты не забыл флаг u в preg_replace для поддержки utf-8?
> Написанное выше возможно, но почему тогда переменные с кодировкой ASCII я не могу залить в базу конкретно в этот столбец, а с кодировкой UTF-8 могу?
Может они не в ACSII, может ты еще где-то накосячил.
> Показывает ошибку: "You have an error in your SQL syntax; check the manual that corresponds to your server version for the right syntax"
Это не весь текст ошибки. Там должно дальше идти before XXXXX.
Как по мне, самопал всегда лучше, ибо он покрывает 100% запросов магазинчика, а стандартный только и может что предложить наборчик из витрины с корзиной. Ну и советовать тут особо нечего, OpenCart.
Нет, есть уже готовые магазины, основанные на фрейморках, а не просто cms.
Я здесь лишь только для того, чтобы посоветоваться какой выбрать.
Чето вообще не понял условие задачи на шифровку текста, что от меня требуется сделать?
1) шифровать текст лучше, чтобы в нем явно не были видны куски исходного текста
2) сделать расшифровку зашифрованного текста
Вот http://yiipowered.com/ru/top-100
Выбирай по тэгу CMS что тебе ближе.
Думаю тебе проще найти CMS на Yii чем перепиливать всё на Symfony, хотя там свои плюсы.
Анон, делай на Yii2 и его CMS, раз есть опыт. А у Symfony большой оверхед абстракций, взять тот же компонент аутентификации. Попробуй сделать какой-нибудь кастомный AccountConfirmator (например по СМС) - уверяю, его интеграция в компонент аутентификации Symfony с непривычки может занять очень много времени. Как в Yii2 не знаю, но в Laravel это сделать очень просто. Если тут сейчас симфонисты начнут говорить про архитектуру и хорошие практики, то открою секрет - доктрину подавляющее большинство симфонистов используют неправильно - репозитории как TableDataGateway, анемичные модели, бизнес логика в хендлерах событий сущности и прочее. Всё это и на Yii2 можно повторить, если выносить запросы к БД в репозитории (у нас используется такой подход для Eloquent).
Я тупой, не знаю как решать. Вот так линейной и в тупую могу сделать, по другому не выходит.
Пробовал так:
foreach ($word1 as $key) {
$randomWord1 = array_rand($word1);
$sentense .= $word1[$randomWord1];
}
echo $sentense;
Короче я тупой и не одупляю вообще этих погромистических задач.
Почему тогда у меня этот код меня спокойно редиректит?:
<html>
<?php
header('Location: http://www.example.com/');
exit;
?>
Есть получше, всякие авторы на Behance делают PSD бесплатные. Вот по ним можно верстать. Алсо верно про Скриншот сказал.
Погугли "минификация CSS"
>>1057303
PHP или веб-сервер (в зависимости от настроек) не сразу выводит данные, а накапливает их в буфер и выводит когда там наберется например 1000 байт (эффективнее передавать данные большими блоками чем кучей маленьких). Пока данные в буфере, заголовки еще модно отправить.
Ты можешь определить размер буфера, увеличивая объем выводимых данных, пока не появится ошибка.
Кстати, я недавно написал урок про протокол HTTP, посмотри там на структуру HTTP-ответа и сам увидишь, что если вывод тела ответа начался то заголовки передавать уже невозможно.
Мануал http://php.net/manual/ru/outcontrol.configuration.php
Вась, гугли обфускацию в целом и обфускацию/оптимизацию css для ускорения загрузки в частности.
Спасибо анонче
Ссылку на урок про HTTP дать забыл: https://github.com/codedokode/pasta/blob/master/network/http.md
Оно бывает.
Как учить пхп, если уже немного умеешь программировать, базовые принципы понимаешь, либо если php не первый твой язык? Книжки из ОП-поста или из прикрепленного поста в разделе? Или сразу по документации на php.net? Или php.ru/su? Или по оп-сайту? Как правильнее. быстрее, эффективнее, лучше?
А
>а также JS/CSS/HTML
В3школа? хтмлкнига.ру? КодеАкадемия? Мозилловский проект?
>SQL
Тут вообще пиздец какой-то, либо голые референсы, либо только самые основы, либо под какую-нибудь залупу (специфичную) типа МС или Постгре.
>>1057768
А ты попробуй разные варианты и сравни. Учебник из Оп-поста совсем для начинающих, так что можно начинать с конца, например сразу с главы про регулярки или про массивы. Если вдруг ты там все понимаешь, включая ООП (навряд ли), переходи к задаче про список студентов.
> сразу по документации на php.net?
Можно, но это скорее документация чем учебник.
> Мозилловский проект?
Это документация (хорошая).
> хтмлкнига.ру? КодеАкадемия?
По ним да, можно учиться. Заметь, что у меня там есть задачи на HTML для проверки знаний, а в конце задача на верстку макета.
По SQL - у меня есть обзорный урочек: https://github.com/codedokode/pasta/blob/master/db/databases.md и там есть какие-то ссылки и задачи для проверки знаний.
При изучении баз данных после SQL надо обязательно изучить нормализацию, внешние ключи, транзакции и спроектировать хотя бы одну базу данных с разными сущностями и связями между ними.
Анон, как зациклить скрипт, допустим, какого-нибудь чат-бота для втентакля? Например, чтобы он запускался каждые 5-10 секунд %в кроне минимум — минута, к настройкам крона доступа нет%.
Сделать неумирающий скрипт с циклом и запускать из-под программы-супервизора, например supervisord
https://ruhighload.com/post/Запуск+процессов+в+supervisor
В современных ОС проще может быть ничего не ставить, а просто добавить твой скрипт как сервис в systemd.
Выглядит неплохо. Спасибо.
>А ты попробуй разные варианты и сравни.
Эхехе, так я состарюсь, прежде чем решу, что лучше, а что хуже. Ну вот мозилловский проект, в3скулс, хтмлкнига - что из этого лучше и почему?
>Учебник из Оп-поста совсем для начинающих
После этого всего сразу переходить к пхпзерайтвей или идти зубрить документацию?
>>1057778
Я больше про такую хуйню, как функции, операции, создание представлений, триггеры (или как их там), про использование всего вот этого в SQL. Про нормализацию и внешние ключи знаю, да и базы пилил, но все взаимодействие с ними у меня ограничивалось простенькими обращениями, а ведь все можно делать эффективнее, не расходуя время на передачу данных...
У мозиллы учебник не закончен.
>Хочу запилить сайтик, куда буду размещать всякие статьи, но быдлокодеру платить не хочу
Не проще взять Wordpress/Джумлу, найти и поставить какой-нибудь шаблончик для блога и наполнять его чем захочешь?
Просто с самого нуля сложновато будет такое делать, ты охуеешь, тем более если хочешь чтобы это всё было полноценно работающее, с RSS, комментариями и капчей к ним и т.д., и чтобы красиво выглядело при этом.
Я вот тоже загорелся идеей сайта куда буду писать свои статьи, и тоже ебал рот отдавать за это деньги и поэтому решил что возьму просто wordpress и всё, шаблончик красивый уже нашёл.
Свой магаз на фреймворке с mysql, может что-то еще?
Есть один скрипт пикрелейтед
Он делает то, что от него просят - детектирует товары на сайте А и переносит их на сайт Б, но подозреваю, что меркам нормальных белых людей это полнейший говнокод.
Можете подсказать, что нужно сделать, чтобы как-то оптимизировать его?
К примеру, 5 раз используется конструкция вида INSERT INTO, с этим нужно что-то делать?
Хз куда податься с этим вопросом. Нада запилить сайт-копию дугого сайта (интернет-магазина). Пиздить у них товары/названия/описание и вставлять в свой. Погуглил веб-скрапперы - нихуя удовлетворительного не нашел. Как массово пиздить контент с сайта и заливать на свой юзая csv или ексель? Не гоните ссаными тряпками, если не по теме.
мимо нихуя кроме сайтов-визиток не делал
Википедию читал, но "методология гибкой разработки ПО" мне ни о чем не говорит.
Как это выглядит на практике?
Я так понимаю, это просто повышенное внимание планированию и контроль над выполнением сроков. Ну то есть когда команда совещается, как выполнить определенную задачу и в какие сроки.
Так же в папке проекта есть файл index.php в котором есть
реквайр автозагрузчика композера и строчка $test = new Student\Test()
А еще в папке проекта есть composer с вот такими незамысловатыми настройками:
"autoload": {
"psr-4": {
"Student\\": "src/"
}
}
То есть по логике вещей получается что автозагрузчик композера смотрит в папке src классы с неймспейсами Student
Так вот в результате он мне выдает следующий перл:
Fatal error: Uncaught Error: Undefined constant 'Student' in C:\work\web\Student\src\Test.php:2 Stack trace: #0 C:\work\web\Student\vendor\composer\ClassLoader.php(444): include() #1 C:\work\web\Student\vendor\composer\ClassLoader.php(322): Composer\Autoload\includeFile('C:\\work\\web\\Stu...') #2 [internal function]: Composer\Autoload\ClassLoader->loadClass('Student\\Test') #3 C:\work\web\Student\public\index.php(14): spl_autoload_call('Student\\Test') #4 {main} thrown in C:\work\web\Student\src\Test.php on line 2
Пока сижу учу верстку в htmlacademy, дальше думаю между продолжением углубленного изучения там же (адаптивная верстка и т.д) или уже вкатыванием в пхп.
>сначала верстку выучить или сначала php?
Одновременно и то и это.
>учу верстку в htmlacademy
Неправда, верстку учат на полевых условиях.
>htmlacademy
Бросай это дело, бро, пожалеешь.
>продолжением углубленного изучения там же (адаптивная верстка и т.д)
Это учится на первых этапах ознакомления с CSS.
>вкатыванием в пхп.
В PHP можно вкатываться без знания HTML, реализовать правда потом трудно.
Учи по учебникам -
Stunning CSS3
CSS3: Visual QuickStart Guide
Introducing HTML5 (Voices That Matter) (После того, как сам HTML поймешь)
HTML Up and running (Для старта самое то)
И потом просто 2 рефа берешь -
CSS Pocket reference
HTML Pocket reference
По вступлению в книге поймешь в каком порядке учить. Но я упрощу задачу:
CSS3: Visual QuickStart Guide - 1
Stunning CSS3 - 2
HTML Up and running - 1
Introducing HTML5 (Voices That Matter) - 2 (Книжка кстати винрарная)
Еще раз - здесь все работает, как раз с использованием данной библиотеки
Но я постоянно вижу и слышу разговоры о важности красоты кода, при этом я плохо понимаю, в чем конкретно она заключается
И на примере данного кода я хотел, чтобы аноны пояснили, как все грамотно структурировать
class Authorizer {
function login() {
$password = $_GET['password'];
...
}
}
class Crypter {
//password = passphrase
function decrypt($encrypted, $privateKey, $password) {
...
}
}
Создается впечатление что пароль легко хранить в кукисах, но нет, это не безопасно, мы можем позволить себе хранить только его хэш. И делать passphrase по хэшу тоже не безопасно, потому что он будет храниться в БД вместе с ключами.
Такая же проблема и с JS - мы можем при залогинивании сохранить пароль где-то в переменной приложения, но если пользователь закроет страницу, то получить этот пароль заново будет неоткуда.
До того как я узнал, что у самого ключа может быть свой passphrase, я планировал шифровать сам ключ, и при залогинивании расшифровывать и сохранять его в кукисы/localStorage/IndexedDB. Но такой подход усложнит код, нужно будет писать алгоритм шифрования ключей и постоянно удалять/добавлять ключи из keyring'а. Так же, я не знаю насколько это надёжно использовать приватные ключи без пароля.
Кстати, я решил не пользоваться библиотекой Pear Crypt_GPG, потому что, как вы упомянули, он только запускает процесс gpg - я вполне могу сделать это самостоятельно с помощью Symfony Process.
class Authorizer {
function login() {
$password = $_GET['password'];
...
}
}
class Crypter {
//password = passphrase
function decrypt($encrypted, $privateKey, $password) {
...
}
}
Создается впечатление что пароль легко хранить в кукисах, но нет, это не безопасно, мы можем позволить себе хранить только его хэш. И делать passphrase по хэшу тоже не безопасно, потому что он будет храниться в БД вместе с ключами.
Такая же проблема и с JS - мы можем при залогинивании сохранить пароль где-то в переменной приложения, но если пользователь закроет страницу, то получить этот пароль заново будет неоткуда.
До того как я узнал, что у самого ключа может быть свой passphrase, я планировал шифровать сам ключ, и при залогинивании расшифровывать и сохранять его в кукисы/localStorage/IndexedDB. Но такой подход усложнит код, нужно будет писать алгоритм шифрования ключей и постоянно удалять/добавлять ключи из keyring'а. Так же, я не знаю насколько это надёжно использовать приватные ключи без пароля.
Кстати, я решил не пользоваться библиотекой Pear Crypt_GPG, потому что, как вы упомянули, он только запускает процесс gpg - я вполне могу сделать это самостоятельно с помощью Symfony Process.
Ошибка была в бэкслеше в неймспейсе класса.
Теперь возникла следующая проблема. ПХП ищет класс пдо в моем Неймспейсе.
Спасибо
Не чувак на английском пишут очень сжато и очень годно. Там мало лишних слов, все понятно на раз. Советую учить.
Отправлять меня учить ксс, яваскрипт и базы не нужно - хочется побыстрей уже наговнокодить говна чтобы все одноклассники охуели.
Так не выйдет, либо ты идешь пошагово, от написания маленьких скриптов постепенно переходя в создание одностраничных сайтов, постепенно усложняя и изучая MVC, либо ты открываешь гайд по какому-то фреймворку и сидишь прокрастинируешь 100% времени и занимаешься самокопанием, потому что ничего не поймешь.
Запал пропадает, под конец пердолиния пхп меня уже заебало и усваивал язык я через силу. Хтмл был как глоток свежего воздуха: все эти кнопочки, черточки, таблички, все наглядно и вообще красотища.
Хочется красотище динамики придать, для понимания. Не всё же сраные таблички костылями на пхп ебать, которые к тому же по разному отображаются в сосноле и в браузере
Берут вордпресс/любой цмс, качают тему, настраивают через админку менюшки и добавляют виджеты. Что-то уровня макаки короче. Если что-то пойдет не так - будет гуглить, дрочить форумы и плакать
почитай чем занимается фронтэнд-разраб
Я другой анон.
И там как раз их курс основан на практике. Прошёл их курс, потом уже читал Пилигрима. Могу сказать, что они друг друга очень хорошо дополнили.
спутал с codecademy
да и не изучал особо html
что нужно было на практике, то и разбирал
больше программирование и бэкэнд интересует
Увы, но Codeacademy тоже не очень полезный опыт, конечно там можно черпнуть базу, но с учебником это не сравнится.
Робин Никсон - Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 4-е издание(Бестселлеры O'Reilly) - 2016
Просто там MySQL, а в мурзилках ОПа говорят что она устарела и использовать нужно PDO
Что это? Почитай, для чего нужен php.
Устарела не СУБД MySQL, а расширение mysql в PHP, которое используется как клиент для доступа к этой СУБД. Написано об этом в мануале, открой и прочти
http://php.net/manual/ru/function.mysql-query.php
Доброго времени суток. Пишет тебе хуй, учащийся на первом курсе информационных систем, который до этого проебал три года на информатике и вычислительной технике, но был отчислен из-за того, что устроился на работу не по специальности, чтобы было что пожрат. Это для того, чтобы вы понимали, что матан я знаю, опыт программирования (Qt'шные курсачи, немного Java, в основном лабы) имею, но лишь в рамках студпрограммы.
Вообще я в своей жизни хотел быть системщиком, т.е. писать ядро линя, прошивки ковырять под конкретные микроконтроллеры, асм знаю, правда диззасемблировал лишь две программы за всю свою жизнь, и в целом - в веб меня не тянуло. Ибо слишком абстрактно, отдаленно от железа, хотя и дает потенциал для творчества. Ну да похуй, не в этом суть. В определенный момент я понял, что работать надо по специальности, хоть за еду, ибо опыта программирования я хуй наберусь на подработках, и посмотрел на стак, который требуется работодателям (без опыта, офк) в моей специальности - везде 1с и сраный битрикс, кроме двух компаний, куда требуется php jQuery AJAX джун, и понял, что нужно идти туда.
В связи с этим нужно в кратчайшие сроки выучить php + js на достаточном уровне, чтобы взяли на работу, на зп похуй, главное начать уже работать. Вот так я и пришел к вам, сейчас усиленно читаю материал по ссылкам, надеюсь все будет хорошо. Спасибо опу за сбор материала и поддержку начинающих, добра тебе.
Блядь, ребят, решил вкатываться в кодинг, сейчас пытаюсь осилить html и css. Всё как-то туго идёт. Нихуя не интересно в этом разбираться. Насколько мне будут в изучении и в работе на php знания от верстки?
На каком уровне я должен эту ебучую верстку понимать? Когда понять, что хватит?
Изучи jQuery, модель DOM (из чего состоит страница) и AJAX (динамическое обновление страницы). Напиши на HTML5 какую-нибудь простенькую игрушку, типа змейки, тетриса или пятнашек.
1. Нельзя так просто взять и решить. Тебе точно нравится кодить?
2. Вёрстка и правда скукота, но знать желательно. Но странно. При первом изучении должно быть забавно, что ты можешь всякую хуйню лепить. Например, выводить то, что там php посылает.
>решил вкатываться в кодинг
а нужно ли тебе именно веб-программирование?
может и не с пхп тогда начинать?
синк эбаут ит
Ну бля, я вот роботов мечтаю писать, но я тупенький, с матаном для инжиниринга тоже по разному, скорее всего не осилю и времени выяснить это у меня нет. Светлое время вузов проебано. А пыха норм идет и даст возможность заработать свой кусок хлеба даже в мухосранске, не смотря на то что процесс верстки совсем не доставляет. Хули делать? Следовать мечтам?
Я не он >>1059082
согласен, аналогичная ситуация
тот анон вкатывается в кодинг
говорят, что лучше начинать с яп общего назначения
я например с пайтона начинал
Я наткнулся на статейку в хабре и там все охуенно пояснили. Питон - для отцов с опытом. Джунов на питоне не бывает. Но вообще - да, я на питон тоже смотрел.
Хотя один хуй я великовозрастный довен и место мне, наверное, только на заводе.
>Джунов на питоне не бывает
к сожалению, хороший язык так-то
алсо в эликсир хочу научиться
а ум понятие широкое и субъективное, так что не надо так думать
>Питон - для отцов с опытом. Джунов на питоне не бывает.
Охвоу
В мите сразу на питоне учат, в гарварде сразу после С и срача
https://ideone.com/TQox0K
>Хочу добиться уровня работоспособности на фрилансе.
Становись специалистом во фронтенде/бэкенде, поработай года 3-4 над большими проектами в жирной фирме, наработай потенциальных заказчиков. Потом уходи, принимай заказы от бывших заказчиков, набирай команду, зарабатывай деньги.
if ($anonSum > $compSum) {
echo "Анон победил!";
}
if ($compSum > $anonSum) {
echo "Компьютер победил!";
}
>читабельность
И сразу же вопрос по регуляркам. Разбиение текста по предложениям. Дело в том, что точкой обозначаются не только конец предложения, но так же и сокращения типа "Dr. Dre", "И т.д.", соответсвенно программа, построенная на подсчете точек, восклицательных знаков и вопросов будет работать некоректно. (Да и восклицания могут означать эмоциональный оттенок, или имена собственные, врожде Yahoo!).
Как сделать корректно?
Помогите разобраться с выводом неправильных номеров.
Да и в целом я обосрался и не смог правильно составить регулярное выражение.
Задачка на проверку телефонов
Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — правильный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).
Задачу надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет, что они определяются как надо (если нет — надо вывести, какой именно номер не распознается правильно).
Как специалистом то стать?
Не знаешь, чем AJAX отличается от прагма-директив?
Я например, чтобы хотя бы к ПхП приступить параллельно изучаю Си, а там еще более сложнее. И верстку постепенно улучшаю и на стороне беру курсы по дизайну страниц. Но HTML и CSS я изучаю до сих пор, делая главное задание по верстке от ОПа. И мне интересно, это самое важное, интерес.
нубсишник
И как мне получение токена поможет передать пароль в gpg процесс? Ты думал, что у меня не получается просто аутентифицировать пользователя?
Многие, конечно, сейчас будут смеяться, но для меня пока php - это сишка без прямого доступа к памяти и без типизации. Но я только закончил учебник опа, сейчас пойду лопатить официальную документацию.
>>1059370
А я понял, что одной регуляркой тут не справишься. Для того, чтобы отличать сокращения от конца предложения, нужен лингвоанализ, и словарь, а это уже либо человек, либо нейронка какая, хз. Вот почему той же функции по подсчету количества предложений в тексте нет в ворде, например. Точки все смогут посчитать, а вот предложения - нет.
>>1059339
Идеон не смотрел, поэтому по коду не могу подсказать. Но пока вижу решение следующее - проверяшь, чтобы в строке не было ничего кроме "1234567890()-" - это, считай, твой алфавит, затем смотришь, чтобы именно цифр было десять, скобочки-хуебочки игнорируешь. Если все подходит, то значит номер правильный, нет - пидора ответ.
Но правда я еще не смотрел условие, но в целом получается что-то вроде
[0-9][-()] // Первая цифра, вообще для россии можно заменить на 9 или +7
[0-9][-()] // Вторая и
[0-9][-()] // третья, а так же
[0-9][-()] // четверая, причем вокруг них может быть любое количество скобок и тире.
[0-9][-()] // пятая
[0-9][-()] // шестая
[0-9][-()] // седьмая
[0-9][-()] // восьмая
[0-9][-()]* // девятая
и, думаю, какая будет десятая, ты сам поймешь. Говнокод, не спорю, нужно будет его оптимизировать, но по крайней мере, эта регулярка пропустит телефон в виде
"---(8)---(8)(0)(0)---(5)(5)(5)---(3)(5)---(3)(5)---", что, видимо по мнению опа, норм запись. Как сделать регулярку короче, но при этом чтобы она учитывала вот такой треш - я не знаю.
Блджад, я тут недавно, подобосрался с разметкой.
Смысл в том, что всего в регулярке десять блоков, вида [0-9][-()]*, где сначала должа встретиться одна из цифр [0-9], затем любое число раз или ни разу символ, выбранный из [-()], причем там важно добавить после квадратной скобки квантификатор - звездочку, который как раз и сьела разметка, превратив некоторые строки в курсив.
https://ideone.com/lZKDS1
У тебя неправильно использован оператор присваивания "=", у него та преременная, куда мы записываем значения, записывается слева, а что мы записываем - справа.
Вот правильный вариант: https://ideone.com/Y0qobq
Спасибо.
Сложно. Пожалуй, программирование не моё, я слишком даун, пойду дальше просто скроллить двач
C 5.0 по текущую. В оф доках текщей версии почти для всех фич указывается номер версии, в которой они появились.
>Какую версию учить?
Любую, перейти с 5.3 на 7.0 - дело 15мин чтения мануала с изменениями..
Из наиболее глобального mysql_query - выпилили к хуям.
Почему у пхп такая плохая репутация и многие называют его плохим языком?
>Почему у пхп такая плохая репутация и многие называют его плохим языком?
Низкая производительность, слабый инструментарий... Сильно отличная от других ЯП архитектура построения ПО.
Зная PHP вынужден был изучать C# для исполнения вполне тривиальных ресурсоёмких задач. Например тупо выкачать и распарсить в 1000 потоков какие-либо вебстранички. Оценив мощь сишарпа теперь половина моих проектов это франкинштейны из PHP с подключаемыми C# модулями под конкретные задачи которые PHP тупо не тянет.
Я вот как раз думаю, пхп или асп нет изучать. На одной чаше весов большое количество вакансий, на другой - возможность изучить хороший язык программирования и научиться каким-то универсальным навыкам, я знаю только js но вакансий гораздо меньше.
https://ideone.com/DD3zlJ
https://3v4l.org/LdYmZ
Ты вычисляешь размер массива $screen из количества букв в фразе. Это неправильно. Он должен вычисляться из радиуса с запасом.
>>1059616
Попробуй вывести с помощью echo, сколько ты платишь в последний месяц (до и после добавления комиссии). Там остается, допустим, 4500 (4500 < 5000), но после добавления процентов и комиссий получается ~5600, которые заемщик не может выплатить сразу, он платит 5000, а 600 переходит на следующий месяц и к ним второй раз добавляется процент и комиссия. У тебя это не учтено, потому общая сумма примерно на 1000 меньше правильной.
>>1059609
Ты не находишь странным, что на "хороший" язык программирования меньше вакансий? А так конечно, разные языки для разных случаев лучше подходят.
>>1059197
А по твоему, загрузка данных с диска идет с бесконечно большой скоростью? Нет конечно. Также, требуется время на синтаксический разбор файла, создание в памяти нужных объектов и массивов. Я не думаю, что в каком-то другом языке это будет работать быстрее, так как сама функция json_decode написана на Си.
Так что да, делай базу данных с оптимальной структурой и правильно настроенными индексами (иначе опять будешь жаловаться). Поиск в БД одной строки с индексом занимает < 1мс, без индекса - несколько секунд.
>>1059608
А ты ведь даже зайти в гитхаб и посмотреть на код json_decode поленился, а уже бежишь писать про "задачи, которые php не тянет".
Спроси у тех, кто называет. Алсо, статья с аргументами в помощь https://habrahabr.ru/post/315152/
>>1059583
Из важных вещей - сделали тайп-хинты на скалярные типы (int/string), добавили возможность указать тип возвращаемого функцией значения. Жаль конечно что не хотят всякое легаси выпиливать, запретить добавлять поля в объекты и заменить ошибки на исключения.
>>1059504
Вообще, плохо что PHP не сообщил об ошибке синтаксиса. Я изучил ситуацию, там в парсере есть какие-то хаки и они интепретируют $a + $b = $c как $a + ($b = $c) в нарушение приоритетов операторов. Плохо.Создал баг в PHP для обсуждения проблемы: https://bugs.php.net/bug.php?id=75179
>>1059495
Не надо 10 раз копипастить одно и то же. Нужно использовать квантификатор, задающий 10 повторений.
>>1059493
> php - это сишка без прямого доступа к памяти и без типизации
Ты недооцениваешь, насколько PHP более высокоуровневый язык. Попробуй, например, в Си напиши функцию, возвращающую строку или массив (это не так просто, как ты думаешь. Я могу привести один факт: в процесс может быть загружено несколько динамических библиотек, использующих разные версии рантайма так, что выделенная одной библиотекой память не будет освобождаться другой или через free(). Или, что хуже, вместо освобождения будет повреждаться куча. Потому в Windows часто выделение памяти перекладывают на пользователя, но это добавляет проблем, когда размер получаемой строки заранее неизвестен). Также, отдельная проблема на Си - это отсутствие менеджера зависимостей и родной системы сборки, как следствие монстры вроде autotools с нечитаемым синтаксисом конфигов.
Вообще, писать на Си что-то сложнее лабораторной работы это боль. Потому, кстати, Го был так радостно встречен. Ну а что касается PHP, код для веба на нем писать быстрее и удобнее, чем на Си (но конечно бардака в нем тоже хватает, вот бы сюда взять строгость синтаксиса из Питона).
> эта регулярка пропустит телефон в виде
> "---(8)---(8)(0)(0)---(5)(5)(5)---(3)(5)---(3)(5)---", что, видимо по мнению опа, норм запись
А ты попробуй сформулировать правила, отличающие "правильный" номер от неправильного. Я просто поймал себя на мысли, что нужно где-то остановиться и выгоднее сделать простую регулярку. Наша цель - ловить опечатки, а не каких-то пользователей-злодеев, решивших заполнить ншу базу данных минусами.
Спроси у тех, кто называет. Алсо, статья с аргументами в помощь https://habrahabr.ru/post/315152/
>>1059583
Из важных вещей - сделали тайп-хинты на скалярные типы (int/string), добавили возможность указать тип возвращаемого функцией значения. Жаль конечно что не хотят всякое легаси выпиливать, запретить добавлять поля в объекты и заменить ошибки на исключения.
>>1059504
Вообще, плохо что PHP не сообщил об ошибке синтаксиса. Я изучил ситуацию, там в парсере есть какие-то хаки и они интепретируют $a + $b = $c как $a + ($b = $c) в нарушение приоритетов операторов. Плохо.Создал баг в PHP для обсуждения проблемы: https://bugs.php.net/bug.php?id=75179
>>1059495
Не надо 10 раз копипастить одно и то же. Нужно использовать квантификатор, задающий 10 повторений.
>>1059493
> php - это сишка без прямого доступа к памяти и без типизации
Ты недооцениваешь, насколько PHP более высокоуровневый язык. Попробуй, например, в Си напиши функцию, возвращающую строку или массив (это не так просто, как ты думаешь. Я могу привести один факт: в процесс может быть загружено несколько динамических библиотек, использующих разные версии рантайма так, что выделенная одной библиотекой память не будет освобождаться другой или через free(). Или, что хуже, вместо освобождения будет повреждаться куча. Потому в Windows часто выделение памяти перекладывают на пользователя, но это добавляет проблем, когда размер получаемой строки заранее неизвестен). Также, отдельная проблема на Си - это отсутствие менеджера зависимостей и родной системы сборки, как следствие монстры вроде autotools с нечитаемым синтаксисом конфигов.
Вообще, писать на Си что-то сложнее лабораторной работы это боль. Потому, кстати, Го был так радостно встречен. Ну а что касается PHP, код для веба на нем писать быстрее и удобнее, чем на Си (но конечно бардака в нем тоже хватает, вот бы сюда взять строгость синтаксиса из Питона).
> эта регулярка пропустит телефон в виде
> "---(8)---(8)(0)(0)---(5)(5)(5)---(3)(5)---(3)(5)---", что, видимо по мнению опа, норм запись
А ты попробуй сформулировать правила, отличающие "правильный" номер от неправильного. Я просто поймал себя на мысли, что нужно где-то остановиться и выгоднее сделать простую регулярку. Наша цель - ловить опечатки, а не каких-то пользователей-злодеев, решивших заполнить ншу базу данных минусами.
Ошибка на ошибке
> [7-8+\\s]
Это значит "ровно один любой из символов: 7, минус, 8, плюс, или пробел"
> {1}
Без этой конструкции будет то же самое
> [0-9-\\s\\(\\)]{10}
Это значит ровно 10 символов, но не обязательно 10 цифр, а например 6 цифр и 4 других символа.
> [^а-я]
Это значит любые символы (и цифры, и знаки, и латиница), или буква ё, кроме кирилицы.
Также, ты используешь кирилицу, но нет флага u. Без него регулярка будет воспринимать букву кирилицы (которая кодируется как 2 байта) просто как 2 отдельных несвязанных символа.
Тебе надо разобраться со скобками в регулярках: что обозначают разные виды скобок, (), [] и {}. И затем уже написать такое выражение:
(в начале +7 или 8), затем (ровно одна цифра, за ней любое число символов) x 10 раз
Ответил тут https://pastebin.com/h3gkvsnF из-за спам-фильтра.
>>1059266
Ну трудно ведь понять, что тебе подойдет. Я бы советовал посмотреть мой учебник, те разделы, которые ты не знаешь, полистать мануал, phptherightway это не учебник, там просто написано про плохие и хорошие подходы. В ОП посте есть задача про список студентов - ее точно стоит сделать, но перед этим изучить то, что не хватает.
>>1059082
Но что тебе не нравится? Мне вертска казалась интересной в том плане, что ты только задаешь общие правила, а уже браузер мучается с тем, какой размер задать блоку, как его расположить. Может ты какой-то учебник читаешь, который плохо объясняет?
>>1059218
if лучше бы объединить в один блок if .. elseif ... elseif .. else, чтобы покзать что они связаны и может сработать только один вариант.
А так, у тебя может сработать первое правило про даблы и затем одно из следующих.
>>1059177
Ну для верстальщика нужно хорошо знать и CSS, и JS (в ОП посте есть задачи и на то и на другое, чтобы оценить свои силы). Но надо иметь, что верстальщиков конечно очень много, и специалист, который может сделать сайт целиком, а не только верстку, более востребован.
Я думаю, дело не в Питоне. Заказчик хочет видеть результат, а не нуба, который умеет только писать функции для переворачивания строк и умеет рисовать на доске двоичное дерево. Нужен тот, кто сразу начнет решать реальные задачи.
Соответственно нужно знание не только языка, но и библиотек, фреймворка, опыт создания каких-то приложений, хотя бы учебных.
Бывают впрочем компании, которые берут стажеров, но там тоже думаю требования есть.
>>1059152
Почему вам верстка кажется неинтересной? Вы наверно ни в чем не разобрались, а просто привыкли свойства наугад переставлять, пока не заработает. Когда понимаешь то же позиционирование, никаких проблем нет - в уме представляешь, какие свойства надо поставить, как результат будет выглядеть, и как он будет тянуться при изменении размера.
>>1059082
В Оп-посте есть задачи на HTML, в конце задача на верстку макета, по ним можно оценить свои силы.
>>1059074
Я хотел заметить, что изучение PHP тебе никак не запрещает позже изучать другие вещи. Ну а что касается ядра линукса - в вебе в него лезть не приходится, но вот решать проблему обработки большого объяма данных за короткое время - такое часто встречается.
Например: учет просмотров страниц на высокопосещаемом сайте (с отсеиванием повторных заходов тем же пользователем), аналитика, поиск среди большого числа пользователей по разным критериям, определение спама в сообщениях, построение индивидуальной ленты событий для пользователей, блокировка DoS атак.
Раньше такие вещи часто писали на Си, сейчас, думаю, будут писать на Го (который все равно без знания Си толком не выучишь). Вот например сишные демоны, которые выкладывали разработчики ВК: https://github.com/vk-com/kphp-kdb/tree/master/docs/ru
Тот же memcache, например, написали разработчики livejournal, чтобы справиться с нагрузкой.
Часть задач конечно решается стандартными средствами, вроде redis или sphinx, но даже тут понимание их внутреннего устройтства очень помогает.
Ну и кстати, сейчас появляется WebAssembly, Asm.js, позволяющие выполнять код на ассемблере из браузера.
Я думаю, в вебе немало интересного.
Я думаю, дело не в Питоне. Заказчик хочет видеть результат, а не нуба, который умеет только писать функции для переворачивания строк и умеет рисовать на доске двоичное дерево. Нужен тот, кто сразу начнет решать реальные задачи.
Соответственно нужно знание не только языка, но и библиотек, фреймворка, опыт создания каких-то приложений, хотя бы учебных.
Бывают впрочем компании, которые берут стажеров, но там тоже думаю требования есть.
>>1059152
Почему вам верстка кажется неинтересной? Вы наверно ни в чем не разобрались, а просто привыкли свойства наугад переставлять, пока не заработает. Когда понимаешь то же позиционирование, никаких проблем нет - в уме представляешь, какие свойства надо поставить, как результат будет выглядеть, и как он будет тянуться при изменении размера.
>>1059082
В Оп-посте есть задачи на HTML, в конце задача на верстку макета, по ним можно оценить свои силы.
>>1059074
Я хотел заметить, что изучение PHP тебе никак не запрещает позже изучать другие вещи. Ну а что касается ядра линукса - в вебе в него лезть не приходится, но вот решать проблему обработки большого объяма данных за короткое время - такое часто встречается.
Например: учет просмотров страниц на высокопосещаемом сайте (с отсеиванием повторных заходов тем же пользователем), аналитика, поиск среди большого числа пользователей по разным критериям, определение спама в сообщениях, построение индивидуальной ленты событий для пользователей, блокировка DoS атак.
Раньше такие вещи часто писали на Си, сейчас, думаю, будут писать на Го (который все равно без знания Си толком не выучишь). Вот например сишные демоны, которые выкладывали разработчики ВК: https://github.com/vk-com/kphp-kdb/tree/master/docs/ru
Тот же memcache, например, написали разработчики livejournal, чтобы справиться с нагрузкой.
Часть задач конечно решается стандартными средствами, вроде redis или sphinx, но даже тут понимание их внутреннего устройтства очень помогает.
Ну и кстати, сейчас появляется WebAssembly, Asm.js, позволяющие выполнять код на ассемблере из браузера.
Я думаю, в вебе немало интересного.
Если тебе что-то непонятно, можно задавать вопросы, ОП рано или поздно ответит.
>>1058668
> Неправда, верстку учат на полевых условиях.
Это типичное заблуждение. Что-то простое может ты и сможешь слепить, но вполне возможно, что верстка будет нестабильной, разваливаться при добавлении нового контента, изменении размера страницы, и тд. А ты будешь переставлять наугад свойства, не понимая, в чем проблема.
Не надо так. CSS нужно именно изучать, разбираться, чтобы в уме представлять, как что будет отображаться, как реагировать на изменение размера итд.
Я сам уже не помню, когда я последних раз хорошую верстку видел. Одни дауны какие-то верстают.
>>1058994
Неправильно, так только переставляльщики CSS свойств наугад получаются.
>>1058775
Я вижу такие варианты:
- ничего не расшифровывать на сервере, передавать на клиент зашифрованные сообщения и пусть сам расшифровывает
- на каждое действие передавать с клиента в серверное API пароль или какой-то хеш от него
- делать на сервере какое-то временное или постоянное хранилище паролей
> function login() {
> $password = $_GET['password'];
Так точно делать не надо, лезть в глобальные переменные и создавать побочные эффекты. Пароль можно и явно через аргументы передать.
> мы можем при залогинивании сохранить пароль где-то в переменной приложения, но если пользователь закроет страницу, то получить этот пароль заново будет неоткуда.
Ну либо мы его сохраняем, либо не сохраняем, других вариантов нет.
> Так же, я не знаю насколько это надёжно использовать приватные ключи без пароля.
Это значит что получивший ключ сможет расшифровать все, что им зашифровано.
То есть тебе все же надо определиться, где ты что будешь хранить, передавать и как будет выстроена модель безопасности. А уже исходя из этого выбирать реализацию.
Если тебе что-то непонятно, можно задавать вопросы, ОП рано или поздно ответит.
>>1058668
> Неправда, верстку учат на полевых условиях.
Это типичное заблуждение. Что-то простое может ты и сможешь слепить, но вполне возможно, что верстка будет нестабильной, разваливаться при добавлении нового контента, изменении размера страницы, и тд. А ты будешь переставлять наугад свойства, не понимая, в чем проблема.
Не надо так. CSS нужно именно изучать, разбираться, чтобы в уме представлять, как что будет отображаться, как реагировать на изменение размера итд.
Я сам уже не помню, когда я последних раз хорошую верстку видел. Одни дауны какие-то верстают.
>>1058994
Неправильно, так только переставляльщики CSS свойств наугад получаются.
>>1058775
Я вижу такие варианты:
- ничего не расшифровывать на сервере, передавать на клиент зашифрованные сообщения и пусть сам расшифровывает
- на каждое действие передавать с клиента в серверное API пароль или какой-то хеш от него
- делать на сервере какое-то временное или постоянное хранилище паролей
> function login() {
> $password = $_GET['password'];
Так точно делать не надо, лезть в глобальные переменные и создавать побочные эффекты. Пароль можно и явно через аргументы передать.
> мы можем при залогинивании сохранить пароль где-то в переменной приложения, но если пользователь закроет страницу, то получить этот пароль заново будет неоткуда.
Ну либо мы его сохраняем, либо не сохраняем, других вариантов нет.
> Так же, я не знаю насколько это надёжно использовать приватные ключи без пароля.
Это значит что получивший ключ сможет расшифровать все, что им зашифровано.
То есть тебе все же надо определиться, где ты что будешь хранить, передавать и как будет выстроена модель безопасности. А уже исходя из этого выбирать реализацию.
Погугли еще, я помню, что там есть всякие спринты, planning poker и что-то еще. Важно, чтобы как можно быстрее разрабатывались и сразу же внедрялись новые фичи, и не было такого, что кто-то там месяцами делает непонятно что.
>>1058530
Вот я же вроде уже писал выше, но ты проигнорировал советы. Какой смысл по второму разу все писать?
- убрать все эти POST и сделать скрипт для командной строки. Никто не запускает долгоработающие скрипты через сервер и браузер
- Я писал не подставлять переменные в запрос, в использовать плейсхолдеры
- Проверять результат вызова mysqli функций
- вставку данных делать транзакцией
- найти и убрать бессмысленные преобразования данных вроде htmlspecialchars
- Вместо массивов можно сделать объект для представления сущности, которую ты парсишь
На этом все. В маленьком скрипте что-то еще делать смысла нет. Если тебя интересуют паттерны и архитектура, то они нужны в больших приложениях, а не в малкеньких скриптах.
> К примеру, 5 раз используется конструкция вида INSERT INTO, с этим нужно что-то делать?
нет
>>1058764
Красота кода заключается в том, что код легко читать, легко в нем разобраться другому человеку, легко поддерживать, в нем нет побочных эффектов, при исправлении в одном месте ничего не ломается в другом месте. Подробно это описано в книгах вроде "Совершенный код". Несколько простых советов есть у меня (это конечно не полный список): https://github.com/codedokode/pasta/blob/master/good-code.md
В твоем скрипте архитектура никакя особо не нужна так как он очень простой. Но запускать через браузер его конечно не надо.
>>1058370
Кроме парсера, остальное заведомо мертворожденные проекты.
>>1057793
> как функции, операции, создание представлений, триггеры (или как их там)
Есть мнение, что от этих фич больше вреда, чем пользы, и БД лучше использовать просто как хранилище без логики. Разве что валидацию для защиты от ошибок можно прикрутить.
Представления - неизвестно как влияют на производительность и непонятно как оптимизирвать операции с ними.
Триггеры - не видны в коде, не могут нормально передавать ошибки и сообщения, неизвестно как влияют на производительность.
Хранимые процедуры - непонятно как отлаживать, приходится использовать неудобный язык, нельзя вызывать функции или обращаться к константам в коде.
Можешь сам погуглить про аргументы за/против.
Если хочешь разобраться, открывай мануалы, изучай SQL/PL.
Погугли еще, я помню, что там есть всякие спринты, planning poker и что-то еще. Важно, чтобы как можно быстрее разрабатывались и сразу же внедрялись новые фичи, и не было такого, что кто-то там месяцами делает непонятно что.
>>1058530
Вот я же вроде уже писал выше, но ты проигнорировал советы. Какой смысл по второму разу все писать?
- убрать все эти POST и сделать скрипт для командной строки. Никто не запускает долгоработающие скрипты через сервер и браузер
- Я писал не подставлять переменные в запрос, в использовать плейсхолдеры
- Проверять результат вызова mysqli функций
- вставку данных делать транзакцией
- найти и убрать бессмысленные преобразования данных вроде htmlspecialchars
- Вместо массивов можно сделать объект для представления сущности, которую ты парсишь
На этом все. В маленьком скрипте что-то еще делать смысла нет. Если тебя интересуют паттерны и архитектура, то они нужны в больших приложениях, а не в малкеньких скриптах.
> К примеру, 5 раз используется конструкция вида INSERT INTO, с этим нужно что-то делать?
нет
>>1058764
Красота кода заключается в том, что код легко читать, легко в нем разобраться другому человеку, легко поддерживать, в нем нет побочных эффектов, при исправлении в одном месте ничего не ломается в другом месте. Подробно это описано в книгах вроде "Совершенный код". Несколько простых советов есть у меня (это конечно не полный список): https://github.com/codedokode/pasta/blob/master/good-code.md
В твоем скрипте архитектура никакя особо не нужна так как он очень простой. Но запускать через браузер его конечно не надо.
>>1058370
Кроме парсера, остальное заведомо мертворожденные проекты.
>>1057793
> как функции, операции, создание представлений, триггеры (или как их там)
Есть мнение, что от этих фич больше вреда, чем пользы, и БД лучше использовать просто как хранилище без логики. Разве что валидацию для защиты от ошибок можно прикрутить.
Представления - неизвестно как влияют на производительность и непонятно как оптимизирвать операции с ними.
Триггеры - не видны в коде, не могут нормально передавать ошибки и сообщения, неизвестно как влияют на производительность.
Хранимые процедуры - непонятно как отлаживать, приходится использовать неудобный язык, нельзя вызывать функции или обращаться к константам в коде.
Можешь сам погуглить про аргументы за/против.
Если хочешь разобраться, открывай мануалы, изучай SQL/PL.
Думаю, лучше явно - передавать параметр ?json=1 и проверять его ифом. То, что ты задумал - не лучшая идея, так как в отдаваемых данных может быть то, что пользователи видеть не должны. Когда-то на одном сайте умники так решили сделать, и по моему чуть ли не весь конфиг с паролями отдавали в JSON-ответе.
Явное лучше неявного. Не нужно никакой магии и не нужно пытаться автоматически превратить параметры шаблонизатора в JSON-ответ.
Также, стоит подумать, а откуда такая необходимость и не лучше ли сделать один вариант отдачи данных.
>>1057184
А, я вообще стараюсь к авторизации в Симфони близко не подходить - ощущение чего-то переусложненного и переинженеренного. Алсо, не нравится, что они засовывают в контейнер временные данные вроде request_stack или user.
Но если ты хочешь разобраться - читай исходники.
> доктрину подавляющее большинство симфонистов используют неправильно - репозитории как TableDataGateway
Ну они примерно для этого и задумывались
> анемичные модели
А в этом-то что плохого? Ты к ActiveRecord привык, где в один класс модели засунули полприложения? Наоборот хорошо, что модель не привязана к базе данных.
> бизнес логика в хендлерах событий сущности и прочее.
Это да, мне события на сервере вообще не нравятся, только все запутывают. Ищи потом по всем бандлам, где там обработчик поставлен.
> Всё это и на Yii2 можно повторить, если выносить запросы к БД в репозитории (у нас используется такой подход для Eloquent).
Да ну, мне он не нравится, там ActiveRecord, глобально доступный god object и много архитектурного ада. Для небольших приложений впрочем работает.
>>1056871
Вместо $i<=1 лучше $i < 2 чтобы явно было видно количество.
> array_rand(array_flip($word1), 1);
Не нужен тут array_flip, нужно просто писать $x[array_rand(...)]
> $symbol2 = mb_substr($text, $length, 1);
Ты берешь символ за пределами строки. Всегда будет получаться не-палиндром.
>>1056869
Можно через точку, но может кому-то больше нравится сделать массив слогов и его склеить потом. Оба варианта правильные.
>>1056989
Убедись, что результат действительно будет лучше и что ты не получишь в итоге много потраченного времени и такую же кучу кода, только на фреймворке.
Думаю, лучше явно - передавать параметр ?json=1 и проверять его ифом. То, что ты задумал - не лучшая идея, так как в отдаваемых данных может быть то, что пользователи видеть не должны. Когда-то на одном сайте умники так решили сделать, и по моему чуть ли не весь конфиг с паролями отдавали в JSON-ответе.
Явное лучше неявного. Не нужно никакой магии и не нужно пытаться автоматически превратить параметры шаблонизатора в JSON-ответ.
Также, стоит подумать, а откуда такая необходимость и не лучше ли сделать один вариант отдачи данных.
>>1057184
А, я вообще стараюсь к авторизации в Симфони близко не подходить - ощущение чего-то переусложненного и переинженеренного. Алсо, не нравится, что они засовывают в контейнер временные данные вроде request_stack или user.
Но если ты хочешь разобраться - читай исходники.
> доктрину подавляющее большинство симфонистов используют неправильно - репозитории как TableDataGateway
Ну они примерно для этого и задумывались
> анемичные модели
А в этом-то что плохого? Ты к ActiveRecord привык, где в один класс модели засунули полприложения? Наоборот хорошо, что модель не привязана к базе данных.
> бизнес логика в хендлерах событий сущности и прочее.
Это да, мне события на сервере вообще не нравятся, только все запутывают. Ищи потом по всем бандлам, где там обработчик поставлен.
> Всё это и на Yii2 можно повторить, если выносить запросы к БД в репозитории (у нас используется такой подход для Eloquent).
Да ну, мне он не нравится, там ActiveRecord, глобально доступный god object и много архитектурного ада. Для небольших приложений впрочем работает.
>>1056871
Вместо $i<=1 лучше $i < 2 чтобы явно было видно количество.
> array_rand(array_flip($word1), 1);
Не нужен тут array_flip, нужно просто писать $x[array_rand(...)]
> $symbol2 = mb_substr($text, $length, 1);
Ты берешь символ за пределами строки. Всегда будет получаться не-палиндром.
>>1056869
Можно через точку, но может кому-то больше нравится сделать массив слогов и его склеить потом. Оба варианта правильные.
>>1056989
Убедись, что результат действительно будет лучше и что ты не получишь в итоге много потраченного времени и такую же кучу кода, только на фреймворке.
>>1056370
> Вообще это крайне редкая ситуация, но рано или поздно она встретится.
Есть похожие вещи, которые в общем-то сложно тестирвать детерминистичными методами: ошибки работы с памятью, ошибки доступа к данным в многопоточной среде, всякие гонки. Их можно попробовать определять стресс-тестами. Вот например майкрософт тестирует сборщик мусора в .NET, запуская приложение, которое выделяет и освобождает память в течение нескольких суток - если там есть ошибки, с какой-то вероятностью они проявятся.
Ты бы мог попробовать что-то аналогичное - один или много процессов создает/удаляет файлы, а другие процессы их читают.
Кстати, кроме fuse есть еще вариант попробовать использовать какие-нибудь специальные файлы вроде сокетов - приложение на другом конце может определить факт чтени/записи в него и например попробовать его удалить или что-то сделать с другим файлом. Или написать модуль ядра и сделать специальный файл в /proc, хотя это наверно еще сложнее чем FUSE. Или запускать код под отладчиком, перехватывающим системные вызовы и возвращающий нужные коды ошибки в ответ.
Ну например, когда мне надо было протестировать ошибку чтения - я взял файл /proc/self/mem, который вроде как файл, но прочитать успешно не получится. Это конечно делает тест линуксоспецифичным.
Также, такие вещи ловятся анализаторами - может для твоего случая можно как-то вывести в лог все выполняемые операции (проверка наличия файла, открытие) и искать комбинации операций, которые небезопасны.
>> переписать код так, чтобы это было невозможно
> Это как бэ невозможно
Может и возможно? Гонка между проверкой файла/открытием решается вызовом open() сразу и проверкой кода ошибки. Также, там есть флаг для открытия с взятием блокировки. Также, при удалении файла, который открыт другой программой, он не удаляется с диска до закрытия. Или у тебя дикая ситуация вроде выдергивания работающей флешки? Можно попробовать имитировать размонтированием tmpfs.
>>1056316
Скорее всего тут лучше просто использовать if, так как между удаленным и локальным файлом много различий и нормальной абстракции не получится.
> я не могу хранить в сущности полный путь к файлу в локальной ФС. Хорошей практикой считается хранить только относительный путь
Это касается только базы данных. Во временном объекте ты можешь хранить что хочешь.
>>1056370
> Вообще это крайне редкая ситуация, но рано или поздно она встретится.
Есть похожие вещи, которые в общем-то сложно тестирвать детерминистичными методами: ошибки работы с памятью, ошибки доступа к данным в многопоточной среде, всякие гонки. Их можно попробовать определять стресс-тестами. Вот например майкрософт тестирует сборщик мусора в .NET, запуская приложение, которое выделяет и освобождает память в течение нескольких суток - если там есть ошибки, с какой-то вероятностью они проявятся.
Ты бы мог попробовать что-то аналогичное - один или много процессов создает/удаляет файлы, а другие процессы их читают.
Кстати, кроме fuse есть еще вариант попробовать использовать какие-нибудь специальные файлы вроде сокетов - приложение на другом конце может определить факт чтени/записи в него и например попробовать его удалить или что-то сделать с другим файлом. Или написать модуль ядра и сделать специальный файл в /proc, хотя это наверно еще сложнее чем FUSE. Или запускать код под отладчиком, перехватывающим системные вызовы и возвращающий нужные коды ошибки в ответ.
Ну например, когда мне надо было протестировать ошибку чтения - я взял файл /proc/self/mem, который вроде как файл, но прочитать успешно не получится. Это конечно делает тест линуксоспецифичным.
Также, такие вещи ловятся анализаторами - может для твоего случая можно как-то вывести в лог все выполняемые операции (проверка наличия файла, открытие) и искать комбинации операций, которые небезопасны.
>> переписать код так, чтобы это было невозможно
> Это как бэ невозможно
Может и возможно? Гонка между проверкой файла/открытием решается вызовом open() сразу и проверкой кода ошибки. Также, там есть флаг для открытия с взятием блокировки. Также, при удалении файла, который открыт другой программой, он не удаляется с диска до закрытия. Или у тебя дикая ситуация вроде выдергивания работающей флешки? Можно попробовать имитировать размонтированием tmpfs.
>>1056316
Скорее всего тут лучше просто использовать if, так как между удаленным и локальным файлом много различий и нормальной абстракции не получится.
> я не могу хранить в сущности полный путь к файлу в локальной ФС. Хорошей практикой считается хранить только относительный путь
Это касается только базы данных. Во временном объекте ты можешь хранить что хочешь.
Не пишется код, не могу уже 2 дня решить задачу с циклами и вкладом в банк, я гуманитарий даун тупой, в общем.
Я набираю текст в редакторе и потом пощу, так как в браузере это делать неудобно и легко потерять, нажав Ctrl + R вместо Ctrl + T. Ну и эта борда при наборе больших объемов текста начинает тормозить.
потому что ты соединяешь строки
"строка ". _переменная ."конец строки";
Это не всегда удобно.
Точка работает в качестве соединителя всех строк в одну
Хмммммммм, я более-менее понял, спасибо.
Прикинь, в советское время даже к диплому пту предъявлялось требование, чтобы он содержал элементы исследовательской работы. Вот дураки были!
Конкатенация.
В интернете куча шаблонов магазинов.
>- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
Если хочешь понимать каждую деталь кода.
Ну а если тупо копипастить, то гораздо быстрее.
Принимает ссылку на тред, скачивает сорцы картинок и пакует их в архив. Еще надо будет сделать чтобы он отдавал архив через фрон и чистил хранилище.
Вопросов нет, просто отметился.
На самом деле пока что очень сложно, я толком не прошел паскаль, а уже начинаю пхп
Пробовал 2 раза, оба раза заканчивались на одной и той же задаче с айфонами. Почему? Потому что я криворукий. Потому что того, что работает на паскале не работает нормально на пхп. Ну еще клавиатура залипающая, завтра буду ее чистить.
На самом деле я до сих пор не могу полностью понять всех ваших правил пхп, завтра начну с нуля. Ну или почти с нуля.
Алсо, почему нет конфочки в тг?
Гриша, а я по тебе уже соскучился!
>Нужно использовать квантификатор, задающий 10 повторений.
Ну т.е. /([0-9][-()]*){10}/, правильно? Хм, а ведь элегантно же.
>насколько PHP более высокоуровневый язык.
В той фразе было больше юмора, нежели смысла. Если бы мне нужно было работать с массивом, то я бы юзал указатель на его место в памяти, но тогда я понимаю, что было бы, если бы
> несколько динамических библиотек, использующих разные версии рантайма
>А ты попробуй сформулировать правила, отличающие "правильный" номер от неправильного.
В том-то и дело, что я не знаю, какой номер правильный, а какой - нет. Я таким образом и намекаю на то, что мне тз не ясен. Хотя, почитав условие задачи, становится очевидно, что любой номер, который возможно адекватно прочитать - правильный. Но тогда я бы просто вырезал из строки все цифры, и затем смотрел бы, являются они номером, или нет - а есть там приписка про Люду, иль нет... При этом регулярка да, оказалась гораздо компактнее и симпатичнее.
>>1059872
>Ответил тут
Я так и понял, >>1059493
За ссылки спасибо, позже почитаю.
https://www.udemy.com/php-for-complete-beginners-includes-msql-object-oriented/
------------------------
https://www.udemy.com/learn-php-programming-from-scratch/#instructor-1
ОП одобрил?
Регулярка пропускает через себя номера большей, чем нужно длины. Как это исправить? В примере - восьмой номер, он должен был быть отфильтрован.
https://ideone.com/dkTZYO
А, собственно, можно же после группы символов с квантификатором {11} просто добавить еще одну группу символов [-()/s]*, и тогда должно норм работать.
ОС debian
Речь про сервер или про домашний компьютер? Если второе, то есть ли у тебя "внешний" или "белый" IP-адрес, к которому можно подключаться снаружи? (по умолчанию многие провайдера размещают абонентов за NAT, и за "белый" адрес надо доплачивать).
Вроде белый если верить https://192-168-1-1.ru/ip-address-classify/, динамический.
Домашний компьютер.
Динамический IP значит что тебе надо использовать DynDNS - это технология, когда программа на твоем компьютере обновляет на DNS сервере IP каждый раз, когда твой IP меняется. Соответственно, будут небольшие пропадания доступа снаружи из-за этого.
Также, "динамический IP" еще не значит, что к тебе можно подсоединиться снаружи - может, у твоего провайдера NAT. Советую посмотреть информацию на сайте провайдера или в личном кабинете.
Что касается настройки компьютера, то тут только 2 момента:
- в конфиге Апача должен быть указан 0.0.0.0 (слушать на всех интерфейсах), а не 127.0.0.1 в качестве интерфейса, на котором Апач слушает порт (проверить можно командой sudo netstat -lpn найдя в выводе Апач, порт 80 и посмотрев какой там стоит IP адрес)
- в фаерволле, если он включен, должен быть разрешен доступ снаружи к порту 80 и 443 для https.
Ну и помни про безопасность - если ты открываешь доступ снаружи, на твой сервер попытаются пролезть всякие боты, будут например подбирать пароль к ssh пытаться.
> Ну для верстальщика нужно хорошо знать и CSS, и JS (в ОП посте есть задачи и на то и на другое, чтобы оценить свои силы). Но надо иметь, что верстальщиков конечно очень много, и специалист, который может сделать сайт целиком, а не только верстку, более востребован.
Как учить? Книги? Если да, то какие?
Есть градации знаний и уровни специалиста
Ньюфаг
Студент
Стажор
Джун
Мидл
Тимлид
Синьор
Какие знания должен иметь каждый из этих градаций по вашему?
Нюфаня ничего не знает, должен знать
Студент писать паскаль, студента не учить ничему
Стажор не знать, знать стажер
Джун знать основа, точно говоря CSS, HTML, JS маленький
Мидл не знать
Тимлид не обязательно знать, но уметь управлять
Синьор знать все в своем CSS, HTML, JS, PHP знать сделать форум и хост
Для знать уровень нужен работа
Моё мнение.
Ньюфаг
HTML, CSS, немного JS и возможно немного PHP уровня "На ютюбе посмотрел"
Студент
HTML5, CSS3, Основы JS, Основы PHP (циклы, алгоритмы, подключение к БД), SQL на уровне специалиста, уметь в 2-3 СУБД на уровне "Создал БД". Умение работать с гитом.
Стажор
PHP на уровне середнячка, уметь с нуля писать MVC, знать 1-2 фрэймворка, иметь опыт разработки пары тройки сайтов (не коммерческий), SQL знать на уровне очень крутого спеца. Иметь Github c 2 мини проектами. Знать основы проектирования БД. Иметь опыт работы с 3-5 субд. Иметь опыт работы с IDE.
Джун
Знание PHP и его подводных камней. иметь портфолио из 5-10 сайтов(можно некоммерч), знание 3-5 фрэймворков. Иметь маленький опыт коммерческой разработки. Хорошо знать JS, знать HTML и CSS на 9 из 10. Чтобы совсем уж тупыми вопросами не доставать. Уметь проектировать БД с нуля. Уметь управлять СУБД в авторежиме, бэкапить, пересоздавать, конвертить. Понимать что у тебя вылежла ха ошибка и иметь опыт эти ошибки исправлять. Уметь работать с JSON. Уметь работать с чужими API. Уметь в фулл стек фронта + бэка (да это не нужно, но ты обязан знать фронт чтобы писать более удобный бэк например ящитаю).
Мидл
Иметь ZEND сертификат. дальше пока не придумал.
Тимлид
Синьор
В целом какие перспективы ожидают web и цифровую коммерцию?
Как долго ещё для того, чтобы вкатиться в web будет достаточно такого низкого входного порога уровня "веб-макака"?
> Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL
Где? Как?
Я тоже соломку хочу постелть, да не знаю куда...
>Как долго ещё для того, чтобы вкатиться в web будет достаточно такого низкого входного порога уровня "веб-макака"?
5 лет назад. Уже всякие JS дауны считают себя прогроммистами. Ходя взять 2007 года, JS, HTML, CSS - знал вообще любой школьник у которого бл компьютер.
>Как долго ещё для того, чтобы вкатиться в web будет достаточно такого низкого входного порога уровня "веб-макака"
Лол. Для того, что бы вкатиться ранга "веб-макака" недостаточно уже сейчас.
>Ходя взять 2007 года Уже всякие PHP дауны считают себя прогроммистами.
Пофиксил на полном серьезе.
сап, может кто шарит помогите!
короч есть сервак win server 2012r2 подняты iis+php+mysql как создать сайт локальный для изучения сайтостроения и прогать прям видя результат
Собираюсь брать ноутбук, чтобы учиться кодить на основной работе. Бюджет как всегда ограничен, само собой. Поэтому, нужно взять максимально недорого, но не в ущерб производительности. То есть, нужен ноутбук, за которым я смогу комфортно работать в верстке и в php.
Напишите, пожалуйста, минимальные характеристики.
Заранее спасибо, ребят.
Шутки шутишь?
В гугле пишут что 8 гб оперативы миниму и так далее.
А я вообще не могу понять, нахуй она там нужна, если ты верстаешь сайты и кодишь в php
Блядь, вот я спросил конкретный вопрос про ноут. Нечего сказать - не засоряй тред.
Как парсить не валидный html? PHP Simple HTML DOM Parser не переваривает кривой html.
К примеру <img alt="Заглушка 1" VALTEC угловая уп.532/16шт." src="img.jpg">
Дюймы 1" обозначены кавычкой, получается alt="Заглушка 1" всё остальное не понятно к чему относится. Браузеры такое переваривает, а Simple ломается при попытке вытянуть src. Может есть какой валидатор, который фиксит такую херню.
У меня были похожие случаи, когда пытался парсить старые треды с этой борды (примеры на пике). Использовал symfony/dom-crawler, работает отлично.
Это тонкая надстройка над расширением DOM в PHP, предоставляет более лаконичный API, чем нативное расширение. Для составления запросов можно взять symfony/css-selector (не вижу смысла использовать XPath без специфичных нужд).
Советую вообще дропать PHP Simple DOM, это древняя библиотека в исходниках которой чёрт ногу сломит, работает на регулярках, не умеет бросать ошибки, старьё в общем.
Ща я тебе раскидаю
Есть три основных подводных камня:
Планшеты - притворяющиеся ноутами. Очень слабый проц + мелкий экран + мелкий ссд ни понятного качества. Это шлак. Не бери никогда.
Просто очень слабый проц. Все будет медленно и со скрипом. phpstorm и ему подобные будут год открываться и страдать на больших проектах.
Медленный винт. Винт 10гб ссд + 500гб 5400 оборотов тоже медленный. Тут все понятно. Все будет медленно.
Итак тебе нужно стремиться:
Оперативки 4-6+ для Линукса (почти наверняка нужно будет накатывать пакет для регулировки вентилятора), 8+ для Вин10 (другие винды не нужны, 10-ка лучше расходует батарею и крутит охлаждение, но жрет время винта и процессора своими постоянными копошениями, что можно вырубить сторонними тулзами).
Либо предустановленный ссд (что дорого) либо возможность его туда впереть. Впирается или вместо сидюка если он есть (есть специальные переходники, как правило с алиэкспессов за 7-30 уе) или вместо оригинального винта. В первом случае я бы целился в 128 гб ссд во втором хотелось бы 250+ но и 120+ тоже пойдет. Т.е. нужно при выборе модели гуглить кто и как туда вставил ссд.
Разъем для подрубания монитора + пачка юсб для мышей и клавиатур, если есть куда воткнуться на работе.
Я бы прикидывал так:
Ноут с максимально жирным процессором и 8 гб оперативы за бюджет - ~$120. И $120 на оССДение.
Не стесняйся спрашивать про конкретные модели
>>1061606
Этот вообще прав. Линукс + ЛАМП + сублаймтекст работают практически на чем угодно.
>Не стесняйся спрашивать про конкретные модели
в ноутбуко-треде в /hw/. Там конечно унизят, но советов дадут. Не будем дальше разводить оффтоп.
https://ideone.com/6k4j73
$rand = rand(0,16);
сразу фейл, откуда ты знаешь сколько у тебя в массиве слогов?
>ШахиНелШахиЗулЗел
Что за КамелКейсИмя такое, сделай что бы генерило Шахинелшахизулзел
Знаю азы прогграмирования на рнр.
Хочу изучить в полной мере. Решил, что буду изучать по мере создания своего проекта.
Проект: складской учет.
Сейчас лист такой:
-Закупки
-Продажи
-товары (кол-во на складе, цена отпуска и закупки)
Вопрос вот в чем: Мне это делать в MySql? Или нет? Может есть какието нароботки по этому поводу? что стоит посмотреть в исходниках?
Спасибо
https://ideone.com/UF5yJb
на удаленном сервере изменился словарь. Что будешь делать? Каждый день будешь бегать слова пересчитывать? Найс собачка, а не программист растет, сразу видно.
В hw с такими вопросами. Но так как я сам оттуда, то скажу: Ориентируйся на быстрый твердотельник, тебе хватит ну 64гб по горло, потом накопишь вставишь еще если нужно будет. Потом процессор, 2 ядерный с 4 3ггц тредами, и про 8гб это если серьезные проекты типа видеоигр, для веб хватит по горло 4гб, для начала учебы тебе пойдет. Советую заморочиться с линуксом, тот работает на чем угодно и платить за пиратку шинды не надо будет. В общем кодить можно и на Нокии, не нужны там характеристики чтобы прям тянуло. Сейчас оборудование оптимизировано под железо ну очень хорошо, а современные процессоры имеют сказочную архитектуру которая оснащена ну волшебными инструкциями. И вообще, кодили же как то раньше, думаешь в прошлом технологии лучше были? В общем учись думать, меньше спрашивать будешь, такое ощущение что ты и кодить не сможешь, раз такие глупые вопросы задаешь. Для программиста очень плохо когда за него думают.
Хрюша ищет рабов на дваче.
Сначала охуел от того насколько всратой смотрится вакансия. Потом понял, что наверное это контора ищет себе php разраба который будет у них ПЕРВЫМ, поэтому описать нихуя не могут что толком нужно. Присматривать будешь за говносайтом, который васяны на фрилансе захуярили и теперь нужно поддерживать. И вообще вакансию похоже hr составляла, не зная нихуя о вебе.
>MySgl
Кароче просто забей.
А я только заметил MySgl, проиграл. Я еще просто подумал, ну мол HTML верстальщик, значит у них уже есть CSS верстальщик, но не подумал, что это смешно. Смешнее вот это:
>Пл.Карла Маркса
>Они телефон оставили? Могу разведать.
https://nsk.zarplata.ru/vacancy/card/135623031
+7 (905) 937-77-56
>>1061727
>Впрочем, это не самое смешное в этой анкете.
>А что тебе показалось самым смешным?
Я обосрался в общем, на запись не поставил. Но цитирую
Нам ПиЭйчПи нужен, вы работали с чем нибудь? Да у нас там разработка датабазы, ну как сказать, все уже готово как бы, просто нужно там все настроить, вот
Представил как приходишь к ним такой, поднимаешь сайт, тестируешь работоспособность, учишь кого-то из манагеров пользоваться админкой всё запускаешь кароче и после этого тебя пидорят сразу: извините тестовый период бла бла, вы нам не подходите)))
Ну или в удачном случае сидишь пинаешь хуи на работе за 15к чисто числясь и вырезая иногда новые баннеры с помощью своего "Опыт работы в графических редакторах", а по факту припашут работать шлюхой бухгалтеров и прочих девочек, которым будешь ярлыки на рабочий стол выносить.
Мужику было все равно даже на образование, сразу скидывал на то, что мол давайте встретимся.
count($array)
https://ideone.com/oLdjFJ
Почему не переводит в регистр?
Я пытался и к кускам $randText применять.
Почему оно кривиться, сказано же, нормальный код будет ближе к выходным.
У тебя типичное CRUD приложение, с таблицами и формами. В ОП посте есть задача про список студентов, с большим количеством комментариев и ссылок, и она как раз является примером простейшего CRUD приложения. Почитай ее. Там все как надо, с ООП и MVC.
Спаведливости ради, Битрикс по качеству не лучше того, что начинающий сам сделает, я помню там была проблема например с тем что он требовал какую-то настройку (register_globals? не помню), которую в новом PHP удалили.
Надо уж тогда нормальные варианты предлагать, Юи или Симфони или Ларавель.
>А что тебе показалось самым смешным?
>договорная
>высшее образование && знание HTML - верстки
>Сложные, интересные задачи
Как итт люди с этим справлялись? ПРОСТО САДИЛСЯ И ЧИТАЛ-УЧИЛ по десять часов в день? Или как всё происходило?
Нет. Просто садился и делал свои программы на <языкнейм>. Мне не хватает терпения долго читать теорию, а книги по программированию номинальным объемом от 1000 страниц осилить за пару вечеров нереально.
А я вот очень хочу хотя б базово html изучить, как я на нём что-то писать буду. Слишком тяжелая необходимая основа получается.
Да, просто садишься и учишь. Читаешь книжки, решаешь задачки, вникаешь в математику, алгоритмы и вот это вот все. Потом выбираешь язык и делаешь что тебе нужно. Тут одна важная вещь еще -- это должно нравится. Причем нравится настолько, что вполне нормально зачитываться всякой гиковской хуйней до пяти утра и не ложась пойти на работу просвещенным и просветленным.
>>1061945
Так хтмл не ЯП, а язык разметки. Чего его учить-то? Что сложного? Если даже учитывать цсс, там логики минимум. Указываешь, что тебе нужно -- оно выводится на экран. Вот охуеть как сложно.
Дополню анона.
Когда выбрал <языкнейм>, идешь на апворк и ищешь задачи. Затем приступаешь к выполнению. После пишешь заказчику: есть готовый концепт, обсудим? Рейт такой-то.
Правда ли, что апач создает новую копию, с полными инициализациями с нуля для каждого входящего запроса (или что-то в этом роде)? Это только апач так работает или все, что с php. Поясните, пожалуйста. Получается что много аякс запросов на апач серверы это не самая лучшая идея?
Короче с помощью PHP Tidy получилось сделать валидный html, Simple нормально теперь переваривает его.
Д, надо попробовать переписать свой говнокод с использованием symfony. Может он из коробки переварит корявый html.
насколько сейчас нужно заботиться о совместимости браузеров и поддержке функций на стороне клиента? Нет, я, конечно, за правильный и хороший код, но очень уж не хочется в каждом проекте думать о тех, кто до сих пор сидит на каком-нибудь IE6.
В тырпрайзе минимум IE10. Все мамонты идут нахуй.
То есть скачка файла?
1 вариант - прямая ссылка на файл
2 вариант - средствами пхп отдаешь нужный файл с соответствующим хттп заголовком
> Как итт люди с этим справлялись?
Просто им было интересно.
Не обманывай себя, тебе это не интересно и не нужно.
Ты начитался про мамкиных погромистов 300к$/нс и думаешь, что и иы станешь таким успешным. Хуй там плавал, займись тем, что тебе действительно интересно.
Мне вот мет варить интересно, например. Честный труд мало интересен. Хули делать?
Если ты имеешь ввиду, что при каждом запросе к php, он инициилизируется заново, то да. Другое дело, что большинство запросов кэшируется. Другое дело, что есть сервер сайд рендеринг, и если изменений в бд не было, то выплевываются кэшированные штмльки и любой бэкенд может не дергаться совсем.
Быть долбоёбом сложно. По возможности постарайтесь этого избежать.
Хелпаните перфекционист-куну в задаче! Последний пункт никак не могу осилить, вопрос вот в чем, требуется вывести количество людишек которые проживают в каждом отдельном штате. Проделав нехитрую манипуляцию $sumOfTex += $state["Texas"]; мы получаем непонятную ошибку, но в итоге таки когда принтим $sumOfTex на выходе получаем число 50, что равно собственно количеству жителей данного штата.
https://ideone.com/0qfHMq
???
Какой-то ты маня-перфекционист.
Ты сам не видишь того пиздеца которого ты наворотил?
Допустим твой первый цикл нырнул в Лос Анжелес. Второй цикл в это время обращается к несуществующему Техасу и спрашивает сколько там людей блядь лол.
Да я не понимаю что я там натворил, поэтому и обратился в тред.
Вижу только одно решение, по другому организовать массив.
"Texas" => {"Moscow" = 1111, "Kiev" = 1111, "Minsk" => 111], например так.
Убеждение, что несовершенный результат работы не имеет права на существование
Перфекционизм заключается в том, что бы решить задачу правильно.
А ты выродок какой-то если често, ирл ебало разнес бы в кровь, дрыщ ебаный.
Зачем же ты его так жестко приложил? Блядь глядишь выпилится рили после осознания.
Сложно ли сделать подобное по типу этого говна?
Имею нулевые знания в PHP со всеми вытекающими, до этого кодил только на плюсах и питоне.
Да, это разные буферы. flush() - это сброс сишного буфера. Он работает примерно так: когда ты пишешь что-то в файл (вывод в консоль в линуксе это тоже запись в файл, насчет Windows не уверен) маленькими порциями, было бы не очень эффективно на каждые несколько байт делать системный вызов (обращение к ядру ОС). Аналогично, при посимвольном чтении неэффективно на каждый символ дергать ядро ОС. Потому сишная стандартная библиотека, которая содержит функции записи в файл вроде fwrite/fread, содержит алгоритм буферизации для этих функций - накапливать определенный блок данных и передавать его ОС при превышении определенного размера. А при чтении - запрашивать большой блок и читать небольшими порциями из этого блока.
Разумеется, при выводе в консоль это может задерживать вывод, потому для потока ввода/вывода на терминал обычно используется сброс буфера не только при превышении размера, но и при наличии в нем символа перевода строки.
Ну а для явного сброса буфера предусмотрена функция fflush(). По идее в большинстве случаев все должно работать хорошо и без нее.
Это чисто сишный механизм, ты бы мог напрямую вызывать функции ОС (в Линуксе это read/write без буквы f в начале), и передача данных шла бы напрямую.
Эта буферизация определена по моему в стандарте Си, и потому в теории может работать на разных платформах (на каждой немного по-своему). Вот описание из мануала к линуксовой libc: https://www.gnu.org/software/libc/manual/html_node/Stream-Buffering.html
Вот мануал из справки линукса: http://man7.org/linux/man-pages/man3/fflush.3.html
PHP написан на Си и видимо в нем используются стандартные функции сишной библиотеки, потому flush() в нем может вызывать сишную fflush (вроде так и есть в исходниках).
Что касается ob_flush(), то это чисто PHP-ный механизм с такими отличиями:
- он работает только с выводимыми через echo и подобные функции данными, и видимо, раньше чем они будут передаваться в fwrite (то есть порядок наверно должен быть обратный - ob_flush, за ним flush)
- все делается на стороне PHP
- буферы могут быть многоуровневыми
- буферизованные данные можно обрабатывать, или захватывать и воообще не выводить
- одно из возможных применений - оптимизировать отдачу данных клиенту (браузеру), отправля данные большими блоками, а не каждый раз, когда вызывается echo
Ты в своем коде не создаешь буфер через ob_start(), но там может быть один буфер, который создается автоматически и управляется отдельными настройками: http://php.net/manual/ru/outcontrol.configuration.php . Проверить можно через ob_get_level.
Вообще, в случае сложностей, можно проверить, как данные передаются с сервера в браузер - большими пакетами или маленькими. Для этого можно перехватить трафик WireShark и посмотреть. Не забудь, что ловить пакеты на 127.0.0.1/localhost скорее всего нельзя и тебе надо браузером обращаться на IP сетевой карты (напрмиер, 10.x.x.x, посмотреть можно в ipconfig). Не забудь, что другие программы могут также использовать сеть и надо либо их отключить либо отсеять фильтром в WireShark.
Ну и конечно, если тебе надо на практике выводить какой-тог лог в браузере, лучше использовать более надежные методы - вебсокеты или long polling. Медленная отдача страницы это наверно самый неэффективный и ненадежный метод.
Да, это разные буферы. flush() - это сброс сишного буфера. Он работает примерно так: когда ты пишешь что-то в файл (вывод в консоль в линуксе это тоже запись в файл, насчет Windows не уверен) маленькими порциями, было бы не очень эффективно на каждые несколько байт делать системный вызов (обращение к ядру ОС). Аналогично, при посимвольном чтении неэффективно на каждый символ дергать ядро ОС. Потому сишная стандартная библиотека, которая содержит функции записи в файл вроде fwrite/fread, содержит алгоритм буферизации для этих функций - накапливать определенный блок данных и передавать его ОС при превышении определенного размера. А при чтении - запрашивать большой блок и читать небольшими порциями из этого блока.
Разумеется, при выводе в консоль это может задерживать вывод, потому для потока ввода/вывода на терминал обычно используется сброс буфера не только при превышении размера, но и при наличии в нем символа перевода строки.
Ну а для явного сброса буфера предусмотрена функция fflush(). По идее в большинстве случаев все должно работать хорошо и без нее.
Это чисто сишный механизм, ты бы мог напрямую вызывать функции ОС (в Линуксе это read/write без буквы f в начале), и передача данных шла бы напрямую.
Эта буферизация определена по моему в стандарте Си, и потому в теории может работать на разных платформах (на каждой немного по-своему). Вот описание из мануала к линуксовой libc: https://www.gnu.org/software/libc/manual/html_node/Stream-Buffering.html
Вот мануал из справки линукса: http://man7.org/linux/man-pages/man3/fflush.3.html
PHP написан на Си и видимо в нем используются стандартные функции сишной библиотеки, потому flush() в нем может вызывать сишную fflush (вроде так и есть в исходниках).
Что касается ob_flush(), то это чисто PHP-ный механизм с такими отличиями:
- он работает только с выводимыми через echo и подобные функции данными, и видимо, раньше чем они будут передаваться в fwrite (то есть порядок наверно должен быть обратный - ob_flush, за ним flush)
- все делается на стороне PHP
- буферы могут быть многоуровневыми
- буферизованные данные можно обрабатывать, или захватывать и воообще не выводить
- одно из возможных применений - оптимизировать отдачу данных клиенту (браузеру), отправля данные большими блоками, а не каждый раз, когда вызывается echo
Ты в своем коде не создаешь буфер через ob_start(), но там может быть один буфер, который создается автоматически и управляется отдельными настройками: http://php.net/manual/ru/outcontrol.configuration.php . Проверить можно через ob_get_level.
Вообще, в случае сложностей, можно проверить, как данные передаются с сервера в браузер - большими пакетами или маленькими. Для этого можно перехватить трафик WireShark и посмотреть. Не забудь, что ловить пакеты на 127.0.0.1/localhost скорее всего нельзя и тебе надо браузером обращаться на IP сетевой карты (напрмиер, 10.x.x.x, посмотреть можно в ipconfig). Не забудь, что другие программы могут также использовать сеть и надо либо их отключить либо отсеять фильтром в WireShark.
Ну и конечно, если тебе надо на практике выводить какой-тог лог в браузере, лучше использовать более надежные методы - вебсокеты или long polling. Медленная отдача страницы это наверно самый неэффективный и ненадежный метод.
Для вывода ошибок я подумал использовать плейсхолдеры. Но если значение введено даже если оно не верно то оно отображается там вместо плейсхолдера. Как реализовать-то?
Не неси хуйню, для ошибок определи контейнеры, а затем JSом подставляй туда текст
Я не могу в жс! Расскажи подробнее чтобы понимать, что гуглить.
Ошибки лучше выводить в отдельном элементе, плейсхолдеры на эту роль не подходят. Причем средствами CSS ты можешь оформить и расположить элемент с ошибкой как угодно.
спасибочки
Также, при ошибке можно добавлять на поле ввода CSS-класс, который будет менять вид этого поля, например, делать его красным.
Также, обрати внимание, что есть еще HTML5 валидация, но конечно, там ты сильно повлиять на внешний вид сообщений не можешь.
Поле цвет уже меняет. И хтмл5 валидацию я тоже почитал.
Datatype раскоменчен, если что.
За что люблб пхп макак: за транслитерацию переменных. В JAVA-коде никогда не встретишь переменную 'visota'.
Код спиздил.
Лол, ты вкурсе что веб это немного другое чем десктопные приложения? Если ты в консоле запустишь пхп скрипт, то будет так как ты хочешь. По мере выполнения скрипта, у тебя будут выводиться данные динамически.
А в браузере всё работает как-то так: сначала у тебя ПОЛНОСТЬЮ отрабатывает скрипт, до завершения, и после этого только отдается страничка с результатами. Что бы что-то изменилось, то нужно полностью перезагружать страничку. Если ты натыкаешь sleep(); у себя в коде, то ты только отложишь выполнение скрипта.
Если хочешь что бы у тебя в браузере динамически всё менялось. То тут надо хуярить на js.
файл send.php
<?
if (isset($_POST)) {
$userInput = $_POST;
}
Потом в коде обращаешься за данными через этот массив
echo $userInput['name'];
$userPloshad = $userInput['dlina'] * $userInput['visota'];
и т.д.
Так мне расчёты делать не нужно. Просто нужно взять переменные и отправить по почте. Вот этот .ajax передаёт данные в пхп, а как их расшифровать на стороне пхп и передать по почте, я не знаю. Я так понял, что для отправки почты нужен свой smtp сервер или smtp какого-нибудь гугла. Но в примерах отправки почты просто пишут mail(from: u ~QsernameANUSmaivo5lPUNCTUMc3LOom). Но как может отправляться почта без логина и прочего? Как через пхп соединиться с моей почтой гугла и отправить письмо с данными с сайта?
>А в браузере всё работает как-то так: сначала у тебя ПОЛНОСТЬЮ отрабатывает ...
Зависит от НАСТРОЕК веб-сервера. Техническая возможность форсировать отправку данных клиенту до завершения скрипта в php есть. Другой вопрос зачем.
Настройки почтового сервера задаются в этом случае через конфиг в php.ini. Также, в теории в SMTP для отправки почты пароли и аккаунты не нужны (это в теории, на практике письмо могут и не принять из-за подозрения на спам). Или у тебя может быть установлен почтовый демон, который принимает почту от PHP без всяких паролей и передает ее дальше.
Если ты хочешь использовать почтовые сервисы для отправки писем, имей в виду, что они могут заблокировать твой аккаунт или не доверять твоим письмам и отправлять их в спам.
Ну возьми вот эти данные которые у тебя уже есть, и попробуй себе их отправить с помощью банального
http://php.net/manual/ru/function.mail.php
Ты же там чей-то сайт ковыряешь? Вдруг на нем ИЗ_КОРОБКИ уже всё работает.
https://ideone.com/9sVFuy
Но сильно сомневаюсь, пару лет назад я касался темы рассылок, и там надо было дохуя всего сделать и соблюсти что бы твои письма вообще хотя бы доходили куда-то. Начиная от dkim подписи и прочих хедеров, до обязательной кнопки "отписка". Чет не могу сейчас найти официальный гайд от яндекса по этой теме, и от гугла тоже раньше был. Видимо гребут под себя, хули. Что бы пользовались люди чем-то вроде https://yandex.ru/support/pdd/about.html
Хуй знает лень сильно гуглить кароче.
Если совсем не сможешь разобраться, то гугли как через сторонние сервисы слать письма. Чисто пхп скриптом дергаешь их апишку например, а они шлют что тебе нужно, ну ты понял.
Ну это понятно. Мне было просто интересно как это работает.
блядь ну я же тебе написал.
Ты когда своим аяксом шлешь на сервер массив, то он лежит в глобальном массиве $_POST
Из него это всё и собираешь. Ну ебана врот я же тебе написал всё.
Я просто думал, что этот json как-то в другой тип данных нужно переводить. Попробую твой код, когда дома буду.
Ты напомнил мне моего знакомого, который хотел стать сисадмином, читая мануалы по консольным командам, он сказал мне "бля, пиздец, ничего не понимаю". Мб ты не так учишь?
В ОП посте есть задания на HTML/CSS для проверки своих сил, включая верстку макета. Уроков нет, но там есть пара ссылок на учебники, а также можно погуглить по словам вроде "самоучитель HTML".
Есть задания и на JS.
А также, есть задача про список студентов с подробными комментариями - они скорее всего помогут и при написании блога.
Нет у тебя там >>1062530 всё на картинке есть же.
type: "post"
Значит на сервере отлавливаешь в массиве $_POST всю инфу
По структуре в $_POST будет лежать тоже самое, что у тебя в data: {} навалено
Например в $_POST['dlina'] будет лежать то говно что тебе js подставил в переменную user_dlina, которую он в свою очередь сджикверил из инпута с name'ом dlina. Х
Админят системы.
Сап, res! Решил вплотную взяться за программирование, так как в 24 года внезапно осознал, что учусь по профессии которая мне не доставляет никакого удовольствия. Выбор мой пал на язык PHP и я начал искать какие-то курсы, нашёл cfqn c видеоуроками где челик довольно подробно всё рассказывает не только про язык PHP, но и про сами принципы программирования, однако его курс основан на версии 5.5, а сейчас как я понимаю в ходу версия 7.0. Так вот насколько актуален такой курс сейчас и стоит ли дальше по нему учиться?
Для вкатывальщика нет никакой разницы между 5.4+ и 7 версиями. Да даже если бы и более ранние курсы учил, то писали бы там
$a = array();
вместо
$a = [];
Это всё вообще пофиг, примитивы неизменны считай. Так что херач.
Через твой код сервер принимает данные с js, но письмо всё равно не отправляется. Нужно как-то войти в гугловскую почту и отправить оттуда. С кодом с пика сервер не принимает данные. Нужно как-то через этот Mail::factory отправить, но с ним ошибка.
Спасибо за ответ. Значит буду дальше продолжать осваивать тот курс. И ещё вопрос. С чем связан хейт на PHP? Когда я спрашивал у своего знакомого (который пишет на Java) за этот язык то он просто обоссал его тугой струёй, сказав при этом, что он ненужен и на других языках можно делать тоже самое не ебя себе мозг.
псип )
ну чувак,
решение #0 -- найми настоящего программера
а так,
тебе нужен https://github.com/PHPMailer/PHPMailer
вкатывальщики, конечно, не нужны и будут в современном мире гнобимы и гонимы, но топчик на русском -- курсы от "специалист"
А че пробел не зашифровал в другой символ? Тупо по пробелам можно догадаться, что 6 это И, ну а дальше понеслось.
Позвонил в техподдержку. На бесплатных аккаунтах заблокирована функция отправки почты.
Были бы ещё деньги на эти курсы.
"Что чему будут равны $a и $b в результате операции: $a + $b = 5 + 6?"
Я правильно понимаю, что $a будет NULL, а $b = 11?
1. Сначала выполняется сложение 5 + 6.
2. Далее значение записывается в переменную $b.
3. Потом к $b прибавляется пустая переменная $a.
В итоге $a = null (переменная объявлена, но не инициализирована), $b + null = $b.
Или нет?
Я проверил, получается действительно так, но в каком порядке это всё происходит?
Прочитал сам. Неправильно я предположил.
Операции сложения слева и справа от "равно" имеют одинаковый приоритет и выполняются слева направо. То есть сначала складываются пустые переменные, потом уже числа. Операция присваивания выполняется справа налево, поэтому результат сложения записывается в переменную, стоящую слева от "равно". Всё, оказывается, очень просто.
Продолжаю изображать имитацию полезной деятельности. Некоторые треды качаются больше пяти минут, сервер дропает из-за таймаута. Буду думать что делать.
походу через вебсокет надо делать статусбар
Laravel или yii?
Что лично вам больше импонирует и чем?
ООП, Паттерны, архитектуру изучай. А потом уже хоть любой фреймворк будет как родной.
Я наверное вообще не шарю как этим хдебагом пользоваться. Можешь поподробней? Как этот аддон уберет XDEBUG_SESSION_START=netbeans-xdebug из строки запроса?
Отладка запускается из Chrome.
Включаем Xdebug Helper в режим Debug.
Он ставит куку вида XDEBUG_SESSION="PHPSTORM" (PHPSTORM прописываем в настройках аддона).
Перезагружаем страницу, кликаем по ссылке кнопке и т. п.
Если в php пришла кука, то xdebug попытается соединится с IDE по указанному в конфиге xdebug адресу.
Если IDE слушало порт, то мы увидим окно отладки, со скриптом выполненным до первого брейкпоинта (точки останова).
Так же как и для остальных проектов, Symfony особенный что ли? Погугли для начала разницу между юнит и функциональными тестами (заодно почитай про пирамиду тестирования), потом можешь браться за доки PHPUnit и Symfony.
https://phpunit.de/manual/current/en/index.html
https://symfony.com/doc/current/testing.html
http://symfony.com/doc/current/best_practices/tests.html
Походу только я могу запилить основную логику за 2 дня, и еще 4 дня переписывать фронт и бэк на AJAX, чтоб во время выполнения было видно сколько файлов уже скачано. Сделал слава богу.
inb4 сделаю за 300 наночек
Спасибо, вроде разобрался. Только из браузера наверное не получится отладку запускать.
Если коротко, то все плохо. Даже для самого начала нулевых, когда книги с таким стилем были на каждом прилавке, а ООП только завозили, а работало оно сильно медленней.
а охуенные имена переменных и отсутствие отступов тебя не смутили? Сам факт отсутствия ООП не делает код плохим
Честно говоря, если где-то в коде идет обращение через модуль mysq - то это уже говнокод. Алсо проиграл с нотпад++, его еще кто использует оказывается, лол.l
public function addStudent(Student $student, $hash)
{
$stmt = $this->dbn->prepare("INSERT INTO student VALUES ($student->getName(),$student->getSurname(),$student->getGender(),$student->getGroupNumber(),$student->getEmail(),$student->getScore(),$student->getDob(),$student->getLocality(),$student->getId(),$hash");
$stmt->execute();
}
И она выдает:
Notice: Undefined property: Student\Classes\Student::$getName in C:\work\web\Student\src\Classes\UserDataGateway.php on line 34
Notice: Undefined property: Student\Classes\Student::$getSurname in C:\work\web\Student\src\Classes\UserDataGateway.php on line 34
etc.
Передаваемая сущность вардампится и там все норм тот самый объект. Если вызывать методы объекта не в СиКвеЛ запросе, то они тоже работают. Что я делаю не так?
PHP думает, что скобки относятся к строке, а не к переменной: https://ideone.com/pQFLPH
Поэтому он обращается к свойству, а не к методу. То есть вместо $student->getName() используется $student->getName
Поэтому если используешь интерполяцию, нужно переменные оборачивать в фигурные скобки. Но ни в коем случае не делай так для SQL-запросов, так как это приводит к SQL-инъекциям: https://github.com/codedokode/pasta/blob/master/student-list.md#Работа-с-базой-данных-из-php/
>>1063150
>>1063320
Хватит тред засорять, вниманиеблядина.
У меня бывали подобные глюки, но зависала только одна страница когда я пытался вызывать метод объекта в коде по типу
$obj = new $obj;
$obj->$myMethod();
Но то давно было, я так и не разобрался от чего такая хуйня может происходить.
на ideone забыли поставить модуль с mb_ функциями при обновлении php. пользуйся чем-нибудь другим
https://github.com/grigoryMovchan/2ch_get_img
Как пример хорошего кода не годится - работает и ладно
Всем так важно твое мнение.
Вот этого двачну.
Успешен уже в плане работы? Я ни одной своей задумки не реализовал, некоторые из них при этом и так уже устарели. Да и что говорить. Я даже заставить себя сесть решать задачи от ОП-а не могу уже пару месяцев. При этом полагаю, что наличие такого вот гита, сделало бы меня немного более ценным на рынке труда.
бамп вопросу
Потенциальный работодатель бы охуел от такого количества упоминаний двача в репозитории, да и не пробовал искать работу, там проекты - детский сад, фреймворков не знаю.
>работодатель бы охуел от такого количества упоминаний двача в репозитории
У меня челик знакомый который в яндексе работал, посылал резюме в контору, которая занимается разработкой ИИ вроде. Ему дали тестовое с тем что бы написал бота, который учится за счет лексикона двачеров. Прямо треды ему кормить для обучения, так что ничего нормально всё. Я считаю, что если потенциальный веб-разраб не знает о дваче, то это скорее минус чем плюс. Двач же не делает тебя долбоебом, ты не путай.
>там проекты - детский сад, фреймворков не знаю.
Ну я работал на фреймворке одном, хуета для макак по сути. Тупо блядь за тебя уже всё сделано. Те задачи оповские по типу студентов, на которые дается 3-10 дней, набыдлокодил бы на нем за 4 часа. А как сам хочу сесть с 0 написать, то охереваю от того что не могу в ооп и самостоятельно архитектуру и всякие зависимости и вообще не понимаю как должны объекты между собой общаться :(
И прочие дыры с автолоадерами и роутингом и так далее.
бамп вопросу
Интересно, как так вышло, что ты понимаешь архитектуру фреймворка но не можешь повторить ее хотя бы в простеньком варианте?
Очевидно, что его "понимаю" отличается от твоего в худшую сторону.
Ты понимаешь вообще как и что? При чем тут архитектура фреймворка? Фреймворк - это как автомобиль, тебе не нужно быть опытным автомехаником или конструктором, что бы ездить на нем.
Фреймворк это как...
Когда знаешь в какое место какую лапшу вписать, разбавив встроенными возможностями фреймворка, что бы всё это приняло вид красивого стройного эМВиСи.
Если кому будет интересно, проясню А то сегодня погода мне металопротеины вдавила гифка не имеет отношения к программированию. Я имел ввиду, что если освоить какой нибудь инструмент, даже очень сложный, то все что ты будешь делать с помощью него, будет делаться уже на автомате. И не даром люди говорят, что лучше не закреплять ошибки, потому что мозг будет выводить их автоматом в будущем. Поэтому лучше пострадать немного, но делать все без ошибок и работа будет качественнее. Так же стоит самому изобретать велосипеды, смотреть готовые решения но всегда фантазировать и думать. Все я выкатился.
Книга 2013 года. СтоиХт ли читать или уже все устарело? Что можете посоветовать почитать по php и mysql новичку
Сейчас изучаю уже HTML, CSS. Вот еще хочу изучать, поэтому и спрашиваю. Но совет хороший, правда.
Ну потому, что эрей_ренд дает тебе индекс элемента, а не сам элемент.
кредит2
https://ideone.com/beZE6Y
номер авто
https://ideone.com/lPsRrx
номер телефона1
https://ideone.com/dt17EH
номер телефона2
https://ideone.com/rRCNVe
'ты дурак'
https://ideone.com/fRuwI6
меил
https://ideone.com/zS7L5I
грамарнаци
https://ideone.com/c1r6mP
И вот тут у меня есть пару вопросов. Если, в регуляре, я задаю по 0-5 символов до и после ошибки(делаю я это для удобства вывода, фрагмента текста с ошибкой), а следующая ошибка находится в пределах 5 симоволов, то ее - скрипт не находит, отсюдого следует, что нужно изменить способ вывода фрагмента вокруг регуляра, но я не знаю как. Или можно что-то сделать в самом регуляре, но я ничего подобного не нашел, обьясните пожалуйста. А так же, в следующем задании на исправление ошибок, при прег_реплейсе, если выражение, на которое я меняю регуляр, имеет больше символов чем он(регуляр) сам, то функция не добавляет элементы в строку а просто заменяет следующий элемент, это ошибка ideone или я чего-то не понимаю?
Алсо спасибо за советы и проверку.
Перл и похапэ по докерам раскидай и проведи свои тесты еще раз.
Если книга от О'Рейли, то вопрос читать или нет не стоит совсем. Конечно читать.
Что касается книг, то лучше читай более общие для понимания, что тут происходит и как должно происходить. Паттерны фриманов, приемы mvc и чистый код для начала будет достаточно. Потом уже перекатывайся в php и применяй все, чему научился.
>Тупо блядь за тебя уже всё сделано
А тебе что нужно? Открою большой секрет, во взрослом мире задачи чуть более сложные, чем простой круд и две с половиной функциональщины. Когда за тебя сделана база с хорошей архитектурой -- это замечательно и убивает пару лет написания собственных велосипедов, остается только не писать говно и следовать принципам фреймворка.
>А как сам хочу сесть с 0 написать
Если нет кучи опыта и прочитанных книг об архитектура приложений, ты не сеньор/тим лид с множеством рабочих реальных хайлоад проектов, свой велосипед начать строгать -- это самая плохая идея, которая только может прийти в голову.
Спасибо большое.
Ты понял вообще о чем я? Я решал эти твои чуть более сложные задачи в итоге. Просто одно дело решить задачу в процедурщине отдельно в вакууме - это легко. Точно так же легко встроить решение этой задачи в известную тебе систему, написанную на известном тебе фреймворке. А другое дело с 0 сесть и нахуярить свой микрофреймворк по сути на стройном и качественном ооп и нарешать на нем задачу паралельно, хэлоу :(
выведи символы попарно
В книге написано "В главе 1 будут рассмотрены несколько хороших редакторов, причем некоторые
из них имеют встроенный FTP нуть програм-
му Cyberduck . Вы можете написать сценарий, отправить его по сети и все протестировать всего лишь несколькими щелчками кнопкой мыши. Итак,
загрузите эту FTP-программу, настройте свой веб-сервер и приступайте к работе.
Данная программа вам несомненно пригодится."
Стоит ли качать его? На нем сейчас работают? Я просто до этого слышал про фаерзиллу. Давйте совет, пожалуйста ;3
файелзилу*
Если ты только вкатываешься - берешь качаешь и пробуешь все подряд.
>решить задачу в процедурщине
>в процедурщине
Выбери что-то одно, ну да ладно.
>качественном ооп
Это похапэ, какое там качественное ООП? С такими запросами тебе в джаву. Вот там заебись, обмазывайся стратегиями, абстрактными факторями и вот этими вот всеми обсерверами. А задача пыхи написать приложение в короткие сроки с минимальным количеством финансовых вложений. Так что жри, что дают.
>енном ооп
Но рекрутерам не нравится что ты не шаришь в этом говне. И вообще ты с этого треда или нет? Ты не думал что всё изменилось за последние 5-10 лет и твой маня-мир относительно реалий пхп немного устарел что ли.
>Стоит ли качать его? На нем сейчас работают?
Нет, судя по описанию какое-то некроговно. Бери или нетбинс - меньше функционала, зато швабодно и шустро работает, или пхпшторм - идеально заточен под пхп, но при этом требователен к железу и платный.
>>1064442
Редакторы можно поделить на 2 группы: просто редакторы кода (с подсветкой синтаксиса и полезными функциями) и IDE - это редактор + анализ синтаксиса кода (может показывать ошибки в коде и дает "умное" автодополнение при наборе кода) + управление файлами в проекте + инструменты для рефакторинга, в общем очень мощная программа, если разобраться во всех ее возможностях.
Начинающему конечно достаточно даже простого редактора кода, IDE проявляет свою мощь на больших проектах. IDE обычно "тяжелее" просто редактора. Я бы советовал, если есть возможность, попробовать разные программы и самому сделать выбор.
Редакторы: Notepad++, Sublime Text, Atom, VS code, Brackets
IDE: Eclipse PDT, Netbeans, PhpStorm
FTP еще где-то используется, но он небезопасен - передает пароль и данные в открытую без шифрования - а сегодня каждый, кто имеет доступ к каналам связи, пытается в них залезть и извлечь какую-то выгоду. Лучше использовать SFTP, SCP или что-нибудь подобное.
>>1064495
ООП и ООП-фреймворки используются повсеместно. Без знания ООП человеку будет трудно разбираться в проекте и писать правильный код.
> в этом говне.
Ты ведь просто не осилил или поленился? В учебнике в ОП посте есть глава про ООП, можно начать с нее.
>>1064488
ООП использовать никто в PHP не запрещает. Было бы желание. А твое негативное отношение к ООП скорее всего из-за того, что ты в нем не разробрался, может пробовал почитать про паттерны, но ничего не понял, потому что ООП-паттерны надо изучать после ООП и желательно на примерах разбора реального кода, вроде Симфони, так как просто читая описание паттернов, ты вряд ли что-то поймешь.
Соответственно если ты не понимаешь ООП, то со стороны действительно может показаться, что это переусложнение кода. Но по факту вызодит наоборот - если писать большой проект без ООП, то разбираться и поддерживать код выходит труднее. Потому что нельзя писать большое приложение в том же стиле что и скрипт на 20 строчек.
В учебнике в ОП посте есть глава про ООП, начинающим можно начать с нее. Затем продолжить задачей про студентов из ОП поста, где рассматривается использование ООП и MVC в похожем на реальное приложении.
>>1064442
Редакторы можно поделить на 2 группы: просто редакторы кода (с подсветкой синтаксиса и полезными функциями) и IDE - это редактор + анализ синтаксиса кода (может показывать ошибки в коде и дает "умное" автодополнение при наборе кода) + управление файлами в проекте + инструменты для рефакторинга, в общем очень мощная программа, если разобраться во всех ее возможностях.
Начинающему конечно достаточно даже простого редактора кода, IDE проявляет свою мощь на больших проектах. IDE обычно "тяжелее" просто редактора. Я бы советовал, если есть возможность, попробовать разные программы и самому сделать выбор.
Редакторы: Notepad++, Sublime Text, Atom, VS code, Brackets
IDE: Eclipse PDT, Netbeans, PhpStorm
FTP еще где-то используется, но он небезопасен - передает пароль и данные в открытую без шифрования - а сегодня каждый, кто имеет доступ к каналам связи, пытается в них залезть и извлечь какую-то выгоду. Лучше использовать SFTP, SCP или что-нибудь подобное.
>>1064495
ООП и ООП-фреймворки используются повсеместно. Без знания ООП человеку будет трудно разбираться в проекте и писать правильный код.
> в этом говне.
Ты ведь просто не осилил или поленился? В учебнике в ОП посте есть глава про ООП, можно начать с нее.
>>1064488
ООП использовать никто в PHP не запрещает. Было бы желание. А твое негативное отношение к ООП скорее всего из-за того, что ты в нем не разробрался, может пробовал почитать про паттерны, но ничего не понял, потому что ООП-паттерны надо изучать после ООП и желательно на примерах разбора реального кода, вроде Симфони, так как просто читая описание паттернов, ты вряд ли что-то поймешь.
Соответственно если ты не понимаешь ООП, то со стороны действительно может показаться, что это переусложнение кода. Но по факту вызодит наоборот - если писать большой проект без ООП, то разбираться и поддерживать код выходит труднее. Потому что нельзя писать большое приложение в том же стиле что и скрипт на 20 строчек.
В учебнике в ОП посте есть глава про ООП, начинающим можно начать с нее. Затем продолжить задачей про студентов из ОП поста, где рассматривается использование ООП и MVC в похожем на реальное приложении.
Выведи чему равны $firstHalf и $secondHalf на экран.
>>1064150
На работе да, нужно использовать по максимум готовые решения, но если ты учишься, то написание своего (микро)фреймворка, будет полезно. После этого будет проще понять существующие фреймворки.
>>1063641
9 секунд это очень долго даже для древнего железа. Тут явно что-то не так. Можешь описать список модулей (php -m), как именно ты запускаешь скрипт (через браузер и веб-сервер, какой?, через консоль?), код скрипта.
У меня на старом ноуте команда time php -r "echo 'hello world';" выдает
real 0m0.563s
user 0m0.031s
sys 0m0.016s
>>1064073
> кредит2 https://ideone.com/beZE6Y
Считает некорректно, в softbank должно быть около 61270, попробуй поставить сумму кредита в 1000 и проверить вручную.
> номер авто https://ideone.com/lPsRrx
> ^ [а-яё]
Тут пробел, разве в начале номера обязан быть пробел? Не думаю. Ты можешь добавить условие "в начале номера может, но не обязан, быть один или несколько пробелов".
> номер телефона1 https://ideone.com/dt17EH
Здесь в регулярке написано:
> *[(]? *-? *
то есть, задан порядок символов, что за чем должно идти. Не лучше ли написать "любое число скобок, минусов, пробелов в любом порядке"? Так будет универсальнее.
> номер телефона2 https://ideone.com/rRCNVe
Тут правильно.
> 'ты дурак' https://ideone.com/fRuwI6
Верно.
> меил https://ideone.com/zS7L5I
Домены могут быть с цифрами, вида 7777.ru. Также, при желании можно добавить поддержку русскоязычных доменов вроде пример.рф.
> грамарнаци https://ideone.com/c1r6mP
> ([,]|[.]|[!]|[?]|[;]|[:])
тут нужны одни общие квадратные скобки, а не несколько отдельных.
> ([,]|[.]|[!]|[?]|[;]|[:])([^ ])
Это сработает на многоточие - лучше бы написать "буква" вместо "не пробел"
> зделал|зделаю|зделан
"зделаем" не подойдет
> Если, в регуляре, я задаю по 0-5 символов до и после ошибки(делаю я это для удобства вывода, фрагмента текста с ошибкой), а следующая ошибка находится в пределах 5 симоволов, то ее - скрипт не находит, отсюдого следует, что нужно изменить способ вывода фрагмента вокруг регуляра, но я не знаю как.
Да, регулярка не будет дважды проходить одни и те же символы, если они уже попали в предыдущий результат. Выходы тут такие:
- есть "утверждения" ( http://php.net/manual/ru/regexp.reference.assertions.php ), которые не захватывают символы, а только проверяют их, тут они малополезны
- в preg_match_all есть режим, когда она возвращает не только найденные подстроки, но и их позицию относительно начала строки. Правда, позиция в байтах, а не в символах. Можно взять позицию, перевести ее из байт в символы (substr + mb_strlen), и по ней взять фрагмент перед найденной подстрокой. Мануал http://php.net/manual/ru/function.preg-match-all.php
- можно с помощью mb_strpos искать позицию найденной подстроки в строке и с помощью позиции получить фрагмент строки перед найденной подстрокой.
> А так же, в следующем задании на исправление ошибок, при прег_реплейсе, если выражение, на которое я меняю регуляр, имеет больше символов чем он(регуляр) сам, то функция не добавляет элементы в строку а просто заменяет следующий элемент, это ошибка ideone или я чего-то не понимаю?
Нет, длина найденной подстроки и подставляемой не имеет значения и все должно работать корректно. Ошибка где-то в другом месте.
Выведи чему равны $firstHalf и $secondHalf на экран.
>>1064150
На работе да, нужно использовать по максимум готовые решения, но если ты учишься, то написание своего (микро)фреймворка, будет полезно. После этого будет проще понять существующие фреймворки.
>>1063641
9 секунд это очень долго даже для древнего железа. Тут явно что-то не так. Можешь описать список модулей (php -m), как именно ты запускаешь скрипт (через браузер и веб-сервер, какой?, через консоль?), код скрипта.
У меня на старом ноуте команда time php -r "echo 'hello world';" выдает
real 0m0.563s
user 0m0.031s
sys 0m0.016s
>>1064073
> кредит2 https://ideone.com/beZE6Y
Считает некорректно, в softbank должно быть около 61270, попробуй поставить сумму кредита в 1000 и проверить вручную.
> номер авто https://ideone.com/lPsRrx
> ^ [а-яё]
Тут пробел, разве в начале номера обязан быть пробел? Не думаю. Ты можешь добавить условие "в начале номера может, но не обязан, быть один или несколько пробелов".
> номер телефона1 https://ideone.com/dt17EH
Здесь в регулярке написано:
> *[(]? *-? *
то есть, задан порядок символов, что за чем должно идти. Не лучше ли написать "любое число скобок, минусов, пробелов в любом порядке"? Так будет универсальнее.
> номер телефона2 https://ideone.com/rRCNVe
Тут правильно.
> 'ты дурак' https://ideone.com/fRuwI6
Верно.
> меил https://ideone.com/zS7L5I
Домены могут быть с цифрами, вида 7777.ru. Также, при желании можно добавить поддержку русскоязычных доменов вроде пример.рф.
> грамарнаци https://ideone.com/c1r6mP
> ([,]|[.]|[!]|[?]|[;]|[:])
тут нужны одни общие квадратные скобки, а не несколько отдельных.
> ([,]|[.]|[!]|[?]|[;]|[:])([^ ])
Это сработает на многоточие - лучше бы написать "буква" вместо "не пробел"
> зделал|зделаю|зделан
"зделаем" не подойдет
> Если, в регуляре, я задаю по 0-5 символов до и после ошибки(делаю я это для удобства вывода, фрагмента текста с ошибкой), а следующая ошибка находится в пределах 5 симоволов, то ее - скрипт не находит, отсюдого следует, что нужно изменить способ вывода фрагмента вокруг регуляра, но я не знаю как.
Да, регулярка не будет дважды проходить одни и те же символы, если они уже попали в предыдущий результат. Выходы тут такие:
- есть "утверждения" ( http://php.net/manual/ru/regexp.reference.assertions.php ), которые не захватывают символы, а только проверяют их, тут они малополезны
- в preg_match_all есть режим, когда она возвращает не только найденные подстроки, но и их позицию относительно начала строки. Правда, позиция в байтах, а не в символах. Можно взять позицию, перевести ее из байт в символы (substr + mb_strlen), и по ней взять фрагмент перед найденной подстрокой. Мануал http://php.net/manual/ru/function.preg-match-all.php
- можно с помощью mb_strpos искать позицию найденной подстроки в строке и с помощью позиции получить фрагмент строки перед найденной подстрокой.
> А так же, в следующем задании на исправление ошибок, при прег_реплейсе, если выражение, на которое я меняю регуляр, имеет больше символов чем он(регуляр) сам, то функция не добавляет элементы в строку а просто заменяет следующий элемент, это ошибка ideone или я чего-то не понимаю?
Нет, длина найденной подстроки и подставляемой не имеет значения и все должно работать корректно. Ошибка где-то в другом месте.
> При регистрации он запускает МейнКонтроллер с экшеном Регистер тот проверяет данные и если все хорошо записывает данные и редиректит на index.php/edit
А ты понимаешь, как вообще работает редирект, что происходит? Если нет, у меня есть описание (немного длинное, но что поделать) протокола HTTP и там упомянут редирект: https://github.com/codedokode/pasta/blob/master/network/http.md
Список кодов редиректа (3xx) был где-то в википедии, и наверно еще в других местах есть.
Получается так: сервер отдает ответ с редиректом, скрипт завершается. Браузер меняет URL и делает новый запрос. Новая копия скрипта запустится и обработает его. Что касается метода, то тут все зависит от кода редиректа: некоторые коды сохраняют метод, а некоторые меняют его на GET. Плюс, из соображений совместимости некоторые браузеры меняют метод на GET даже для тех кодов, где он должен оставаться POST.
А зачем тебе понадобилось делать второй запрос тоже методом POST? Второй запрос на index.php/edit ведь ничего не меняет на сервере, он только выводит форму (верно?) и значит POST тут использоваться не должен.
>>1063789
Видимо не совсем понимаешь.
>>1063757
Ты можешь поменять условия, вместо списка студентов сделать список охранников и календарь смен для них например. Или список аудиотреков. Или еще что-нибудь. Суть-то ведь научиться использовать ООП и MVC для роеализации приложений с формами и таблицами.
>>1063659
Выходить из строя - вряд ли, но уронить процесс Апача из-за ошибки может - в таких случаях обычно в логе ошибок Апача появляется сообщение. Также, "зависание" может быть связано с множеством других причин (в браузере или расширениях к нему) - хорошо бы проверить, сделав запрос из консоли через wget, curl или что-нибудь аналогичное.
>>1063328
Я уже видел такой или похожий код в книге то ли о-рейли, то ли еще какой-то, вроде самоучитель по PHP и MySQL, там был пример соцсети. Код конечно ужасный и никуда не годится, аноны уже расписали почему.
>>1063313
Да, все верно.
>>1063287
У меня есть обзорный урок про автоматизированное тестирование: https://gist.github.com/codedokode/a455bde7d0748c0a351a
Начни с него, потом документацию Симфони (на нее вроде анон дал ссылку).
> При регистрации он запускает МейнКонтроллер с экшеном Регистер тот проверяет данные и если все хорошо записывает данные и редиректит на index.php/edit
А ты понимаешь, как вообще работает редирект, что происходит? Если нет, у меня есть описание (немного длинное, но что поделать) протокола HTTP и там упомянут редирект: https://github.com/codedokode/pasta/blob/master/network/http.md
Список кодов редиректа (3xx) был где-то в википедии, и наверно еще в других местах есть.
Получается так: сервер отдает ответ с редиректом, скрипт завершается. Браузер меняет URL и делает новый запрос. Новая копия скрипта запустится и обработает его. Что касается метода, то тут все зависит от кода редиректа: некоторые коды сохраняют метод, а некоторые меняют его на GET. Плюс, из соображений совместимости некоторые браузеры меняют метод на GET даже для тех кодов, где он должен оставаться POST.
А зачем тебе понадобилось делать второй запрос тоже методом POST? Второй запрос на index.php/edit ведь ничего не меняет на сервере, он только выводит форму (верно?) и значит POST тут использоваться не должен.
>>1063789
Видимо не совсем понимаешь.
>>1063757
Ты можешь поменять условия, вместо списка студентов сделать список охранников и календарь смен для них например. Или список аудиотреков. Или еще что-нибудь. Суть-то ведь научиться использовать ООП и MVC для роеализации приложений с формами и таблицами.
>>1063659
Выходить из строя - вряд ли, но уронить процесс Апача из-за ошибки может - в таких случаях обычно в логе ошибок Апача появляется сообщение. Также, "зависание" может быть связано с множеством других причин (в браузере или расширениях к нему) - хорошо бы проверить, сделав запрос из консоли через wget, curl или что-нибудь аналогичное.
>>1063328
Я уже видел такой или похожий код в книге то ли о-рейли, то ли еще какой-то, вроде самоучитель по PHP и MySQL, там был пример соцсети. Код конечно ужасный и никуда не годится, аноны уже расписали почему.
>>1063313
Да, все верно.
>>1063287
У меня есть обзорный урок про автоматизированное тестирование: https://gist.github.com/codedokode/a455bde7d0748c0a351a
Начни с него, потом документацию Симфони (на нее вроде анон дал ссылку).
https://ideone.com/kDuubO
Методов addRoute добавляется в массив новый роут, в скобках всякие атрибуты, в параметрах указывается контроллер и экшен. При добавление роуты переделываются в регулярку, потом в методе matchUri они сравниваются с юри.
Проблема в следующем - допустим, добавим такие роуты:
$router->addRoute('{sorte}/{page}', 'index', 'index');
$router->addRoute('search/{subject}', 'index', 'search');
Переходим в браузере по search/something, и вот тут проблема - запрос проходит сравнение и с регуляркой /^(?P<sorte>[\w\d-]+)\/(?P<page>[\w\d-]+)$/ так и /^search\/(?P<subject>[\w\d-]+)$, ну ты понел. Собственно, можно как-то пофиксить проблему, или я изначально тупиковый путь выбрал?
Да хочется уже сделать по людски с помощью регулярок. Так то оно кроме описанного случая работает нормально.
Бросаем кубик: https://ideone.com/BMDIL3
Анон против компьютера: https://ideone.com/Hspscg
Это известная проблема, и есть 2 варианта решения:
1 вручную переставить роуты местами
2 сделать автоматическую сортировку роутов, чтобы более специфичные (без плейсхолдеров) шли первыми
> Доллары в рубли: https://ideone.com/fKTZIx
Все верно
> Бросаем кубик: https://ideone.com/BMDIL3
Верно
> Анон против компьютера: https://ideone.com/Hspscg
Верно, хотя можно было сделать один большой блок ифов, а не 2 отдельных.
Насколько хороша книга указанная в оп-посте? Которая авторства Мэтта Зандстры. Будет ли ее достаточно?
Хочу купить её бумажную и лампово читать под пледиком.
Ссылку оставил для себя эту, завтра попробую переделать, когда не будет сонливости.
>>1064842
Спасибо большое за проверку! ;3
С сажей никто не ответит, сорь.
В ифе = на == замени
попробуй метод объекта с аргументами без них вызвать - не получится, в учебнике автор вероятно по привычке ебашит их везде, чтоб наверняка исключить появление дурацких ошибок из-за их отсутствия
Скорее что бы ты знал о такой возможности экранирования переменных в строках, а вообще >>1064982 - да, когда-то столкнешься с таким вот https://ideone.com/GpcB8N и будешь во вьюхах на изи выводить. А в задачах не парься просто и пиши:
echo "Рост $name - $heigh см.\n";
Никакой разницы по сравнению с:
echo "Рост {$name} - {$heigh} см.\n";
не будет.
Так, почему функцию на айпад нельзя решить тем же, что я использовал при кредите на айфон >>1060066
? Должно же подходить. А оно не подходит.
Мануал скурил.
Вернулся в мануал:
http://php.net/manual/en/language.types.string.php#language.types.string.details
То есть, если я хочу написать динамическую страницу с юникодом без любви, мне нужен фреймворк?
Самый простой вопрос, который приходит мне в голову:
будет ли работать $a === "китайские иероглифы"?
PHP толерантен к кодировкам, то есть строка для него это последовательность байт, а что они значат - не его дело.
- str* функции воспринимают строки в 8-битовой кодировке, определяемой локалью (utf не прокатит)
- mb* функции воспринимают строки в кодировке, которая задана в php.ini или через mb_internal_encoding или через аргументы
В случае с регулярками есть только 2 варианта - utf-8 или 8-битная кодировка из локали, utf-8 выбирается флагом /u в выражении.
Мой урок про строковые функции и кодировки, хотя ты наверно с ними знаком:
- https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
- https://github.com/codedokode/pasta/blob/master/cs/strings.md
> inb4 wchar
нет
> За чем конкретно нужны mb_ методы?
Это функции работы со строками в любых, а не только в 8-битных, кодировках. Встроенные в PHP str-функции это и есть настоящее легаси из stdlib в Си, которая не может в многобайтовые кодировки.
>>1065664
=== это побайтовое сравнение. То есть, как повезет.
Урок про правильное сравнение строк https://github.com/codedokode/pasta/blob/master/php/collation.md который кстати будет полезен и для других языков программирования.
>>1065661
Нет. Нужен mbstring.
PHP толерантен к кодировкам, то есть строка для него это последовательность байт, а что они значат - не его дело.
- str* функции воспринимают строки в 8-битовой кодировке, определяемой локалью (utf не прокатит)
- mb* функции воспринимают строки в кодировке, которая задана в php.ini или через mb_internal_encoding или через аргументы
В случае с регулярками есть только 2 варианта - utf-8 или 8-битная кодировка из локали, utf-8 выбирается флагом /u в выражении.
Мой урок про строковые функции и кодировки, хотя ты наверно с ними знаком:
- https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
- https://github.com/codedokode/pasta/blob/master/cs/strings.md
> inb4 wchar
нет
> За чем конкретно нужны mb_ методы?
Это функции работы со строками в любых, а не только в 8-битных, кодировках. Встроенные в PHP str-функции это и есть настоящее легаси из stdlib в Си, которая не может в многобайтовые кодировки.
>>1065664
=== это побайтовое сравнение. То есть, как повезет.
Урок про правильное сравнение строк https://github.com/codedokode/pasta/blob/master/php/collation.md который кстати будет полезен и для других языков программирования.
>>1065661
Нет. Нужен mbstring.
Тебе нужно лучше выравнивать код (можно с помощью IDE или phpformatter.com), так как из-за сбитых отступов тяжело понять что к чему.
Далее, код немного запутан. У тебя там идет:
$a = ....;
$b = $a - $monthlyPay;
$creditSum = $b;
Тут явно переменную $b можно выкинуть и писать сразу $creditSum = $a - $monthlyPay;
Вместо /n надо писать \n.
Также, там внизу ошибка
> PHP Notice: Undefined variable: paymentTotal in /home/nGyq6D/prog.php on line 26
Это из-за того, что ты обращаешься к еще не созданной переменной.
Имена функция пишутся с маленькой буквы.
Также, у тебя есть строчка
> $homoCreditTotal = Credit(1.04, 500, 40000, 5000, 0);
А где в функции строчка, которая возвращает результат? Пока у тебя ее нет и в функцию запишется null.
В общем, код надо исправлять.
>>1064965
Можно и так и так, кому как нравится.
>>1064849
Там еще и кода многовато, и некоторые выражения по 2 раза повторяются.
Тебе нужно лучше выравнивать код (можно с помощью IDE или phpformatter.com), так как из-за сбитых отступов тяжело понять что к чему.
Далее, код немного запутан. У тебя там идет:
$a = ....;
$b = $a - $monthlyPay;
$creditSum = $b;
Тут явно переменную $b можно выкинуть и писать сразу $creditSum = $a - $monthlyPay;
Вместо /n надо писать \n.
Также, там внизу ошибка
> PHP Notice: Undefined variable: paymentTotal in /home/nGyq6D/prog.php on line 26
Это из-за того, что ты обращаешься к еще не созданной переменной.
Имена функция пишутся с маленькой буквы.
Также, у тебя есть строчка
> $homoCreditTotal = Credit(1.04, 500, 40000, 5000, 0);
А где в функции строчка, которая возвращает результат? Пока у тебя ее нет и в функцию запишется null.
В общем, код надо исправлять.
>>1064965
Можно и так и так, кому как нравится.
>>1064849
Там еще и кода многовато, и некоторые выражения по 2 раза повторяются.
В плане ООП неплоха, но вообще относительно старая, и что-то может быть уже неактуально.
>>1064828
> Циклы таблица умножения: https://ideone.com/jtvNDb
Верно
> Анон и банк: https://ideone.com/Vsl4w0
Тут ошибка: PHP Notice: Undefined variable: years in /home/KSnv9f/prog.php on line 7
Проверь правильность написания имен переменных.
>>1063685
Лучше посмотреть в хелпе или спросить у техподдержки.
>>1063320
Зря ты используешь сессию. Она общая для всех вкладов в браузере, плюс она блокируется так, что работать с ней в один момент времени может только одна копия скрипта, что может вызвать подтормаживания.
Или сделал бы так, чтобы для каждого процесса скачивания создавалась бы своя сессия со своим индивидуальным идентификатором.
>>1063150
Длительные процессы можно запускать через системы вроде gearman. То есть послыаем сигнал демону, работающему в фоне, и он запускает процесс. Веб-скрипты не должны в принципе долго работать.
Алсо не забудь в скачивании таймаут ставить, а то подвисший сторонний сервер подвесит твой скрипт.
Имена функций должна начинаться с глагола. Если ты не можешь нормальное название придумать, то плохо.
Для работы с disabled нужно использовать prop(), изучи теорию.
Если ты уж используешь jQuery, зачем использовать свойтва dom вроде document.forms или innerHTML? Не стоит смешивать код в 2 разных стилях.
В плане ООП неплоха, но вообще относительно старая, и что-то может быть уже неактуально.
>>1064828
> Циклы таблица умножения: https://ideone.com/jtvNDb
Верно
> Анон и банк: https://ideone.com/Vsl4w0
Тут ошибка: PHP Notice: Undefined variable: years in /home/KSnv9f/prog.php on line 7
Проверь правильность написания имен переменных.
>>1063685
Лучше посмотреть в хелпе или спросить у техподдержки.
>>1063320
Зря ты используешь сессию. Она общая для всех вкладов в браузере, плюс она блокируется так, что работать с ней в один момент времени может только одна копия скрипта, что может вызвать подтормаживания.
Или сделал бы так, чтобы для каждого процесса скачивания создавалась бы своя сессия со своим индивидуальным идентификатором.
>>1063150
Длительные процессы можно запускать через системы вроде gearman. То есть послыаем сигнал демону, работающему в фоне, и он запускает процесс. Веб-скрипты не должны в принципе долго работать.
Алсо не забудь в скачивании таймаут ставить, а то подвисший сторонний сервер подвесит твой скрипт.
Имена функций должна начинаться с глагола. Если ты не можешь нормальное название придумать, то плохо.
Для работы с disabled нужно использовать prop(), изучи теорию.
Если ты уж используешь jQuery, зачем использовать свойтва dom вроде document.forms или innerHTML? Не стоит смешивать код в 2 разных стилях.
Это очень интересный вопрос, и я по этому поводу даже создал тикет в баг-трекере PHP c предложением исправить проблему: https://bugs.php.net/bug.php?id=75179
На мой взгляд, выражение $a + $b = 1 не имеет смысла и должно выдавать ошибку. Так как приоритет опрерации + выше, чем у = и, следовательно, сначала выполняется сложение 2 несуществуюих переменных, и получившемуся результату (0 или null) присвоить ничего нельзя.
Но в PHP, как всегда, все не так. У них там парсер при обнаружении такой ситуации просто игнорирует приоритеты и воспринимает выражение как $a + ($b = 1). Причем если почитать комменты, некотлорые разработчики PHP считают такое поведение удобным и оправданным. Я считаю наоборот - это только запутывает разработчика и нужно выдавать ошибку, а не пытаться "додумать", что имел в виде программист.
Интересно, это где вопросы такого уровня задают? Я например про эту фичу не знал, до того как один анон выше указал, что его код ведет себя странно. Это же вопрос по сути про устройство парсера PHP.
В мануале это упомянуто вскользь: http://php.net/manual/ru/language.operators.precedence.php внизу:
> Несмотря на то, что = имеет более низкий приоритет чем большинство других операторов, PHP все же позволяет делать так: if (!$a = foo()), в этом примере результат выполнения foo() будет присвоен $a.
>>1063075
Да, хорошо.
>>1062640
По поводу изучения бутстрапа: изучи основы HTML/CSS, затем просто открой и пролистай/прочитай документацию с примерами. Наизучть учить не надо, просто запомни какие там есть элементы. И когда тебе что-то понадобится, открой документацию снова и скопируй код нужного элемента.
>>1062173
У тебя очень неудачно и неудобно спроектирован массив для хранения данных. Хотя PHP позволяет использовать массивы произвольно гибко, лучше ограничиться такими подходами:
1) упорядоченный список чего-то: [x, y, z, w, v]
2) информация о какой-то сущности: ['name' => 'Иван', 'height' => 170, 'weight' => 60]
3) маппинг (соответствие) между парами значений: ['январь' => 5, 'февраль' => 6,...]
Соответственно в твоем случае есть 2 варианта:
а) сделать список (пункт 1) городов (пункт 2):
[
['city' => x, 'state' => y, 'population' => z],
['city' => x, 'state' => y, 'population' => z],
...
]
б) сделать маппинг (пункт 3) между названием города и его свойствами:
[
'Москва' => ['state' => 'Россия', 'population' => ...],
'Екатеринбург' => ['state' => 'Россия', 'population' => ...]
]
Вариант a) кажется мне более аккуратным. Вариант б) впрочем дает быстрый поиск по названию без перебора.
Когда ты освоишь ООП, ты заметишь, что можно спроектировать объект, представляющий город, и собрать массив таких объектов.
Твой код неудачен. Посмотри сам на циклы:
foreach ($cities as ...) {
foreach ($state as ...) {
...
Складывается впечатление, что у тебя может быть внутри города несколько разных штатов. Ну глупость же.
Если что-то еще непонятно, спрашивай.
В перфекционизме во время обучения нет ничего плохого, но твоему коду пока далеко от совершенства.
Это очень интересный вопрос, и я по этому поводу даже создал тикет в баг-трекере PHP c предложением исправить проблему: https://bugs.php.net/bug.php?id=75179
На мой взгляд, выражение $a + $b = 1 не имеет смысла и должно выдавать ошибку. Так как приоритет опрерации + выше, чем у = и, следовательно, сначала выполняется сложение 2 несуществуюих переменных, и получившемуся результату (0 или null) присвоить ничего нельзя.
Но в PHP, как всегда, все не так. У них там парсер при обнаружении такой ситуации просто игнорирует приоритеты и воспринимает выражение как $a + ($b = 1). Причем если почитать комменты, некотлорые разработчики PHP считают такое поведение удобным и оправданным. Я считаю наоборот - это только запутывает разработчика и нужно выдавать ошибку, а не пытаться "додумать", что имел в виде программист.
Интересно, это где вопросы такого уровня задают? Я например про эту фичу не знал, до того как один анон выше указал, что его код ведет себя странно. Это же вопрос по сути про устройство парсера PHP.
В мануале это упомянуто вскользь: http://php.net/manual/ru/language.operators.precedence.php внизу:
> Несмотря на то, что = имеет более низкий приоритет чем большинство других операторов, PHP все же позволяет делать так: if (!$a = foo()), в этом примере результат выполнения foo() будет присвоен $a.
>>1063075
Да, хорошо.
>>1062640
По поводу изучения бутстрапа: изучи основы HTML/CSS, затем просто открой и пролистай/прочитай документацию с примерами. Наизучть учить не надо, просто запомни какие там есть элементы. И когда тебе что-то понадобится, открой документацию снова и скопируй код нужного элемента.
>>1062173
У тебя очень неудачно и неудобно спроектирован массив для хранения данных. Хотя PHP позволяет использовать массивы произвольно гибко, лучше ограничиться такими подходами:
1) упорядоченный список чего-то: [x, y, z, w, v]
2) информация о какой-то сущности: ['name' => 'Иван', 'height' => 170, 'weight' => 60]
3) маппинг (соответствие) между парами значений: ['январь' => 5, 'февраль' => 6,...]
Соответственно в твоем случае есть 2 варианта:
а) сделать список (пункт 1) городов (пункт 2):
[
['city' => x, 'state' => y, 'population' => z],
['city' => x, 'state' => y, 'population' => z],
...
]
б) сделать маппинг (пункт 3) между названием города и его свойствами:
[
'Москва' => ['state' => 'Россия', 'population' => ...],
'Екатеринбург' => ['state' => 'Россия', 'population' => ...]
]
Вариант a) кажется мне более аккуратным. Вариант б) впрочем дает быстрый поиск по названию без перебора.
Когда ты освоишь ООП, ты заметишь, что можно спроектировать объект, представляющий город, и собрать массив таких объектов.
Твой код неудачен. Посмотри сам на циклы:
foreach ($cities as ...) {
foreach ($state as ...) {
...
Складывается впечатление, что у тебя может быть внутри города несколько разных штатов. Ну глупость же.
Если что-то еще непонятно, спрашивай.
В перфекционизме во время обучения нет ничего плохого, но твоему коду пока далеко от совершенства.
SQL забыл. Но важно не просто знание технологий по отдельности, а умение их собрать вместе в работабщее приложение.
>>1061987
Не совсем так. На каждый HTTP запрос, действительно, запускается новая копия PHP скрипта. А после завершения скрипта память очищается - удаляются все переменные, удаляется копия кода в памяти из подключенных файлов. Это верно. Если бы это было не так, то переменные от предыдущего запуска могли бы как-то мешать работать следующей копии скрипта.
Но то, что процесс PHP (или Апача, внутри которого он работает) запускается каждый раз заново - это неверно. Процесс Апача (или PHP) может обработать много запросов без перезапуска, и инициализация интерпретатора PHP, подключение расширений, парсинг ini файла делается один раз при старте сервера, а не на каждый запрос. То есть процесс интерпретатора PHP запускается один раз, и может выполнить много PHP скриптов без перезапуска, просто очищая свое состояние после завершения PHP скрипта.
При подключении файла через require/include происходит его чтение с диска и компиляция (а только потом интерпретация (выполнение) кода). Эти этапы можно пропустить, используя opcache, который сохраняет результат компиляции в память, и во второй раз берет его оттуда, пропуская чтение и компиляцию.
Что касается аякс-запросов, тут все зависит от ситуации. Если ты для загрузки сайта делаешь много запросов, например, загружая каждый блок отдельным запросом - это в любом случае плохо, так как есть задержка на прохождение данных от клиента к серверу, электромагнитные волны распространаяются с конечной скоростью, да и всякие узлы сети вроде роутеров вносят задержки. Даже если сервер мгновенно отдает ответ, потери времени на путешествие пакета все равно есть. Было бы выгоднее заложить нужные данные сразу в страницу.
Кстати, если тебе интересно, пинги примерно такие:
Москва - Спб: около 5 мс в одну сторону
Москва - Европа: порядка 20-30 мс в одну сторону
Москва - США: порядка 100 мс в одну сторону
Ты можешь сам их измерить командой ping или онлайн-инструментом вроде такого http://ping.eu/ping/
SQL забыл. Но важно не просто знание технологий по отдельности, а умение их собрать вместе в работабщее приложение.
>>1061987
Не совсем так. На каждый HTTP запрос, действительно, запускается новая копия PHP скрипта. А после завершения скрипта память очищается - удаляются все переменные, удаляется копия кода в памяти из подключенных файлов. Это верно. Если бы это было не так, то переменные от предыдущего запуска могли бы как-то мешать работать следующей копии скрипта.
Но то, что процесс PHP (или Апача, внутри которого он работает) запускается каждый раз заново - это неверно. Процесс Апача (или PHP) может обработать много запросов без перезапуска, и инициализация интерпретатора PHP, подключение расширений, парсинг ini файла делается один раз при старте сервера, а не на каждый запрос. То есть процесс интерпретатора PHP запускается один раз, и может выполнить много PHP скриптов без перезапуска, просто очищая свое состояние после завершения PHP скрипта.
При подключении файла через require/include происходит его чтение с диска и компиляция (а только потом интерпретация (выполнение) кода). Эти этапы можно пропустить, используя opcache, который сохраняет результат компиляции в память, и во второй раз берет его оттуда, пропуская чтение и компиляцию.
Что касается аякс-запросов, тут все зависит от ситуации. Если ты для загрузки сайта делаешь много запросов, например, загружая каждый блок отдельным запросом - это в любом случае плохо, так как есть задержка на прохождение данных от клиента к серверу, электромагнитные волны распространаяются с конечной скоростью, да и всякие узлы сети вроде роутеров вносят задержки. Даже если сервер мгновенно отдает ответ, потери времени на путешествие пакета все равно есть. Было бы выгоднее заложить нужные данные сразу в страницу.
Кстати, если тебе интересно, пинги примерно такие:
Москва - Спб: около 5 мс в одну сторону
Москва - Европа: порядка 20-30 мс в одну сторону
Москва - США: порядка 100 мс в одну сторону
Ты можешь сам их измерить командой ping или онлайн-инструментом вроде такого http://ping.eu/ping/
Взрослеть
>>1060888
>>1062053
Почитайте ОП пост, там написано, что решать после учебника (задачу на студентов конечно же).
>>1061871
Можно перейти на URL, по которому отдастся файл. Или же, для новых браузеров, ты можешь сделать ссылку с атрибутом download и попросить пользователя нажать ее.
>>1061997
Это зависит от требований заказчика. Твоя задача - оценить, насколько удорожит проект поддержка того или иного браузера и сообщить. И затем уже вы решите, стоит оно того или не стоит. (если заказчика нет, то ты это решаешь сам с собой).
Также, можно анализировать долю популярности того или иного браузера. Например https://www.liveinternet.ru/stat/ru/browsers.html?period=month
Обрати внимание, что это статистика по десяткам миллионов пользователей и 1% там значит порядка миллиона пользователей.
По моему опыту, если делать все по стандартам (а не копипастя код со stackoverflow), если изучать CSS по моим урокам (а не тыкать свойства наугад), то работать будет сразу в большинстве стандартных браузеров, кроме старых IE. для старых IE у меня есть урок https://github.com/codedokode/pasta/blob/master/html/markup-for-ie.md
Также, есть полезный сайт, где можно увидеть поддержку той или иной технологии браузерами: http://caniuse.com/#search=background-size
По умолчанию, он показывает только последние версии браузеров (есть странные люди, которые всерьез считают, что только под них и надо верстать), но если раскрыть полный список, то будет видно, с какого года поддерживается та или иная технология. Если браузеры за последние лет 5-7 ее поддерживают - хорошо.
Вообще, HTML и CSS ведь проектировался с расчетом на совместимость в обе стороны: новые браузеры могут смотреть старые страницы, и наоборот. И надо придерживаться этого принципа.
Однако дорабатывать сайт под старые версии браузеров, добиваясь полной поддержки, может быть дорого по времени. А иногда просто невозможно. Тогда можно применить прицнип "последовательного улучшения", когда в старых браузерах отчключается часть фич (вроде скруглений или анимаций, или аякса), но сам сайт остается пригодным для использования. То есть базовые вещи мы делаем максимально железобетонно, а поверх добавляем красивости, которые работают только в новых браузерах.
Твоя задача - разбираться в этом и уметь оценить, насколько сложно сделать ту или иную вещь и какие браузеры ее будут поддерживать.
Взрослеть
>>1060888
>>1062053
Почитайте ОП пост, там написано, что решать после учебника (задачу на студентов конечно же).
>>1061871
Можно перейти на URL, по которому отдастся файл. Или же, для новых браузеров, ты можешь сделать ссылку с атрибутом download и попросить пользователя нажать ее.
>>1061997
Это зависит от требований заказчика. Твоя задача - оценить, насколько удорожит проект поддержка того или иного браузера и сообщить. И затем уже вы решите, стоит оно того или не стоит. (если заказчика нет, то ты это решаешь сам с собой).
Также, можно анализировать долю популярности того или иного браузера. Например https://www.liveinternet.ru/stat/ru/browsers.html?period=month
Обрати внимание, что это статистика по десяткам миллионов пользователей и 1% там значит порядка миллиона пользователей.
По моему опыту, если делать все по стандартам (а не копипастя код со stackoverflow), если изучать CSS по моим урокам (а не тыкать свойства наугад), то работать будет сразу в большинстве стандартных браузеров, кроме старых IE. для старых IE у меня есть урок https://github.com/codedokode/pasta/blob/master/html/markup-for-ie.md
Также, есть полезный сайт, где можно увидеть поддержку той или иной технологии браузерами: http://caniuse.com/#search=background-size
По умолчанию, он показывает только последние версии браузеров (есть странные люди, которые всерьез считают, что только под них и надо верстать), но если раскрыть полный список, то будет видно, с какого года поддерживается та или иная технология. Если браузеры за последние лет 5-7 ее поддерживают - хорошо.
Вообще, HTML и CSS ведь проектировался с расчетом на совместимость в обе стороны: новые браузеры могут смотреть старые страницы, и наоборот. И надо придерживаться этого принципа.
Однако дорабатывать сайт под старые версии браузеров, добиваясь полной поддержки, может быть дорого по времени. А иногда просто невозможно. Тогда можно применить прицнип "последовательного улучшения", когда в старых браузерах отчключается часть фич (вроде скруглений или анимаций, или аякса), но сам сайт остается пригодным для использования. То есть базовые вещи мы делаем максимально железобетонно, а поверх добавляем красивости, которые работают только в новых браузерах.
Твоя задача - разбираться в этом и уметь оценить, насколько сложно сделать ту или иную вещь и какие браузеры ее будут поддерживать.
https://github.com/radiodog/studentlist
Стыдно, что изначально наговнокодил, а потом подглядел у других решения и понял, что так намного проще. D:
давай теперь в ООП стиле с инкапсуляцией и полиморфизмом
>
>- https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
>$s = "щ";
Что означает эта строка? "Присвоить s UTF8-строку"?
https://ideone.com/kiJeu8
Все норм, просто сравнивал одну переменную саму с собой, а не с другой.
16 строка $nonD1
Это где у меня негативное отношение к ООП? И о чем ты вообще пишешь, ты мое сообщение хотя бы прочитал, перед тем как катать простыню про ООП, паттерны, мвц и симфони?
Я говорю о том, что в пхп, включая 7, не самая лучшая реализация ООП. Из-за этого тот же ларавел использует достаточно своеобразный подход и по сути выбрасывает все эти прекрасные "программируй на уровне интерфейсов", "предпочтительна композиция, а не наследование" и прочие ООП-принципы, используя в основном фасады и трейты. И это не самая плохая идея.
Симфони же переусложнен и просто не отвечает запросам бизнеса. Какой смысл притворяться, что ты программируешь на джаве, но дрочить кривой похапэ, обмазывая его кучей абстракций и наряжая в джава одежду? Зачем? Тем более требования к зп у симфони-программистов сопостовимы с джава-господами и со стороны бизнеса проще докинуть на нормальных разработчиков или не париться и использовать что дают.
И это основная идея похапэ. И то, что гонит похапэ в могилу.
Поэтому дрочить ООП здорово, конечно, но в рамках php-мирка достаточно бессмысленно. Тем более бессмысленно пилить свой фреймворк по всем канонам ООП. Знать пару паттернов, как реализовано все это в нужном фреймворке или даже цмс и вперед на галеру. За нормальным ООП программированием прошу пожаловать в более продвинутые языки.
>На работе да, нужно использовать по максимум готовые решения, но если ты учишься, то написание своего (микро)фреймворка, будет полезно. После этого будет проще понять существующие фреймворки.
Ты не можешь без кучи опыта и набитых шишек начать писать свой (микро)фреймворк. Это приведет лишь к куче нечитаемого говнокода. Вот изучив кучу существующих решений, поняв как они работают, можно попытаться на выходных что-то натыкать, но смысла в этом очень мало. Ну и не занятие это джунов/миддлов, в любом случае.
Что не так в реализации ООП от PHP и какое отношение к этому имеет Ларавель? Ларавель, насколько я знаю, вдохновлен Руби он Рейлс и видимо пытается поворять архитектуру этого фреймворка.
> Какой смысл притворяться, что ты программируешь на джаве, но дрочить кривой похапэ
Ява хороший язык, но у PHP есть свои плюсы. Компилировать не требуется, есть иногда полезные динамические возможности, писать приходится меньше.
Скопировать строку "щ" (для PHP это просто набор байт) в переменную $s. Какие именно байты скопируются - зависит от кодировки, в которой написан PHP скрипт.
То есть для PHP "щ" это просто 2 каких-то байта.
Ооооооо, наконец-то тайна открылась. То есть, в $s окажется набор байт, который PHP считает заключёнными между двойными кавычками, если парсер не поперхнётся.
Тогда вопрос: какие кодировки поддерживает парсер и чем он не поперхнётся? Нужно ли задавать кодировку исходника явно в начале исходника?
Раньше все было очень просто. Парсер интерпретировал только байты меньше 0x80 (128), а те, что больше - это просто для него непонятные символы, которые он игнорировал (они могли быть частью строки или имени переменной). Соответсвенно, по факту работала любая 1-байтовая кодировка или utf-8. Utf-16 или utf-32 не работали.
Потом там кое-что подправили и стало вот так: https://stackoverflow.com/questions/17872046/php-source-code-in-utf-8-files-how-to-interpret-properly/18562859#18562859
Несовместимые с ASCII кодировки можно включить через опции zend.multibyte и zend.script_encoding: http://php.net/manual/en/ini.core.php#ini.zend.script-encoding
Там еще есть declare, но чтобы ее прочитать, нужно задать упомянутые выше настройки. И я не очень понимаю, какая в этом случае польза от этой директивы.
Если твой исходник ASCII-совместимый (включая utf-8) то ничего делать не надо. Если он в utf-16 или utf-32 или чем-то подобном, то придется заморачиваться с настройками.
Кстати, мне интересно, как проблема кодировок решена в других языках. В Питоне кодировку можно задать комментарием, но чтобы его прочитать, парсер должен знать кодировку файла.
В питоне например можно это сделать так:
apples = int(input())
Вторая задача на массивы: https://ideone.com/zBOSPk
Третья задача на массивы: https://ideone.com/XvM5eM
>Что не так в реализации ООП от PHP
>Компилировать не требуется
>динамические возможности
>писать приходится меньше
Если говорить не только об ООП, то вот это все большие минусы языка для веб-приложений PHP для 2017 года.
Сам PHP состоит из говна и палок, стандартная библиотека скудна и бедна, поэтому наплодили кучу библиотек с таким же ключевым отношением к разработке. В результате мы получили просто тонны легаси кода, тянущегося от версии к версии. Ты хочешь нафигачить какой-нибудь крутой паттерн и чтобы все подрубалось само и работало из коробки? Хуй там плавал, пиши адаптеры на каждый чих, пиши костыли, чтобы данные выдавали определенный тип, а не юинты или фолс. Так и пишешь кучу обвязок к ядру похапэ просто чтобы написать что-то "по-человечески". Но для чего все это, если есть нормальные ЯП? Поэтому пишут говно с тонной проверок на все подряд, лишь бы просто работало кое-как.
>какое отношение к этому имеет Ларавель?
Как бы самый популярный фреймворк на данный момент для малый/средних проектов и он написан на PHP. И, очень показательно, архитектуру он имеет очень так себе. Интерфейсы нормально из коробки не подрубишь, всюду фасады, некоторые фичи просто прибиты гвоздями, словно тебе говорят: "бери что дают и пиши".
>Ларавель, насколько я знаю, вдохновлен Руби он Рейлс и видимо пытается поворять архитектуру этого фреймворка.
На роре нет вездесущих фасадов на каждый чих. Он повторяет mvc архитектуру, не более.
https://github.com/radiodog/studentlist
2 поста написал про то, какой плохой в PHP ООП, а как до дела дошло, ничего конкретного сказать не можешь. Да и про ruby on rails толком ничего не знаешь. Наверно, все таки тут проблема не в PHP.
> Ларавель?
> Как бы самый популярный фреймворк на данный момент для малый/средних проектов
Популярный на Хабре или популярный в вакансиях/на фрилансе? Не путай.
Мне кажется, нет. Инкапсуляция - это сокрытие данных или алгоритма работы внутри объекта. Тут я ничего подобного не вижу. Позволь скопипастить мои рассуждения про инкапсуляцию:
-----
Инкапсуляция. У этого слова есть разные определения, в том числе такие что ничего не понять, потому объясню простыми словами.
Суть инкапсуляции в том, что класс скрывает (инкапслирует) в себе логику работы с данными и сами данные, а наружу выставляет методы. Пользователю этих методов не важно, как класс устроен внутри, как он хранит данные, ему достаточно вызвать нужный метод чтобы получить результат.
Это упрощает понимание кода: тебе не надо читать и разбирать код класса, достаточно прочитать название метода (и может быть комментарий к нему). Также, это упрощает изменение кода: если какое-то свойство имеет уровень private то доступ к нему возможен только из того же класса и тебе не надо бегать по всему коду и смотреть что там с этим свойством делается, тебе достаточно просмотреть один файл с этим классом.
Как плюс, мы можем поставить какие-то проверки в методах, и запретить установку неправильных значений свойств. Таким образом, снаружи записать неправльное значение в объект будет нельзя и автор класса может гарантировать его корректную работу в любой ситуации.
Инкапсуляция это хорошо. Так как весь код, который занимается одной задачей, оказывается заключен внутри одного класса. Противоположный случай это когда код (или знание о его внутреннем устройстве) вылезает из класса и размазывается по всей программе.
Если проводить аналогии, то можно представить кофе-машину. Ты нажимаешь кнопку (=вызываешь публичный метод) и получаешь кофе (=результат вызова этого метода), при этом ты не видишь что происходит внутри нее и тебе не надо в этом разбираться.
-----
У тебя ничего похожего нет, более того, код слишком переусложнен и я не понимаю, зачем нужно было городить столько функций, включая преобразование из строк в число, чтобы просто увеличить или уменьшить число.
Инкапсуляция в функциональных ЯП возможна за счет замыкания:
function createCounter() {
var x = 0;
return function () {
x++;
return x;
};
}
var counter = createCounter();
В примере данные спрятаны в замыкании, а мы имеем возможность только получить следующее значение счетчика.
Мне кажется, нет. Инкапсуляция - это сокрытие данных или алгоритма работы внутри объекта. Тут я ничего подобного не вижу. Позволь скопипастить мои рассуждения про инкапсуляцию:
-----
Инкапсуляция. У этого слова есть разные определения, в том числе такие что ничего не понять, потому объясню простыми словами.
Суть инкапсуляции в том, что класс скрывает (инкапслирует) в себе логику работы с данными и сами данные, а наружу выставляет методы. Пользователю этих методов не важно, как класс устроен внутри, как он хранит данные, ему достаточно вызвать нужный метод чтобы получить результат.
Это упрощает понимание кода: тебе не надо читать и разбирать код класса, достаточно прочитать название метода (и может быть комментарий к нему). Также, это упрощает изменение кода: если какое-то свойство имеет уровень private то доступ к нему возможен только из того же класса и тебе не надо бегать по всему коду и смотреть что там с этим свойством делается, тебе достаточно просмотреть один файл с этим классом.
Как плюс, мы можем поставить какие-то проверки в методах, и запретить установку неправильных значений свойств. Таким образом, снаружи записать неправльное значение в объект будет нельзя и автор класса может гарантировать его корректную работу в любой ситуации.
Инкапсуляция это хорошо. Так как весь код, который занимается одной задачей, оказывается заключен внутри одного класса. Противоположный случай это когда код (или знание о его внутреннем устройстве) вылезает из класса и размазывается по всей программе.
Если проводить аналогии, то можно представить кофе-машину. Ты нажимаешь кнопку (=вызываешь публичный метод) и получаешь кофе (=результат вызова этого метода), при этом ты не видишь что происходит внутри нее и тебе не надо в этом разбираться.
-----
У тебя ничего похожего нет, более того, код слишком переусложнен и я не понимаю, зачем нужно было городить столько функций, включая преобразование из строк в число, чтобы просто увеличить или уменьшить число.
Инкапсуляция в функциональных ЯП возможна за счет замыкания:
function createCounter() {
var x = 0;
return function () {
x++;
return x;
};
}
var counter = createCounter();
В примере данные спрятаны в замыкании, а мы имеем возможность только получить следующее значение счетчика.
Дополняю.
Четвертая задача на массивы: https://ideone.com/dNl1au
Шифровка: Сделал но похерачил случайно все полностью два раза. Заново уже третий раз писать нет никакого желния. Но каждый символ был уникальный и использовался один раз.
>2 поста написал про то, какой плохой в PHP ООП, а как до дела дошло, ничего конкретного сказать не можешь.
Так а что тут сказать? Стдлиб и самые популярные инструменты для PHP (разве что кроме некоторых компонентов симфони) не рассчитаны для использования в ООП архитектуре, либо их нужно оборачивать в бесконечные проверки и подменять вывод, либо перепиливать и заставлять исполнять паттерны. Более подробно в гугле по запросу "чем плох php", копипастить не вижу смысла.
>Да и про ruby on rails толком ничего не знаешь.
Я и не говорил, что большой специалист. Просто когда говорят ror-подобный фреймворк, то имеют ввиду стандартное разбиение компонентов mvc. Тот же симфони, прямая противоположность Laravel, тоже ror-подобный. Странно, что это приходится объяснять, ну да ладно.
>Наверно, все таки тут проблема не в PHP.
Как хочешь, я здесь не для того чтобы кого-то переубеждать и кому-то что-то доказывать. Я всего лишь упомянул, что на PHP делать чистый ООП достаточно глупо, ибо инструменты просто не созданы для этого и мотивируют тебя писать говнокод. Поэтому стоит изучить по-настоящему оопную джаву и... и переходить на нее. Либо не мучать себя и есть что дают.
>Популярный на Хабре или популярный в вакансиях/на фрилансе? Не путай.
Так и не путаю. А что популярнее? Битрикс? В вакансиях по ДС/ДС2 в основном laravel/symfony/lumen/silex, либо нечто на компонентах symfony, что сути не меняет. На фрилансе либо дают самому выбрать на чем решать задачу, либо работать с легаси. Тут уже кто что когда-то давно выбрал, что тоже особо не показатель.
>чем плох php
Большинство из них примерно 2010-го года написания. Да и там доебки к синтаксису в основном. Ну да, он в пыхе довольно архаичен - Си для тупых же. Но что в этом такого я не понимаю, на сишке же хуярят до сих пор и не ноют даже. И я так и не понял чем тебе там ООП не нравится - вот что такого жутко важного нет в реализации пхпшного ООП?
Понял.
(Пример с числами это самое простое, что пришло в голову. Реальный код позволяет мне не дублировать простейшие функции внутри объекта, и отдавать наружу только публичное так сказать АПИ. Вот я и подумал, что получилась настояшая инкапсуляция + ДИ, а оно вона как. Ох, забей.)
Такой предефайн работает только в случае если я получаю пагинацию путем Yii::$container->get('yii\data\Pagination'), и не работает если я как обычно создаю экземпляр класса через new yii\data\Pagination(), так и задумано? Теперь придется получение класса делать только через геттер контейнера?
Нужно обязательно проверять значения от пользователя, а не вставлять их в запрос, слепо доверяя ему. Иначе будет SQL инъекция.
В твоем случае проще всего сделать массив разрешенных значений и проверять по нему. Там ведь немного колонок.
В более общем случае можно этот массив не закладывать в коде, а получать из БД список колонок.
>Нужно обязательно проверять значения от пользователя
Я не совсем это имею ввиду. Про проверку это понятно.
>>1066704
Допустим, я хочу позволить сортировать по name, secondName и summary(это у меня так общий бал называется). А пользователь хуяк и в ссылке введет не students.loc/name/1 (поле сортировки и страница), а /email/1 - и у меня будет сортировка по имейлу, хули, есть же такая колонка. В принципе ничего страшного в любом случае, но меня скорее интересует вопрос хранения каких-либо параметров, которые можно было бы отдать пользователю для свободного изменения, но при этом слишком мелочных что бы для них делать таблицы в БД, как-то так.
Если ты не хочешь чтобы была возможность сортировать по email то надо сделать просто массив со списком разрешенных значений.
public function rules()
{
return [
// username and password are both required
[['username', 'password'], 'required'],
// rememberMe must be a boolean value
['rememberMe', 'boolean'],
// password is validated by validatePassword()
['password', 'validatePassword'],
];
}
rules() - это метод класса LoginForm. Окей. И он возвращает некие правила, состоящие из двух элементов: "что" и "каким оно должно быть". Например, username' и 'password' должны быть обязательно. Но что такое username? Я "примерно чувствую", что это вводимые пользователем в форму данные. Тогда, username - это имя поля? Вот это вот <?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?> во вью login.php?
Если я изменю название поля и напишу то же название в правилах валидации, то этого будет достаточно, или это поле упоминается где-нибудь ещё?
Другой вопрос, а кому этот метод что-то возвращает? Дожен ли я где-то его вызывать, или это делается "под капотом"?
>Если я изменю название поля и напишу то же название в правилах валидации, то этого будет достаточно, или это поле упоминается где-нибудь ещё?
Немного не так, да это название поля, но в то же время в
><?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
это ещё и название атрибута в модели, то-есть обычно если ты пользуешься gii он создает модель на основе таблицы в базе. Если ты просто поменяешь название в rules и в <?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?> - этого будет недостаточно, тебе выбросит ошибку, что такого атрибута нет в твоей модели. Тебе нужно ещё будет добавить нужный атрибут в модель и в таблицу
То есть, если заменить во вью username на nameuser, то в моделе нужно изменить
public $nameuser;
в объявлении атрибутов и
[['nameuser', 'password'], 'required'],
в методе rules()
И получается, что мы передаём в метод field() модель $model (берётся из контроллера) и атрибут модели nameuser. Метод создаёт поле формы с тем же именем(username), а значение этого атрибута установит пользователь, введя туда что-то. Так?
>Тебе нужно ещё будет добавить нужный атрибут в модель и в таблицу
То есть, nameuser - это ещё и название поля в таблице?
public function validatePassword($attribute, $params)
{
//hasErrors() -Возвращает значение, указывающее, есть ли какая-либо ошибка проверки.
if (!$this->hasErrors()) {
//getUser() -Returns the user component.
$user = $this->getUser();
//Если $user нет ИЛИ валидация с введённым паролем не прошла
if (!$user || !$user->validatePassword($this->password)) {
//addError() -Добавляет ошибку к указанному атрибуту объекту модели.
$this->addError($attribute, 'Incorrect username or password.');
}
}
}
Как они работают? Они рекурсивные?
То есть, сначала hasErrors проверяет наличие ошибок (не понимаю, каких именно, и вообще, что на что проверяется, но ладно). Затем getUser создаёт компонент. А затем идёт проверка на две вещи: успешно ли создался компонент (wtf?) и успешно ли прошёл метод валидации, которому передан один параметр (введённый пароль, полагаю). Но этот метод принимает два параметра. И... Ну хорошо, второй раз его запустили, снова проверили на ошибки и создали новый компонент, снова проверка, и так до бесконечности. Я не понимаю, как это рабоает.
На ютубе этого говна навалом. А вообще, делай задачку про студентов, в конце ты и получишь нечто похожее на фреймворк.
ахахах, перечитал и дошло: так как это ссылка на приватное статическое свойство и удаляется лишь ссылка
> ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше
Господа, прошу проявить спокойствие и воспользоваться гуглом, пока Оп'а нету. А более опытные пока что могут помогать новичкам.
Спрашивай, может помогу
>>1067428
Пожалуйста, укажите ссылки на ваши посты, которые уже неделю не проверяют. Тред большой, я конечно постараюсь всех проверить, но сами понимаете, 700 постов быстро не пролистать.
У меня тут бывают периоды когда нет времени проверять, и иногда - периоды, когда лень что-то делать. Но постараюсь всем ответить.
Что означает Yii::$app->user->isGuest ?
То есть, это метод проверки, не является ли юзер гостем. Но по отдельности? Что такое isGuest и user? Я искал isGuest поиском, нашёл только в недрах движка и там не особо понятно, что это и для чего.
Я сейчас пытаюсь повторить статью https://webformyself.com/registraciya-polzovatelya-v-yii2-chast-2/ с некоторыми изменениями. У меня таблица назвается не user с полями id, username, password, а users с полями user_id, user_login, user_password. И модель не SignupForm, а UserForm. До момента
>Уберем распечатку и вызовем метод save() модели.
всё работает (с соответствующими изменениями). Данные из формы загружаются в модель $model, а оттуда в модель $user. А вот дальше не понимаю. "Сохранить зарегистрированного пользователя" - это как? У меня валятся ошибки
Invalid Configuration – yii\base\InvalidConfigException
The table does not exist: {{%user}}
Вроде бы это означает, что yii пытается работать с базой user, которой нет. И как переориентировать его на users не понимаю.
Кстати, везде, где читал об этом движке, все аж от счастья писаются и нахваливают его великолепную систему отображения ошибок, по которой сразу понятно, что и где неправильно. Но я этой системы не вижу. Как правило Yii выдаёт "у меня в недрах случилась какая-то хуйня". Или это я тупой и не способен понять его месседжи?
Я набрал в поиске "Yii isGuest" и выпало вот это: http://www.yiiframework.com/doc-2.0/yii-web-user.html
Это описание класса User. Там есть свойство isGuest.
> Что такое isGuest и user?
user - объект класса yii\Web\User, isGuest - его публичное свойство.
Вот его код: https://github.com/yiisoft/yii2/blob/master/framework/web/User.php#L326
Свойства там нет, есть метод, который видимо за счет какой-то магии в классе-предке вызывается при обращении к свойству.
> Я сейчас пытаюсь повторить статью
Стоит параллельно читать код или документацию. Тем более, что сама статья почти ничего не объясняет и знаний не дает. Вот например что гуглится по авторизации:
http://www.yiiframework.com/doc-2.0/guide-security-authentication.html
https://yiiframework.com.ua/ru/doc/guide/2/security-authentication/
> "Сохранить зарегистрированного пользователя" - это как?
Наверно имеется в виду "сохранить объект пользователя в БД".
> Вроде бы это означает, что yii пытается работать с базой user, которой нет. И как переориентировать его на users не понимаю.
В исключении обычно пишется стектрейс - последовательность вызовов функций, которая ведет к месту ошибки. По ним можно понять, что именно пытался сделать фреймворк. Затем можно глянуть код в месте ошибки и попробовать понять, что не так.
Ты не написал в сообщении ни стектрейс, ни место ошибки - посмотри тогда код в том месте, и если что-то непонятно, задавай вопросы. Если подробности ошибки не выодятся, значит ты наверно забыл включить какую-нибудь опцию вроде debug или поменять окружение на dev. Где-то в мануале это должно быть описано.
> Или это я тупой и не способен понять его месседжи?
Ты не умеешь читать стектрейсы и понимать, что привело к ошибке. Подробностей там обычно более чем достаточно.
Я набрал в поиске "Yii isGuest" и выпало вот это: http://www.yiiframework.com/doc-2.0/yii-web-user.html
Это описание класса User. Там есть свойство isGuest.
> Что такое isGuest и user?
user - объект класса yii\Web\User, isGuest - его публичное свойство.
Вот его код: https://github.com/yiisoft/yii2/blob/master/framework/web/User.php#L326
Свойства там нет, есть метод, который видимо за счет какой-то магии в классе-предке вызывается при обращении к свойству.
> Я сейчас пытаюсь повторить статью
Стоит параллельно читать код или документацию. Тем более, что сама статья почти ничего не объясняет и знаний не дает. Вот например что гуглится по авторизации:
http://www.yiiframework.com/doc-2.0/guide-security-authentication.html
https://yiiframework.com.ua/ru/doc/guide/2/security-authentication/
> "Сохранить зарегистрированного пользователя" - это как?
Наверно имеется в виду "сохранить объект пользователя в БД".
> Вроде бы это означает, что yii пытается работать с базой user, которой нет. И как переориентировать его на users не понимаю.
В исключении обычно пишется стектрейс - последовательность вызовов функций, которая ведет к месту ошибки. По ним можно понять, что именно пытался сделать фреймворк. Затем можно глянуть код в месте ошибки и попробовать понять, что не так.
Ты не написал в сообщении ни стектрейс, ни место ошибки - посмотри тогда код в том месте, и если что-то непонятно, задавай вопросы. Если подробности ошибки не выодятся, значит ты наверно забыл включить какую-нибудь опцию вроде debug или поменять окружение на dev. Где-то в мануале это должно быть описано.
> Или это я тупой и не способен понять его месседжи?
Ты не умеешь читать стектрейсы и понимать, что привело к ошибке. Подробностей там обычно более чем достаточно.
>Ты не написал в сообщении ни стектрейс, ни место ошибки
Так мне их Yii не выдал же. Только
Invalid Configuration – yii\base\InvalidConfigException
The table does not exist: {{%user}}
И это ещё хорошо. Иногда просто после нажатия на кнопкку формы появляется пустая страница. Или происходит редирект на главную (без залогинивания). и понять, почему логин не прошёл сложно.
>забыл включить какую-нибудь опцию вроде debug или поменять окружение на dev
Возможно. Хотя, дев я вроде выбирал при установке.
>user - объект класса yii\Web\User, isGuest - его публичное свойство.
Окей.
>Наверно имеется в виду "сохранить объект пользователя в БД".
Это я понимаю. Но тут же сохраняется на моя модель UserForm, а встроенная User.
>http://www.yiiframework.com/doc-2.0/guide-security-authentication.html
>https://yiiframework.com.ua/ru/doc/guide/2/security-authentication/
Посмотрю.
А в документации написано что есть 2 режима - development и production, попробуй переключить в development: http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html#environment-constants
Так же в Юи есть лог, где могут быть подробности: http://www.yiiframework.com/doc-2.0/guide-runtime-logging.html
Также, подробности могут быть в стандартном логе ошибок Апача (если Windows, то в папке с Апачом, если linux то в /var/log).
> появляется пустая страница
Может у тебя display_errors в php.ini отключен? Или кто-то die() вызывает?
Потому что при передаче объектов передается не сам объект, а его идентификатор (ссылка, указатель на объект). То есть когда ты пишешь:
$a = new Class;
$b = $a;
Происходит такое: выделяется область памяти, и в этой области памяти создается новый объект. Указатель на объект кладется в переменную $a. Во второй строчке указатель (не сам объект) копируется из переменной $a в $b.
В твоем коде, который является примером паттерна Singleton:
- при первом вызове getInstance() создается объект, указатель на него сохраняется в приватное свойств и возвращается
- ты уничтожаешь переменную $pref, в которой хранится указатель, а сам объект остается
- второй вызов getInstance() возвращает ранее сохраненный указатель на старый объект
Это важно понять, для объектов сохраняется в переменную и передается только их идентификатор, а не сам объект. Потому объекты передаются как будто по ссылке. Другие типы данных - массивы, строки, числа - копируются при передаче. В примере ниже создается вторая копия массива в переменной $b:
$a = [];
$b = $a;
Процесс копирования, разумеется, оптимизирован так, что пока ты не попробуешь изменить одну из копий, реального копирования данных не происходит (то есть реально данные копируются только когда это потребуется).
Если что, эта идея - объекты не копируются при передаче - она используется почти во всех языках. Потому что иначе будет очень неудобно.
> это ссылка на приватное статическое свойство
Неверно. Это идентификатор объекта, который сохранен в нескольких местах. Если бы $pref была ссылкой на статическое свойство, то при записи нового значения оно бы оказалось и в $pref, это это не так:
$a = new Class;
$b = $a;
$a = 1; // $b не меняется, указывает на объект, а если бы $b было ссылкой на $a
// то в $a бы тоже оказалось 1
>>1067257
> $i=0;$i<=1
Лучше было $i < 2, чтобы было видно что выполняется два раза.
Решено верно.
>>1066991
Что тебе нужно? полноценная авторизация или же просто один раз в одном месте сделать блок, где надо ввести пароль для просмотра содержимого? Если второе, то надо отправлять пароль на сервер, тот его проверит, и если верно, то вернет содержимое, которое скрипт вставит в нужное место страницы.
Также, прочитай мой урок, что надо не забыть при использовании аякса: https://github.com/codedokode/pasta/blob/master/js/ajax.md
>>1066789
> Как они работают? Они рекурсивные?
Нет. Это 2 метода с одинаковым названием, но в разных классах. Если ты обратишь внимание, то там идет:
> public function validatePassword($attribute, $params)
> {
> ....
> $user->validatePassword($this->password))
То есть это 2 разных метода. Ты знаешь ООП, знаешь что такое класс и объект? Метод одного класса вызывает метод с таким же названием, но из другого класса.
> То есть, сначала hasErrors проверяет наличие ошибок
Возможно, что она сначала запускает валидацию, и возвращает ее результат.
> (не понимаю, каких именно, и вообще, что на что проверяется, но ладно).
Наверно это проверка свойств модели на соответствие заданным в этой же модели правилам валиадции, как описано в мануале. Ты к сожалению не указал, какой у тебя класс и от кого он унаследован, потому я могу только наугад дать ссылку на документацию, может подойдет: https://yiiframework.com.ua/ru/doc/guide/2/input-validation/
> Затем getUser создаёт компонент
Возвращает существующий наверно, а не создает новый.
> А затем идёт проверка на две вещи: успешно ли создался компонент (wtf?
Тут надо посмотреть метод getUser(), и понять в каких случаях он возвраащет пустое значение вроде null. И тогда будет понятно, что проверяет эта проверка.
> и успешно ли прошёл метод валидации, которому передан один параметр (введённый пароль, полагаю). Но этот метод принимает два параметра
Это другой метод с тем же названием.
>>1066773
Нет такого туториала, можно разобрать код фреймворка вроде Юи, можно решать задачу на студентов.
>>1066774
Тебе надо почитать документацию по Active Record, и по моделям в Юи: https://yiiframework.com.ua/ru/doc/guide/2/structure-models/
Ну и код посмотреть разумеется, документации там явно недостаточно.
Если что, вот еще мой урок где описано что такое active record https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
>>1066762
> Но что такое username?
Это название поля модели. Почитай документацию Юи по моделям и по валидации. Посмотри код базового класса модели.
> Я "примерно чувствую", что это вводимые пользователем в форму данные.
Неверно. Модель по умолчанию ничего не знает про формы и конечно не пытается брать данные из POST/GET.
> Вот это вот <?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?> во вью login.php?
Там $form - это явно объект формы, а не сама модель. Не то.
> Другой вопрос, а кому этот метод что-то возвращает?
Я думаю, какому-то коду в классе-предке. Посмотри исходный код базового класса модели.
>>1066654
Наверно, надо смотреть код.
Потому что при передаче объектов передается не сам объект, а его идентификатор (ссылка, указатель на объект). То есть когда ты пишешь:
$a = new Class;
$b = $a;
Происходит такое: выделяется область памяти, и в этой области памяти создается новый объект. Указатель на объект кладется в переменную $a. Во второй строчке указатель (не сам объект) копируется из переменной $a в $b.
В твоем коде, который является примером паттерна Singleton:
- при первом вызове getInstance() создается объект, указатель на него сохраняется в приватное свойств и возвращается
- ты уничтожаешь переменную $pref, в которой хранится указатель, а сам объект остается
- второй вызов getInstance() возвращает ранее сохраненный указатель на старый объект
Это важно понять, для объектов сохраняется в переменную и передается только их идентификатор, а не сам объект. Потому объекты передаются как будто по ссылке. Другие типы данных - массивы, строки, числа - копируются при передаче. В примере ниже создается вторая копия массива в переменной $b:
$a = [];
$b = $a;
Процесс копирования, разумеется, оптимизирован так, что пока ты не попробуешь изменить одну из копий, реального копирования данных не происходит (то есть реально данные копируются только когда это потребуется).
Если что, эта идея - объекты не копируются при передаче - она используется почти во всех языках. Потому что иначе будет очень неудобно.
> это ссылка на приватное статическое свойство
Неверно. Это идентификатор объекта, который сохранен в нескольких местах. Если бы $pref была ссылкой на статическое свойство, то при записи нового значения оно бы оказалось и в $pref, это это не так:
$a = new Class;
$b = $a;
$a = 1; // $b не меняется, указывает на объект, а если бы $b было ссылкой на $a
// то в $a бы тоже оказалось 1
>>1067257
> $i=0;$i<=1
Лучше было $i < 2, чтобы было видно что выполняется два раза.
Решено верно.
>>1066991
Что тебе нужно? полноценная авторизация или же просто один раз в одном месте сделать блок, где надо ввести пароль для просмотра содержимого? Если второе, то надо отправлять пароль на сервер, тот его проверит, и если верно, то вернет содержимое, которое скрипт вставит в нужное место страницы.
Также, прочитай мой урок, что надо не забыть при использовании аякса: https://github.com/codedokode/pasta/blob/master/js/ajax.md
>>1066789
> Как они работают? Они рекурсивные?
Нет. Это 2 метода с одинаковым названием, но в разных классах. Если ты обратишь внимание, то там идет:
> public function validatePassword($attribute, $params)
> {
> ....
> $user->validatePassword($this->password))
То есть это 2 разных метода. Ты знаешь ООП, знаешь что такое класс и объект? Метод одного класса вызывает метод с таким же названием, но из другого класса.
> То есть, сначала hasErrors проверяет наличие ошибок
Возможно, что она сначала запускает валидацию, и возвращает ее результат.
> (не понимаю, каких именно, и вообще, что на что проверяется, но ладно).
Наверно это проверка свойств модели на соответствие заданным в этой же модели правилам валиадции, как описано в мануале. Ты к сожалению не указал, какой у тебя класс и от кого он унаследован, потому я могу только наугад дать ссылку на документацию, может подойдет: https://yiiframework.com.ua/ru/doc/guide/2/input-validation/
> Затем getUser создаёт компонент
Возвращает существующий наверно, а не создает новый.
> А затем идёт проверка на две вещи: успешно ли создался компонент (wtf?
Тут надо посмотреть метод getUser(), и понять в каких случаях он возвраащет пустое значение вроде null. И тогда будет понятно, что проверяет эта проверка.
> и успешно ли прошёл метод валидации, которому передан один параметр (введённый пароль, полагаю). Но этот метод принимает два параметра
Это другой метод с тем же названием.
>>1066773
Нет такого туториала, можно разобрать код фреймворка вроде Юи, можно решать задачу на студентов.
>>1066774
Тебе надо почитать документацию по Active Record, и по моделям в Юи: https://yiiframework.com.ua/ru/doc/guide/2/structure-models/
Ну и код посмотреть разумеется, документации там явно недостаточно.
Если что, вот еще мой урок где описано что такое active record https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
>>1066762
> Но что такое username?
Это название поля модели. Почитай документацию Юи по моделям и по валидации. Посмотри код базового класса модели.
> Я "примерно чувствую", что это вводимые пользователем в форму данные.
Неверно. Модель по умолчанию ничего не знает про формы и конечно не пытается брать данные из POST/GET.
> Вот это вот <?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?> во вью login.php?
Там $form - это явно объект формы, а не сама модель. Не то.
> Другой вопрос, а кому этот метод что-то возвращает?
Я думаю, какому-то коду в классе-предке. Посмотри исходный код базового класса модели.
>>1066654
Наверно, надо смотреть код.
>Первая задача на массивы: https://ideone.com/wXoRmp
Верно.
>$rates = [3,5,3,2,1,8,4,3,4,3,2,3];
С пробелом после запятых выглядит читабельное.
$rates = [3, 5, 3, 2, 1, 8, 4, 3, 4, 3, 2, 3];
>Вторая задача на массивы: https://ideone.com/zBOSPk
Верно.
На практике в таких задачах пришлось бы вернуть массив одноклассников а не их количество.
Для этого понадобиться функция array_filter() и передача callback-функции
https://secure.php.net/manual/ru/function.array-filter.php
https://secure.php.net/manual/ru/language.types.callable.php
Решение:
https://ideone.com/ypZU1c
https://3v4l.org/3t6Wi
>Третья задача на массивы: https://ideone.com/XvM5eM
Верно.
>>1066502
>Четвертая задача на массивы: https://ideone.com/dNl1au
Верно. Но в >$name = $name .= $randomText; можно не делать лишнее присваивание в начале. Оператор .= и так означает - $a = $a . $b;
>Первая задача на массивы: https://ideone.com/wXoRmp
Верно.
>$rates = [3,5,3,2,1,8,4,3,4,3,2,3];
С пробелом после запятых выглядит читабельное.
$rates = [3, 5, 3, 2, 1, 8, 4, 3, 4, 3, 2, 3];
>Вторая задача на массивы: https://ideone.com/zBOSPk
Верно.
На практике в таких задачах пришлось бы вернуть массив одноклассников а не их количество.
Для этого понадобиться функция array_filter() и передача callback-функции
https://secure.php.net/manual/ru/function.array-filter.php
https://secure.php.net/manual/ru/language.types.callable.php
Решение:
https://ideone.com/ypZU1c
https://3v4l.org/3t6Wi
>Третья задача на массивы: https://ideone.com/XvM5eM
Верно.
>>1066502
>Четвертая задача на массивы: https://ideone.com/dNl1au
Верно. Но в >$name = $name .= $randomText; можно не делать лишнее присваивание в начале. Оператор .= и так означает - $a = $a . $b;
Случайно не то решение скинул. В callback-функции должна быть конструкция use($anonHeight) и использование этого параметра в условии:
function($classmate) use ($anonHeight) {
if ($classmate > $anonHeight) {
return true;
} else {
return false;
}
}
Ок, правильно.
>>1066069
> Первая задача на массивы: https://ideone.com/wXoRmp
Верно
> Вторая задача на массивы: https://ideone.com/zBOSPk
Правильно
> Третья задача на массивы: https://ideone.com/XvM5eM
Верно
>>1066502
> Четвертая задача на массивы: https://ideone.com/dNl1au
> $name = $name .= $randomText;
$name = тут лишнее. А так, верно.
Юи.
Я знаю что это поиск иголки в стоге сена, но любая инфа приветствуется.
Проблема не в хостинге - значит у меня.
Из остальных вариантов я слышал только о 2: дудос или медленного говно мамонта в медленном говнокоде который писал не я.
Условия: есть доступ к контрольной панели хостинга и много живительных пиздюлей.
Вопрос: как узнать каким говном этот сайт захлебнулся?
Йи(и)
Сэмулируй у себя на локалке, посмотри, что будет. Почкму ты думаешь проблема не в хостинге?
http://archive-ipq-co.narod.ru/l1/functions.html
Тут норм. А у меня иногда при клике по элементу переключателя менюшка просто сбрасывается.
Почему так может быть?
return используется для 2 целей:
1) она завершает выполнение функции и выходит из нее. Например:
if ($x < 0) {
return; // выходит из функции, функция дальше не выполняется
}
2) она позволяет вернуть из функции значение. Значение будет возвращено в месте вызова функции, и нужно его сохранить в переменную, чтобы не потерять:
В функции мы соответственно используем return, чтобы указать, какое значение мы хотим вернуть:
function someFunction ()
{
return 10;
}
$x = someFunction() ; // вызвать функцию и записать значение, которое она вернет, в $x
echo $x; // выведет 10
Можно конечно и без переменной, сразу вывести значение, которое вернет функция:
echo someFunction(); // выведет 10
Не забывай, что переменные внутри функции изолированы от переменных снаружи (функция не видит внешние переменные и не может их менять). То есть аргументы функции в скобках используются, чтобы передать значения снаружи внутрь функции, а return используется, чтобы вернуть одно значение из функции назад в место вызова.
return используется для 2 целей:
1) она завершает выполнение функции и выходит из нее. Например:
if ($x < 0) {
return; // выходит из функции, функция дальше не выполняется
}
2) она позволяет вернуть из функции значение. Значение будет возвращено в месте вызова функции, и нужно его сохранить в переменную, чтобы не потерять:
В функции мы соответственно используем return, чтобы указать, какое значение мы хотим вернуть:
function someFunction ()
{
return 10;
}
$x = someFunction() ; // вызвать функцию и записать значение, которое она вернет, в $x
echo $x; // выведет 10
Можно конечно и без переменной, сразу вывести значение, которое вернет функция:
echo someFunction(); // выведет 10
Не забывай, что переменные внутри функции изолированы от переменных снаружи (функция не видит внешние переменные и не может их менять). То есть аргументы функции в скобках используются, чтобы передать значения снаружи внутрь функции, а return используется, чтобы вернуть одно значение из функции назад в место вызова.
https://ideone.com/0dAmrv
максимально доступно объяснил как мне кажется, проилюстрировал всю соль функций прям тебе.
Спасибо!
У тебя показ меню сделан по условию :focus на кнопке. Это неправильно, так как если в меню есть ссылка и на нее нажмут, или если можно выделить текст, то кнопка потеряет фокус (фокус может быть только у одного элемента; фокус определяет, кто получает события с клавиатуры). Нужно сделать чекбокс, и привязать открытие меню к активности (наличию галочки) в чекбоксе.
Ну и я не уверен даже, что во всех браузерах (особенно в мобильных) клик по кнопке фокусирует ее. Чекбокс надежнее.
Также, не используй звездочку, иначе твой виджет сломает остальные элементы на сайте.
А как тогда сделать что ты выбрал опцию, ушел с меню и оно закрылось. С чекбоксом так не прокатит.
Я к этому пришел в попытке избавиться от лишнего жаваскрипта, ну окей че :3
Спасибо тоже!. Смешно и понятно.
Этот уже тонет, перебирайтесь. Если я кому-то не ответил, напомните о себе в новом треде. Анонов со студентами постараюсь в ближайшее время проверить.
еще в методах класса можно вернуть обьект, чтобы совершать с ним различные манипуляции типа
$govno->save()->execute() и так далее
Охуел когда впервые такое увидел, причем это было что-то в контексте блядь:
$this->db->get('*')->from('users')->where('keke>1')->order_by('yourmom');
Исходные данные: Yii2 advanced.
Суть вопроса: можно ли сделать чтобы обычная аутентификация и к примеру любая другая аутентификация вроде HttpBasicAuth работали независимо друг от друга?
В конфиге апача прописываю LoadModule php7_module "c:/php/php7apache2_2.dll"
AddType application/x-httpd-php .php .htm .html
Апач запускается, не ругеается. Но когда пробую открывать страницы, он не обрабатывает php, а выдает просто его как обычный текст в браузер
В логах ошибок веб-сервера что-нибудь есть? Алсо, для html не надо указывать PHP в качестве обработчика.
>>1061501
Можно сделать базовый класс с общими методами и наследоваться от него, но главное, чтобы код не получился излишне переусложненным.
>>1060331
Нужно использовать привязку к краям строки (^ и $), без нее регулярка проверяет на соответствие только часть строки, а не всю ее целиком.
Новый тред уже в другом месте, а на твой вопрос могу дать ссылку на мануал где описана разница: http://php.net/manual/ru/language.types.string.php
Это копия, сохраненная 6 октября 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.