致命错误:在 /Library/WebServer/Documents/XMLDataStore.class.php 的行上允许的内存大小为134217728个字节(尝试分配523800个字节)< b> 981
关于这个错误的奇怪之处不是内存泄漏,这很容易进行故障排除。相反,事实上XMLDataStore.class.php只有850行,我已在多个文本编辑器中验证过。
这是与Snow Leopard捆绑在一起的PHP 5.3。我没有使用操作码缓存。这是我的php.ini:
allow_url_fopen = Off
error_reporting = -1
display_errors = 1
display_startup_errors = 1
date.timezone = 'America/Los_Angeles'
output_buffering = Off
realpath_cache_size = 0k
XMLDataStore.class.php最近已被重构,过去常常超过981行。这几乎就像PHP缓存了一个2周大的版本并正在阅读它。我很肯定/Library/WebServer/Documents/XMLDataStore.class.php的当前版本只有850行长。
答案 0 :(得分:2)
这可能是换行问题吗?即PHP解释器与IDE /编辑器的不同之处?我不知道PHP如何处理Linux / Mac / Windows换行符,但它可能是有可能的。 你能在脚本的某个地方创建一个致命的错误,并查看它显示给你的行号吗?
你的代码中可能会有一些过长的行(> 65535个字符)会混淆行计数吗?
如果重命名文件并将其包含在新名称下,会发生什么?这应该处理任何搞乱的缓存问题。
答案 1 :(得分:1)
PHP似乎存在macintosh样式行结尾的问题,它不会在注释结束时计算cr。在朋友苹果上打开文件后我遇到了这个问题。 我在Linux上使用kate,在Windows上使用Crimson Editor将行尾改回Unix风格,行号工作正常。
答案 2 :(得分:0)
如果你在不存在的行上遇到错误,那么很可能是PHP正在缓存它。 也许尝试重命名然后执行它。
不确定Snow Leopard,但我现在正在使用它,不得不说只有操作系统有很多奇怪的错误,可能就是这样。
在我访问数据库并在数组中存储信息之前,我遇到了这个错误,结果我忘了数据库有多大,当它在堆栈上传递MB时我得到了这个错误并且它停止了。 如果情况类似,请使用更多处理器重的方法,例如连接,获取线路/块/无论什么,然后返回。 不要经历所有事情,存储一切,然后做点什么。
检查一下: Drupal.org memory allocation error
希望这会有所帮助,不确定这一切有多清楚。 可能会显示脚本的一部分,以了解可能导致此问题的原因。
答案 3 :(得分:0)
以下是一些更多信息。我在运行相同版本的Snow Leopard的不同Mac上尝试了相同的代码 - 很少用于开发,并且不会缓存此文件的版本 - 结果相同。
接下来,我尝试将相同的代码复制到运行PHP 5.2.8的Solaris机器上。我仍然得到内存错误 - 当然,这是好的和预期的,因为它确实存在 - 但PHP错误消息说明了这一点:
致命错误:达到最大功能嵌套级别'100',正在中止!在第741行的/export/www/htdocs/XMLDataStore.class.php
这很有道理,因为这是另一种方法递归调用的方法的第一行。在所有3台机器上的相同SVN存储库中,在同一版本#中签出相同换行符(LF)的完全相同的代码。
Snow Leopard的PHP 5.3.0中的错误? :)
答案 4 :(得分:0)
虽然我不知道是什么原因导致这个错误的行计数(我在OSX 10.6上也使用PHP 5.3。这里没有问题。),你可以通过将脚本分成更小的部分来缩小实际错误。 那样也许你会找到错误的真实位置。
一个850行的PHP文件无论如何都会认真地使用一些重构。
答案 5 :(得分:0)
我最近也遇到过这个问题,在我的情况下(在php-fpm5下的Ubuntu / Nginix上的PHP 5.3)我有一个脚本导致500错误没有输出(由于它正在生产)。在检查错误日志时,它提到了index.php上的第589行,它只有行数达到453.我的案例中的解决方案是支持短标记在生产时被禁用但启用了暂存......
即。 <?
已停用,打开PHP代码需要<?php
。
日志中的错误显然对我的情况没有帮助,因此我需要一段时间才能对其进行故障排除。我在这里留下这个建议,希望能节省一些时间。