【发布时间】:2014-10-03 09:26:57
【问题描述】:
我的网站上到处都出现以下错误:
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();
}
}
【问题讨论】:
-
增加内存并不总是解决“内存不足”问题的方法:您需要找出正在使用所有内存的内容以及原因(通常是代码错误,例如无限循环)
-
哪一行是第 22 行
-
问题不太可能出现在这里,更有可能出现在实例化数据库类的某个地方
-
RiggsFolly 这并不重要,因为我认为这与 PDO 无关 pdo 不会像那样浪费大量内存。它必须发生在其他脚本中,这些脚本在读取文件或某些循环时会浪费大量内存。
-
在你的代码中调用
memory_get_usage(true),或者设置XHProf,它会为你生成一个很好的报告。不幸的是,错误消息本身只是告诉你压垮骆驼的最后一根稻草,而不是它已经携带的铅重物!
标签: php mysql .htaccess memory pdo