PHP是否在数组上设置内存限制?

时间:2013-01-18 17:08:20

标签: php arrays xdebug suhosin

我在PHP中有一个奇怪的内存问题。我认为有些东西只允许一个数组最大为0.25M。看来脚本在崩溃之前只使用了大约6M。

这是xdebug的输出:

enter image description here

这是它正在调用的功能。 sql查询的结果是大约800行文本。

public function getOptions(){
    $sql = "select Opt,
                   Code,
                   Description
            from PCAOptions";

    $result = sqlsrv_query($this->conn,$sql);

    $arrayResult = array();
    echo ini_get('memory_limit'); //this confirms that my memory limit is high enough
    while($orderObject = sqlsrv_fetch_object($result,'PCA_Option')){
        array_push($arrayResult, $orderObject);
    }
    return $arrayResult;
}

3 个答案:

答案 0 :(得分:1)

所以,我不知道这是如何或为什么有效,但我通过从.htaccess文件中注释掉这两行来解决问题:

#    php_value memory_limit 1024M
#    php_value max_execution_time 18000

我这样做是因为我注意到phpinfo()在“master”和“local”两列中为这些设置返回了不同的值。

我的php.ini有memory_limit = 512M和max_execution_time = 3000,而我的.htacces文件有上述值。我以为.htaccess会覆盖php.ini中的任何内容,但我猜它引起了冲突。这可能是php中的一个可能的错误吗?

答案 1 :(得分:0)

一些PHP发行版,安全包和Web主机采取了许多步骤来阻止用户通过ini_set在运行时提高PHP实际内存限制。最有可能的候选者是suhosin安全包。

这个年龄较大的Stack Overflow question还有许多其他建议。

答案 2 :(得分:-2)

使用'big'脚本时,我知道这将绕过我的服务器PHP内存限制, 我总是在脚本的开头设置这个变量。一直工作。

ini_set("memory_limit","32M"); //Script should use up to 32MB of memory