为了账号安全,请及时绑定邮箱和手机立即绑定

使用PHP“注意:未定义的变量”,“注意:未定义的索引”和“通知:未定义的偏移量”

使用PHP“注意:未定义的变量”,“注意:未定义的索引”和“通知:未定义的偏移量”

慕慕森 2019-05-20 13:52:01
我正在运行PHP脚本,并继续收到如下错误:注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name注意:第11行的未定义索引:my_index C:\ wamp \ www \ mypath \ index.php第10行和第11行看起来像这样:echo "My variable value is: " . $my_variable_name;echo "My index value is: " . $my_array["my_index"];这些错误消息的含义是什么?他们为什么突然出现?我曾经使用这个脚本多年,我从来没有遇到任何问题。我该如何解决?这是一个一般参考问题,供人们链接到重复,而不是一遍又一遍地解释这个问题。我认为这是必要的,因为关于这个问题的大多数现实世界的答案都非常具体。相关元讨论:关于重复性问题可以做些什么?“参考问题”有意义吗?
查看完整描述

9 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

一般是因为“糟糕的编程”,现在或以后都有可能出错。

  1. 如果这是一个错误,请首先对变量进行适当的赋值:$ varname = 0;

  2. 如果它确实只是有时定义if (isset($varname)),请在使用之前测试它:

  3. 如果是因为拼错了,那就纠正错误

  4. 甚至可能在PHP设置中转动警告


查看完整回答
反对 回复 2019-05-20
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

这意味着您正在测试,评估或打印尚未分配任何内容的变量。这意味着您要么输入错误,要么需要先检查变量是否已初始化为某些内容。检查您的逻辑路径,它可以设置在一个路径中,但不能设置在另一个路径中。


查看完整回答
反对 回复 2019-05-20
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我不想禁用通知,因为它有用,但是想避免太多打字。

我的解决方案是这个功能:

function ifexists($varname){
  return(isset($$varname)?$varname:null);}

所以,如果我想引用$ name和echo if exists,我只需写:

<?=ifexists('name')?>

对于数组元素:

function ifexistsidx($var,$index){
  return(isset($var[$index])?$var[$index]:null);}

在页面中如果我想引用$ _REQUEST ['name']:

<?=ifexistsidx($_REQUEST,'name')?>


查看完整回答
反对 回复 2019-05-20
?
手掌心

TA贡献1942条经验 获得超3个赞

这是因为没有定义变量'$ user_location'。如果您正在使用任何if循环来声明'$ user_location'变量,那么您还必须有一个else循环并定义相同的循环。例如:

$a=10;if($a==5) { $user_location='Paris';} else { }echo $user_location;

上面的代码将创建错误,因为if循环不满足,并且在else循环中'$ user_location'未定义。仍然要求PHP回应变量。因此,要修改代码,您必须执行以下操作:

$a=10;if($a==5) { $user_location='Paris';} else { $user_location='SOMETHING OR BLANK'; }echo $user_location;


查看完整回答
反对 回复 2019-05-20
?
青春有我

TA贡献1784条经验 获得超8个赞

回答“”他们为什么突然出现?我以前使用这个脚本多年,我从来没有遇到任何问题。“

大多数网站在“显示所有错误,但不是'通知'和'已弃用'”的“默认”错误报告下运行是很常见的。这将在php.ini中设置并应用于服务器上的所有站点。这意味着示例中使用的那些“通知”将被抑制(隐藏),而其他错误(被认为更为关键)将被显示/记录。

另一个关键设置是可以隐藏错误(即display_errors设置为“off”或“syslog”)。

在这种情况下会发生的事情是,error_reporting更改为显示通知(根据示例)和/或设置已更改为display_errors屏幕(而不是抑制它们/记录它们)。

为什么他们改变了?

显而易见/最简单的答案是,有人在php.ini中调整了这些设置中的任何一个,或者PHP的升级版现在使用了之前的不同php.ini。这是第一个看的地方。

但是,也可以覆盖这些设置

  • .htconf(网络服务器配置,包括虚拟主机和子配置)*

  • 的.htaccess

  • 在PHP代码本身

其中任何一个也可以改变。

还有一个额外的复杂性,即Web服务器配置可以启用/禁用.htaccess指令,因此如果.htaccess中的指令突然启动/停止工作,那么您需要检查它。

(.htconf / .htaccess假设您正在以apache身份运行。如果运行命令行,则不适用;如果运行IIS或其他Web服务器,则需要相应地检查这些配置)

摘要

  • php.ini中的检查error_reportingdisplay_errorsphp指令没有改变,或者你之前没有使用不同的php.ini。

  • .htconf(或vhosts等)中的检查error_reportingdisplay_errorsphp指令没有改变

  • .htaccess中的检查error_reportingdisplay_errorsphp指令没有改变

  • 如果.htaccess中有指令,请检查.htconf文件中是否仍允许它们

  • 最后检查你的代码; 可能是一个无关的图书馆; 看是否error_reportingdisplay_errorsPHP指令已经被设置在那里。


查看完整回答
反对 回复 2019-05-20
  • 9 回答
  • 0 关注
  • 3307 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信