GithubHelp home page GithubHelp logo

igorsimdyanov / php7 Goto Github PK

View Code? Open in Web Editor NEW
295.0 295.0 136.0 1.41 MB

Примеры к книге "PHP 7. Котеров Д., Симдянов И."

PHP 66.18% HTML 14.96% CSS 3.42% C 2.46% DIGITAL Command Language 0.17% JavaScript 12.51% Io 0.06% Hack 0.25%

php7's People

Contributors

akhromets avatar igorsimdyanov avatar spartanstep avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

php7's Issues

Проблема с phinx (глава 41 компоненты)

Работаю с 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] [--]

calendar.php ошибка

в 43 строке вместо
$cal = makeCal($now['year'], $now['mon'] - 1);
необходимо
$cal = makeCal($now['year'], $now['mon']);
Повезло, что проверял в январе (календарь оказался пустой), в остальные месяцы выводится календарь за предыдущий месяц

Отличная книга

Игорь, спасибо Вам и Дмитрию за отличную книгу по PHP 7.
С нетерпением ждал когда ее доставят и вот сегодня получил! Книга супер, в ней есть все что нужно.
Спасибо Вам за Ваш труд!

P.S. Жду выхода новой редакции книги по MySQL (включающей MySQL 5.7).

Программа dumper.php

Скажите пожалуйста, аргумент &$obj передаётся в функцию по ссылке из-за соображений быстродействия?

Объясните пожалуйста откуда берется script.cgi

Здравствуйте. Сразу прошу прощения за глупый вопрос. Только начинаю познавать мир программирования на PHP. Купил Вашу книгу и начал изучать. На странице 60 вы упоминаете файл сценария script.cgi Но что в файле я так и не смог понять. Далее вы не однократно используете его, но где взять этот файл не описано. Скорее всего опытные программисты сразу поняли что к чему, но мне не понятно. Был бы очень благодарен, если разъясните. Спасибо большое

Присваивание массива

"Такого понятия, как указатель (как в С), в языке не существует - при присваивании переменная в большинстве случаев копируется один в один, какую бы сложную структуру она ни имела. Единственное исключение из этого правила — копирование переменной, ссылающейся на объект или массив: в этом случае объект остается в единственном экземпляре, копируется лишь ссылка на него..." (Стр 128.)

Действительно же происходит копирование массива при присваивании.

"...при присваивании массива всегда происходит копирование значения. Чтобы скопировать массив по ссылке, вам нужно использовать оператор ссылки..."(http://php.net/manual/ru/language.types.array.php)

Отзыв PHP7 наиболее полное руководство

Прошлая книга Катерова по содержанию напоминала следующий учебник английского языка " Подлежащее в английском языке ..... а вот в немецком ..... а в китайском .... . " Он знает много языков программирования - молодец я рад за него. Я купил книгу по PHP и хочу чтобы мне рассказывали об этом языке и мне глубоко плевать что там в языке C, ПАСКАЛЬ и УБУНТУ. При этом что такое константа с динамическим именем не понятно и не только мне (посмотрите в интернете) В самом начале книги даются примеры с классами, откуда я должен знать о классах, о которых будет рассказано через 300 страниц. В общем это справочник для специалистов, сдвинутых на языке C. Что либо понять не зная языка PHP не возможно. Прошлое наиболее полное руководство было намного лучше, судя по всему потому что там не было Катерова.

Стр.145

В листинге 6.5. есть код по выводу переменной-объекта ($obj), но в примере работы кода его нет. Хотя в дальнейшем пояснении (на след. странице) он упоминается

Вопросы по изучению

Здравствуйте, изучаю php с помощью вашей книги. На 144 стр. Константы с динамическим именем. Мне не понятен Листинг и теория.
Теория: "нельзя заранее предугадать ее имя.." , но в листинге имя сразу определяется как $name. А вот значение константы должно по идее менятся, так как используется функция mt_rand. Но определяя константу с димамическим именем как в листинге, она всегда выдает значение 1. Получается константа равна 1? Тогда в чем смысл данного примера? Честно запутался в этой маленькой теме, если разьясните буду благодарен.

Хэш-функции

Здравствуйте. Как быть, не знаю :) На странице 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 и соль?

PDF версия будет?

Привет, Игорь! А есть в наличии pdf версия? Тоже поинтересовало это книжечка. Для кругозора же хоть как-то немного нужно прочесть, что там изменился в php.

Перечисления

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

Ошибка в листинге 34.2

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

Планируется к выпуску книга по PHP 8?

Здравствуйте!
Купил вашу книгу в электронном и бумажном вариантах. Очень нравится.
Продолжите традицию, выпустите книгу по PHP 8?

Будет здорово, если найдете в себе силы и выпустите книгу по PHP 8!

Вашей книге из всех мне известных по PHP 7 нет равных!

Неверная информация в книге. Функция glob описание GLOB_BRACE

Страница 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

Листинг 3.8 работает не правильно. Сразу при открытии cgi скрипта я вижу:

"Привет, EST_URI=/cgi-bin/cookies.cgi!"

и тут же в браузер пишется кука с таким же значением. Хотя в скрипте она писаться должна только если if(query != NULL). Видимо не Null, раз пишется.

Проверял в двух браузерах на выделенном сервере. Думал может сам ошибся: забрал ваш листинг с гитхаба - то же самое. С помощью переменных проверил условие if(query != NULL) - оно срабатывает просто при открытии скрипта без параметров, как будто какие-то параметры в QUERY_STRING есть.

Если форму заполнить и отправить, то все работает нормально.

Это ваша ошибка или у меня что-то не так?

Переменная $v после цикла foreach($a as $k=>&$v)

Страница 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

email.php

$0', $text ); echo $html; ?>

Это совсем не работает!

Что делает foreach в начале своей работы (один раз)?

Страница 187
Цикл foreach в форме, рассмотренной выше, оперирует не исходным массивом, а его
копией.
Страница 204
Ссылочный синтаксис foreach
В предыдущей главе мы говорили, что цикл foreach перед началом своей работы вы-
полняет копирование массива

Если получает имя массива, копирует ли ВЕСЬ массив или перед каждой итерацией копирует только текущие значения $k $v?
Как это можно проверить? Подать на вход большой массив, так чтобы можно увидеть в диспетчере задач (windows) или через функцию php. Посмотреть, будет ли копировать весь массив.
https://www.php.net/manual/ru/control-structures.foreach.php

Что это значит? (цитата из книги)

ПРИМЕЧАНИЕ
Необходимо обратить внимание на то, что метод перехвата ошибок при помощи пользовательских функций далек от совершенства. Действительно, сделать с сообщением что-либо разумное, кроме как записать его куда-нибудь и завершить программу (при необходимости), вряд ли представляется возможным. Метод исключений полностью лишен этого недостатка.
(страница 510)

Что это значит? Рядом не было сравнения использования ошибок и исключений.

Не работают CGI программы

Когда пытаюсь запустить программу .CGI она не выполняется, а просто скачивается. Пробывал запускать через протокол file:// и через Nginx

Непонимание листинга 3.3

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

Автор - долбоёб

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

ошибка на стр. 145

Результат работы листинга 6.5. напечатан не полностью. Полностью выглядит так:
array (
0 => 1,
1 =>
array (
0 => 'Programs hacking programs. Why?',
1 => 'д'Артаньян',
),
)
SomeClass::__set_state(array(
'x' => 100,
))

deprecated (unset) в php 7.2

заметил такой момент:
Таблица 6.1. Преобразование типов в C-стиле
на странице 135 в (unset) $var; стало deprecated в php 7.2 (книга 2016 года) в книге не говорится о том что не рекомендуется использовать данную конструкцию.

Trying to get in touch regarding a security issue

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)

Первый отзыв

Ну что же, только что приобрел эту замечательно книгу. Перешел по этой ссылке из книги и по мере её прохождения/завершения буду оставлять комментарии, что понравилось, а что не очень, что хотелось бы изменить. Пока так. В общем, удачи мне! :)

Формулировка текста в предисловии

Предисловие -> Общая структура книги -> Часть 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". разве не так?

Завершение книги.

Здравствуйте.

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

Спасибо за книгу!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.