问题:当客户登录并在管理面板中保存产品时,请刷新前端并显示错误:
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 88 bytes) in /home/staging/public/kralengroothandel/app/code/local/Zend/Db/Statement/Pdo.php on line 297
或
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 83 bytes) in /home/staging/public/kralengroothandel/lib/Varien/Simplexml/Element.php on line 196
出现问题的Pdo.php行:
public function _execute(array $params = null)
{
try {
if ($params !== null) {
return $this->_stmt->execute($params);
} else {
return $this->_stmt->execute();
}
第二名:
public function fetchAll($style = null, $col = null)
{
if ($style === null) {
$style = $this->_fetchMode;
}
try {
if ($style == PDO::FETCH_COLUMN) {
if ($col === null) {
$col = 0;
}
return $this->_stmt->fetchAll($style, $col);
} else {
return $this->_stmt->fetchAll($style);
}
Element.php:
if (!$desc) {
return false;
}
我在本地计算机上有相同的代码和数据库,但我没有这个问题。
memory_limit在512M上设置,我想问题不在这里,因为Zend_Db lib设置了内部内存限制。所以我尝试将ini_set('memory_limit', '1024M');
放在Pdo.php中,但它也无济于事。我有OneStepCheckout扩展(也许这是我有这个问题的原因)。我用Ngnix。也许有人有同样的错误?
我的服务器上的php-fpm.conf:
pm = dynamic
pm.max_children = 4
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
request_terminate_timeout = 0
request_slowlog_timeout = 0
chdir = /
php_admin_value[memory_limit] = 512M
php_admin_value[post_max_size] = 128M
php_admin_value[post_max_vars] = 64000
php_admin_value[max_execution_time] = 3600
php_admin_value[realpath_cache_size] = 16m
答案 0 :(得分:0)
增加php.ini中的大小
php_value memory_limit 64M // add the memory limit here
php_value max_execution_time 18000
答案 1 :(得分:0)
在shell/abstract.php
中查看Magento如何以编程方式配置php:
/**
* Parse .htaccess file and apply php settings to shell script
*
*/
protected function _applyPhpVariables()
{
$htaccess = $this->_getRootPath() . '.htaccess';
if (file_exists($htaccess)) {
// parse htaccess file
$data = file_get_contents($htaccess);
$matches = array();
preg_match_all('#^\s+?php_value\s+([a-z_]+)\s+(.+)$#siUm', $data, $matches, PREG_SET_ORDER);
if ($matches) {
foreach ($matches as $match) {
@ini_set($match[1], str_replace("\r", '', $match[2]));
}
}
preg_match_all('#^\s+?php_flag\s+([a-z_]+)\s+(.+)$#siUm', $data, $matches, PREG_SET_ORDER);
if ($matches) {
foreach ($matches as $match) {
@ini_set($match[1], str_replace("\r", '', $match[2]));
}
}
}
}
它使用php ini_set
指令,而不是Zend库方法,所以这是要走的路。
答案 2 :(得分:-2)
如果您没有服务器权限,请在magento_root / index.php文件中添加以下代码 在顶部。
ini_set("memory_limit",'1024M');
你不会再得到关于内存限制的错误:)
欢呼声!!