Getimagesize dosyayı bulamıyor zaman hatayı işlemek

2 Cevap php

I getimagesize($img) çalışıyorum ve görüntü dos't var olduğunda bir hata alıyorum. Ben sadece hatayı işlemek, dosya varsa ilk kontrol etmek alışkanlık yok.

I try-catch nasıl çalıştığını emin değilim, ama ben böyle yapmak alışkanlık:

try: getimagesize($img) $works = true
catch: $works = flase

2 Cevap

Dediğin gibi, mevcut olmayan bir dosyada kullanılan eğer, getimagesize bir uyarı oluşturur:

Bu kod:

if ($data = getimagesize('not-existing.png')) {
    echo "OK";
} else {
    echo "NOT OK";
}

bir alacak

Warning: getimagesize(not-existing.png) [function.getimagesize]: 
  failed to open stream: No such file or directory 


A solution would be to use the @ operator, to mask that error :

if ($data = @getimagesize('not-existing.png')) {
    echo "OK";
} else {
    echo "NOT OK";
}

Dosya yok gibi, $ veri hala yanlış olacaktır; ama herhangi bir uyarı görüntülenir.


Another solution would be to check if the file exists, before using getimagesize ; something like this would do :

if (file_exists('not-existing.png') && 
    ($data = getimagesize('not-existing.png'))
   ) {
    echo "OK";
} else {
    echo "NOT OK";
}

Dosya yoksa, getimagesize denir değil - herhangi bir uyarı anlamına gelir

Yine de, bu çözüm, uzak sunucuya iki kişi demek olacak gibi, (Bu durumda ise) başka bir sunucu üzerinde görüntüler için kullanmak, ve HTTP üzerinden erişilen gereken biri değil.

Yerel görüntülerde, oldukça Tamam olurdu herhalde; Gördüğüm tek sorun maskeli varlık değil, bir okuma hatası olduğunda oluşturulan uyarıdır.


Finally :

  • Ben, hataları developpement sunucu üzerinde görüntülenecek sağlayacak
  • Ve üretim sunucusundaki bu görüntüler olmaz - bu konuda, display_errors bakın ;-)

Cehenneme gidecek kirli bir korsan zombi beni, ama genellikle bir çıkış tampon uyarı çıkışını yakalayarak bu soruna almak ve daha sonra tampon kontrol. Bu deneyin:

ob_start();
$data = getimagesize('not-existing.png');
$resize_warning = ob_get_clean();
if(!empty($resize_warning)) {
  print "NOT OK";
  # We could even print out the warning here, just as PHP would do
  print "$resize_warning";
} else {
  print "OK"
}

Sanki programcının cennette rahat bir yer almak için bir yol değil dedi, ama işlevsiz hata işleme gelince, bir adam bir adam yapmak için ne yapmak zorunda.