【问题标题】:Call to undefined method DateTime::format but DateTime is working调用未定义的方法 DateTime::format 但 DateTime 正在工作
【发布时间】:2019-01-15 22:13:21
【问题描述】:

我在我们维护的旧版应用程序中突然遇到了这个非常奇怪的错误。

未捕获的错误:调用未定义的方法 DateTime::format() in 路径/helpers.php:54

我的相关代码是这样的:

function custom_date_format($str, $format=false){
    if(!$format){
        $format ="j M Y";
    }
    $date = DateTime::createFromFormat('d-m-Y', $str);
    if($date){
        return $date->format($format); // lineno 54
    }
    return '';
}

服务器正在运行 PHP 7,DateTime::createFromFormat 似乎正在运行,因此 DateTime 对象正在正常运行。

它一夜之间停止工作(我觉得这很奇怪,不确定我是否相信)。

对这种奇怪的错误有什么想法吗?

【问题讨论】:

  • 能否提供var_dump($date)失败时的输出?
  • 我会尝试找回它。我目前无法直接访问服务器,但希望能找回它。
  • 您确定 DateTime 与另一个 DateTime 类没有冲突(即:\Faker\Provider\DateTime)?是$date instanceof \DateTime
  • helpers.php 不包含任何要求或包含。
  • 如果你使用$date = \DateTime::createFromFormat('d-m-Y', $str);会发生什么?

标签: php datetime


【解决方案1】:

我们想通了,答案一点也不令人满意:

该错误无法以可靠的方式重复。它是间歇性的。这已经引起了怀疑。

经过一番挖掘,有更多进程报告了异常行为,看来内存问题是根本原因。迁移到“新”服务器后,所有问题都消失了。

那么显然 DateTime 对象没有以某种方式完全分配?格式函数指针被覆盖什么的。但是是内存问题造成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-13
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2017-10-15
    • 2013-05-30
    相关资源
    最近更新 更多