[PHP] Upload immagine in un form con target _blank: non funziona

Ciakko

Nuovo Utente
5 Giu 2014
11
0
1
Salve a tutti, sono relativamente nuovo del forum, anche se vi seguo da parecchio.
Mi diverto con la programmazione per il web in attesa di poterne fare un lavoro, e sperimento su sperimento incappo a volte in dubbi esistenziali, eccone uno.
Ho la necessità di aprire una nuova finestra all'invio del mio form (multipart/form-data) per cui uso target="_blank", target="_new" oppure associo il target al mio bottone o input con formtarget. Con i dati di testo non ho alcun problema mentre con le immagini ho un problema strano, ossia il php riceve un file con la sua estensione ma non con una grandezza, ossia vuoto.
Questo è il php che elabora l'immagine:
PHP:
if (preg_match('/jpeg/i', $_FILES['userFile']['type'])){
$estensione = 'jpeg';}
else if (preg_match('/png/i', $_FILES['userFile']['type'])){
$estensione = 'png';}
else if (preg_match('/gif/i', $_FILES['userFile']['type'])){
$estensione = 'gif';}
else die ('<h1>Errore!!!</h1><br/><h3>Estensione ('.$type.') non supportata</h3>');


list($width, $height) = getimagesize ($_FILES['userFile']['tmp_name']);

echo 'Tipo di file: '.$_FILES['userFile']['type'].'<br>';
echo 'Larghezza file: '.$width.'<br>';
echo 'Altezza file: '.$height.'<br>';

$handle = fopen ($_FILES['userFile']['tmp_name'], 'r+') or die ('<h1>Errore</h1><br/><h3>impossibile aprire il file immagine prodotto</h3>');
$image = fread ($handle, filesize($_FILES['userFile']['tmp_name'])) or die('<h1>Errore</h1><br/><h3>impossibile leggere il file immagine</h3>');
fclose ($handle);
A schermo ottengo questo:
Tipo di file: image/jpeg
Larghezza file:
Altezza file:

Warning: fread(): Length parameter must be greater than 0 in ...
Errore
impossibile leggere il file immagine

Se provo il codice offline con Mamp funziona, online no e chiaramente se il form lo invio alla stessa pagina il tutto funziona correttamente. Non ho idea del perché succeda questo e se ci sia una soluzione.
Mi farebbe piacere ogni idea o soluzioni alternative.
Grazie mille.
 
Ultima modifica di un moderatore:

cris8380

Moderatore
Membro dello Staff
MOD
3 Giu 2016
261
14
18
37
Ciao, il target="_blank" va utilizzato davanti all' href
 

cris8380

Moderatore
Membro dello Staff
MOD
3 Giu 2016
261
14
18
37
Ti posto un esempio:

HTML:
<a href="image.jpg" target=_blank><img src="image.jpg" height=49 width=49></a><a href="image2.jpg" target=_blank><img src="image2.jpg" height=49 width=49></a>
//e così via

Codice:
<script language="JavaScript">
lista=new Array('<img src="http://www.miosito.it/immagini/image.jpg" width=196, height=195>','<img src= "http://www.miosito.it/immagini/image2.jpg" width=196, height=195>')
titolo= new Array("image", "image2")
maxL=new Array(220,220,322,196)
maxH=new Array(250,250,260,150)
function apri(conta) {
L=maxL[conta]
H=maxH[conta]
finestra= window.open('vuoto.htm','nome','width=400,height=400')
finestra.focus()
finestra.resizeTo(L,H)
finestra.document.write('<html><title>'+titolo[conta]+'</title><body>' + lista[conta] +'</body></html>')
finestra.document.close()
}
</script>[/B]
 

Ciakko

Nuovo Utente
5 Giu 2014
11
0
1
:) Grazie, lo so, ma non è il mio caso. Io invio un form non ho un link. Il target è riferito al tag form o al bottone di invio.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
prova a modificare
PHP:
list($width, $height) = getimagesize ($_FILES['userFile']['name']);
e subito dopo metti un va_dump per verificare
PHP:
var_dump($width, $height);//poi lo togli
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
allora prima dei controlli sul file metti un altro var_dump per verificare che la trasmissione sia giusta
PHP:
<?php
echo "<pre>";
var_dump($_FILES['userFile']);
echo "</pre>";
//il tag pre ti serve per ordinare bene quello che eventualmente ti restituisce
//... ecc
?>
se ti ta NULL vuol dire che la trasmissione dal form non avviene, se ok ti dovrebbe dare tutti i valori di $_FILES['userFile']['tmp_name'] ecc...
piccolo dubbio probabilmente stupido
nel tag form hai messo enctype="multipart/form-data" ?
 

Ciakko

Nuovo Utente
5 Giu 2014
11
0
1
Ciao, sì il form è settato su enctype="multipart/form-data".
Non ho tempo ora di testare con un codice pulito e ridotto all'osso se la situazione si ripresenta ugualmente, se fosse così sembra una "falla" nel trasporto dei dati. Magari dipende dalla versione di php, da qualche settaggio del server che imposta la cartella del file temporaneo o semplicemente html non supporta l'invio in post di files su una nuova finestra.
Sono solo supposizioni, speravo che qualcuno avesse avuto lo stesso mio problema.
Grazie lo stesso a tutti, aggiornerò più avanti.
Ciao