我得到了错误
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 33292313 bytes)
当我运行分页功能时,我不知道发生了什么和/或为什么会出错。
从我在这里看到的其他问题来看,大多数人建议我更改php.ini文件中的内存限制。但是,我想知道为什么会发生此错误,以及我可以做些什么来防止将来发生此错误。
从这个问题中可以看出“致命错误:允许的内存大小x字节已用尽(试图分配y字节)”的含义?我可以看到php脚本已经超过了分配的内存限制(duh!),但它并没有真正的帮助。
问题:
我的分页功能:
function Pagination( $connection, $num, $page, $view ) {
$view=$view;
//Results per page
$pagerows=10;
//Tells us the last page number
$last=ceil( $num/$pagerows );
// Establish the $PaginationNav variable(used to navigate the paginated results)
$PaginationNav = '';
//Check how many pages of results there are
//If there is more than 1 page
if( $last != 1 ) {
//Check if we are on page 1, if so we don't need the 'previous' link
//We are on page one
if( $page == 1 ) {
//Adds the current page
$PaginationNav .= $page;
//Adds the next 3 pages to the pagination
for( $i=$page+1;$i<$last;$i++ ) {
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$i\">$i</a>";
if( $i > $page+4 ) {
break;
}
}
$PaginationNav .= "...";
//Adds the last page to the pagination
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$last\">$last</a>";
//Adds the next page button
$next=$page + 1;
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$next\">Next </a> ";
} else {
//we are not on page 1
//Adds the previous button to pagination
$previous=$page - 1;
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$previous\">Previous</a>";
//Adds the current page
$PaginationNav .=$page;
//Adds the left navigations
for( $i = $page-4;$i=$page;$i++ ) {
if( $i>0 ) {
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$i\">$i</a>";
}
}
//Adds the right navigations
for( $i=$page;$i<$last;$i++ ) {
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$i\">$i</a>";
if( $i > $page+4 ) {
break;
}
}
//Adds the last page to the pagination
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$last\">... $last</a>";
//Adds the next page button
$next=$page + 1;
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$next\">Next </a> ";
}
}
//There is only one page
if( $last == 1 ) {
$PaginationNav .= $page;
}
return $PaginationNav;
}
我看到的一个问题中有一条评论指出,仅仅增加内存限制并不能替代好的编码。我同意,我想把代码修改得更好,而不是简单地增加内存。
另外,我在编程方面没有受过正式的培训,我只是通过投身于编码来学习,所以如果答案很明显,我很抱歉。
正如galchen所发现的,对于循环终止符,您有一个不正确的,导致无限循环,最终由于内存不足而中断。增加内存限制并不能解决此问题。
我想提供我对
分页功能的重写。我还没有测试过它,但我相信它会产生更一致的结果。
function Pagination($connection,$num,$page,$view,$pagerows=10) {
//Tells us the last page number
$last = ceil($num/$pagerows);
if( $last == 1) return $page;
// Establish the $PaginationNav variable(used to navigate the paginated results)
$PaginationNav = '';
// Helper function to reduce repeated code - great if you want to change the link!
$addpage = function($p,$custom="") use (&$PaginationNav) {
$PaginationNav .= "<a class='Pagination' href='".$_SERVER['PHP_SELF']."?view=".$view."&page=".$i.">".($custom ? $custom : $i)."</a>";
};
//Check if we are on page 1, if so we don't need the 'previous' link
if( $page != 1) {
//Adds the previous button to pagination
$addpage($page-1,"Previous");
}
if( $page > 4) {
//Adds the first page to the pagination
$addpage(1);
$PaginationNav .= "...";
}
//Adds the left navigations
for($i = max(1,$page-4); $i < $page; $i++) {
$addpage($i);
}
//Adds the current page
$PaginationNav .= $page;
//Adds the right navigations
for($i=$page; $i<$last && $i < $page+4; $i++) {
$addpage($i);
}
if( $page < $last-4) {
$PaginationNav .= "...";
//Adds the last page to the pagination
$addpage($last);
}
if( $page != $last) {
//Adds the next page button
$addpage($page+1,"Next");
}
return $PaginationNav;
}
你有:
for($i = $page-4;$i=$page;$i++) // change to ==
{
if($i>0)
{
$PaginationNav .= "<a class='Pagination' href=\"$_SERVER[PHP_SELF]?view=$view&page=$i\">$i</a>";
}
}
在$i=$page
中,您将$page分配给$i,并且它每次都会返回$page(可能是正数),这将导致true条件。改成==
问题内容: 致命错误:在第269行的D:\ xampplite \ htdocs \ Scraper \ PHPExcel \ Reader \ Excel2007.php中,耗尽了134217728字节的内存大小(尝试分配1078799字节) 即使我仅尝试使用PHPExcel打开〜350 KB的小型excel文件,我的128M PHP内存限制也很快耗尽了。 虽然,我可以增加配置中的内存限制,但是
我编写的java应用程序遇到了一个问题,导致硬件性能问题。问题(我很确定)是,我运行应用程序的一些机器只有1GB的内存。当我启动java应用程序时,我将堆大小设置为-xms512m-xmx1024m。 我的第一个问题是,我的假设是否正确,因为我将机器的所有内存分配给java堆,这显然会导致性能问题?
我正在尝试运行artisan make:controller。 我有一个问题: 我试图增加
我有以下代码: 不同的文件: 由于我编写了Mail()函数,因此出现以下错误: 致命错误:允许的内存大小134217728字节已用尽(尝试分配65488字节)
本文向大家介绍浅谈内存耗尽后Redis会发生什么,包括了浅谈内存耗尽后Redis会发生什么的使用技巧和注意事项,需要的朋友参考一下 前言 作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当 Redis 服务器的内存耗尽后,如果继续执行请求命令,Redis 会如何处理呢? 内存回收 使用Redis 服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占
我有一个网页,可以将图像上传到我的API Laravel项目。它一直工作到我上传大小巨大或等于2mb的图像,并在nginx 500错误中运行: 我在stack overflow和google上读到了大量相同的问题,但似乎没有任何效果。 仔细阅读错误消息,我可以理解,从我的PHP配置,该网站可以采取134217728字节的内存,但它无法尝试分配73728字节:它有任何意义吗?它只在允许的最大128m