PHP内存限制虽然在增加,但已经耗尽


PHP memory limit exhausted despite increasing

我在我的网站上得到以下错误:

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