[PHP - MySQL] Upload di un File

  • Creatore Discussione Creatore Discussione B-enemy
  • Data di inizio Data di inizio

B-enemy

Nuovo Utente
17 Set 2009
4
0
0
Ciao, ho un problema:

Su windows XP ho installato un server web Apache ora facendo degli esperimenti in locale non sono riuscito a far accettare uno script PHP che permetta l'upload di un file all'interno di una cartella del server.
la configurazione del file php.ini mi sembra corretta però quando quando clicco upload il server mi ritorna questo errore:
1024 byte = 1 Kb $dimensione_massima_Kb=$dimensione_massima/1024; $cartella_upload="c:/root/"; //cartella in cui eseguire l'upload (controllare permessi scrittura) // percorso cartella relativo $cartella_upload="../"; $filtrare=1; //filtrare x estensioni ammesse? 1=si 0=no $array_estensioni_ammesse=array('.jpg','.jpeg','.gif','.png'); //estensioni ammesse if(!isset($_FILES['file1']) || $_FILES['file1']['size']==0){ echo "Nessun file selezionato per l'upload"; }elseif($_FILES['file1']['size']>$dimensione_massima){ echo "Il file selezionato per l'upload supera dimensione massima di $dimensione_massima_Kb Kb"; }else{ $nome_file=$_FILES['file1']['name']; $errore=""; if($filtrare==1){ $estensione = strtolower(substr($nome_file, strrpos($nome_file, "."), strlen($nome_file)-strrpos($nome_file, "."))); if(!in_array($estensione,$array_estensioni_ammesse)){ $errore.="Upload file non ammesso. Estensioni ammesse: ".implode(", ",$array_estensioni_ammesse)."
"; } } if(!file_exists($cartella_upload)){ $errore.="La cartella di destinazione non esiste
"; } if($errore==""){ if(move_uploaded_file($_FILES['file1']['tmp_name'], $cartella_upload.$_FILES['file1']['name'])){ chmod($cartella_upload.$_FILES['file1']['name'],0777); //permessi per poterci sovrascrivere/scaricare echo "Operazione eseguita con successo. Upload riuscito."; }else{ echo "Impossibile effettuare l'upload del file"; } }else{ echo $errore; } } ?>

il mio script php è questo:
<?
$dimensione_massima=51200; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kb
$dimensione_massima_Kb=$dimensione_massima/1024;
$cartella_upload="c:/root/"; //cartella in cui eseguire l'upload (controllare permessi scrittura)
// percorso cartella relativo $cartella_upload="../";
$filtrare=1; //filtrare x estensioni ammesse? 1=si 0=no
$array_estensioni_ammesse=array('.jpg','.jpeg','.gif','.png'); //estensioni ammesse

if(!isset($_FILES['file1']) || $_FILES['file1']['size']==0){
echo "Nessun file selezionato per l'upload";
}elseif($_FILES['file1']['size']>$dimensione_massima){
echo "Il file selezionato per l'upload supera dimensione massima di $dimensione_massima_Kb Kb";
}else{
$nome_file=$_FILES['file1']['name'];
$errore="";
if($filtrare==1){
$estensione = strtolower(substr($nome_file, strrpos($nome_file, "."), strlen($nome_file)-strrpos($nome_file, ".")));
if(!in_array($estensione,$array_estensioni_ammesse)){
$errore.="Upload file non ammesso. Estensioni ammesse: ".implode(", ",$array_estensioni_ammesse)."<br/>";
}
}
if(!file_exists($cartella_upload)){
$errore.="La cartella di destinazione non esiste</br>";
}

if($errore==""){
if(move_uploaded_file($_FILES['file1']['tmp_name'], $cartella_upload.$_FILES['file1']['name'])){
chmod($cartella_upload.$_FILES['file1']['name'],0777); //permessi per poterci sovrascrivere/scaricare
echo "Operazione eseguita con successo. Upload riuscito.";
}else{
echo "Impossibile effettuare l'upload del file";
}
}else{
echo $errore;
}
}
?>

chi mi può aiutare a capire cosa mi manca? ho installato PHP 5.3 e Apache 2
 
Non vorrei dire una stupidaggine ma credo che non sia un problema di upload ma più che altro della configurazione di php, sei certo che l'interpreta php sia configurato per accettare
PHP:
<? e non solo <?php
????
 
Non hai detto stupidaggini affatto perché mi hai risolto il problema...
Per me era trovare un ago in un pagliaio. Grazie mille Lotus. Il mio dubbio è:
che differenza c'è tra i due TAG "<?" e "<?PHP" pensavo andassero entrambi. Che ci sia qualche modifica che devo fare sul file di configurazione "php.ini" ?

ciao e grazie ancora

Edit:
ora ho un altro problema, quando cerco di uploadare file piccoli allora lo script funziona che è una meravigli, se però provo con file grandi da 50Mb in Su viene inviata la richiesta al server per un po' poi lo script mi ritorna l'erreore "Nessun file selezionato"... Secondo me dal php.ini bisogna modificare qualcosa perché aumenti il tempo per l'elaborazione dello script.
Cosa dovrei modificare ?
 
Ultima modifica:
Ciao... dunque per il punto 1 la direttiva da modificare è "short_open_tag" all'interno del file php.ini
mentre per il punto 2
dovrebbe essere sufficiente modificare "upload_max_filesize" sempre nelk php.ini.. se dovessi avere problemi ci dovrebbero essere altre due voci,
1 per il tempo di esecuzione dello script ed un altra per la dimensione passima dei dati passati tramite post.
A questo indirizzo c'è una descrizione completa ed esaustiva
http://it2.php.net/manual/en/ini.core.php
Spero di esserti stato utile
Ciao, Ciro
 
Ciao Lotus e grazie ancora del tuo aiuto, però qui la cosa si complica un po'.
Allora la richiesta al server c'è, ho modificato abbondantemente tutti i parametri del file php.ini per permettere l'upload di file grossi però anche se si noto che il trasferimento sta avvenendo lo script esce prima di completare l'operazione ritornando il messaggio del primo controllo if ("non è stato selezionato alcun file") e questo suona strano...
ho hostato su megaupload il mio file php.ini se per caso vuoi darci un occhiata, magari ho sbagliato qualcosa io :crying:

ht*p://www.megaupload.com/?d=P1ISVGRI
 
ho notato che hai impostato
upload_max_filesize = 20000M
prova a modificare
max_execution_time = 30
con un valore molto più elevato
ed anche
post_max_size = ..


Fai questo tentativo se non va rivediamo anche il codice...
Tuttavia, in verità, mi verrebbe da dirti che l'upload di file così grandi e una configurazione così spinta del php.ini non è per niente sicuro....

...Una persona con un minimo di conoscenze potrebbe impallarti il sistema..
Posso chiederti nello specifico che cosa stai implementando? E' per uso personale o lavorativo? E' accessibile solo dall'intranet o anche da internet?
Fammi sapere
Ciro
 
ho modificato così:

upload_max_filesize = 200M
post_max_size = 210M
max_execution_time = 80000
default_socket_timeout = 60000

e ancora lo stesso problema.

Ho una rete privata con 3 PC + PS3 e non accessibile dall'esterno (almeno non per esseri umani come me) conosco in buona parte il C, ma non la programmazione lato server e il PHP lo stò scoprendo adesso e non sono affatto un addetto ai lavori quindi trovare il connubio tra codice e configurazione del server come vedi mi spiazza molto. per pura curiosità e stima per l'idea del codice libero mi sono appassionato alla programmazione e mi piacerebbe arrivare a costruire codice con le mie mani :beer:

ciao
 

Discussioni simili