14

PHP に奇妙なメモリの問題があります。配列を最大0.25Mにすることしかできないと思います。スクリプトがクラッシュする前に、最大で約 6M しか使用していないようです。

xdebug からの出力は次のとおりです。

ここに画像の説明を入力

これが呼び出している関数です。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;
}
4

3 に答える 3

1

したがって、これがどのように、またはなぜ機能するのかはわかりませんが、.htaccess ファイルから次の 2 行をコメントアウトして問題を修正しました。

#    php_value memory_limit 1024M
#    php_value max_execution_time 18000

これを行ったのは、phpinfo() が「マスター」と「ローカル」の 2 つの列でこれらの設定に対して異なる値を返していることに気付いたからです。

私の php.ini には memory_limit=512M と max_execution_time=3000 がありましたが、.htacces ファイルには上記の値がありました。.htaccess は php.ini にあるものをオーバーライドするだけだと思っていましたが、競合が発生したと思います。これはphpのバグである可能性がありますか?

于 2013-01-18T21:36:26.647 に答える
0

一部の PHP ディストリビューション、セキュリティ パッケージ、および Web ホストでは、ユーザーが実行時に PHP の実際のメモリ制限をini_set. 最も有力な候補はsuhosinセキュリティ パッケージです。

この古いStack Overflow の質問には、他にも多くの提案があります。

于 2013-01-18T18:41:56.157 に答える
-2

サーバーの PHP メモリ制限をバイパスすることがわかっている「大きな」スクリプトを使用する場合、常にこの変数をスクリプトの先頭に設定します。常に動作します。

ini_set("memory_limit","32M"); //Script should use up to 32MB of memory
于 2013-01-20T09:33:14.720 に答える