PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Notice, Warning, Fatal, Parse, Deprecated, Strict
OrmaJever Модератор
Отправлено: 20 Февраля, 2014 - 00:06:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 7538
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 298 раз(а)




В этой теме я напишу как решить большинство популярных ошибок php.
Всё что написано в квадратных скобках это изменяемая информация, поэтому у вас там будут свои значения. [filename] и [line] это имя файла и строки где произошла ошибка, всё остальное буду объяснять по ходу.
Для начала список всех затронутых в этой теме ошибок. Если вы нашли тут свою, то добро пожаловать далее. Описывать буду в том же порядке.

    1) Notice: Undefined variable: [var_name] in [filename] on line [line]
    2) Notice: Undefined index: [index] in [filename] on line [line]
    3) Notice: Undefined offset: [number] in [filename] on line [line]
    4) Notice: Use of undefined constant [name] - assumed '[name]' in [filename] on line [line]
    5) Notice: Uninitialized string offset: [pos] in [filename] on line [line]

    6) Warning: [funct_name]() expects parameter [param] to be [type1], [type2] given in [filename] on line [line]
    7) Warning: [funct_name]() expects at least [num1] parameters, [num2] given in [filename] on line [line]
    8) Warning: Cannot modify header information - headers already sent by (output started at [filename1]:[line1]) in [filename2] on line [line2]

    9) Fatal error: Call to undefined function [funct_name]() in [filename] on line [line]
    10) Fatal error: Call to undefined method [class]::[method]() in [filename] on line [line]
    11) Fatal error: Call to a member function [funct_name]() on a non-object in [filename] on line [line]
    12) Fatal error: Using $this when not in object context in [filename] on line [line]
    13) Fatal error: Cannot redeclare [funct_name]() in [filename] on line [line]
    14) Fatal error: Out of memory (allocated [size1]) (tried to allocate [size2] bytes) in [filename] on line [line]
    15) Fatal error: Maximum execution time of 30 seconds exceeded
    16) Fatal error: Only variables can be passed by reference in [filename] on line [line]

    17) Parse error: syntax error, unexpected end of file in [filename] on line [line]
    18) Parse error: syntax error, unexpected T_[TOKEN] in [filename] on line [line]

    19) Deprecated: Function [funct_name]() is deprecated in [filename] on line [line]

    20) Strict Standards: Non-static method [class_name]::[method_name]() should not be called statically in [filename] on line [line]


Notice
1) Notice: Undefined variable: [var_name] in [filename] on line [line]
Данная ошибка возникает при обращении к несуществующей переменой [var_name] в строке [line] файла [filename]. Эта переменная не была объявлена и у неё нет значения. Возможно вы ошиблись в имени переменой или забыли присвоить ей значение.
Решение: перед обращением к переменным нужно их определить.

2) Notice: Undefined index: [index] in [filename] on line [line]
3) Notice: Undefined offset: [number] in [filename] on line [line]
Обе ошибки похожи, и возникают они при обращении к не существующему индексу массива ([index] или [number]) в строке [line] файла [filename], только в первом случае это строковый индекс ($arr['index']), а во втором - числовой ($arr[2]).
Решение: проверить в массиве наличие индекса [index] или [number].

4) Notice: Use of undefined constant [name] - assumed '[name]' in [filename] on line [line]
Ошибка возникает из-за неправильного обращения к строковому индексу массива в строке [line] файла [filename]. Строковые индексы массивов должны браться в кавычки ($arr['index']), конечно если индексом не является значение константы.
Решение: всегда строковые индексы брать в кавычки.
PHP:
скопировать код в буфер обмена
  1. // было
  2. $array[array_key]
  3. // стало
  4. $array['array_key']
  5.  


5) Notice: Uninitialized string offset: [pos] in [filename] on line [line]
Довольно редкая ошибка, возникает из-за обращения за пределы строки. Например ваша строка длиной 5 байт, а вы обращается $str[10]. 10 в данном случае и есть [pos].
Решение очевидно: не выходить за пределы строки.


Warning
6) Warning: [funct_name]() expects parameter [param] to be [type1], [type2] given in [filename] on line [line]
Ошибка возникает из-за того что функция [funct_name] ожидает принять параметром номер [param] тип [type1], а вы передаёте [type2].
Эта ошибка очень часто возникает с функциями выборки mysql (Warning: mysql_fetch_[array|assoc|object|...]() expects parameter 1 to be resource, null given in [filename] on line [line]), означает она то что первым параметром в функция передан null (пустота) вместо resource (ресурса выборки).
Решение: в случаем с mysql у вас скорее всего ошибка в запросе которую можно посмотреть вызвав mysql_error() после запроса, в случае с другими функциями нужно смотреть что вы передаёте в функцию.

7) Warning: [funct_name]() expects at least [num1] parameters, [num2] given in [filename] on line [line]
Здесь всё очень просто, функция [funct_name] имеет [num1] обязательных параметров, а вы передаёте [num2]. Как правило [num1] больше [num2].
Решение: передать недостающие параметры в [funct_name].

8) Warning: Cannot modify header information - headers already sent by (output started at [filename1]:[line1]) in [filename2] on line [line2]
Достаточно распространённая ошибка, возникает она потому что вы попытались отправить заголовки после вывода в строке [line1] файла [filename1]. По стандарту, html заголовки должны отправляться до тела страницы, когда начался вывод html заголовки отправить не возможно. Такая ошибка часто возникает с функциями header() и session_start().
Решение: Убрать любой вывод (echo, print или любой текст перед тегом <?php) перед отправкой заголовков либо если это не возможно - перенести отправку заголовков ближе к началу скрипта.
PS. иногда виной этой ошибки бывают BOM символы. Если перед header() или session_start() ничего нет, а ошибка всё равно появляется то сохраните файл в кодировке utf-8 (без BOM).


Fatal error
9) Fatal error: Call to undefined function [funct_name]() in [filename] on line [line]
10) Fatal error: Call to undefined method [class]::[method]() in [filename] on line [line]
Обе ошибки похожи, они говорят о том что в строке [line] файла [filename] вызвана не определённая функция [funct_name] или метод [class]::[method].
Решение: Возможно вы опечатались в названии функции/метода или забыли подключить нужный файл.

11) Fatal error: Call to a member function [method_name]() on a non-object in [filename] on line [line]
Данная ошибка возникает из-за того что в строке [line] файла [filename] вызывается метод [method_name] из переменой "не объекта".
Решение: проверить имя переменой, если этот объект возвращает другая функция/метод то скорее всего в ней произошла ошибка и нужно смотреть глубже.

12) Fatal error: Using $this when not in object context in [filename] on line [line]
Переменная $this доступна только в методах класса которые не объявлены как static.
Решение: если у вас статический метод, то использовать не статические методы/свойства нельзя, а для статических нужно использовать self::

13) Fatal error: Cannot redeclare [funct_name]() in [filename] on line [line]
Вы пытаетесь переопределить функцию [funct_name]. Если это пользовательская функция то в ошибке будет указано где первый раз она определенна "(previously declared in [filename]:[line])".
Решение: измените имя своей функции что бы не было конфликтов, или в достаточно редких случаях нужно убрать определение функции из цикла.

14) Fatal error: Out of memory (allocated [size1]) (tried to allocate [size2] bytes) in [filename] on line [line]
Эта ошибка говорит что скрипту не хватает [size2] памяти из выделенных [size1].
Решение: Выделить больше памяти в php.ini.

15) Fatal error: Maximum execution time of 30 seconds exceeded
Выполнение скрипта не укладывается в выделенное время (30 секунд). Место 30 может быть любое другое число если временной лимит был изменён.
Решение: изменить лимит времени функцией set_time_limit() (0 - лимит снимается совсем) или попробовать изменить алгоритм для ускорения скрипта.

16) Fatal error: Only variables can be passed by reference in [filename] on line [line]
Ошибка возникает из-за того что в строке [line] файла [filename] у вас вызвана функция (метод) которая(ый) принимает некоторый параметр по ссылке, а вы передаете туда статическое значение.
Решение: Создать переменную и присвоить ей статическое значение которое вы передаёте параметров в функцию, и затем передать саму переменную
PHP:
скопировать код в буфер обмена
  1. //было
  2. funct(5);
  3. // стало
  4. $a = 5;
  5. funct($a);


Parse error
17) Parse error: syntax error, unexpected end of file in [filename] on line [line]
Данная ошибка вводит в заблуждение т.к. указывает на последнюю строку скрипта, на самом деле скорее всего у вас где то не закрыта фигурная скобка "}". Так же эта ошибка может быть из-за пропущенной ";" в последней строке скрипта.
Решение: Использовать нормальный редактор с подсветкой синтаксиса, и найти наконец не достающую скобку.

18) Parse error: syntax error, unexpected T_[TOKEN] in [filename] on line [line][/code]
Банальная синтаксическая ошибка, скорее всего вы забыли закрыть скобку или поставить точку с запятой. очень часто ошибку нужно искать не в строке [line], а на строку выше.
Решение: Использовать нормальный редактор с подсветкой синтаксиса, и исправить эту чёртову ошибку.

Deprecated
19) Deprecated: Function [funct_name]() is deprecated in [filename] on line [line]
Ошибки уровня E_DEPRECATED появились в php 5.3 что бы указать пользователю на устаревшие конструкции языка.
Решение: Здесь есть список функций и рекомендации по их замене на актуальные.
Функции mysql_* устарели и место них теперь НУЖНО использовать mysqli либо PDO !!!

Strict Standards
20) Strict Standards: Non-static method [class_name]::[method_name]() should not be called statically in [filename] on line [line]
Ошибка возникает когда НЕ статический метод вызывает оператором "::" (class_name::non_static_method()). Да, данный вызов будет корректно работать (генерируя ошибку) в некоторых случаях, но так писать всё равно не нужно.
Решение: Создать объект, и вызвать метод оператором "->".
PHP:
скопировать код в буфер обмена
  1. // было
  2. class_name::non_static_method()
  3. // стало
  4. $obj = new class_name();
  5. $obj->non_static_method();


Ну и в конце хочется сказать что вы сами должны учиться находить решения ошибок, в этому вам поможет http://phpfaq[dot]ru/debug

Товарищи, если я где-то опечатался или ошибся в описании проблемы - напишите мне в лс, я всё исправлю.
Тема закрыта!


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB