まず第一に、「PHP のメモリ制限を確認してください」または「メモリを追加する必要があります」などの回答を探しているわけではありません。そのうちの 512MB がメモリ制限です。私は常に1行でメモリ不足エラーを受け取ります:
明確にするために:コードのこの部分はJoomlaに属しています!CMS。
function get($id, $group, $checkTime){
$data = false;
$path = $this->_getFilePath($id, $group);
$this->_setExpire($id, $group);
if (file_exists($path)) {
$data = file_get_contents($path);
if($data) {
// Remove the initial die() statement
$data = preg_replace('/^.*\n/', '', $data); // Out of memory here
}
}
return $data;
}
これは Joomla のキャッシングの一部です ... この関数はキャッシュ ファイルを読み取り、ファイルへの直接アクセスをブロックする最初の行を削除し、残りのデータを返します。
ご覧のとおり、この行は preg_replace を使用してキャッシュ ファイルの最初の行を削除します。これは常に次のとおりです。
<?php die("Access Denied"); ?>
私の質問は、最初の $data が巨大な場合、単純なプロセス (ファイルの内容から最初の行を削除する) が多くのメモリを消費する可能性があるように私には思えますか? もしそうなら、その問題を回避する最善の方法は何ですか? セキュリティを確保してキャッシュ ファイルへの直接アクセスをブロックできる die() 行がなくても、キャッシュ ファイルが存在することは問題ありません。
私が間違っている?
アップデート
投稿で示唆されているように、正規表現は解決するよりも多くの問題を生み出すようです。私はもう試した:
echo memory_get_usage() . "\n";
正規表現の後、 を使用して同じステートメントを試しましたsubstr()
。メモリ使用量の違いはごくわずかです。ほとんど何もありません。
それはあなたの貢献のためです、私はまだなぜこれが起こるのかを見つけようとしています.