“Notice: Undefined variable”, “Notice: Undefined i

2020-01-22 07:18发布

I'm running a PHP script and continue to receive errors like:

Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php on line 10

Notice: Undefined index: my_index C:\wamp\www\mypath\index.php on line 11

Line 10 and 11 looks like this:

echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];

What is the meaning of these error messages?

Why do they appear all of a sudden? I used to use this script for years and I've never had any problem.

How do I fix them?


This is a General Reference question for people to link to as duplicate, instead of having to explain the issue over and over again. I feel this is necessary because most real-world answers on this issue are very specific.

Related Meta discussion:

28条回答
Luminary・发光体
2楼-- · 2020-01-22 08:14

In reply to ""Why do they appear all of a sudden? I used to use this script for years and I've never had any problem."

It is very common for most sites to operate under the "default" error reporting of "Show all errors, but not 'notices' and 'deprecated'". This will be set in php.ini and apply to all sites on the server. This means that those "notices" used in the examples will be suppressed (hidden) while other errors, considered more critical, will be shown/recorded.

The other critical setting is the errors can be hidden (i.e. display_errors set to "off" or "syslog").

What will have happened in this case is that either the error_reporting was changed to also show notices (as per examples) and/or that the settings were changed to display_errors on screen (as opposed to suppressing them/logging them).

Why have they changed?

The obvious/simplest answer is that someone adjusted either of these settings in php.ini, or an upgraded version of PHP is now using a different php.ini from before. That's the first place to look.

However it is also possible to override these settings in

  • .htconf (webserver configuration, including vhosts and sub-configurations)*
  • .htaccess
  • in php code itself

and any of these could also have been changed.

There is also the added complication that the web server configuration can enable/disable .htaccess directives, so if you have directives in .htaccess that suddenly start/stop working then you need to check for that.

(.htconf / .htaccess assume you're running as apache. If running command line this won't apply; if running IIS or other webserver then you'll need to check those configs accordingly)

Summary

  • Check error_reporting and display_errors php directives in php.ini has not changed, or that you're not using a different php.ini from before.
  • Check error_reporting and display_errors php directives in .htconf (or vhosts etc) have not changed
  • Check error_reporting and display_errors php directives in .htaccess have not changed
  • If you have directive in .htaccess, check if they are still permitted in the .htconf file
  • Finally check your code; possibly an unrelated library; to see if error_reporting and display_errors php directives have been set there.
查看更多
闹够了就滚
3楼-- · 2020-01-22 08:15

Regarding this part of the question:

Why do they appear all of a sudden? I used to use this script for years and I've never had any problem.

No definite answers but here are a some possible explanations of why settings can 'suddenly' change:

  1. You have upgraded PHP to a newer version which can have other defaults for error_reporting, display_errors or other relevant settings.

  2. You have removed or introduced some code (possibly in a dependency) that sets relevant settings at runtime using ini_set() or error_reporting() (search for these in the code)

  3. You changed the webserver configuration (assuming apache here): .htaccess files and vhost configurations can also manipulate php settings.

  4. Usually notices don't get displayed / reported (see PHP manual) so it is possible that when setting up the server, the php.ini file could not be loaded for some reason (file permissions??) and you were on the default settings. Later on, the 'bug' has been solved (by accident) and now it CAN load the correct php.ini file with the error_reporting set to show notices.

查看更多
闹够了就滚
4楼-- · 2020-01-22 08:16

Generally because of "bad programming", and a possibility for mistakes now or later.

  1. If it's a mistake, make a proper assignment to the variable first: $varname=0;
  2. If it really is only defined sometimes, test for it: if (isset($varname)), before using it
  3. If it's because you spelled it wrong, just correct that
  4. Maybe even turn of the warnings in you PHP-settings
查看更多
Bombasti
5楼-- · 2020-01-22 08:16

the quick fix is to assign your variable to null at the top of your code

$user_location = null;
查看更多
登录 后发表回答