2 записи в php.ini диктуют вывод ошибок:
В процессе производства display_errors
обычно устанавливается на Off
(что хорошо, потому что отображение ошибок на производственных площадках обычно нежелательно!).
Однако в разработке он должен быть установлен на On
, чтобы отображались ошибки. Check!
error_reporting
(начиная с PHP 5.3) устанавливается по умолчанию на E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(что означает, что все отображается за исключением уведомлений, строгих стандартов и уведомлений об отказе). Если вы сомневаетесь, установите его на E_ALL
, чтобы отобразить все ошибки. Проверьте!
Это позор. Обычно общие хосты не позволяют изменять файл php.ini, и поэтому этот параметр, к сожалению, недоступен. Но не бойся! У нас есть другие возможности!
В желаемом скрипте мы можем изменить записи php.ini во время выполнения! Значит, он будет запускаться при запуске скрипта! Sweet!
error_reporting(E_ALL);
ini_set("display_errors", "On");
Эти две строки будут делать тот же эффект, что и изменение записей php.ini, как указано выше!
Это означает, что сценарий даже не запускался! Это обычно происходит, когда у вас есть синтаксическая ошибка!
С синтаксическими ошибками скрипт даже не доходит до времени выполнения. Он не работает во время компиляции, то есть он будет использовать значения в php.ini, которые, если вы не изменились, могут не разрешать отображение ошибок.
Кроме того, PHP по умолчанию регистрирует ошибки. На общем хостинге это может быть в выделенной папке или в той же папке, что и скрипт-нарушитель.
Если у вас есть доступ к php.ini, вы можете найти его под error_log
.
float
сохраняет значения с плавающей запятой, то есть значения, которые имеют потенциальные десятичные места int
, сохраняют только целые значения, т. е. целые числа Таким образом, хотя оба они имеют ширину в 32 бита, их использование (и представление) совершенно иное. Вы не можете хранить 3.141 в целых числах, но вы можете в float
.
Рассеивать их еще немного:
В целые числа все биты используются для хранения значения числа. Это (на Java и многие компьютеры) сделано в так называемом дополнении two . Это в основном означает, что вы можете представлять значения & minus; 231 to 231 & nbsp; & minus; & nbsp; 1.
В поплавке эти 32 бита разделяются между тремя отдельными частями: знаковый бит, показатель экспоненты и мантисса. Они выложены следующим образом:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
Существует один бит, который определяет, является ли число отрицательным или неотрицательным (ноль не является ни положительным, ни отрицательным, но имеет битовый знак, установленный в ноль) , Тогда есть восемь бит экспонента и 23 бит мантиссы. Для получения полезного номера из этого (примерно) выполняется следующий расчет:
M × 2 E
< / blockquote>(Этого больше, но этого должно хватить для цели этого обсуждения)
Мантисса по существу не намного больше, чем 24-битное целое число. Это умножается на 2 на степень экспоненциальной части, которая, грубо говоря, представляет собой число между & минус 128 и 127.
Поэтому вы можете точно представлять все числа, которые будут вписываться в 24-битное целое число но числовой диапазон также намного больше, поскольку более крупные экспоненты допускают большие значения. Например, максимальное значение для параметра
float
составляет около 3,4 × 1038, тогда какint
допускает только значения до 2,1 × 109.Но это также означает, поскольку 32 бита имеют только 4,2 × 109 разных состояния (которые все используются для представления значений
int
могут сохраняться), что на большем конце числового диапазонаfloat
номера разнесены на более широкие расстояния (поскольку не может быть более уникальныхfloat
чисел, чем есть уникальные номераint
). Вы не можете точно представлять некоторые цифры. Например, число 2 × 1012 имеет представление вfloat
из 1 999 999 991 808. Это может быть закрыть до 2 000 000 000 000, но это не точно. Аналогично, добавление 1 к этому числу не меняет его, потому что 1 слишком мал, чтобы изменить разницу в больших масштабахfloat
.Аналогичным образом вы также можете представлять очень маленькие числа (между 0 и 1) в
float
, но независимо от того, являются ли цифры очень большими или очень маленькими,float
имеет точность приблизительно 6 или 7 десятичных цифр. Если у вас есть большие числа, эти цифры находятся в начале номера (например, 4.51534 × 1035, что составляет не более 451534, после 30 нулей - иfloat
не может ничего сказать о том, действительно ли эти 30 цифр являются нулями или чем-то еще ), для очень малых чисел (например, 3.14159 × 10 и минус 27) они находятся в дальнем конце номера, за пределами начальных цифр 0,0000 ...
Поплавки используются для хранения более широкого диапазона чисел, чем может быть помещено в целое число. К ним относятся десятичные числа и номера стилей научной нотации, которые могут быть более значительными, чем могут соответствовать 32 битам. Вот глубокое погружение в них: http://en.wikipedia.org/wiki/Floating_point