Newsgroup: it.comp.www.php
Titolo: problemi con imagejpeg

Mi è capitato un brutto problema, e ve lo sottopongo con la speranza che
qualcuno di voi l'abbia gia' a suo malgrado verificato e risolto.
Il problema si verifica solo su una macchina (fin'ora) ed è relativo
alla generazione di JPEG al volo con le lib GD2 e la funzione imagejpeg().
Lo script LAMP in questione crea una miniatura al volo dell'immagine
prendendo come parametro il percorso immagine, e viene richiamato in
condizioni normali attraverso l'uso del mod_rewrite (come il resto del
sito web).
Su questa configurazione viene generata una JPEG danneggiata (per
l'esattezza facendo una comparazione, presenta 6 byte iniziali in + in
confronto a quella elaborata in condizioni ok).
Facendo ulteriori test, ho notato che la libreria GD2 e' installata e
configurata correttamente tantè che richiamando lo script senza
mod_rewrite tutto funziona correttamente.
A cosa potrebbero essere dovuti questi 6 byte iniziali che invalidano il
formato? (inutile allungare il post con codice, si tratta di poche righe
che fanno un semplice resize e usano imagejpeg con qualità 80).
Grazie in anticipo!
-- 
2T STUDIO - Sviluppo Web
  [web]   
http://www.2t-studio.com/ng
	- Sviluppo Siti e Applicativi Web Oriented Validati W3C
	- Consulenze SEO (Posizionamento motori di ricerca)

 che fanno un semplice resize e usano imagejpeg con qualità 80).
Problemi con l'indirizzo passato .. ??? Prova a passargli il percorso 
fisico cioè dove è ubicata proprio l'immagine senza url rewrite ..
-- 
SEZIONE RECUPERO LAVORO: Lancio di una nuova lavatrice sul mercato, due 
morti e sei feriti.
[CapoBecchino] - hotmail/msn: capobecchino [@] hotmail [.] com

formato?
Mah... chunked-encoding, mod_deflate... va' a sapere. Forse, vedendoli
mi viene in mente qualcosa. A dire il vero, il bug del CTE ne dovrebbe
aggiungere 2 e quello del mod_deflate 20, e dovrebbe essere corretto a
partire da Apache 2.0.45.
Prova anche a salvare il JPEG su file e inviare un die('fine!'), cosi'
vedi se i sei byte sono sul JPEG (e allora e' la GD2 che svagella) o -
anche se e' quasi sicuro che sia quest'ultima - in Apache.
Leonardo
-- 
Geordie - he's a man, there's little doot about't,
He's done all he can, wha' can do withoot't?
Doon there cam a blade, linkin' like me lordie,
He wad drive a trade, a' the loom of Geordie.

 fisico cioè dove è ubicata proprio l'immagine senza url rewrite ..
difatti, richiamandolo direttamente non aggiunge questi 6 byte, e
l'immagine non viene compromessa.
ma tutto il sito gira con il mod rewrite, funziona con tutti gli altri e
su altri hosters. qui succede l'inghippo :S


 anche se e' quasi sicuro che sia quest'ultima - in Apache.
Tale confronto l'ho infatti fatto sui 2 files salvati. I 6 Bytes vengono
aggiunti all'inizio.
Grazie della risposta!!


 Content-Length: 5076
5076 è giusto?

 Intestazioni di risposta file richiamato da modrewrite (errato):
Date: Fri, 02 Feb 2007 11:04:42 GMT
Server: Apache/2.0.54 (Fedora)
X-Powered-By: PHP/5.0.4
Connection: close
Transfer-Encoding: chunked
Content-Type: image/jpeg
200 OK
che dal punto di vista delle intestazioni sono le stesse!


> Mah... chunked-encoding, mod_deflate... va' a sapere.
Buona la prima che ho detto. Per qualche motivo che non si capisce, viene
perso lo header chiave ("Transfer-Encoding: chunked"), mentre l'output e'
rimasto chunked (e quindi contiene tutti i byte extra richiesti).
Prova a disabilitare del tutto il chunking; oppure prova a RIMANDARE quel
particolare header, sperando che cosi' non lo tolga:
	Header("Transfer-Encoding: chunked");
Quell'ef bb... e' parte del chunking protocol (Apache aveva questo bug se
usavi un reverse proxy, ma ormai penso sia stato corretto).


On Fri, 02 Feb 2007 11:53:47 +0100, 2T STUDIO <inf...@SPAM2t-studio.com>
wrote:
Un modo disgraziato di eliminare il chunking DOVREBBE essere questo:
	ob_start();
	Header('Content-Type: image/jpeg');
	ImageJPEG($gd);
	// Questo sotto FORSE non serve
	Header("Content-Length: " . strlen(ob_get_contents()));
	// E anche questo
	ob_end_flush();
	// E anche questo. Levali partendo dall'ultimo e guarda
	// cosa succede.
	exit();
Un altro sistema DOVREBBE essere quello di specificare
	Header('HTTP/1.0 200 OK');
Prova, hai visto mai...
Leonardo inaffidabile


Ho provato entrambi i sistemi, senza successo. Vedro' di chiedere
all'hoster maggiori info riguardo il chunking.


all'hoster maggiori info riguardo il chunking.
A mali estremi prova a forzare un "downgrade-1.0" in SetEnv per la
location interessata (dapprima prova per tutto il server virtuale,
perche' non saprei dirti se conti la location prima, o quella dopo
il mod_rewrite).
Per assicurartene comunque, puoi provare a chiedere il file usando
Internet Explorer dopo averlo forzato ad usare HTTP/1.0, come dice
qui:
http://support.microsoft.com/kb/263754/en
Se il problema in IE scompare, siamo sicuri che e' quello.
Leonardo
