igorsimdyanov / php7 Goto Github PK
View Code? Open in Web Editor NEWПримеры к книге "PHP 7. Котеров Д., Симдянов И."
Примеры к книге "PHP 7. Котеров Д., Симдянов И."
Работаю с OpenServer , OS = Windows 10, при команде в консоли phinx create CreateUserTable выдает следующее
Phinx by Rob Morgan - https://phinx.org. 0.8.1
using config file .\phinx.yml
using config parser yaml
using migration paths
using seed paths
[Exception]
You probably used curly braces to define migration path in your Phinx configuration
file, but no directories have been matched using this pattern. You need to create
a migration directory manually.
create [-c|--configuration CONFIGURATION] [-p|--parser PARSER] [-t|--template TEMPLATE] [-l|--class CLASS] [--path PATH] [--]
в 43 строке вместо
$cal = makeCal($now['year'], $now['mon'] - 1);
необходимо
$cal = makeCal($now['year'], $now['mon']);
Повезло, что проверял в январе (календарь оказался пустой), в остальные месяцы выводится календарь за предыдущий месяц
Игорь, спасибо Вам и Дмитрию за отличную книгу по PHP 7.
С нетерпением ждал когда ее доставят и вот сегодня получил! Книга супер, в ней есть все что нужно.
Спасибо Вам за Ваш труд!
P.S. Жду выхода новой редакции книги по MySQL (включающей MySQL 5.7).
Скажите пожалуйста, аргумент &$obj передаётся в функцию по ссылке из-за соображений быстродействия?
Здравствуйте. Сразу прошу прощения за глупый вопрос. Только начинаю познавать мир программирования на PHP. Купил Вашу книгу и начал изучать. На странице 60 вы упоминаете файл сценария script.cgi Но что в файле я так и не смог понять. Далее вы не однократно используете его, но где взять этот файл не описано. Скорее всего опытные программисты сразу поняли что к чему, но мне не понятно. Был бы очень благодарен, если разъясните. Спасибо большое
"Такого понятия, как указатель (как в С), в языке не существует - при присваивании переменная в большинстве случаев копируется один в один, какую бы сложную структуру она ни имела. Единственное исключение из этого правила — копирование переменной, ссылающейся на объект или массив: в этом случае объект остается в единственном экземпляре, копируется лишь ссылка на него..." (Стр 128.)
Действительно же происходит копирование массива при присваивании.
"...при присваивании массива всегда происходит копирование значения. Чтобы скопировать массив по ссылке, вам нужно использовать оператор ссылки..."(http://php.net/manual/ru/language.types.array.php)
В книге "PHP7 в подлиннике" указан путь, откуда можно скачать листинги (https://github.com/igorsimdyanov/php7/issues). Однако у меня не получилось их найти.
Подскажите, пожалуйста, как найти листинги к данной книге?
Прошлая книга Катерова по содержанию напоминала следующий учебник английского языка " Подлежащее в английском языке ..... а вот в немецком ..... а в китайском .... . " Он знает много языков программирования - молодец я рад за него. Я купил книгу по PHP и хочу чтобы мне рассказывали об этом языке и мне глубоко плевать что там в языке C, ПАСКАЛЬ и УБУНТУ. При этом что такое константа с динамическим именем не понятно и не только мне (посмотрите в интернете) В самом начале книги даются примеры с классами, откуда я должен знать о классах, о которых будет рассказано через 300 страниц. В общем это справочник для специалистов, сдвинутых на языке C. Что либо понять не зная языка PHP не возможно. Прошлое наиболее полное руководство было намного лучше, судя по всему потому что там не было Катерова.
В листинге 6.5. есть код по выводу переменной-объекта ($obj), но в примере работы кода его нет. Хотя в дальнейшем пояснении (на след. странице) он упоминается
Здравствуйте, изучаю php с помощью вашей книги. На 144 стр. Константы с динамическим именем. Мне не понятен Листинг и теория.
Теория: "нельзя заранее предугадать ее имя.." , но в листинге имя сразу определяется как $name. А вот значение константы должно по идее менятся, так как используется функция mt_rand. Но определяя константу с димамическим именем как в листинге, она всегда выдает значение 1. Получается константа равна 1? Тогда в чем смысл данного примера? Честно запутался в этой маленькой теме, если разьясните буду благодарен.
Абзац 2 строка 4 слово "пактов" заменить на "пакетов".
На странице 1018 вместо "http://guthub.com", написано "http://gitbub.com"
Здравствуйте. Как быть, не знаю :) На странице 277 вы призываете "везде применять md5() вместо crypt()", в тоже время на php.net есть такое:
"
Почему популярные хэширующие функции, такие как md5() и sha1() не подходят для паролей?
Такие хэширующие алгоритмы как MD5, SHA1 и SHA256 были спроектированы очень быстрыми и эффективными. При наличии современных технологий и оборудования, стало довольно просто выяснить результат этих алгоритмов методом "грубой силы" для определения оригинальных вводимых данных.
Из-за той скорости, с которой современные компьютеры могут "обратить" эти хэширующие алгоритмы, многие профессионалы компьютерной безопасности строго не рекомендуют использовать их для хэширования паролей.
"
http://php.net/manual/ru/faq.passwords.php#faq.passwords.fasthash
, ну и рекомендуют там применять специальные функции (password_hash() и т.п. ), описание которых ещё мне не встречались в вашей книге.
Стоит использовать password_hash() и т.п. или остаться на md5 и соль?
Уточнил в издательстве - ориентировочная дата выхода нового издания PHP 8 - октябрь/ноябрь 2022 года.
Намного удобнее читать и ориентироваться в книге, если на каждой странице внизу или вверху подписана текущая глава.
Привет, Игорь! А есть в наличии pdf версия? Тоже поинтересовало это книжечка. Для кругозора же хоть как-то немного нужно прочесть, что там изменился в php.
В книге не нашёл реализацию перечислений.
Знаю что PHP нет перечислений, но реализовать можно с помощью классов. Считаю что это необходимо включить в книгу, потому что использование перечислений упрощает чтение и поддержку кода. Это отличный инструмент.
Стр. 143
Функция define() теперь имеет другой вид, а именно 3 аргумент $case_insensitive. Ранее было $case_sensitive;
http://php.net/manual/ru/function.define.php
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] ).
То есть сейчас если стоит true, то константа CONSTANT будет равна constant
Здравствуйте!
Купил вашу книгу в электронном и бумажном вариантах. Очень нравится.
Продолжите традицию, выпустите книгу по PHP 8?
Будет здорово, если найдете в себе силы и выпустите книгу по PHP 8!
Вашей книге из всех мне известных по PHP 7 нет равных!
Страница 340
описание параметра GLOB_BRACE в функции glob, написано в конце
К сожалению, задавать выражения с вложенными фигурными скобками нельзя;
На самом деле можно: в доке даже есть пример
https://www.php.net/manual/ru/function.glob.php
It is also possible to nest alternations like this:
<?php
foreach (glob("{$dir}/*.{[jJ][pP]{,[eE]}[gG],[tT][iI][fF]{,[fF]}}", GLOB_BRACE) as $file) {
// finds both .jp(e)g and .tif(f) files
// please note that you should double-check the file type, though
}
Листинг 3.8 работает не правильно. Сразу при открытии cgi скрипта я вижу:
"Привет, EST_URI=/cgi-bin/cookies.cgi!"
и тут же в браузер пишется кука с таким же значением. Хотя в скрипте она писаться должна только если if(query != NULL). Видимо не Null, раз пишется.
Проверял в двух браузерах на выделенном сервере. Думал может сам ошибся: забрал ваш листинг с гитхаба - то же самое. С помощью переменных проверил условие if(query != NULL) - оно срабатывает просто при открытии скрипта без параметров, как будто какие-то параметры в QUERY_STRING есть.
Если форму заполнить и отправить, то все работает нормально.
Это ваша ошибка или у меня что-то не так?
Страница 205
ВНИМАНИЕ!
Ссылочная переменная $v — это полноценная жесткая ссылка, которая не уничтожается после завершения работы цикла foreach! Таким образом, если вы попытаетесь что-то присвоить переменной $v в конце программы, изменения затронут последний элемент массива $numbers — ведь именно он соответствовал $v на последней итерации цикла! Как раз по этой причине мы используем переменную $elt, а не все ту же $v, в последнем цикле вывода листинга: иначе бы последний элемент массива $numbers, которому соответствует жесткая ссылка $v, "затирался" при последующей итерации по массиву.
Это не так.
$a['a']=10;
$a['b']=20;
foreach($a as $k=>&$v) $v=5;
$v=100;
foreach($a as $k=>$v) echo $k.' '.$v.'
';
// a 5 b 5
Это совсем не работает!
Страница 187
Цикл foreach в форме, рассмотренной выше, оперирует не исходным массивом, а его
копией.
Страница 204
Ссылочный синтаксис foreach
В предыдущей главе мы говорили, что цикл foreach перед началом своей работы вы-
полняет копирование массива
Если получает имя массива, копирует ли ВЕСЬ массив или перед каждой итерацией копирует только текущие значения $k $v?
Как это можно проверить? Подать на вход большой массив, так чтобы можно увидеть в диспетчере задач (windows) или через функцию php. Посмотреть, будет ли копировать весь массив.
https://www.php.net/manual/ru/control-structures.foreach.php
Здравствуйте.
Не могу найти книгу в электронном виде. Такой вариант есть в продаже?
ПРИМЕЧАНИЕ
Необходимо обратить внимание на то, что метод перехвата ошибок при помощи пользовательских функций далек от совершенства. Действительно, сделать с сообщением что-либо разумное, кроме как записать его куда-нибудь и завершить программу (при необходимости), вряд ли представляется возможным. Метод исключений полностью лишен этого недостатка.
(страница 510)
Что это значит? Рядом не было сравнения использования ошибок и исключений.
Когда пытаюсь запустить программу .CGI она не выполняется, а просто скачивается. Пробывал запускать через протокол file:// и через Nginx
В данный момент читаю 3-ю главу "CGI изнутри". Листинг 3.5 вызывает некоторые вопросы.
Функция url_decode декодирует входящую строку и результат записывает в ту же область памяти. Но декодированная строка будет короче (об этом говорится далее в главе). Т.е. , насколько я понимаю, условно, "первая половина" массива будет занята полностью декодированной строкой, а "вторая половина" так и останется в конце массива в изначальном виде.
Возможно, я не до конца понятно объяснил. Поэтому приведу пример: допустим в QUERY_STRING сейчас хранится закодированная пара животное=гусь, "%D0%B6%D0%B8%D0%B2%D0%BE%D1%82%D0%BD%D0%BE%D0%B5=%D0%B3%D1%83%D1%81%D1%8C", что после декодирования с помощью нашей функции превратится в животное=гусьD0%B2%D0%BE%D1%82%D0%BD%D0%BE%D0%B5=%D0%B3%D1%83%D1%81%D1%8C и эту же строку в листинге 3.6 мы вернем юзеру с ненужным "мусором".
Возможно, я что-то упустил, был бы рад услышать, где в своих рассуждениях я допустил ошибку.
Автор, как ты думаешь, в мире есть хоть ё человек, которому было бы удобнее искать примеры кода по не точно переведённым названиям, вместо того, чтобы просто искать их по номерам глав и задач?
Результат работы листинга 6.5. напечатан не полностью. Полностью выглядит так:
array (
0 => 1,
1 =>
array (
0 => 'Programs hacking programs. Why?',
1 => 'д'Артаньян',
),
)
SomeClass::__set_state(array(
'x' => 100,
))
заметил такой момент:
Таблица 6.1. Преобразование типов в C-стиле
на странице 135 в (unset) $var; стало deprecated в php 7.2 (книга 2016 года) в книге не говорится о том что не рекомендуется использовать данную конструкцию.
Hey there!
I'd like to report a security issue but cannot find contact instructions on your repository.
If not a hassle, might you kindly add a SECURITY.md
file with an email, or another contact method? GitHub recommends this best practice to ensure security issues are responsibly disclosed, and it would serve as a simple instruction for security researchers in the future.
Thank you for your consideration, and I look forward to hearing from you!
(cc @huntr-helper)
Здавствуйте, уважаемые авторы!
Ваша книга очень хороша. Не могли бы вы подсказать, как запустить CGI-скрипт после компиляции GCC в Linux на примере Ubuntu?
Спасибо.
Ну что же, только что приобрел эту замечательно книгу. Перешел по этой ссылке из книги и по мере её прохождения/завершения буду оставлять комментарии, что понравилось, а что не очень, что хотелось бы изменить. Пока так. В общем, удачи мне! :)
Предисловие -> Общая структура книги -> Часть I
4й абзац Первое предложение. Написано "Последняя глава книги посвящена установки PHP..." Скорее всего имелось в виду - Последняя глава части I посвящена установки PHP...".
Опечатки/неточности из книги буду помещать сюда.
Намного удобнее читать и ориентироваться в книге, если на каждой странице внизу или вверху подписана текущая глава.
Этот раздел остался из Php 5, где еще остались упоминания php 4. Так же в разделе Благодарности Дмитрия Котерова говорится про издание книги php 5. Конечно, к самому языку это не имеет никакого отношения, всего лишь хотел помочь и сделать книгу лучше. Буду читать книга конечно легендарная, psr, vagrant очень актуально. Спасибо большое за труд.
Страница 209
В системе определения функций в PHP есть одна особенность, которая весьма неприятна тем, кто до этого программировал на других языках. Дело в том, что все переменные, которые объявляются и используются в функции, по умолчанию локальны для этой функции. Исправить ситуацию можно либо при помощи инструкции global (на самом деле есть и еще один, через массив $GLOBALS, но об этом чуть позже) или замыканий.
В каких языках программирования по-другому? И как? Интересно.
Добрый день.
Глава 23.
На странице 476 дан класс StaticPage.
По логике подразумевается, что на основе входного параметра $id будет генерироваться уникальный ключ в методе id() (обратите внимание, там ошибка с именем переменной!).
Этот уникальный ключ используется для проверки наличия данных в кэше.
Однако в родительском классе Cached на основе этого метода создается уникальный ключ для хранилища используя вызов id('title'), что ведет к созданию ключа 'static_page_title'. Ни о каком входном параметре $id и речи не идет. Далее на стр.478 приводится пример использования всей этой конструкции, и опять с акцентом на уникальный ключ на основе входного параметра $id = 3. Да, метод $page->id($id), конечно вернет "static_page_3", но для memcached будет сгенерирован ключ "static_page_title"!!!
В итоге получается, что для объектов класса StaticPage с различными параметрами $id будет генерироваться одинаковый ключ!
Как же тогда полиморфизм, в чем он в данном случае? В том, что префикс разный в ключе? Хорошо, но тогда об этом и нужно говорить. И тогда следует упростить пример, и убрать всю эту кашу с memcached, т.к. оно работает неправильно.
А если, полиморфизм в том, что уникальный ключ генерируется в производном методе и на основе $id, то нужно исправить скрипты, чтобы в memcached сохранялись данные под ключем "static_page_title_$id" и "static_page_content_$id". разве не так?
Здравствуйте.
Не хватает после последней главы, какого-нибудь заключения.
Может какой нибудь список литературы или пару напутствующих слов.
Спасибо за книгу!
Выдает ошибку:
Warning: Cannot modify header information - headers already sent by (output started at ...
Предупреждение выдает на ф-ции setcookie()
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.