PHP内存限制尽管有所增加但已耗尽

时间:2014-08-10 11:42:13

标签: php mysql .htaccess memory pdo

我的网站上到处都出现以下错误:

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();
    }
}

2 个答案:

答案 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');