为什么PHP警告出现在Chrome中但不出现在任何其他浏览器中?

时间:2011-08-18 14:02:55

标签: php

我正在用PHP编写一个Web应用程序,我只在Google Chrome中收到以下警告

  

警告:无法使用标量值作为数组    M:\ xampp \ htdocs \ MyProjectTitle \ php \ classes.php 在线 18

背景:请注意,我测试的所有浏览器(Firefox,Chrome,IE)中的网络应用程序都运行正常,但Chrome中出现的警告让我感到很难过。

注意:我们已尝试重新启动Chrome并清除Chrome缓存。我试过重新启动电脑。我已经尝试在FF和IE中搜索源代码,看看警告是否只是隐藏,但无济于事。警告只会在Google Chrome中弹出,我不明白为什么。

更新:即使Safari也使用WebKit,它也不会显示PHP警告。出于某种原因,Chrome是唯一一个有PHP警告的人。奇怪的东西!

更新:这是前21行代码:

class Presenter {
    public function includeFile($filePath) {
        if (is_readable($filePath)) {
            include $filePath;
        } else {
            echo '<p><strong>ERROR 404</strong></p>';
            echo '<p>The resource you requested could not be located.</p>';
        }
    }

    public function sanitize($string) {
        return preg_replace("/\s/","_",$string);
    }

    public function set($varname,$value) {
        $this->$varname = $value;
        $_SESSION[$this->name][$varname] = $value;

        return $this;   // enables chaining!
    }

    // And there's more code after this, but I have cut it out here.
}

注意:上面的代码在PHP类中。

更新:我确切知道在Chrome中导致警告的代码行(尽管我仍然不知道为什么Chrome是唯一显示警告的浏览器)。由于我的网络应用尽管Chrome中出现了警告,但我已使用@来抑制Chrome中的警告(我稍后会修复警告)。

6 个答案:

答案 0 :(得分:4)

最有可能就是这样:

$_SESSION[$this->name][$varname] = $value;

如果先前未将$_SESSION[$this->name]定义为数组,则会出现“无法使用标量作为数组”错误。例如如果你这样做

$_SESSION[$this->name] = 42;
$_SESSION[$this->name][$varname] = 'will not work';

错误被触发。

答案 1 :(得分:1)

我觉得Chrome会向服务器发送不同的数据,因此您遇到此错误。如果任何 $ _POST数据或$ _GET数据,请验证其他浏览器发送的数据。您可以使用print_r()var_dump()轻松显示内容,无论您选择哪个。

答案 2 :(得分:1)

这通常是因为你做某些浏览器特定的事情(也许你做某些IE特定的事情,特定于firerfox,但忘了为其他浏览器添加“默认”案例?)

答案 3 :(得分:1)

更新:我确切知道哪些代码行导致了Chrome中的警告(虽然我仍然不知道为什么Chrome是唯一显示警告的浏览器... 如果您知道,请告诉我们! )。由于我的网络应用尽管在Chrome中出现了警告,但我已经使用@将警告抑制为临时修复,直到我可以在以后修复它为止。

答案 4 :(得分:1)

基本上这种情况正在发生,因为您正在尝试访问UNDEFINED变量(或未设置变量)。

PHP省略了许多常见的编程错误,其他语言不允许这样做。

好的,如果你开始像这样的程序:

<?php if(eregi("hi",$hello)) { echo "hi"; } ?>

会得到这个“消息” 注意:未定义的变量:第1行的C:\ var \ www \ test.php中的hello

你可以将它预定义为:     <?php $hello = "hello"; if(eregi("hi",$hello)) { echo "hi"; } ?>

或者有条件避免消除以前的值:     $hello = isset($hello) ? $hello : null;

此代码也会向您发送已弃用的函数消息。

为什么这些消息是由服务器上的PHP.INI配置引起的,这种情况发生的原因是你有这样的事情:

display_error = on; error_reporting = E_ALL;

可能是这样的:

display_error = on; error_reporting = E_ALL&amp; ~E_NOTICE&amp; 〜E_STRICT

这将删除所有NOTICES消息并使PHP更具有效果,如果您收到已弃用的消息,也可以添加~E_DEPRECATED,

如何获取此消息,意味着您需要成为更加敏感的程序员!是的,更多的是tediuos,但有些人必须成功!

答案 5 :(得分:0)

可能是因为您需要在其他浏览器中执行ctr + f5或重启。它可能有一个以前版本的页面缓存,在Internet Explorer 8中遇到了很多。