非常奇怪的错误代码

时间:2014-01-06 14:08:23

标签: php

我有一个曾经工作的脚本。现在我已经上传了它,它回复了:

[06-Jan-2014 13:23:52 UTC] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 130968 bytes) in /home/statsaff/public_html/customforthisdomain.php on line 165
[06-Jan-2014 13:23:53 UTC] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 130968 bytes) in /home/statsaff/public_html/customforthisdomain.php on line 165
[06-Jan-2014 13:23:54 UTC] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 130968 bytes) in /home/statsaff/public_html/customforthisdomain.php on line 165
[06-Jan-2014 13:25:08 UTC] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 130968 bytes) in /home/statsaff/public_html/customforthisdomain.php on line 165
[06-Jan-2014 13:25:29 UTC] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 130968 bytes) in /home/statsaff/public_html/customforthisdomain.php on line 165
[06-Jan-2014 13:26:05 UTC] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 130968 bytes) in /home/statsaff/public_html/customforthisdomain.php on line 165
[06-Jan-2014 13:26:08 UTC] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 130968 bytes) in /home/statsaff/public_html/customforthisdomain.php on line 165 

经过进一步调查,我发现:

  1. 无论我如何修改customforthisdomain.php
  2. ,错误都完全相同
  3. 事实上,我已经安排脚本中的第165行是空的
  4. 错误仅显示在Firefox上。该脚本在Internet Explorer上正常运行。
  5. 这是第165行的代码,它是空的

    function mainURL()
    {
        $domain=getDomain();
    
        $dictionary=getDomainDictionary();
        return $dictionary[MAINURL];
    }
    
    //..
    
    function getDomainDictionary()
    

    第165行在那个空白区域内。

    是什么驱使我坚果是错误据说发生在第165行。但是,第165行没有任何内容。无论我如何更改脚本,错误消息都会说它发生在第165行。

    我将文件拆分为2个文件。然后我开始将代码从一个文件移动到另一个文件。

    罪魁祸首似乎在这一行

    function getDomain()
    {
        $domain=$_SERVER['SERVER_NAME'];
        $domain = str_replace("www.", "", $domain);
    
        /*if ($_GET['asdomain'])
        {
            $domain=$_GET['asdomain'];
        }*/
        return $domain;
    }
    

    如果我取消注释注释行,则错误位于customdomain1.php中。如果我发表评论,错误发生在getcountryotherway.php

    罪魁祸首总是165.尽管该文件甚至不包含165行。

4 个答案:

答案 0 :(得分:1)

这里有两种方法可以搞乱。首先是错误地配置了缓存。在SilverStripe安装中,必须存在silverstripe-cache。这个网站非常相关。

www.meerware.com/thoughts/2013/07/choose-your-silverstripe-cache-location-carefully /

您的php可能有不同的缓存,但缓存不可写会导致无限的内存消耗。

此外,如果selinux或权限问题阻止缓存位置可写,则可能会出现同样的问题。

答案 1 :(得分:0)

该错误的可能原因:

  • 脚本使用太多内存
  • 错误/无限循环,如while,foreach,for
  • 缓存文件也可能导致

如果您无法更改服务器的php配置,则必须分析代码并进行一些改进。

由于服务器的配置,浏览器不应该出现问题。也许清除你的缓存然后再试一次?

答案 2 :(得分:0)

更新PHP.ini或使用init_set更改限制。

 ini_set("memory_limit","12M");

12Mo是限制。

答案 3 :(得分:0)

我弄明白了这个问题。一些函数保持递归地相互调用。我已经解决了这个问题。不知道为什么它总是说错误在第165行。第165行没有任何内容。这是非常误导的。