büyük dosyalarla file_get_contents ve file_put_contents

3 Cevap php

Ben, dosya içeriğini almak düzenli ifadeler ve preg_replace kullanarak bunun bazı parçaları değiştirmek ve başka bir dosyaya kaydetmek için çalışıyorum:

$content = file_get_contents('file.txt', true);

$content_replaced = preg_replace('/\[\/m\]{1}\s+(\{\{.*\}\})\s+[\x{4e00}-\x{9fa5}]+/u', 'replaced text', $contents);


if ($content_replaced) {
  file_put_contents('file_new.txt', $content_replaced);
  echo "Successful!";
}
else {
  echo "Some error ocurred";
}

Bu kod parçası küçük dosyalar ile çalışıyor, ama ben 60MB hakkında orijinal dosyayı, çalıştığınızda, sadece bana "Bazı hata oluştu" mesajı veren tutar.

Herhangi bir öneri büyük takdir edilmektedir.

Güncelleyin. Günlüklerinde hiçbir hata, bellek sınırı 1024m ayarlanır

3 Cevap

Ben bazı regex sınırını vuruyorlar eminim. Heck, bir süre önce ben bir sınırı with 1000 chars ... ben muhtemelen gerçekten basit desenleri ile aynı zamanda her yerde regex sınırlarını vuracaktır bahse girdi 60MB ile vurdu. Ben ungreedy mümkünse .*? yerine .* ile yapım, en azından bunu mümkün olduğunca kolaylaştırmak için çalışacağız.

Daha fazla bilgi almak için, sadece preg_last_error() dönüş değerini kontrol edin.

Muhtemelen bellek tükeniyor. Memory_limit ne set var? (Phpinfo () anlatacağım). Sen gibi hafıza limitini artırmak mümkün olabilir:

ini_set('memory_limit','128M');

I file_put_contents ile max / sınır sorunları yaşadım.

Hiçbir fikri ne sınırlar olabilir, ama fwrite dertlerimi çözüldü ve ben şişe indirdi kullanıyor olabilirsiniz.