Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Опечатки и неточности в книге PHP5 — пишите сюда. (Дмитрий Котеров)
Goto page Previous  1, 2, 3, 4, 5, 6
Author Message
vlad289
Заглянувший



Joined: 05 Jun 2010
Posts: 6
Карма: 0
   поощрить/наказать


PostPosted: Thu Jun 24, 2010 2:22 am (написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

225
mr.

По правилам английского языка нельзя писать "mr" с маленькой буквы, тем более перед именем
Back to top
View user's profile Send private message
vlad289
Заглянувший



Joined: 05 Jun 2010
Posts: 6
Карма: 0
   поощрить/наказать


PostPosted: Tue Jun 29, 2010 1:13 am (спустя 4 дня 22 часа 51 минуту; написано за 48 секунд)
   Post subject:
Reply with quote

248
Точно то же самое происходит и в первом случае.

Не указан первый случай.
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Tue Jun 29, 2010 1:41 am (спустя 28 минут; написано за 35 секунд)
   Post subject:
Reply with quote

В книге встречается тег <br>, замените пожалуйста на <br />
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sat Jul 03, 2010 4:56 am (спустя 4 дня 3 часа 14 минут; написано за 52 секунды)
   Post subject:
Reply with quote

280
<br>\n
<br> и символ перевода строки
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun Jul 04, 2010 6:46 am (спустя 1 день 1 час 50 минут; написано за 43 секунды)
   Post subject:
Reply with quote

284
the test
a test
Определенный артикль ставится если тест был упомянут выше
Back to top
Cipis
Заглянувший



Joined: 04 Jul 2010
Posts: 4
Карма: -2
   поощрить/наказать


PostPosted: Mon Jul 05, 2010 12:25 pm (спустя 1 день 5 часов 39 минут; написано за 2 минуты 15 секунд)
   Post subject:
Reply with quote

(2010) стр 154
и транслятором, и компилятором
и транслятором, и интерпретатором

(так как речь идет о php и perl и выше их называли интерпретирующими трансляторами)
Back to top
View user's profile Send private message
Cipis
Заглянувший



Joined: 04 Jul 2010
Posts: 4
Карма: -2
   поощрить/наказать


PostPosted: Sat Jul 17, 2010 8:38 am (спустя 11 дней 20 часов 12 минут; написано за 3 минуты 11 секунд)
   Post subject:
Reply with quote

(2010) стр 371 (Листинг 22.5 calendar.php)

$cal=makeCal($now['year'], $now['mon']-1);

$cal=makeCal($now['year'], $now['mon']);

Или изменить описание скрипта (формирует календарь не на текущий месяц, а на предыдущий).
Back to top
View user's profile Send private message
Cipis
Заглянувший



Joined: 04 Jul 2010
Posts: 4
Карма: -2
   поощрить/наказать


PostPosted: Sun Jul 25, 2010 11:08 am (спустя 8 дней 2 часа 30 минут; написано за 6 минут 9 секунд)
   Post subject:
Reply with quote

(2010) стр 529

"height=sx width=sy"
"height=sy width=sx"

(2010) стр 532 - 537

идентификатор $im в различных функциях имеет тип или int или resource.
(По моему лучше свести к одному типу или оговорить что разницы нет)

(2010) стр 536

int imageColorTransparent(int $im [,$int col])
int imageColorTransparent(int $im [,int $col])
Back to top
View user's profile Send private message
k0stix
Заглянувший



Joined: 28 Nov 2010
Posts: 1
Карма: 2
   поощрить/наказать


PostPosted: Sun Nov 28, 2010 8:37 pm (спустя 4 месяца 3 дня 9 часов 29 минут; написано за 7 минут 58 секунд)
   Post subject:
Reply with quote

(2008) стр. 629, Интерфейсы
стр. 629 wrote:
Это объясняет, почему в мире ООП интерфейс часто называют контрактом ... Фактически некоторый интерфейс указывает лишь список методов, их аргументы и модификаторы доступа (обычно только protected и public)
Комментарий: интерфейс называют public contract, поэтому модификаторы доступа могут быть либо public, либо никаких (что все равно по дефолту равносильно public).

ПС: Книга отличная, надеюсь, текущая ветка поможет сделать следующее издание еще лучше. Хотя ошибки / опечатки - тоже хорошо, не позволяют вдумчивому читателю расслабиться
Back to top
View user's profile Send private message
GIgor
Заглянувший



Joined: 08 Feb 2011
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Tue Feb 08, 2011 7:19 pm (спустя 2 месяца 9 дней 22 часа 42 минуты; написано за 1 минуту 4 секунды)
   Post subject:
Reply with quote

2-е издание 232:
Указанный пример обхода нулевого ключа зацикливает массив.
Вместо строки ($k=key($birth))!==false нужна ($k=key($birth))!==NULL
Back to top
View user's profile Send private message
pul's
Заглянувший



Joined: 24 Apr 2011
Posts: 2
Карма: -2
   поощрить/наказать


PostPosted: Sun Apr 24, 2011 6:53 am (спустя 2 месяца 15 дней 11 часов 33 минуты; написано за 6 минут 8 секунд)
   Post subject:
Reply with quote

стр. 73. Замечание: Если не задать параметр action в теге <form> вообще, то по умолчанию подразумевается метод GET.
    //вместо action должно быть method
Уже прочитал 70 страниц, вот думаю, стоит ли вообще читать с такими ошибками.
Кoтеров, ответь по данной ошибке или кто нибудь
ОКАЗЫВЕТСЯ ВО ВТОРОМ ИЗДАНИЙ ЭТА ОШИБКА ИСПРАВЛЕНА
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9989
   поощрить/наказать


PostPosted: Mon Apr 25, 2011 12:05 pm (спустя 1 день 5 часов 12 минут; написано за 18 секунд)
   Post subject:
Reply with quote


!

pul's, forum.dklab.ru/about/todo/PravilaEtogoForuma-ProchitayteObyazatelno.html — на форуме принято обращение «на Вы».
Back to top
View user's profile Send private message
Hetman
Заглянувший



Joined: 17 May 2011
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Tue May 17, 2011 12:53 am (спустя 21 день 12 часов 47 минут; написано за 4 минуты 12 секунд)
   Post subject:
Reply with quote

хотел бы выяснить вопрос.
Если делать все по книге точь в точь, то первый же пример не работает (
При написании программ на С и запуске их из папки /cgi/ выдает ошибку 500...
Предварительно настроил апач по рекомендациям из следующей главы. )
Решил, что неправильно настроил - скачал Денвер - тоже самое...

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

Как может новичек читать книгу, если первый же пример не работает?
Back to top
View user's profile Send private message
vespucci
Заглянувший



Joined: 17 Jun 2011
Posts: 2
Карма: -3
   поощрить/наказать


PostPosted: Fri Jun 17, 2011 2:49 pm (спустя 1 месяц 13 часов 55 минут; написано за 12 минут 28 секунд)
   Post subject:
Reply with quote

KaMPiLeR
KaMPiLeR wrote:
да, строка 11 - это строка в файле. и даю подсказку - там должны быть двойные кавычки.
Я как-то был пару книг изучал. Но теперь их искать надо и вспоминать, жалею что не довёл изучение книги до конца.
А серёзная ли это книга.Есть ли главы взаимодействия с НТML and Flash(я хоть и понял банальное взаимодействие между Flash, XML
Да, а где эту книгу скачать?
У меня книга старая есть.Я её в своё время от корки до корки разобрал. Только всёравно не мог создавать то чего хочу. Там были азы всевозможных взаимодействий. По большей части НTМL и DHTML, ASP, javascript. Я на тот момент, чуть позже со временем решил изучать PHP. А также азы Flash ActionScript. Прошло приличное количество времени. Всё же хочу закончить начатое. Не буду выливать тараканы почему да и ка получилось.
Так, где взять книгу и документацию?
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9989
   поощрить/наказать


PostPosted: Fri Jun 17, 2011 3:33 pm (спустя 43 минуты; написано за 48 секунд)
   Post subject:
Reply with quote

vespucci wrote:
Так, где взять книгу и документацию?
— книгу — купить в магазине. О какой «документации» речь — совершенно не понятно.
Back to top
View user's profile Send private message
sevlord
Заглянувший



Joined: 14 Jul 2011
Posts: 1
Карма: 0
   поощрить/наказать

Location: Украина

PostPosted: Thu Jul 14, 2011 1:35 am (спустя 26 дней 10 часов 2 минуты; написано за 3 минуты 24 секунды)
   Post subject:
Reply with quote

Книга "PHP 5 2-е издание"

- 344 страница (глава прав доступа и атрибутов файлов), листинг 19.1;
- "echo "Последнее изменение страницы: ".date("Y-m-d H:i:s");";
- "echo "Последнее изменение страницы: ".date("Y-m-d H:i:s", $mtime);";
- Получается как оно сейчас в исходнике представлено - показывает просто текущую дату, а инициализированная строчкой выше переменная $mtime не используется.

- 648 страница (глава обработки ошибок и исключения, сразу после листинга 34.10);
- "Результатом работы этой программы (в случае ошибки) будет строчка: Ошибка записи в файл //./printer.";
- "Результатом работы этой программы (в случае ошибки) будет строчка: Файловая ошибка: //./printer.";
- то, как оно определено сейчас не соответствует тексту в листинге 34.10
Back to top
View user's profile Send private message
Alex86
Заглянувший



Joined: 18 Jul 2011
Posts: 6
Карма: 4
   поощрить/наказать


PostPosted: Mon Jul 18, 2011 12:39 pm (спустя 4 дня 11 часов 3 минуты; написано за 1 час 46 минут 2 секунды)
   Post subject:
Reply with quote

Книга "PHP 5 2-е издание (2008 г.)"

1) 171-я страница
$type - одна из строк, возвращаемых gettype(), кроме boolean
$type - одна из строк, возвращаемых gettype()
- settype() нормально конвертирует в boolean. Смотрел документацию и проверял на php 5.3.5.

2) 212-я страница
$i = 1; $p = 1;
$i = 0; $p = 1;
- тогда будет действительно до 2^31 включительно. Сейчас лишь до 2^30.

3) 289-я страница
Написано:
Quote:
Если положить необязательный параметр $preserveKeys равным true, тогда переворачиваться будут только значения, а ключи останутся в прежнем порядке. Связи между ключачи и значениями массива в данном случае, конечно, нарушатся.
Требуется: исправить

Пояснение: Для буквенных (нецифровых) ключей функция array_reverse выдаёт одинаковый результат независимо от наличия флага $preserveKeys. Например, код:
Code (php): скопировать код в буфер обмена
echo (www.php.net/echo) "<pre>";

$A = array (www.php.net/array) (
    "а" => "один",
    "б" => "два",
    "в" => "три",
    "г" => "четыре",
    "д" => "пять"
);

$B = array_reverse (www.php.net/array_reverse)($A);
$C = array_reverse (www.php.net/array_reverse)($A, true);

print_r (www.php.net/print_r)($B);
print_r (www.php.net/print_r)($C);

echo (www.php.net/echo) "</pre>";
выдаст следующий результат:
Quote:
Array
(
    [д] => пять
    [г] => четыре
    [в] => три
    [б] => два
    [а] => один
)
Array
(
    [д] => пять
    [г] => четыре
    [в] => три
    [б] => два
    [а] => один
)
И связь между ключами и значениями в этом случае не нарушается вне зависимости от параметра $preserveKeys.

Для цифровых ключей при передаче параметра $preserveKeys = true связь между ключами и значениями сохраняется (а не нарушается, как написано в книге). Например, код:
Code (php): скопировать код в буфер обмена
echo (www.php.net/echo) "<pre>";

$A[0] = 'record1';
$A[9] = 'record2';
$A[15] = 'record3';

$Barray_reverse (www.php.net/array_reverse)($A);
$Carray_reverse (www.php.net/array_reverse)($A, true);

print_r (www.php.net/print_r)($B);
print_r (www.php.net/print_r)($C);

echo (www.php.net/echo) "</pre>";
выдаст результат:
Quote:
Array
(
    [0] => record3
    [1] => record2
    [2] => record1
)
Array
(
    [15] => record3
    [9] => record2
    [0] => record1
)
4) 294-я страница
array_count_values($array);
array_count_values($list);

5) 317-я страница
string fgets(int $f, int $length)
string fgets(int $f [, int $length])
- параметр $length является необязательным начиная с версии PHP 4.2.0.

6) 329-я страница (не опечатка, просто начиная с версии PHP 5.3.2 это уже не верно)
Функция fclose() перед закрытием файла всегда снимает с него блокировку...
-исправить
-начиная с версии PHP 5.3.2 это уже не верно. Хотя, по сообщениям на ru2.php.net/manual/en/function.flock.php, в некоторых ОС (например Linux) блокировку снимает уже сама система при закрытии файла.

7) 342-я страница
bool chown($filename, string $uid)
bool chown(string $filename, string $uid)

8) 349-я страница
bool mkdir(string $name, int $perms)
bool mkdir(string $name [, int $perms])

9) 350-я страница
chdir("./somathing"); //переходим в подкаталог текущего каталога
chdir("./something"); //переходим в подкаталог текущего каталога

10) 389-я страница
if (!empty($submit)) echo "Кнопка нажата";
if (!empty($_REQUEST['submit'])) echo "Кнопка нажата";
- по умолчанию режим register_globals отключён. И поэтому код, приведённый в листинге, обычно будет работать некорректно. Тем более, что уже в следующем листинге (23.9) используется именно $_REQUEST['submit'].

11) 441-я страница
[,string $path] [,string $domain] [,book $secure])
[,string $path] [,string $domain] [,bool $secure])

12) 445-я страница
void parse_str(string $str [, array $out])
void parse_str(string $str [, array &$out])

13) (Возможно) 463-я страница
// Отправляем почту. Внимание! Опасный прием!
(ничего)
- Этот комментарий, кажется, совсем не к месту. Опасных приёмов в последующей строчке нет, да и в самом тексте книги про это ничего не сказано. Кажется, этот коментарий остался от предыдущего листинга (27.2) из-за copy->paste.

14) 503-я страница, листинг 28.6
echo mysql_make_qw('DELETE FROM people WHERE name=? OR ?', $name)."<br>";
echo mysql_make_qw('DELETE FROM people WHERE name=? OR id=?', $name)."<br>";
-Тогда скрипт выдаёт ту строку, которая указана в книге:
Code (SQL): скопировать код в буфер обмена
DELETE FROM people WHERE name='\' OR \'1' OR id=UNKNOWN_PLACEHOLDER_1
Тогда как сейчас:
Code (SQL): скопировать код в буфер обмена
DELETE FROM people WHERE name='\' OR \'1' OR UNKNOWN_PLACEHOLDER_1
15) 507-я страница
использование функции mysql_fetch_assoc() "гасит" первое поле stamp
использование функции mysql_fetch_array() "гасит" первое поле stamp
- В листинге 28.7 используется функция mysql_fetch_array(), а не mysql_fetch_assoc(). Впрочем, кажется, можно внести изменения в листинг и заменить mysql_fetch_array() на mysql_fetch_assoc().

16) 541-я страница
($x, $y, $w, $h), где $w и $h задают его ширину и высота, а $x и $y - координаты левого верхнего угла.
($cx, $cy, $w, $h), где $w и $h задают его ширину и высота, а $x и $y - координаты центра.
- В функции imageArc параметры $cx, $cy задают координаты центра элипса, дуга которого рисуется.

17) (возможно, но не уверен) 564-я страница
function readdir($dir){
static function readdir($dir){
-на стр. 562 как раз написано, что определение функции внутри класса-библиотеки нужно предварять ключевым словом static. При пропуске ошибки не случится, но это "будет идеологически неверно". Поэтому лучше "рассматривать пропуск этого ключевого слова как ошибку".

18) 180-я страница
Имеется:
Code (php): скопировать код в буфер обмена
Результат работы этого скрипта таков:

array (www.php.net/array) (
  0 => 1,
  1 =>
  array (www.php.net/array) (
    0 => 'Programs hacking programs. Why?',
    1 => \'Артеньян',
  ),
)

class SomeClass {
   private $x = 100;
}
Должно быть:
Code (php): скопировать код в буфер обмена
span class="st0">'Programs hacking programs. Why?',
    1 => '\'',
  ),
)
SomeClass::__set_state(array (www.php.net/array)(
   'x' => 100,
))
Пояснение: судя по всему, данные строки были написаны до выхода версии php 5.1 и не были исправлены во 2-м издании. По этому несоответствию даже была создана тема: forum.dklab.ru/viewtopic.php?p=195180

19) 673-я страница
если $return = false, то строка не выводится, а просто возвращается
если $return = true, то строка не выводится, а просто возвращается
- ru2.php.net/manual/en/reflection.export.php

20) 673-я страница
class ReflectionMethod extends Reflection_Function { }
class ReflectionMethod extends ReflectionFunction { }
- класса Reflection_Function сейчас вообще нет, есть ReflectionFunction. И если быть совсем точным, то по документации класс ReflectionMethod является производным от ReflectionFunctionAbstract: ru2.php.net/manual/en/class.reflectionmethod.php

21) 677-я страница
В интерфейсе специфицируются 5 обязательных методов (rewind(), valid(), key(), current(), value())
В интерфейсе специфицируются 5 обязательных методов (rewind(), valid(), key(), current(), next())
- ru2.php.net/manual/en/class.iterator.php . Да и в листинге 35.11 указывается метод next(), а не value().

22) 407-я страница
В строке $str могут содержаться некоторые управляющие символы
В строке $to могут содержаться некоторые управляющие символы

23) 488-я строка
UPDATE ИмяТаблицы SET (ИмяПоля1='зн1', ИмяПоля1='зн2', ...) WHERE выражение
UPDATE ИмяТаблицы SET ИмяПоля1='зн1', ИмяПоля2='зн2', ... WHERE выражение
По синтаксису SQL скобки не нужны: www.intuit.ru/department/database/sql/8/ . Да и при наличии скобок выдаёт ошибку.
Во-вторых, два раза повторено ИмяПоля1

24) 187-я страница
если оба выражения a и b - целого типа (или же строки, выглядящие как целые числа), в противном случае результат будет дробным.
если a делится на b без остатка. В противном случае результат будет дробным.
Из документации: ru2.php.net/manual/en/language.operators.arithmetic.php
"The division operator ("/") returns a float value unless the two operands are integers (or strings that get converted to integers) and the numbers are evenly divisible, in which case an integer value will be returned."
Да и на практике действительно получается 5/3 = 1,6666 а не 5/3 = 1.


Некоторые замечания по книге:

1) При прочтении описания функции flock (в главе 18) у новичка создаётся впечатление, что при установки разделяемой блокировкии файл становится доступным лишь для чтения. Мне кажется, нужно чётко указать, что можно установить любой тип блокировки независимо от режима, в котором открыт файл (чтение/запись). И то, что в режиме разделяемой блокировки скрипт не будет писать в файл - остаётся "на его совести". Сейчас это описано как-то вскользь. Исключение - некоторые ОС, например Solaris, где для файла открытого на чтение, можно установить только разделяемую блокировку, а для открытого на запись - только исключительную (по материалам php.net).

2) На стр. 343, в разделе "Определение атрибутов файла" о функции stat говорится так, как будто она возвращает список. Но начиная с версии PHP 4.0.6 она возвращает ассоциативный массив, доступ к элементам которого можно получить как по цифровому ключу, так и по буквенному.

3) Стр. 393, раздел "Генерация ошибок". Кажется, нужно чётко указать, что параметр $type может принимать только пользовательские типы ошибок: E_USER_NOTICE, E_USER_WARNING, E_USER_ERROR. Сейчас у новичка описание этой функции может оставлять сомнение: можно ли в качестве параметра передать такие типы ошибок, как E_ERROR, E_WARNING, E_NOTICE.

4) Стр. 448
Фразу:
Quote:
В листинге 25.7 приведен комплексный пример (но не обед)...
заменить на:
Quote:
В листинге 25.7 приведен комплексный пример...
Причина: кажется, слишком не к месту.

5) Стр. 494
Указать, что на данный момент устаревшими считаются обе функции: mysql_list_fields и mysql_list_tables (на данный момент указана лишь mysql_list_tables).

6) В главе 29 "Управление сессиями" рассказывается о работе с сессиями, которые активны пока открыто окно браузера. Cookies, установленные в рамках данных сессий, удаляются браузером при его закрытии. Но большинство форумов устанавливает cookies, хранящиеся и после закрытия браузера, так, что при последующем входе на форумы пользователю не приходится каждый раз вводить имя пользователя и пароль. Например, форум phpBB оставляет такие cookies:
Code (any language): скопировать код в буфер обмена
[phpbb3_7akjg_sid] => 23848591183ded8401d904e564864945
которые хранятся очень долгое время. Я не уверен, но кажется, что и в этом случае используется что-то вроде сессий. Если это так, то хотелось бы, чтобы и работа таких сессий была вкратце описана. Например, есть ли возможность установить время жизни cookies, отвечающих за сессию, так, чтобы они сохранялись после закрытия браузера. Или же работа с такими сессиями строится по совсем другим принципам, чем описано в главе 29?

7) В разделе "Перехват обращений к членам класса" (стр. 606) нужно уточнить, что "функции-перехватчики" должны быть объявлены как public. Сейчас про это ничего не сказано. ( ru2.php.net/manual/en/language.oop5.overloading.php )
Back to top
View user's profile Send private message
MAD_B
Заглянувший



Joined: 05 May 2010
Posts: 11
Карма: 1
   поощрить/наказать


PostPosted: Sun Feb 26, 2012 3:39 pm (спустя 7 месяцев 8 дней 3 часа 4 секунды; написано за 35 минут 13 секунд)
   Post subject:
Reply with quote

Листинг 3.7. Файл multipart.htm
<form action="upload.cgi" enctype="multipart/form-data" method=post>
Name: <input type=text name="Name" value="Moe имя"><br>
Box: <input type=checkbox name="Box" value=l checked><br>
Area: <input type=textarea name="Аrеа">Какой-то текст</textarea><br>
<input type=submit>
</form>


стр. 264
string str_repeat(string $st, string $number)


Листинг 13.4. Файл forkeys.php
<?
# Перебор ассоциативного массива.
$birth = array(
"Thomas Anderson" => "1962-03-11",
"Keanu Reeves" => "1962-09-02",
);
for ( reset($birth); ($k=key($birth)); next($birth) )
echo "$k родился { $birth[$k] }<br>";
?>

стр. 315
$path = "c:\\windows\\system32\\drivers\\etc\\hosts"; (нет точки с запятой в конце)

стр. 319
int fseek (int $f, in $offset, int $whence=SEEK_SET)

стр. 383
Помните старую историю про шаха, который клал на первую клетку шахматной доски одно зерно пшеницы, на вторую — два, на третью — четыре и т.д., на каждую в 2 раза больше, чем не предыдущую?..

стр. 414
Например, выражение /[a-zA_Z]+\r?\n/ определяет строки

стр. 685, стр 727
не работает ссылка php5xml.nevod.ru/

стр. 694
<!ENTITY date "<Year>2002</Year>.<Month>11</Month>.<Day>12>/Day>">

стр. 697
Не допускается минимизированная форма атрибута. Например, HTML-тег
<input type=checkbox checked> в XHTML имеет форму
<input type="checkbox" checked="checked"/> или
<input type="checkbox" checked="true" />.

стр. 699
Document Object Model Level 3 Load and Save (Объектная модель документа, третий уровень, загрузка и сохранение). Документ определяет методы преобразования текстового представления XML-документа и его узлов в дерево DOM-объектов и наоборот. www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/.
Document Object Model Level 3 Validation (Объектная модель документа, третий уровень, проверка). Документ задает методы проверки корректности документа.www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/. (ссылка не туда)

стр. 701
Параметр charset указывает название кодировки. (нет курсива)

стр. 702
Аналог функции substr() для строки str В кодировке charset. (нет курсива)

стр. 702
Все функции не соответствуют документации, например
int iconv_strrpos(string haystack, string needle, int offset [, string charset])
должно быть
int iconv_strrpos ( string $haystack , string $needle [, string $charset = ini_get("iconv.internal_encoding") ] )
+
значок доллара перед $haystack потерялся (или убран) во всей главе, так трудней воспринимаются описания функций

стр. 704
Как и любой другой объект РНР, экземпляр класса domDocument создается с помощью и конструкции new:

стр. 705
$domdocument->loadXML($xmldocument);
$domdocument->loadXML($xmldocument); (два раза)

стр. 705
Оператор
include "unicode.inc"; (там require_once)
подключает описанный выше файл,

стр. 706
$domdocument->preserveWhiteSpace=false; (нет точки с запятой)

стр. 706
standalone
устаревшее свойство

cтр. 707
Листинг 37.7. Результат работы программы testsaveXML.php
должно быть:
Листинг 37.7. Результат работы программы test_saveXML.out или даже loadsave/test_saveXML.out

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

стр. 715
Листинг 37.12. Файл nodes//walknodelist2.php (два слэша вместо одного)

стр. 491
Данная команда поместит в result-set не все записи с непустым именем, а только 10, начиная с третьей (нумерация начинается с 0, поэтому 2 означает "пропустить первые 2 записи").

стр. 508
dev.mysql.com/doc/mysql/ru/ (ссылка устарела, не работает)

листинг 26.1
...
echo file_get_contents("ftp.aha.ru/");
выдает Warning при подключении...

стр. 455
К сожалению, данная функция работает только в Unix-версии РНР. Для того чтобы использовать ее в Windows, прибегнем к старому проверенному способу — эмуляции. Листинг 26.3 показывает, как можно реализовать функцию getmxrr()...

Функция работает в Win7(PHP Version 5.3.3) без эмуляций

стр. 240
как представлено в листинге 11.2.
должно быть
как представлено в листинге 14.2.

стр. 264
$а = array(10, 20, 30);
echo $a // Внимание! Неожиданный результат! (нет точки с запятой после $a)

стр. 270
Однако эта функция может делать и еще довольно полезные вещи. К примеру, если мы передадим в $start отрицательное число, то будет считаться, что это число является индексом подстроки, но только отсчитываемым от конца $str (например, -1 означает "начиная с последнего символа строки"). Параметр $length, если он задан, тоже может быть отрицательным. В этом случае последним символом возвращенной подстроки будет символ из $str с индексом $length, определяемым от конца строки.

В таком описании без пол-литра не разобраться, особенно в выделенной части. Просто плохо описана, нет примеров. Где хорошо? Здесь, например php.su/functions/?substr

стр. 270
string str_replace(string $from, string $to, mixed $text)
должно быть
mixed str_replace (mixed $search, mixed $replace, mixed $subject [, int &$count])

Лично мне слова search и replace лучше дают понять, что нужно найти и на что заменить

стр. 270
string str_ireplace(string $from, string $to, string $text)
должно быть
mixed str_ireplace (mixed $search, mixed $replace, mixed $subject [, int &$count ])

стр. 270
string substr_replace(string $text, string $to, int $start [,int $len])
должно быть
mixed substr_replace (mixed $string, mixed $replacement , mixed $start [, mixed $length ])

стр. 284
(как, например, в случаем с базой данных паролей),



Стр. 295
Неверно описана функция array_splice.
Эта функция, так же как и array_slice(), возвращает подмассив $list, начиная с индекса $offset максимальной длины $len, но, вместе с тем, она делает и другое полезное действие: она заменяет только что указанные элементы на содержимое массива $repl (или просто удаляет, если $repl не указан).

$colors = array("red", "green", "blue", "yellow", "gold", "t1");
array_splice($colors, 1, 3, "mm");

результат: Array ( [0] => red [1] => mm [2] => gold [3] => t1 )
т.е. результат не начиная с индекса $offset а с начала списка, возвращается весь список а элементы от $offset длинны $len заменяются/удаляются


стр. 298
<table width=100%>
<?foreach ($book as $entry) { extract($entry, EXTR_OVERWRITE)?>
  <tr>
    <td>Имя: <?=$name?></td> <!-- вместо $entry['name'] -->
    <td>Aдpec: <?=$url?></td> <!-- вместо $entry['url'] -->
  </tr>
  <tr><td colspan=3><?=$text?></td></tr>
  <tr><td colspan=3><hr></td></tr>
<?}?>
</table>

стр. 299
array array_intersect(array $array1, list $array2 [, list $аrrаy3, ...]) (отсутствует $)
в документации
array array_intersect(array $array1, array $array2 [, array $ ... ] )

стр. 304
www.math.keio.ac.jp/~matumoto/emt.html (не работает)

стр. 365
Отсутствуют в таблице: N,n,t,L,o,B,G,g и т.д.
+ Листинг 22.2
echo date("l dS of F Y h:i:s A")."<br>"; // Wednesday 06th 2012f June 2012 12:55:03 AM
неудачный, запутывающий пример, скорее всего был написан, когда символ "o" не должен был распознаваться как год, т.е. автор ожидал скорее всего это: Wednesday 06th of June 2012 12:55:03 AM

стр. 371
// Формируем календарь на текущий месяц. (на прошлый)
$now = getdate();
$cal = makeCal($now['year'], $now['mon']-1);

стр. 438
bool headers_sent([string &$file] [, int &$line])
должно быть
bool headers_sent([string &$file [, int &$line ]])


стр. 441
int setcookie( string $name [, string $value] [, int $expire] [, string $path] [,string $domain] [,book $secure])
должно быть
bool setcookie( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )


стр. 445
void parse_str ( string $str [, array $out ] )
должно быть
void parse_str ( string $str [, array &$out ] )
отсутствует &

стр. 530
<img src="button.php?Hello+world"!>

стр. 536
int imageColorTransparent (int $im [,$int col])
должно быть
int imagecolortransparent ( resource $image [, int $color ] )

стр. 569
...
    foreach (array_reverse(self::$funcs) as $f) {
      # Вот здесь происходит рекурсивный вызов autoload(),
      # когда клас еще не загружен.
...
Ошибка только в файлах примерах, в книге две "с"





Листинг 37.21. Файл shownodeinfo/showref.inc
Несоответсвие
в примерах:
function showref($path,$domnode) {
  global $xmlfile, $PHP_SELF;
  if ($domnode==null) //узел отсутствет
    echo 'null';
  else echo ": <A HREF=\"$PHP_SELF
       ?xmlfile=$xmlfile&path=$path\">". domNodeTitle($domnode) ."</A>";
}

в книге:
function showref($path, $domnode) {
  global $xmlfile;
  if ($domnode == null) // узел отсутствует
    echo 'null';
  else echo ": <A HREF=\"" . $_SERVER['PHP_SELF'] .
       "?xmlfile=$xmlfile&path=$path\">". domNodeTitie($domnode) ."</A>";
}


в демонстрационных примерах (в книге нормально) \xml\dom1\shownodeinfo\shownode.php
лишний тег </HEAD> в самом конце


Листинг 37.24
Нет закрывающего тега </html>

стр. 953
• UPLOAD_ERR_FORM_SIZE: превышен размер, задаваемый в необязательном поле формы с именем UPLOAD_ERR_FORM_SIZE; (MAX_FILE_SIZE)

\book_php5_src_2007-03-18\upload\test.php
<?php ## PHP автоматически создает переменные призакачке. (только в файлах, в книге нормально)

стр. 953
a $myFile_type эквивалентна $_FILES ['myFiie']['type']
( нет кавычки )

cтр.1000
smarty.php.net => www.smarty.net/

стр. 644
...
  echo "Ошибка при работе с файлом '{$e->getName()}'.<br>";
} catch (Exception $e) {
  // Ловим все остальные исключения, которые еще не поймали.
  echo "Другое исключение: {$e->getDirName()}.<br>";
}


В файлах примерах не нашел каталог Smarty
   Листинг 46.13. Файл smarty/news.php
   Листинг 46.14. Файл smarty/news.tpl
   Листинг 46.15. Файл smarty/inc/header.tpl


Листинг 46.14
Нет закрывающего тега </ul>


стр. 1007
<img src='/i/about.gif" title="0 сайта">

стр. 1007
В дальнейшем эту переменную можно использовать, для вставки в текст: $smarty.capture.имя} или для передачи в параметрах некоторой функции.
(нет открывающей скобки)

Листинг 46.16
<tr bgcolor="{cycle}">
<>Вторая строка.</td>
</tr>


Листинг 32.11
Бесполезное свойство: public $t;

стр. 617
... "снаружи" все выглядит так, будто класс в реализует их самостоятельно.

стр. 617
Доступ к методом базового класса


стр. 617
Если вы переопределяете некоторый метод или свойство в производном классе, то должны указать у него такой же модификатор доступа, либо менее строгий. Например, при переопределении private-функции допускается объявлять ее как protected или public.

Если "такой же или менее строгий", тогда в производном классе может быть public, protected или private, если в базовом private.


стр. 630
в книге: class Zaporojets implements ITransport, IWheeled, IWorldObject {
должно быть: class Zaporojets implements ITransport, IWheeled {
Fatal error: Class Zaporojets cannot implement previously implemented interface IWorldObject
Нужно пересмотреть 2 следующих абзаца, про дважды реализованный интерфейс

стр. 647
Кроме того, если мы будем использовать конструкцию catch (IinternalException ...),

Last edited by MAD_B on Wed Aug 01, 2012 1:38 pm; edited 3 times in total
Back to top
View user's profile Send private message
MAD_B
Заглянувший



Joined: 05 May 2010
Posts: 11
Карма: 1
   поощрить/наказать


PostPosted: Fri Aug 03, 2012 3:09 pm (спустя 5 месяцев 5 дней 23 часа 29 минут; написано за 8 минут 49 секунд)
   Post subject:
Reply with quote

стр. 643
Мы-то хотели разрушать идиому о конечности всего, что имеет начало, а получили — просто робкое замечание, произнесенное шепотом из-за кулис.

стр. 645
В книге:
class Exception {
    protected $message; // текстовое сообщение
    protected $code; // чисолвой код
    protected $file; // имя файла, где создано исключение
    protected $line; // номер строки, где создан объект

    private $trace; // стек вызовов
    public function __construct([string $message] [,int $code]);
    public final function getMessage(); // возвращает $this->message
    public final function getCode(); // возвращает $this->code
    public final function getFile(); // возвращает $this->file
    public final function getLine(); // возвращает $this->line
    public final function getTrace();
    public final function getTraceAsString();
    public function __toString();
}

Должно быть:
class Exception {
    protected string $message ;
    protected int $code ;
    protected string $file ;
    protected int $line ;

    public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
    final public string getMessage ( void )
    final public Exception getPrevious ( void )
    final public mixed getCode ( void )
    final public string getFile ( void )
    final public int getLine ( void )
    final public array getTrace ( void )
    final public string getTraceAsString ( void )
    public string __toString ( void )
    final private void __clone ( void )
}



стр. 1033
mixed function json_decode(string $json [, bool $objToAssoc=false])


Не нашел подкаталоги в файлах примерах ajax (по 47 главе) и dbsimple (по 48 главе)


стр. 1045
o MySQL использует обратные апострофы (backticks): table.`date`;
o FireBird заставляет применять кавычки: table."date";
o Microsoft SQL Server использует квадратные скобки: table.[date].
Поменять шрифт на Курьер
Back to top
View user's profile Send private message
Vizer
Заглянувший



Joined: 09 Jan 2013
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Wed Jan 09, 2013 1:13 pm (спустя 5 месяцев 5 дней 22 часа 3 минуты; написано за 4 минуты 46 секунд)
   Post subject:
Reply with quote

Второе издание, страница 410
Quote:
$re = '/\\\\filename/';

Как получилось, что единственный слеш превратился в целых четыре?
На самом деле, во всей главе "зубочистки" не нужны.
Если строка заключена в одинарные кавычки, то слэш в ней обозначает сам себя, и его не нужно дублировать. Дублировать его нужно только в том случае, если необходимо записать последовательность \' - нужно записать \\\'.
Если строка заключена в двойные кавычки, то дополнительный слеш нужен только чтобы отменить действие управляющих последовательностей (php.net/manual/ru/language.types.string.php#language.types.string.syntax.double).

По меньшей мере, это справедливо к PHP 5.3. Отличается ли поведение строк в предыдущих версиях я специально не проверял.
Back to top
View user's profile Send private message
gomer505
Заглянувший



Joined: 12 Jan 2013
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Sat Jan 12, 2013 10:13 am (спустя 2 дня 21 час 19 секунд; написано за 4 минуты 30 секунд)
   Post subject: PHP5
Reply with quote

стр.198 листинг 11.1
Code (php): скопировать код в буфер обмена
span class="st0">"   : $_SERVER[QUERY_STRING]";
?>
</body></html>
Насколько я понимаю должно быть так :$_SERVER['QUERY_STRING'] .QUERY_STRING заключено в апострофы.

Все понял - простите был не прав : Это только в этом случае
Code (php): скопировать код в буфер обмена
span class="st0">"   :". $_SERVER['QUERY_STRING'];
?>
</body></html>
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9989
   поощрить/наказать


PostPosted: Mon Jan 21, 2013 2:10 pm (спустя 9 дней 3 часа 57 минут; написано за 34 секунды)
   Post subject:
Reply with quote

gomer505 wrote:
Все понял - простите был не прав
— не, Вы были правы. Кавычки нужны в любом случае.
Back to top
View user's profile Send private message
MAD_B
Заглянувший



Joined: 05 May 2010
Posts: 11
Карма: 1
   поощрить/наказать


PostPosted: Mon Mar 04, 2013 10:09 am (спустя 1 месяц 13 дней 19 часов 58 минут; написано за 10 минут 17 секунд)
   Post subject:
Reply with quote

стр. 191

$zero = 0; // ноль
$tsss = ""; // пустая строка
if ($zero == $tsss) echo "переменные равны";

Хотя переменные явно не равны даже в обычном понимании этого слова, программа заявит, что они совпадают. Напоминаем, почему так происходит: один из операндов (например, $zero) может трактоваться как false, а значит, и все сравнение производится в логическом контексте. Неудивительно, что оператор echo срабатывает.

Выше описаны два правила.
1) РНР интерпретирует один из операндов как логический, если другой — логический исходно
2) если один из операндов оператора сравнения — числовой, то сравнение всегда выполняется в числовом контексте, даже если второй операнд — не число

По мне так сработало второе правило, а не первое. Впрочем, с тем же результатом.


стр. 194
Мы хотели сделать так, чтобы при нажатии кнопки выдавалось соответствующее сообщение, но вот беда: теперь при первом запуске сценария РНР выдаст предупреждение о том, что "элемент массива doGo не инициализирован".

Возможно не хватает запятых )

Мы хотели сделать так, чтобы при нажатии кнопки выдавалось соответствующее сообщение, но вот беда: теперь[запятая] при первом запуске сценария[запятая] РНР выдаст предупреждение о том, что "элемент массива doGo не инициализирован".


стр. 198
Если теперь мы запустим этот сценарий из браузера (перед этим сохранив его в файле test.php в корневом каталоге сервера) примерно вот таким образом:
example.com/qs.php?this+is+the+world

Сохраняем в один файл, а запускаем другой


стр. 198
в массив $argv попадут данные только при запуске сценария в командной строке

стр. 215
Рассмотрим соответствующий пример (листинг 9.2).
должно быть: Рассмотрим соответствующий пример (листинг 12.4).

стр. 644
К сожалению, в современной версии РНР реализация исключениями интерфейсов (а следовательно, и множественная классификация) не поддерживается. Точнее, вы можете создать класс-исключение, наследующий некоторый интерфейс, но попытка перехватить сгенерированное исключение по имени его интерфейса (а не по имени класса) не даст результата. Есть основания надеяться, что в будущих версиях РНР данное неудобство будет устранено.
В 5.3 уже есть

стр. 665
/**
 * Документация для следующей ниже
 * функции (после "/**" не должно быть пробелов!)
**/
Back to top
View user's profile Send private message
MrFish
Заглянувший



Joined: 25 May 2013
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Sat May 25, 2013 10:47 am (спустя 2 месяца 21 день 38 минут; написано за 40 секунд)
   Post subject: Неточности
Reply with quote

Я заметил следующие неточности в книге PHP 5 2013 года:

1. Apache 2.2.22 неправильно устанавливается на диск Z, подключенный с помощью subst. А вот в C:\WebServers устанавливается правильно. Пришлось мне с этим разбираться на моей Windows 7, не сразу понял, в чём дело
2. Для просмотра HTTP заголовоков не обязательно использовать прокси. У меня получилось посмотреть заголовки от сервера с помощью Add-On Live HTTP headers в Firefox
3. В PHP php-5.4.15-Win32-VC9-x86 нет каталога PEAR и связанных с ним вещей, про которые говорится в главе 5
Back to top
View user's profile Send private message
tomensis
Заглянувший



Joined: 30 Jan 2014
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Thu Jan 30, 2014 5:18 pm (спустя 8 месяцев 5 дней 6 часов 30 минут; написано за 3 минуты 50 секунд)
   Post subject: Неточность в книге
Reply with quote

Во втором издании PHP5 (СПб, 2008) не понял фразу на странице 172, приведенную на латыни: "Nosce te computerus". Если по задумке должно быть "Познай твой компьютер", то сам сказал бы "Nosce teum computerum". Я могу ошибаться - проверьте у компетентного специалиста.
Back to top
View user's profile Send private message Send e-mail
Forastero
Заглянувший



Joined: 11 Mar 2014
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Tue Mar 11, 2014 9:32 am (спустя 1 месяц 11 дней 16 часов 13 минут; написано за 3 минуты 51 секунду)
   Post subject:
Reply with quote

Страница 175:
Написано: <return_type> FuncName(<type1> $param1, [<type1> $param2])

А на следующей станице пояснения:
Тип первого параметра <type1>, а второго - <type2>.

Нужно исправить описание функции, поменяв тип второго параметра на <type2>.
Back to top
View user's profile Send private message
Анатолій Андреус
Участник форума



Joined: 17 Mar 2014
Posts: 22
Карма: 2
   поощрить/наказать


PostPosted: Mon Mar 17, 2014 5:51 pm (спустя 6 дней 8 часов 18 минут)
   Post subject: book_php5_src_2008-01-04.zip
Reply with quote

Пожалуйста, на php5.dklab.ru/ я нашёл book_php5_src_2008-01-04.zip, но файл не соответствует 2-му изданию PHP5 ПвП 07.11.2012 года, не появился ли соответствующий файл.
Back to top
View user's profile Send private message Send e-mail
Анатолій Андреус
Участник форума



Joined: 17 Mar 2014
Posts: 22
Карма: 2
   поощрить/наказать


PostPosted: Mon Mar 17, 2014 6:59 pm (спустя 1 час 8 минут)
   Post subject: book_php5_src_2008-01-04.zip
Reply with quote

В Предисловии в тексте на страницах 7-8 Листинги туманно и некорректно написанно, даже Примечание на странице 8 не скрашивает эту туманность.
Back to top
View user's profile Send private message Send e-mail
tolik89u
Заглянувший



Joined: 30 May 2014
Posts: 2
Карма: 0
   поощрить/наказать

Location: Севастополь, Крым

PostPosted: Fri May 30, 2014 11:13 am (спустя 2 месяца 12 дней 16 часов 13 минут; написано за 5 минут 55 секунд)
   Post subject: mt_rand и криптография
Reply with quote

стр.304: «функция [mt_rand] возвращает случайные числа, достаточно равномерно распределённые на указанном интервале даже для того, чтобы использовать их в криптографии».
Это не совсем так, или совсем не так.
В документации (www.php.net/manual/ru/function.mt-rand.php) сказано, что она основана на вихре Мерсенна (Mersenne Twister — отсюда название MT rand) и приведена ссылка на сайт (www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html) этого алгоритма. А там (www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/efaq.html) в свою очередь сказано: «Внимание! Mersenne Twister криптографически небезопасен». Впрочем, абзацем ниже сказано, что её можно сделать безопасной, если захешировать результаты MT с помощью какого-нибудь безопасного алгоритма хеширования. Но даже фотографию моего кота можно захешировать каким-нибудь безопасным алгоритмом, и её можно будет использовать в криптографии. Короче, думаю, это предложение лучше убрать (или хотя бы исправить).
Back to top
View user's profile Send private message Send e-mail
Lazar00
Заглянувший



Joined: 29 Sep 2014
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Mon Sep 29, 2014 5:28 pm (спустя 3 месяца 30 дней 6 часов 15 минут; написано за 1 минуту 51 секунду)
   Post subject:
Reply with quote

Cтранное поведение define(), или я что-то не так понял.
Code (php): скопировать код в буфер обмена
    define (www.php.net/define)('CONST1', 35);
    echo (www.php.net/echo) CONST1, ' ', Const1, ' ', cONST1, '<br>'; //

    define (www.php.net/define)('CONST2', 35, true);
    echo (www.php.net/echo) CONST2, ' ', Const2, ' ', cONST2, '<br>'; //

    define (www.php.net/define)('CONST3', 35, false);
    echo (www.php.net/echo) CONST3, ' ', Const3, ' ', cONST3, '<br>'; //
 
Разве не должно быть так:
Code (any language): скопировать код в буфер обмена
Back to top
View user's profile Send private message
Lazar00
Заглянувший



Joined: 29 Sep 2014
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Mon Sep 29, 2014 5:39 pm (спустя 10 минут; написано за 3 минуты 4 секунды)
   Post subject:
Reply with quote

Да, все же ошибка в книге.

На PHP.net (php.net/manual/en/function.define.php) такая спецификация:
Code (php): скопировать код в буфер обмена
bool define (www.php.net/define) ( string $name , mixed $value [, bool $case_insensitive = FALSE ] )
А в книге такая (стр. 178):
Code (php): скопировать код в буфер обмена
void define (www.php.net/define) ( string $name, string $value, bool $case_sen = TRUE);
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page Previous  1, 2, 3, 4, 5, 6
Page 6 of 6    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML