致命错误:在ini_set之后,允许的内存大小达到了134217728字节(尝试分配3个字节)。

4
起初,我已经查看了这个这个这个
我收到了以下错误: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 220 bytes) 我正在使用php 5.4sql Anywhere 11
根据这里的解决方案是在我的php文件中加入ini_set('memory_set',-1);,但是这样做后我又得到了另一个错误: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 3 bytes) 编辑:我的代码是:
<?php
    ini_set('memory_set',-1);
    $connect = sasql_connect("UID=username;PWD=pass");
    echo "Connection succeed";

    $result = sasql_query($connect, "SELECT * FROM table1, table2");

    if(!$result){
    echo "sasql_query failed";
    return 0;
    } else {
    echo "query completed successfully\n";
    sasql_result_all($result);
    }
    sasql_close($conn);
?>

我希望能得到帮助。

解决方案: 我已经找到了解决方案:我添加了一个WHERE (columnName1 = columnName2),拆分结果后它再次正常工作,速度相对较快!

<?php
    $connect = sasql_connect("UID=username;PWD=pass");
    if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };
    $results_page = 100;
    $start_from = ($page-1) * $results_page + 1;    
    $result = sasql_query($connect, "SELECT TOP $results_page START AT $start  * 
                    FROM table1, table2 WHERE (columnName1 = columnName2)");

    if(!$result){
    echo "sasql_query failed";
    return 0;
    } else {
    echo "query completed successfully\n";
    sasql_result_all($result);
    }
    sasql_close($conn);
?>

当然,我会在我的php页面中添加一个“Previous”和“Next”的链接,代码如下:<a href="<?php echo $page -1; ?>">Previous</a><a href="<?php echo $page + 1; ?>">Next</a>。感谢大家的帮助!

2
确保你没有无限循环或永无止境的递归函数。 - Virus721
@Virus721,我已经添加了我的代码,我想我没有做错什么吧? - Kenny
我不知道什么是sasql,但我认为它不是来自这里,除非你正在提取大量的数据。 - Virus721
那就是问题所在,我正在提取大量的数据,这就是我需要扩展内存的原因。无论如何,还是谢谢你的帮助。 - Kenny
2个回答

17

你应该使用

ini_set("memory_limit",-1);

同时不要使用"memory_set"函数。另外,注意这一点:https://dev59.com/ym445IYBdhLWcg3wDWCc#5263981(Suhosin扩展有自己的内存限制设置)。

如果你的脚本需要大量的内存,那么你应该尝试修改它。一个需要注意的问题是无限制的SQL查询。

你的表可能会有很多记录,所以最好总是限制查询。如果你需要从表中获取所有记录,则应该通过分页使用LIMIT ... OFFSET SQL结构来执行。


我也使用了你的回答中的一部分,SQL Anywhere 11 是这样构建的:SELECT TOP 20 START AT 1 * FROM table1, table2。感谢你的帮助。 - Kenny

0

经过多次尝试,我发现如果安装了php-pecl-apc,则可以将php配置memory_limit减少到48M或更低,并且可以避免出现“内存不足”的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接