【问题标题】:Warning: Creating default object from empty value in警告:从空值创建默认对象
【发布时间】:2018-08-24 01:52:31
【问题描述】:

我有一个测试连接速度的脚本。当我将其移至另一台服务器时,我收到以下警告:

Warning: Creating default object from empty value in /home/speed/public_html/common.php on line 26

这是我的代码的摘录:

## Read through the config file and assign items to the global $config variable
function ReadConfig($config_file) {
    global $config;
    $lines = file($config_file);
    foreach ($lines as $line_num => $line) {
        $line = rtrim(preg_replace("/#.*/","",$line));
        if(preg_match("/\[.*\]/", $line, $parts)) {
            $section = $parts[0];
            $section = preg_replace("/[\[\]]/","",$section);
        } elseif (preg_match("/=/",$line)) {
            list($var,$value) = split('=',$line);
            $var = preg_replace('/ $/','',$var);
            $value = preg_replace('/^ +/','',$value);

            $config->{$section}->{$var} = $value; # here
        }
    }
}

我目前运行的是 PHP 5.5,另一台服务器运行的是更新版本的 PHP。

【问题讨论】:

  • 这不是错误,而是警告。它只是告诉你$config->{$section} 不存在,所以它在你创建$config->{$section}->{$var} 时为你创建了它。在尝试向属性添加子对象之前,您应该确保属性存在。

标签: php


【解决方案1】:

在第 26 行加上这个检查:

if (!isset($config->{$section}))
    $config->{$section} = new Stdclass;

它应该可以在不产生警告的情况下工作

【讨论】:

  • 感谢 sjon,我按照你说的做了,现在插入了多个错误行,但仍然是同样的错误
  • 您向我们展示了 1 个错误;我解决了这个问题,现在你告诉我们还有更多错误?也发布这些怎么样?
【解决方案2】:

@Sjon 提供了消除警告的答案,我将解释您现在看到警告的原因。 由于您将代码移至另一台服务器,因此很可能存在另一个 php ini 文件,因此设置不同。在您的“旧”服务器上,errorswarnings 很可能已关闭,因此您没有看到它们,而在“新”服务器上它们默认打开。

您可以记录它们而不是显示错误,以便在浏览时看不到它们:

display_errors(false); 
// you definitely wanna log any occurring
log_errors(true); 

【讨论】:

  • 嘿,巴斯,我认为在文件中放置错误会随着时间的推移产生巨大的文件,是否有更正此代码或任何方式修改 php 设置以使其正确?
  • 不会变得那么大,每个目录都有自己的文件。有许多可用的配置选项。检查 php.ini 以了解所有可能性。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 2013-10-29
相关资源
最近更新 更多