Prestashop 网站中的 body 标签后显示一个字母

A letter is displayed after body tag in Prestashop website

我有一个 prestashop 网站 http://www.myparaweb.com/,它在正文标签后显示一个 'l' 字母,它 return 也在 ajax json 之后的响应中编辑后台登录,以便登录永远不会成功。 我试图查看主题 header.tpl 和管理员 header.tpl 但我没有在那里找到它

附上代码截图和json return开头的'l'。 我想删除这封 'l' 信件。 谢谢

编辑:当我开始找到 'l' 字母出现的位置时,我调试了 Dispatcher class

中的 __constructor 函数
protected function __construct()
{   die("test");
    $this->use_routes = (bool)Configuration::get('PS_REWRITING_SETTINGS');
...
}

这 return 像这样编辑 'l' 字母

<html><head></head><body>ltest</body></html>

Edit2:我试过像这样调试 getInstance 函数

public static function getInstance()
{   die('test');
    if (!self::$instance) {
        self::$instance = new Dispatcher();
    }
    return self::$instance;
}

我得到了

<html><head></head><body>ltest</body></html>

查看源代码时,l 字符出现在 <!DOCTYPE HTML> 声明之前。

l<!DOCTYPE HTML>
<html lang="fr-fr">
    <head>
        <meta charset="utf-8" />
        <title>Default Ciblo theme</title>

因为它出现在每个页面上,我们确定它不是控制器,但它可能是 /classes/controller/FrontController.php 类。

如果我是你,我会通过在 Prestashop 进程的不同步骤打印 die("test") 来调试,以查找此字符的来源。从 FrontController 开始:

class FrontControllerCore extends Controller
{
    public function __construct()
    {
        die("test");
        [...]
    }
}

然后尝试使用 init() 函数...然后 initContent() 最后 displayHeader.

这可能是一个漫长的过程,需要您花费 1 小时或更长时间进行调试,但您一定会找到此错误的确切位置。


编辑: 从您的以下评论中,我们可以看出此错误发生在调用控制器之前。

然后我们将从/index.php:

开始调试
<?php
/**
[...]
*/
die("test");
require(dirname(__FILE__).'/config/config.inc.php');

然后:

<?php
/**
[...]
*/
require(dirname(__FILE__).'/config/config.inc.php');
die("test");
Dispatcher::getInstance()->dispatch();

有了这个你就知道bug是不是发生在after的dispatcher之前了。如果它发生在配置文件中,请在该文件中对每一行重复该过程以查找导致此问题的包含。


编辑: 从您下面的评论来看,问题发生在 Dispatcher 调用之后,因此您必须深入研究 /classes/Dispatcher.php。首先调试 __cunstructor() 函数,然后调试 dispatch() 函数。

请尝试搜索您编辑的所有框架文件。它可能在其中之一。 一种疯狂的查找方法是在所有 php 文件中搜索“ 1 ”。我使用 notepad++ 打开我编辑的文件夹中的所有 .php 文件以搜索“1”。由于代码中出现“1”的概率有限,因此您可以轻松找到它。转到每个子文件夹,搜索“.php”并在记事本++中打开所有文件,在所有打开的文档中搜索“1”。节省时间而不是遍历所有代码。