Php 内存不足(已分配899678208)(尝试分配262144字节)
我正在学习mvc。并尝试编写博客代码。所以我犯了一个错误 致命错误:允许的内存大小134217728字节已用尽(已尝试 在上的C:\xampp2\htdocs\blog\u mvc\controllers\Users.php中分配262144字节) 第7行 我试图将内存限制改为5121024,直到20000。它不起作用。 我也试着改成-1。 而且它不是Mb。 我不知道该怎么办<代码>在此处输入代码 View/login.phpPhp 内存不足(已分配899678208)(尝试分配262144字节),php,Php,我正在学习mvc。并尝试编写博客代码。所以我犯了一个错误 致命错误:允许的内存大小134217728字节已用尽(已尝试 在上的C:\xampp2\htdocs\blog\u mvc\controllers\Users.php中分配262144字节) 第7行 我试图将内存限制改为5121024,直到20000。它不起作用。 我也试着改成-1。 而且它不是Mb。 我不知道该怎么办在此处输入代码 View/login.php <?php session_start(); include("m
<?php
session_start();
include("models/db.php");
include("controllers/Users.php");
echo ("memory limit: " . ini_get("memory_limit") . "<br />");
echo ("memory usage: " . round(memory_get_usage(true)/1048576,2) . "Mb (" .
memory_get_usage(true) . " bytes)<br />");
if(($_SERVER['REQUEST_METHOD'] == 'POST') && isset($_POST["signin"])){
$object2 = new Users;
$object2->login($_POST["username"],$_POST["password"]);
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<?php include("includes/inc.style.php")?>
</head>
<body>
<div class="container">
<div class="row login-form-wrapper">
<form class="login-form" action="" method="post" >
<div class="form-group"><label for="username">Логин</label><input class="form-control" id="username" type="text" name="username"></div>
<div class="form-group"><label for="password">Пароль</label><input class="form-control" id="password" type="password" name="password"></div>
<input class="form-control btn btn-primary" type="submit" name ="signin" value="Войти">
<a href="signupform.php">Dign up</a>
</form>
</div>
</div>
</body>
登录
Логин
Пароль
Controllers/Users.php
<?php
class Users extends DB{
function set($username , $password , $email){
return $this->insert($username , $password , $email);
}
function login($username , $password){
return $this->login($username , $password );
}
}
我想你是想从用户
调用DB
类中的家长。如果您的类扩展了另一个类,那么您不需要重新定义该方法,只要它不是抽象的。只需从类用户中删除登录
功能
//function login($username , $password){
// return $this->login($username , $password );
//}
或者,您可以使用以下语法调用父级:
return parent::login($username, $password);
建议您了解应用程序正在使用的内存量。也就是说,您可以在运行时设置内存利用率限制,如下所示:
将这些行中的一行直接添加到下面的代码中
session_start();
ini_set("memory_limit", "500M"); // Half a gig
ini_set("memory_limit", "-1"); // No memory limit.
这将停止错误。返回$this->login($username,$password)这是对自身的递归无限调用吗?@Dharman说了什么。您可能想要返回parent::login($username,$password)
以便将参数传递给父类的DB
类的login()
方法。@MonkeyZeus它可以工作。我想调用parent的方法并使用$this。非常感谢。与其在这个问题上投入越来越多的内存,不如花点时间问问自己“我的登录脚本真的需要超过800MB的内存吗?”@Sammitch恕我直言,你生活在什么乌托邦?请不要向新的PHP用户推荐这样的设置。500M的PHP脚本非常慷慨。不限制内存使用只会让PHP吃掉所有可用的RAM,而不会解决核心问题。我不是他的教授。他问我如何减轻这个错误,我告诉了他。他绝对应该专注于只使用所需的内存和保持保守,但我不会拒绝任何人的知识。考虑到无论你将限制提高多高,它都不会解决无限递归问题,这是一个非答案。此外,OP已经尝试提高限制,所以这甚至没有提出一个新的想法来尝试。@Justin Jack谢谢。事实上我试着设定-1。我这样做是为了知道这里是否真的没有足够的内存,或者只是这里代码中的无限循环或者一些错误。即使在-1时,它也会显示错误。现在我知道这是因为递归,它是有效的。我想调用parent的方法并使用$this。非常感谢你。我一整天都在努力修理它。我几乎要放弃学习它了。但我在这里使用子类的登录方法作为控制器。如果我直接调用DB方法。这不是mvc,不是吗?或者我应该将孩子的登录方法重命名为不同的?
session_start();
ini_set("memory_limit", "500M"); // Half a gig
ini_set("memory_limit", "-1"); // No memory limit.