【发布时间】:2020-09-24 02:08:04
【问题描述】:
运行 PHP 函数时出现内存错误。
错误显示为...
致命错误:允许的内存大小为 268435456 字节已用尽(尝试分配 4294967296 字节)
PHP 脚本是...
function getPageContent($page) {
//Open a new connection to the MySQL server
$mysqli = new mysqli('localhost','MY_USER','MY_PASS','MY_DATABASE');
$account = MY_ACCOUNT_NUMBER;
$project = 1;
if($stmt=$mysqli->prepare("SELECT content FROM pages WHERE account_id=? AND id=? LIMIT 1")){
$stmt-> bind_param("ii", $account, $page);
// Execute
$stmt-> execute();
// Bind results
$stmt-> bind_result($content);
// Fetch value
while ( $stmt-> fetch() ) {
echo $content;
}
// Close statement
$stmt-> close();
$mysqli-> close();
}
}
这是说错误与 PHP 代码中的 bind_result 函数有关。我坚持这一点。我尝试在 PHP.ini 中增加我的内存限制,但这没有用,无论如何我不应该占用那么多内存。
【问题讨论】:
-
要么是因为我的疲倦状态,但我怀疑这个功能会导致问题 - 至少我在这里看不到明显的错误。您是否在循环中执行任何其他可能无休止地运行的事情?
-
我还有另一个几乎相同的函数来获取页面的标题,但我能想到的就这些了。
-
请看手册中的
memory_get_peak_usage()和memory_get_usage()php.net/manual/de/function.memory-get-peak-usage.php 放入调用该函数的脚本,然后与分配的内存进行比较,看是否一致 -
我做了,但似乎没有给我任何线索。 PHP 函数仍在尝试使用 4294967296 字节,这只是没有意义为什么它会尝试使用那么多内存。
-
发生此错误时,通常某些东西会无限期地运行。因此,您可以休息一下;一个一个地进入每个循环,并确定哪个循环导致了问题。如果您的 while 循环中的中断解决了问题,那么这里可能会出现问题,但我现在没有发现它。