Newsgroup: it.comp.www.php
Titolo: In locale si, sul web no.

Premesso che non è una questione di permessi di scrittura, vi viene in mente 
un motivo per il quale questo script funziona in locale (easyphp) ma non sul 
web?
Ecco lo scriptino:
<?
$colori = $_REQUEST['c'];
$immagine = $_REQUEST['img'];
$nomefile = $_REQUEST['file'];
$img = imagecreatefromgif ($immagine);
foreach ($colori as $index => $valuetext)
{
$values = explode(',', $valuetext);
imageColorSet($img, $index, $values[0],$values[1],$values[2]);
}
header("Content-Type: image/gif");
imagegif($img,"img/user/".$nomefile);
?> 

 <?
Uhm, la cosa più ovvia: short_open_tag abilitato in locale e 
disabilitato in remoto?
-- 
Jax

 disabilitato in remoto?
Scusa, non ho premesso che sono abbastanza niubbio...
potresti dirmi cosa potrei provare a fare per risolvere?
Cosa dovrei modificare in quello script se è quello che non va?
Grazie in anticipo. 

 disabilitato in remoto?
Intendi forse il <?php al posto di <?
ho provato ma non cambia nulla! :-( 

 ho provato ma non cambia nulla! :-(
Prova a mettere un
error_reporting(E_ALL);
prima di ogni altra cosa.
E vedi se ti spara fuori qualche errore...
-- 
Jax


Per prima cosa, grazie dell'interesse.
Seconda cosa, forse il problema non è in quel file. Provo a spiegarmi 
meglio.
E' uno script che modifica i colori di una gif e, se ti piace il risultato 
la salva, o almeno dovrebbe.
Credo che lo script che ti ho postato non venga neanche carica! :-(
Provo a mettere i passaggi che faccio per arrivare a quel file cosa che in 
locale succede ed in realtà no.
Allora ho un primo file dove vedo l'anteprima della gif ricolorata, mi 
segui?
A ad un certo punto se mi piace il risultato lo salvo. Ecco come ho fatto 
questo.
Il file dell'anteprima contiene questo codice:
...
echo "var m = 
'Salvaimage.php?file=".$id."_m.gif&img=".$tip."&c[0]=".$pmanRGB_0."&c[1]=".$pmanRGB_1."'\n";
echo "var p = 
'Salvaimage.php?file=".$id."_ma.gif&img=".$tip."&c[0]=".$pmaanRGB_0."&c[1]=".$pmaanRGB_1."'\n";
echo "var c = 
'Salvaimage.php?file=".$id."_mb.gif&img=".$tip."&c[0]=".$pmnanRGB_0."&c[1]=".$pmnanRGB_1."'\n";
...
echo "<img 
src='Image.php?file=".$id."_m.gif&img=".$tip."&c[0]=".$pmanRGB_0."&c[1]=".$pmanRGB_1."'\n";
echo "<img 
src='Image.php?file=".$id."_ma.gif&img=".$tip."&c[0]=".$pmaanRGB_0."&c[1]=".$pmaanRGB_1."'\n";
echo "<img 
src='Image.php?file=".$id."_mb.gif&img=".$tip."&c[0]=".$pmnanRGB_0."&c[1]=".$pmnanRGB_1."'\n";echo 
"</div>\n";
....
echo "<input type='button' value='Salva ed Esci' class='buttonpreview' 
onClick='salvaechiudi()'>\n";
echo "<input type='button' class='buttonpreview' value='Prova altra 
Combinazione' onClick='window.close()'>\n";
La parte in cui viene chiamato il file image.php funziona sia in locale che 
sul web e richiama la gif modificata solo sullo schermo, come vedi 
proseguendo c'è un bottone che chiama una funzione js che è la seguente:
function salvaechiudi() {
document.write("<img src='"+m+"'>");
document.write("<img src='"+p+"'>");
document.write("<img src='"+c+"'>");
}
dove le variabili m, p, c, sono quelle create poco sopra che richiamano il 
file Salvaimage.php che, essendo quello postato all'inizio, dovrebbe salvare 
il file ricolorato.
Ora il tutto in locale funziona benissimo (uso Easyphp) mentre sul web, non 
si salva nulla credo che non si arrivi neanche alla chiamate del file 
salvaimage.php
Purtroppo più chiaro di così non riesco ad essere spero tu possa aiutarmi.
Grazie.

web?
Cosa ti aspetteresti che facesse, e cosa fa invece?
Senza queste due informazioni (specie la seconda) si va poco lontano.
Leonardo
-- 
IN NO EVENT SHALL MICROSOFT [] BE LIABLE FOR [] FAILURE TO MEET ANY DUTY
INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR NEGLIGENCE [] EVEN IN
THE EVENT OF [] BREACH OF CONTRACT OR BREACH OF WARRANTY OF MICROSOFT...
                              -- EULA di Windows Media VCM 9, articolo 8

 Leonardo
Per prima cosa, grazie dell'interesse, grazie alle tue preziose info ho 
fatto cose che non avrei mai pensato di poter fare... :-)
Comunque provo a descrivere meglio il tutto... forse il problema non č in 
quel file.
Provo a spiegarmi meglio.
E' uno script che modifica i colori di una gif (ti ricordi l'altro post?) e, 
se ti piace il risultato la salva, o almeno dovrebbe.
Credo che lo script che ho postato inizialmente, invece, non venga neanche 
caricato quando lo testo sul web (in locale č tutto ok)!
Provo a mettere i passaggi che faccio per arrivare a quel file.
Allora ho un primo file dove vedo l'anteprima della gif ricolorata, mi 
segui?
A ad un certo punto se mi piace il risultato lo salvo. Ecco come ho fatto 
questo.
Il file dell'anteprima, in pho, contiene anche questo codice:
...
echo "var m = 
'Salvaimage.php?file=".$id."_m.gif&img=".$tip."&c[0]=".$pmanRGB_0."&c[1]=".$pmanRGB_1."'\n";
echo "var p = 
'Salvaimage.php?file=".$id."_ma.gif&img=".$tip."&c[0]=".$pmaanRGB_0."&c[1]=".$pmaanRGB_1."'\n";
echo "var c = 
'Salvaimage.php?file=".$id."_mb.gif&img=".$tip."&c[0]=".$pmnanRGB_0."&c[1]=".$pmnanRGB_1."'\n";
...
echo "<img 
src='Image.php?file=".$id."_m.gif&img=".$tip."&c[0]=".$pmanRGB_0."&c[1]=".$pmanRGB_1."'\n";
echo "<img 
src='Image.php?file=".$id."_ma.gif&img=".$tip."&c[0]=".$pmaanRGB_0."&c[1]=".$pmaanRGB_1."'\n";
echo "<img 
src='Image.php?file=".$id."_mb.gif&img=".$tip."&c[0]=".$pmnanRGB_0."&c[1]=".$pmnanRGB_1."'\n";
....
echo "<input type='button' value='Salva ed Esci' class='buttonpreview' 
onClick='salvaechiudi()'>\n";
La parte in cui viene chiamato il file image.php funziona sia in locale che 
sul web e richiama la gif modificata solo sullo schermo, come vedi
proseguendo c'č un bottone che chiama una funzione js che č la seguente:
function salvaechiudi() {
document.write("<img src='"+m+"'>");
document.write("<img src='"+p+"'>");
document.write("<img src='"+c+"'>");
}
dove le variabili m, p, c, sono quelle create poco sopra che richiamano il 
file Salvaimage.php che, essendo quello postato all'inizio, dovrebbe salvare
il file ricolorato.
Ora il tutto in locale funziona benissimo (uso Easyphp) mentre sul web, non 
si salva nulla credo che non si arrivi neanche alla chiamate del file
salvaimage.php
Purtroppo piů chiaro di cosě non riesco ad essere spero tu possa aiutarmi.
Grazie. 

salvaimage.php
Okay. Allora intanto puoi fare cosi':
1) Al file salvaimage.php (occhio a maiuscole e minuscole) aggiungi queste
   righe in cima:
	<?php
		$gd = ImageCreate(32, 32);
		$red = ImageColorAllocate($gd, 255, 0, 0);
		ImageFilledRectangle($gd, 0, 0, 31, 31, $red);
		Header('Content-Type: image/gif');
		ImageGif($gd);
		die();
	?>
   e verifica che cliccando il pulsante compaiano tre quadrati rossi.
2) Richiama il file salvaimage.php con i parametri che trovi nel sorgente
   inviatoti dalla pagina "madre", direttamente, nell'URL del browser. In
   questo modo potrai vedere eventuali errori e capire cosa succede.
Ricorda sempre di mettere
	error_reporting(E_ALL);
come prima riga degli script PHP finche' non sei sicuro che funzionino.


 come prima riga degli script PHP finche' non sei sicuro che funzionino.
L'ho messo ma non mi restituisce nulla! :-( 


Aggiornamento su questo punto, sempre più strano... :-(
Nessun errore restituito da error_reporting(E_ALL);
Se passo singolarmente l'url il salvataggio avviene regolarmente! :-(
Ti dirò di più... ho controllato meglio, lo script così come era all'inizio 
e, altra cosa strana, a volte salva i file, a volte no e comunque mai tutti 
e 3 contemporaneamente... :-(


ehilà, ti sei dimenticato un po' di gestione degli errori, mi pare...
modifica così:
[...]
$img = imagecreatefromgif ($immagine);
if($img)  //testo il valore di ritorno dalla chiamata
{
foreach ($colori as $index => $valuetext)
{
$values = explode(',', $valuetext);
imageColorSet($img, $index, $values[0],$values[1],$values[2]);
}
header("Content-Type: image/gif");
imagegif($img,"img/user/".$nomefile);
}
else // se $img è falso la chiamata alla creazione dell'immagine è
fallita
{
   // butto fuori un errore in qualche modo (echo, redirect, code 500,
ecc.)
   die("AAAARGH! NON MI FUNZIONA LA CREATEIMAGEFROMGIF!!!!");
}
?>
se per caso ti viene fuori il messaggio di errore almeno sappiamo dove
indagare (ma ho un sospettino riguardante la gestione dei path, che
saranno sicuramente diversi tra locale e hosting...)
bye!

Compare 1 quadrato rosso e basta.
Bòno. A quel punto togli il codice del quadrato rosso e riprova, e vedi
cosa ti torna. Dovrebbe restituire l'immagine... o un errore.



wrote:




Inoltre, io vedo che tu chiami
'Salvaimage.php?file=".$id."_m.gif&img=".$tip."&c[0]=".$pmanRGB_0."&c[1]=".$pmanRGB_1."'\n
e dentro fai
...
$nomefile = $_REQUEST['file'];
...
imagegif($img,"img/user/".$nomefile);
Questo e' MALE per almeno due ragioni: una, cosa ne sai te se il file e'
scrivibile.
Due, cosa succede se io passo come nomefile un file tipo
	../../../fileimportante
...e induco Apache a sovrascriverlo con una GIF?
Tre, $immagine e' un file che tu includi pari pari. Ammesso che sia pure
una GIF, non controlli che sia locale, ed io posso quindi indurre il tuo
server a fare un accesso (se fopen_wrapper, e firewall, e il BDSMVDP...)
a un server di MIA scelta. Posso incrementare le statistiche di un sito,
o dare fastidio al webserver di Obama :-), o...


 Leonardo
Prima o poi sistemerò tutto, per ora credo d'aver risolto...
Non c'avevo pensato ma la funzione JS che chiama quel file ha altre 2 righe 
che non ritenevo importanti le due righe sono:
window.opener.close();
window.close();
Praticamente, appena chiamavo la funzione richiudevo la pagina e, ipotizzo, 
non davo il tempo sufficiente per salvare la gif.
Ora, tolte le 2 istruzione tutto funziona come in locale. O almeno credo.
Grazie comunque per l'aiuto ne farà tesoro. 


Prima o poi sistemerò tutto, per ora credo d'aver risolto...
