我在我的网站上得到以下错误:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 600 bytes) in /classes/database.class.php on line 22
我已经尝试通过ini_set和htaccess增加内存限制,但我仍然得到相同的错误。
如果设置为128M,则会导致服务器内部错误。
这是database.class.php的第22行(及其周围):
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh;
private $error;
private $stmt;
public function __construct(){
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instanace
// line 22 now
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
如果您多次获得该对象,则像这样更改该对象:
public function __construct(){
$options = array(
'dsn' => 'mysql:host=' . $this->host . ';dbname=' . $this->dbname,
'user' => $this->user,
'pass' => $this->pass,
'options' => array( PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
$this->dbh = Db::factory("PDO",$options);
}
,然后创建一个db工厂类:
final class Db {
protected static $dbInstance;
public static function factory($adapter,$options){
if(!self::$dbInstance){
self::$dbInstance = new $adapter($options['dsn'],$options['user'],$options['pass'],$options['options']);
}
return self::$dbInstance;
}
}
这将有助于,并减少不必要的内存浪费和您的问题,许多创建PDO实例。
并在PHP.ini或使用PHP更新内存限制:
ini_set("memory_limit","128M");
在错误信息67108864 bytes = 65Meg
。所以我建议,无论你认为你将内存限制增加到128M,它都不起作用。
如果你在尝试增加限制时得到一个内部服务器错误,那么你可能使用了错误的语法。
在。htaccess文件中使用的语法是:-php_value memory_limit 128M
在PHP脚本中使用的语法是:-
ini_set('memory_limit', '128M');