Newsgroup: it.comp.www.php
Titolo: Foto degli utenti

Sto implementando un sistema per fare in modo che gli utenti possano 
inserire la loro foto. Ho scritto il seguente codice ma non so perchè non 
funziona:
<?
if ($_FILES['imagefile']['type'] == "image/pjpeg" or "image/gif"){
  copy ($_FILES['imagefile']['tmp_name'], 
"foto/".$_FILES['imagefile']['name'])
  or die ("<br>Impossibile caricare il file sul server");    //questo è cio 
che mi restituisce ogni volta che provo a caricare un qualsiasi file anche 
jpeg
  } else {
  echo "<b>Upload non effettuato!</b>, il file non è jpg o gif";
  }
$indirizzo = "foto/".$_FILES['imagefile']['name'];
echo "<br>".$indirizzo;
?>
Ho letto che dovrei impostare la cartella foto su CHMOD 777, però il mio 
sito è su server windows, ma viene specificato che vale solo per i server 
linux.
In oltre ho provato cmq a settare la mia cartella su 777 ma mi da un errore. 
Se può servire il mio sito è hostato su Aruba.
Grazie to all! 

 permessi :)
Ok grazie :) ma perchè lo script non mi funziona lo stesso? 

 errore. Se puň servire il mio sito č hostato su Aruba.
Metti lo script nella cartella public e hai risolto i problemi relativi ai
permessi :)
--
Majere

 if ($_FILES['imagefile']['type'] == "image/pjpeg" or "image/gif"){
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1) Non ti basare sul mime per poter conoscere il tipo di file (c'e' scritto
anche nella documentazione su 
PHP.NET
 nella sezione upload);
2) C'e' un errore di sintassi in questa if: avresti dovuto scrivere:
if (($_FILES['imagefile']['type'] == "image/jpeg") || ($_FILES['imagefile'
['type'] == "image/gif")){
-- 
Ciao,
 Fabrizio
=== 
http://www.negusweb.it
 ===

 ['type'] == "image/gif")){
Grazie Negus, ti posso chiedere solo un favore mi spiegheresti cosa 
significa || in mezzo alla funzione?
Grazie mille 

 anche nella documentazione su 
PHP.NET
 nella sezione upload);
e su cosa bisognerebbe basarsi, se non sul mime, per capire il tipo di file?
su 
php.net
 non lo trovo scritto da nessuna parte.

significa || in mezzo alla funzione?
OR
Francesco Mazzi
Webmaster di AltroPC.it - 
http://www.altropc.it
 
Project Admin di "PHP Reservation - Online booking system" - 
http://phpreservation.sourceforge.net
Dev.Staff di E-Xoopport - 
http://dev.e-xoopport.it

su 
php.net
 non lo trovo scritto da nessuna parte.
Forse sull'estensione???


 Forse sull'estensione???
Scusate ma io credo di essermi basato sull'estensione... altrimenti come si 
può fare?
$_FILES['imagefile']['type'] == "image/jpeg"
questo l'ho messo per controllare l'estensione. Cmq non riesco a caricare il 
file lo stesso... non capisco dov'è sbagliato... in oltre ho provato anche a 
scaricare qualche script già fatto ma non mi funzionano neanche quelli... è 
strana questa cosa...
Ora come ora lo script che uso è questo:
<?
if (($_FILES['imagefile']['type'] == "image/jpeg") || 
($_FILES['imagefile']['type'] == "image/gif")){
  copy ($_FILES['imagefile']['tmp_name'], 
"foto/".$_FILES['imagefile']['name'])
  or die ("Impossibile caricare il file sul server");
  } else {
  echo "<b>Upload non effettuato!</b>, il file non è jpg o gif";
  }
$indirizzo = "foto/".$_FILES['imagefile']['name'];
echo "<br>".$indirizzo;
?>
non mi sembra sbagliato... :( 

 Forse sull'estensione???
quindi sarebbe meglio controllare che il file si chiami "nomefile.jpg"
piuttosto che controllarne il mime type?


E esiste un modo per farlo che non sia il mime? io tutte le guide e 
spiegazioni che trovato sulla rete fanno riferimento al mime... potresti 
illustrarmi il funzionamento? te ne sarei molto grado... grazie! 

 ha scritto

per quel che ne so il mime e' il metodo piu' sicuro per identificare un file

 Forse sull'estensione???
No, peggio ancora.
Piuttosto usate:
http://www.php.net/manual/en/function.getimagesize.php
Bye.


usa move_uploaded_file() invece di copy(), leggi il manuale:
http://www.php.net/manual/it/features.file-upload.php



http://www.php.net/manual/en/function.getimagesize.php
Questa serve solo a sapere se il file è un'immagine, ma non ti dice il
tipo di immagine, ali limite si può usare questa:
http://www.php.net/manual/it/function.exif-imagetype.php
ma secondo me un controllo sull'estensione basta e avanza in questo
caso.


 caso.
(PHP 4 >= 4.3.0, PHP 5)
Nota:  Questa funzione � disponibile solo con PHP 4 compilato
utilizzando l'opzione --enable-exif.
E richiede libexif:
Hey windozers,
It's worthy of note that on the windows platform, a lot of functions
aren't compiled into the default build of php. The exif functions, for
example (ie. exif_imagetype), aren't included.
OK, si guadagna qualche millisecondo perche` la prima ritorna anche le
dimensioni, ma se si deve fare una thumbnail o ridimensionare l'immagine
per qualsiasi motivo, e` piu` veloce getimagesize che exif_imagetype
seguita da altre funzioni che trovano le dimensioni.
Bye.

Alessandro Pellizzari ha scritto:

si ok, questo se e' un' immagine.
ma se volessi fare l'upload di un video? uno l'estenzione puo' sempre
cambiarla e far credere che sia cio' che non e' quindi la cosa migliore IMHO
resta controllare il mime.

 resta controllare il mime.
Il MIME dipende dal browser. Adesso non so come funzioni Windows, ma non
mi meraviglierei se IE passasse il MIME in base all'estensione. E ti
ritrovi punto e daccapo.
Se proprio si vuole controllare tutto, il modo piu` semplice e sicuro e`
usare system() sotto Linux per richiamare "file", che e` un comando che
ti dice cosa contiene il file.
Multipiattaforma, credo che l'unico modo sia smazzarsi a mano i magic
number dei file. O trovare una classe che lo fa gia`.
Bye.

 
http://www.php.net/manual/it/features.file-upload.php
Già provato...
Anche solo così non funziona ma non è possibile...
<?php
move_uploaded_file($_FILES['userfile']['tmp_name'], 
"/foto/".$_FILES['userfile']['name'])
  or die ("Impossibile caricare il file sul server");
$indirizzo = "/foto/".$_FILES["userfile"]['name'];
echo "<br>".$indirizzo;
?>
- Mi restituisce questo: Impossibile caricare il file sul server
Lo script completo che invece uso è questo:
<?php
$dir = '/foto/';
print "<pre>";
$estensione=$_FILES['userfile']['type'];
$e1="image/jpg";
$e2="image/gif";
$e3="image/JPG";
$e4="image/GIF";
if (($_FILES['userfile']['type'] == "$e1")||($_FILES['userfile']['type'] == 
"$e2")||($_FILES['userfile']['type'] == "$e3")||($_FILES['userfile']['type'] 
== "$e4")){
  move_uploaded_file($_FILES['userfile']['tmp_name'], 
"$dir".$_FILES['userfile']['name'])
  or die ("Impossibile caricare il file sul server");
  } else {
  echo "<b>Upload non effettuato!</b>, il file non è valido";
  }
$indirizzo = "/foto/".$_FILES["userfile"]['name'];
echo "<br>".$indirizzo;
?>
In parte è basato sull'esempio che viene mostrato nel manuale:
http://www.php.net/manual/it/features.file-upload.php
 

 file? su 
php.net
 non lo trovo scritto da nessuna parte.
Sull'estensione, per esempio.
Il mime viene fornito dal browser e non dev'essere fornito necessariamente
<documentazione>
$_FILES['userfile']['type']
    Il mime-type del file, se il browser fornisce questa informazione. Un
esempio potrebbe essere "image/gif". 
</documentazione>
