我可以避免使用 isset() 来处理 "undefined variable" 错误吗?
Can I avoid using isset() to handle "undefined variable" errors?
我管理着一个非常古老的 PHP/MySQL 站点,该站点广泛使用以下语法来检查是否设置了变量:
if($var){ /* do something */ }
我知道处理此问题的正确方法是使用 isset() 函数...但我不能 .在线版本工作正常(在旧的 gentoo 服务器上),本地版本在装有 wamp 2.0(我知道)的非常旧的 Windows XP 计算机上工作正常,代码中到处都使用这种语法。
我想在更多 recent/faster 台计算机上复制我的本地版本。我在旧的 Windows XP 计算机上安装了相同的 wamp 版本,但出现了“通知:未定义的变量/索引 ...”错误。我怀疑可以在 wamp PHP settings 中做一些事情,但我不知道去哪里看或做什么。我在旧电脑和网上工作:一定有办法让它在更新的电脑上工作。
编辑:我想 "tell" PHP 将 "unedefined" 变量作为 "false" 变量处理(这就是它在 XP 服务器上的工作方式)。关闭错误不会解决问题。我需要 if($var){...
作为 if(isset($var)){...
.
两台服务器(XP en new PC)版本如下:
- Wamp : 2.0i
- 阿帕奇:2.2.11
- PHP : 5.3.0
- MySQL : 5.1.36
感谢任何帮助并提前致谢。
这是我在这个优秀网站上的第一个问题:如果我做错了什么,我深表歉意。
编辑 2:感谢@Boratzan(见 balow)找到了解决方案。我从旧电脑复制了 php.ini
(1 个来自 Apache 文件夹,1 个来自 PHP 文件夹)新的带有一些次要路径编辑以考虑到两个 wamp 服务器未安装在同一路径中的事实。
编辑 3:经过进一步调查,@Boratzan 似乎从一开始就是正确的。解决方案是将位于 apache/ApacheX 的 php.ini 文件中的 error_reporting
的值更改为 E_ALL & ~E_NOTICE
.X.XX/bin/ 目录。这是一个草率的解决方案,但它
我不推荐它,但是如果你想在没有显示错误的情况下使用它 运行,请使用以下代码禁用 error_reporting:
ini_set('error_reporting', 0);
或
error_reporting(0);
同样,最好修复你的代码,但如果你继续这样做,你也可以尝试将值设置为 E_ALL & ~E_NOTICE
,这只会隐藏 NOTICE 警告
回答你的问题为什么它在以前的 WAMP 安装和在线上工作,这可能是因为那些 display_errors
配置为 off
(主要在生产环境中完成,不建议在开发时使用)
由于上述 none 帮助解决了您的问题,您可以比较安装中的两个 .ini 文件或简单地将工作文件复制到新文件中(假设它们都 运行 相同版本).
WAMP 有两个 php.ini 文件,一个在 PHP 文件夹中,一个在 Apache 文件夹中,确保将它们都复制(或至少复制 Apache 文件夹中的一个)。
您可以使用 @
来抑制特定错误:http://php.net/manual/en/language.operators.errorcontrol.php
或者平庸地关闭所有错误。
我管理着一个非常古老的 PHP/MySQL 站点,该站点广泛使用以下语法来检查是否设置了变量:
if($var){ /* do something */ }
我知道处理此问题的正确方法是使用 isset() 函数...但我不能 .在线版本工作正常(在旧的 gentoo 服务器上),本地版本在装有 wamp 2.0(我知道)的非常旧的 Windows XP 计算机上工作正常,代码中到处都使用这种语法。
我想在更多 recent/faster 台计算机上复制我的本地版本。我在旧的 Windows XP 计算机上安装了相同的 wamp 版本,但出现了“通知:未定义的变量/索引 ...”错误。我怀疑可以在 wamp PHP settings 中做一些事情,但我不知道去哪里看或做什么。我在旧电脑和网上工作:一定有办法让它在更新的电脑上工作。
编辑:我想 "tell" PHP 将 "unedefined" 变量作为 "false" 变量处理(这就是它在 XP 服务器上的工作方式)。关闭错误不会解决问题。我需要 if($var){...
作为 if(isset($var)){...
.
两台服务器(XP en new PC)版本如下:
- Wamp : 2.0i
- 阿帕奇:2.2.11
- PHP : 5.3.0
- MySQL : 5.1.36
感谢任何帮助并提前致谢。 这是我在这个优秀网站上的第一个问题:如果我做错了什么,我深表歉意。
编辑 2:感谢@Boratzan(见 balow)找到了解决方案。我从旧电脑复制了 php.ini
(1 个来自 Apache 文件夹,1 个来自 PHP 文件夹)新的带有一些次要路径编辑以考虑到两个 wamp 服务器未安装在同一路径中的事实。
编辑 3:经过进一步调查,@Boratzan 似乎从一开始就是正确的。解决方案是将位于 apache/ApacheX 的 php.ini 文件中的 error_reporting
的值更改为 E_ALL & ~E_NOTICE
.X.XX/bin/ 目录。这是一个草率的解决方案,但它
我不推荐它,但是如果你想在没有显示错误的情况下使用它 运行,请使用以下代码禁用 error_reporting:
ini_set('error_reporting', 0);
或
error_reporting(0);
同样,最好修复你的代码,但如果你继续这样做,你也可以尝试将值设置为 E_ALL & ~E_NOTICE
,这只会隐藏 NOTICE 警告
回答你的问题为什么它在以前的 WAMP 安装和在线上工作,这可能是因为那些 display_errors
配置为 off
(主要在生产环境中完成,不建议在开发时使用)
由于上述 none 帮助解决了您的问题,您可以比较安装中的两个 .ini 文件或简单地将工作文件复制到新文件中(假设它们都 运行 相同版本).
WAMP 有两个 php.ini 文件,一个在 PHP 文件夹中,一个在 Apache 文件夹中,确保将它们都复制(或至少复制 Apache 文件夹中的一个)。
您可以使用 @
来抑制特定错误:http://php.net/manual/en/language.operators.errorcontrol.php
或者平庸地关闭所有错误。