imagecreatefromjpeg sessizce komut sona eriyor

2 Cevap php

Benden önce pek çok kişi gibi, ben bazı görüntü thumbnailing yapmak için bir PHP komut dosyası yazıyorum. Komut sertifika (benim makine üzerinde çalışır) Womm kazanmıştır, ama benim ev sahibi (1 & 1 Temel) taşıdığınızda, bir sorun var: Belli bir dosya boyutu Yukarıdaki görüntüler işlenemez. Ben bazı gizli POST sorun değil emin olmak için, dosya sistemi tüm işlemleri hareket ettik. İşte ilgili kodu bulunuyor:


function cropAndResizeImage( $imageLocation )
{
  //
  // Just to be certain
  //
  ini_set('display_errors','on');
  error_reporting(E_ALL);
  ini_set('memory_limit','128M'); 
  ini_set('max_execution_time','300');  

  $image_info   = getimagesize($imageLocation);
  $image_width  = $image_info[0];
  $image_height = $image_info[1];
  $image_type   = $image_info[2];

  switch ( $image_type )
  {
    // snip...
    case IMAGETYPE_JPEG:
      $image = imagecreatefromjpeg($imageLocation);
      break;

    default:
      break;
  }

  // snip...
}

println hata ayıklama benim mistik güçlerini kullanarak, ben imagecreatefromjpeg dönen olmadığını belirlemek mümkün oldum; onu aldığında aslında, script tamamen durdurur. Bazı gerçekler:

  • Bu dosya boyutu ile ilişkilidir. 1MB altında Görüntüler (nokta-kontrol) ince gibi görünen, ama 3MB kusmuk etrafında görüntüler. Hiçbir ipucu hassas kesim olsa da, budur.
  • Bu sunucu zaman aşımları nedeniyle değil; wget (büyük görüntüleri hiçbir işleme gösteren) "uygun küçük" görüntüler üzerinde önemli ölçüde daha uzun 3MB görüntülerde <1s, geri dönüyor.
  • @ bastırmak için hatalı işlev çağrısı önüne doğrudan bir etkisi yoktur. Bu komut bir hata atma olmadığı gerçeği ile iyi bir uyum, sadece sessizce bu işlev çağrısı üzerine sonlandırma oluyor.

Sanırım olsaydı, 1 & 1 sunucularında girdi dosya boyutlarını sınırlayan Ben bilmek (veya erişimi) olmayan bazı GD parametre olabilir - yapılandırma değişkeni tahmin hemen barfs olması nedeniyle ve görüntü üzerinde herhangi bir fiili yükleme veya hesaplamalar yapmak için (heuristically) görünmüyor.

Herhangi bir öneriniz? Yardımlarınız için teşekkürler.

Uptarih (courtesy @Darryl's yorum): calls to phpinfo PHP max_execution_time güncelleme olduğunu gösterir ve memory_limit değişkenleri doğru. Bu mutlaka bu kaynaklar da beklendiği gibi saptanmıştır basitçe, tahsis ediliyor anlamına gelmez.

Uptarih 2: Google bazı referanslar aşağıda, ben hayır şans ile (200KB kadar 3MB dan kalite azaltılmış) JPEG optimize çalıştı, bu yüzden bir görüntü dosya boyutu sorun değil. Daha sonra orijinal 3888x2592 görüntünün piksel sayısını azaltarak çalıştı ve ilk başarılı boyutu çok mantıklı değil "hatalı biçimlendirilmiş JPEG", belirten yarım ayrıştırır ve hataları 1400x2592 (1401x ve 1402x hem sonucu olmadıkça tüm görüntü ) yüklenen varlık değildir. 1300x2592 daha da azaltarak, ben aslında arıyorum 400x300 küçük resim örneğini; 1400x2592 de, imagecreatetruecolor imagecreatefromjpeg gibi aynı şekilde sessizce başarısız ben o görevi dikkat çekmek için kullanıyorum diyoruz.

Bu neden olarak, ben biraz belirsiz değilim. 1400 * 2592 == 3.5MB özellikle anlamlı bir şey verir, ama ben bu GD + PHP işleyecek piksel sayısına bir sınır olduğunu hayal etmek var.

2 Cevap

this note php web sitesinde bellek kullanımı ile ilgili bakınız.

* "Imagecreatefromjpeg kullanarak bir görüntüyü () yüklemek için gerekli bellek görüntünün boyutları ve havai tarafından multipled görüntüleri en bit derinliği, bir fonksiyonudur.

Bu formül kullanılarak hesaplanmaktadır yapabilirsiniz:

Num = Genişlik * Yükseklik * Bit piksel başına * Tepegöz geçiştirmek faktörü "* bayt

Ben 1 & 1 komut memory_limit veya max_execution_time değiştirmek için izin vermez tahmin ediyorum, bu yüzden muhtemelen bellek tükeniyor. Eğer phpinfo() sınırları ne olduğunu görmek için çalışan denediniz mi?