我的网站上到处都出现以下错误:
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();
}
}
答案 0 :(得分:1)
如果您多次使用此对象,请更改此对象:
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");
答案 1 :(得分:0)
在错误消息67108864 bytes = 65Meg
中。所以我建议你,但是你认为你将内存限制增加到128M就不起作用了。
如果在尝试增加限制时出现内部服务器错误,则可能使用的语法不正确。
.htaccess文件中使用的语法是: -
php_value memory_limit 128M
PHP脚本中使用的语法是: -
ini_set('memory_limit', '128M');