【问题标题】:PHP unexpected memory usage [duplicate]PHP意外的内存使用[重复]
【发布时间】:2016-12-04 06:50:48
【问题描述】:

我只是在开发我的网站,但是我遇到了一个错误

“致命错误:允许的内存大小为 134217728 字节已用尽(尝试分配 4294967296 字节)...”。

奇怪的是,它运行良好,我的内存使用量大约为 500,000,直到我的代码中有一行:

 echo'<script>alert("'."X-".memory_get_usage(true).'");</script>';
 $queryX = "SELECT `data`,`image`,`date` FROM messages WHERE toX = ? or fromX = ?";
 echo'<script>alert("'."X2-".memory_get_usage(true).'");</script>';
 $stmtX = $connection->prepare($queryX);
 echo'<script>alert("'."X3-".memory_get_usage(true).'");</script>';
 $stmtX->bind_param('ss',$idlistX[$i],$idlistX[$i]);
 echo'<script>alert("'."X4-".memory_get_usage(true).'");</script>';
 $stmtX->bind_result($dataT,$imageT,$dateT);

我有这些警报来跟踪它。有谁知道最后一行是如何造成麻烦的?

【问题讨论】:

    标签: php memory memory-management


    【解决方案1】:

    你碰巧有一个 blob 列吗?

    4294967296 表明您正在尝试分配内存,无论是否巧合,这是 blob 列的最大长度。

    它也可能只是一个错误,而不是泄漏,它可能来自绑定语句。

    如果您确实有一个 blob 列,请尝试在您的 select 语句中将其转换为 varchar。

    【讨论】:

    • 是的,图像是一团,但现在是空的。那我该如何解决呢?
    • 首先,不要将数据库中的图像存储为 blob。将图像的路径存储在数据库中,并将图像本身存储在硬盘上。这应该可以解决您的问题。
    • 我知道,但这些是用户相互发送的图像,所以我希望它们不公开
    • 将它们存储在数据库中或存储在硬盘上不会对隐私产生太大影响。可以说,您可以说它们在硬盘驱动器上更安全,因为我们在这里假设与操作系统相比,访问数据库更容易。而且由于他可以访问操作系统,因此您不必担心某些图像。
    • 等等,(谢谢你的帮助)我不明白,一个不打算直接访问数据库的用户如何能够在这里访问它(我想要一个安全的数据库) ?我将如何更改 blob 以防止出现此错误?
    猜你喜欢
    • 2013-01-22
    • 2016-07-28
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多