PHP görüntü dosyası oluşturur ancak uzak sunucuda, yerel dev değil çalışıyor

4 Cevap php

Ben dinamik olarak yeniden boyutlandırır ve tarayıcıya gönderir bir kodu var.

Ama ben bunun yerine tarayıcının bir dosyaya çıktı görüntüyü onu sadece eğer sormak ... düzgün çalışmıyor.

Çünkü bu sorun only occurs on the real server Ben, sorun benim kod olduğunu sanmıyorum; benim bilgisayar onun mükemmel bir çalışma.

Kod:

$img = $_GET['img'];

ini_set('allow_url_fopen', 'on');

$info = getimagesize($img);
header('Content-type: '.image_type_to_mime_type($info[2]));
Fotos::redimensiona($img, null, Fotos::MINIGAL_WIDTH, Fotos::MINIGAL_HEIGHT, false);

Fotos :: redimensiona ():

//[...] a whole bunch of code calculating dimensions, they just works
// $funcImage is like 'imagejpeg'/'imagepng'/'imagegif', depends on file
if ($arquivo) {
	$funcImage($thumb, "$final.$ext");
	return "$final.$ext";
}
else {
	$funcImage($thumb);
}

Unutmayın: works, yerel kalkınma, ancak uzak web sunucusu üzerinde değil.

[EDIT]
if I comment the header line, the binary code is printed; and this code changes when i change the original image, as expected.
But with the header Firefox shows me the URL of the page (like http://www.sabianoar.com.br/novosabia/inc/phpImg.php?img=awful_escaped_long_path.jpeg), and if I do CTRL+I it tells me it is an JPEG of 0x0 size, and like 10kb.
Opera shows me an empty image, as it would do if I had placed an <img> with the wrong src, i.e.

[EDIT2] EyeOfGnome says "Not a JPEG file: starts with 0xef 0xbb" when I try to save and then open the output (it saves to a .jpeg file normally).

4 Cevap

Sizin kod çıkışları BOM başında. Daha önce Reçetesi varsa uzak bir web sunucusundan kodunuzu açın ve (örneğin XXd için, onaltılık editörü kullanarak) kontrol <?php. BOM Baktığınız bir dosyada değilse, bu içerir olabilir.

Bazı editörler BOM ve apache çıkışları bu ekleyecek. Bu sizin görüntüleri sonları ne muhtemelen.

Görüntünün bulunduğu görüntü / dizininin izinlerini denetleyin.

Bu muhtemelen nedeni değildir, ama neden sonucunu yankılanıyor Fotos::redimensional()? imagejpeg(), vb gibi tüm fonksiyonlar görüntü çıktısı sonra bir bool (değil görüntü verileri) dönmek, böylece görüntünün sonuna bir '1 'baskı sona erecek. Ben sadece bu olsa test ve jpeg görüntüleri kırmak için görünmüyor.

Eğer sunucuya yerel makine karşılaştırarak denediniz mi? Phpinfo () karşılaştırmak; Farklı platformlar?