Bu hata mesajı sunuluyor, herhangi bir öneriniz var mı?
Php 33554432 bayt izin verilen bellek boyutu (43148176 bayt ayırmaya çalıştı) bitkin
Bu hata mesajı sunuluyor, herhangi bir öneriniz var mı?
Php 33554432 bayt izin verilen bellek boyutu (43148176 bayt ayırmaya çalıştı) bitkin
Yanıtlar:
Sonunda cevabı buldum:
Dosyanızda hata almadan önce bu satırı aşağıdaki satıra ekleyin
ini_set('memory_limit', '-1');
Sunucunun sınırsız bellek kullanımı alacak, iyi çalışıyor.
Öneri arkadaşlarına verdiğiniz için teşekkürler.
UNLIMITED
.
Paylaşılan barındırma sınırını artırmak için iki basit yöntem şunlardır:
PHP.ini dosyanıza erişiminiz varsa, PHP.ini satırını değiştirin. Satırınız 32M gösteriyorsa 64M'yi deneyin:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
PHP.ini dosyasına erişiminiz yoksa, bunu bir .htaccess dosyasına eklemeyi deneyin:
php_value memory_limit 64M
Betiğiniz çok fazla bellek kullanıyor. Bu, genellikle kontrolden çıkmış bir döngünüz varsa ve döngüyü her geçişinde nesne oluşturuyor veya dizilere ekliyorsanız PHP'de olabilir.
Sonsuz döngüler olup olmadığını kontrol edin.
Sorun bu değilse, bitmiş olduğunuz nesneleri null olarak ayarlayarak yok ederek PHP'ye yardım etmeyi deneyin. Örneğin.$OldVar = null;
Hatanın gerçekleştiği kodu da kontrol edin. Bu satırın büyük miktarda bellek ayırmasını bekler misiniz? Değilse, neyin yanlış gittiğini anlamaya çalışın ...
Yapıyor:
ini_set('memory_limit', '-1');
asla iyi değildir. Çok büyük bir dosyayı okumak istiyorsanız, dosyayı yavaş yavaş kopyalamak en iyi uygulamadır. En iyi uygulama için aşağıdaki kodu deneyin.
$path = 'path_to_file_.txt';
$file = fopen($path, 'r');
$len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big
$output = fread( $file, $len );
while (!feof($file)) {
$output .= fread( $file, $len );
}
fclose($file);
echo 'Output is: ' . $output;
while
döngüden sonra dosya işleyiciyi kapatmak iyidir :fclose($file)
Ne yazık ki PHP'yi anladığınızdan daha hızlı bellek tüketen bir şekilde programlamak maalesef kolaydır. PHP 5'in PHP 4'ten daha otomatik olarak yapması gerekiyorsa da, referansları kullanmak yerine dizeleri, dizileri ve nesneleri kopyalamak bunu yapacaktır. Ancak, veri setinizle birkaç adımda tamamen ilgilenmek, en küçük mantıksal birimi işlemeye kıyasla israftır. zamanında. Klasik örnek, bir veritabanından büyük sonuç kümeleriyle çalışmaktır: çoğu programcı, tüm sonuç kümesini bir diziye getirir ve ardından bir veya daha fazla kez döngü yapar foreach()
. Her while()
seferinde bir satır almak ve işlemek için bir döngü kullanmak çok daha fazla bellek verimlidir . Aynı şey bir dosyayı işlemek için de geçerlidir.
Büyük dosyaları okumak istiyorsanız, bunları bir kerede okumak yerine yavaş yavaş okumalısınız.
Basit matematik: Aynı anda 1 MB büyük bir dosya okursanız, verileri tutmak için aynı anda en az 1 MB bellek gerekir.
Bu yüzden fopen
& kullanarak bunları yavaş yavaş okumalısınız fread
.
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
Php7.2'de laravel 5.6 ile aynı problemle karşılaştım. Ben sadece memory_limit = 128M
benim uygulamalar talep olarak php.ini değişken miktarını artırmak . 256M / 512M / 1048M olabilir .... Şimdi iyi çalışıyor.
Ben de aynı sorun yaşıyordu, boşuna phpinfo.ini, php.ini veya .htaccess dosyaları aradı. Sonunda bazı php dosyalarına baktım, onları açtım ve içindeki kodları bellek için kontrol ettim. Nihayet bu çözüm ortaya çıktığım şeydi ve benim için çalıştı. Wordpress kullanıyordum, bu yüzden bu çözüm sadece wordpress bellek boyutu sınırı problemi için işe yarayabilir. Benim çözümüm, default-constants.php dosyasını / public_html / wp-include klasöründe açın. Bu dosyayı kod düzenleyicisiyle açın ve wp_initial_constants
kapsam altındaki bellek ayarlarını bulun veya "bellek" kelimesini bulmak için sadece Ctrl + F tuşlarına basın. Oraya geleceksin WP_MEMORY_LIMIT
ve WP_MAX_MEMORY_LIMIT
. Sadece artır, benim durumumda 64 MB, 128 MB'a ve sonra 200 MB'a çıkardım.
// Define memory limits.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MEMORY_LIMIT', $current_limit );
} elseif ( is_multisite() ) {
define( 'WP_MEMORY_LIMIT', '200M' );
} else {
define( 'WP_MEMORY_LIMIT', '128M' );
}
}
if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} else {
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
}
}
Btw, lütfen aşağıdaki kodu yapmayın, çünkü bu kötü bir uygulamadır:
ini_set('memory_limit', '-1');
wp-config.php
bunun yerine, gelecekteki WordPress güncellemelerinin üzerine yazılmayacakları bu sınırları kolayca ekleyebilirsiniz . Ayrıca, birkaç temel eklenti (örneğin, WordFence gibi), 'çekirdek' WordPress dosyaları değiştirilirse şikayet edecektir ...
wp-config.php
. Ve (i .e iki satır var ekleyin define( 'WP_MEMORY_LIMIT', '200M' );
ve define( 'WP_MAX_MEMORY_LIMIT', '256M' );
. Dosyaların aksine altında yani, her şey 'çekirdek' WP (on wp-includes
WP yükseltmeleri tarafından üzerine yazılır olacaktır), wp-config.php
olmaz - bu ötürü tam olarak orada WP sabitlerini geçersiz kılmanın tam amacı!
-1
kısa süreli işlemler için iyidir. Örneğin, birim testleri veya besteci yüklemeleri / vb. Çalıştırmak için kullanılan bir php oluşturucu kabı. Üretim sitenizi böyle ayarlanmış olarak çalıştırmayın.
Koddaki tüm kodların üstünde aşağıdaki satırı yürüterek php betiğine izin verilen belleği artırabilirsiniz:
ini_set('memory_limit','-1'); // enabled the full memory available.
Ayrıca koddaki istenmeyen değişkenleri de ayırın.
Bu php kütüphanesini kontrol edin: PHP ile bellek boşaltma
Birçok cevabın sadece bir betiğe yeri olan hafıza miktarını artırmaya çalıştığını fark ettim, ancak çoğu zaman beklenmedik miktarda veya boyuttan dolayı hafıza ile çok liberal olduğu anlamına gelmez. Açıkçası sizin değil bir senaryo yazarı sizin iddialı hissi sürece yazarın merhametinde :) PHP dokümanlar bile bellek sorunları " kötü yazılmış komut " nedeniyle olduğunu söylüyor
Belirtilmelidir ini_set('memory_limit', '-1');
(sınır yok) olarak sunucu kararsızlığına neden olabilir 0 bytes free = bad things
. Bunun yerine, komut dosyanızın ne yapmaya çalıştığına ve bir makinedeki kullanılabilir bellek miktarına göre makul bir denge bulun.
Daha iyi bir yaklaşım: Senaryonun yazarı (veya iddialı) iseniz, xdebug ile bu tür bellek sorunlarını ayıklayabilirsiniz . En son sürüm (2.6.0 - piyasaya sürülen 2018-01-29), hangi işlev çağrılarının büyük miktarda bellek harcadığını gösteren bellek profilini geri getirdi. Komut dosyasında bulunması zor olan sorunları ortaya çıkarır. Genellikle, verimsizlikler aldığı hacmi beklemeyen bir döngüdedir, ancak her vaka okuyucuya bir alıştırma olarak bırakılacaktır :)
Xdebug dokümantasyon yararlı, ancak 3 adımda aşağı kaynar:
apt-get
ve yum
vsxdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
Bir dosyayı okumaya çalışıyorsanız, bu PHP'de bellek alacaktır. Örneğin, bir MP3 dosyasını açmaya ve okumaya çalışıyorsanız (örneğin, $ data = dosya (" http://alanadim.com/yol/sample.mp3) ")) hepsini belleğe çekecektir .
Nelson'un önerdiği gibi, gerçekten bu kadar bellek kullanmanız gerekiyorsa, maksimum bellek sınırınızı artırmak için çalışabilirsiniz.
Benzer bir durum vardı ve cevapların en üstünde ini_set ('memory_limit', '-1') verildi; ve her şey 1 MB'tan KB'lere kadar iyi, sıkıştırılmış görüntü dosyaları çalıştı.
Paylaşılan bir barındırma kullanıyorsanız, php boyut sınırındaki artışı zorlayamazsınız.
Sadece cpanel gidin ve php sürümünüzü 7.1 ve üstüne yükseltin sonra gitmek için iyidir.
wordpress kullanıcıları satır ekle:
@ini_set('memory_limit', '-1');
wordpress yüklü kök klasöründe bulabileceğiniz wp-settings.php dosyasında
Ben komut satırında çalışan php aynı sorunu vardı. Son zamanlarda, php.ini dosyasını değiştirdim ve php.ini değiştirilirken bir hata yaptım
Bu php7.0 içindir
hata yaptığım php.ini yolu:
/etc/php/7.0/cli/php.ini
Ben batmıştı memory_limit = 256
(ki aracı 256 bytes
)
yerine memory_limit = 256M
(ki aracı 256 Mega bytes
).
; Bir komut dosyasının tüketebileceği maksimum bellek miktarı (128 MB)
; http://php.net/memory-limit
memory_limit = 128M
Düzelttikten sonra, işlemim iyi çalışmaya başladı.
Bu komutu Magento kök dizininizde çalıştırın php -d memory_limit=4G bin/magento
laravel kullanıyorsanız bu yolları kullanın
public function getClientsListApi(Request $request){
print_r($request->all()); //for all request
print_r($request->name); //for all name
}
onun yerine
public function getClientsListApi(Request $request){
print_r($request); // it show error as above mention
}