File upload.php della guida, ma ha un errore

  • Creatore Discussione Creatore Discussione VAik
  • Data di inizio Data di inizio

VAik

Utente Attivo
16 Apr 2016
117
3
18
Ciao a tutti ragazzi

sto studiano la guida PHP ed in particolare la lezione "Gestire gli upload con PHP".

Stavo facendo una prova ad utilizzare tutti i costrutti di controllo descritti nella guida, ma il file mi presenta un errore alla fine.

Potete dirmi cosa è?

mi spiace tantissimo chiedere aiuto per una cosa del genere, ma non so cosa fare

PHP:
<html>

<head><title>Pagina recupero info, in particolare è una pagina di controllo el file uplodato</title></head>

<body>

<h1>questa è una pagina web con estensione .php </h1>
<p><font color = "red">recuperà il file per poi metterlo nella cartella che noi abbiamo <br>predisposto per ospitare i file uploadati </font></p>

<h2>il form che ho creato è abbastanza complesso con vari campi</h2>

<?php

/* Per prima cosa verifico che il file sia stato effettivamente caricato!!
 * Dopo aver verifiato che la variabile $_FILES è settata, uso
 * is_uploaded_file() per verificare se effettivamente è stato trasferito 
 * un file.
 */
if (!isset($_FILES['userfile']) || !is_uploaded_file($_FILES['userfile']['tmp_name'])) {
  echo 'Non hai inviato nessun file...';
  exit;    
}

/* Limito la dimensione massima a 4MB.
 * E' un controllo piuttosto comune :consiste nel verificare se il file 
 * caricato dall'utente non sia superiore ad una dimensione massima:
 */
if ($_FILES['userfile']['size'] > 4194304) {
	echo 'Il file è troppo grande!';
	exit;
}


/* Talvalta può essere utile verificare se il file inviato dall'utente
 *  mediante il modulo di upload sia già presente all'interno della nostra 
 * cartella di destinazione 
 */
$target_file = '/var/www/myupload/' . $_FILES['userfile']['name'];
if (file_exists($target_file)) {
	echo 'Il file esiste già';
	exit;
}


/* Un modo semplice per controllare il tipo di file caricato dall'utente 
 * consiste nell'effettuare una verifica sulla sua estensione.
 * Questo controllo è IMPORTANTE in termini di sicurezza: infatti, si potrebbe
 * caricare sul nostro server del codice malevolo che comprometterebbe
 * la sicurezza del nostro sito web
 */
$ext_ok = array('doc', 'docx', 'pdf');
$temp = explode('.', $_FILES['userfile']['name']);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
	echo 'Il file ha un estensione non ammessa!';
	exit;
}

/*Un tipo di controllo molto comune consiste nel verificare se il tipo 
 * di file corrisponde a quello atteso. 
 * Se, ad esempio, abbiamo predisposto un modulo per il caricamento
 * di immagini è buona norma verificare che il file inviato
 * dall'utente sia effettivamente un file grafico * 
 */
$is_img = getimagesize($_FILES['userfile']['tmp_name']);
if (!$is_img) {
	echo 'Puoi inviare solo immagini';
	exit;



//percorso della cartella dove mettere i file caricati dagli utenti
$uploaddir = '/var/www/myupload/';



//Recupero il percorso temporaneo del file
$userfile_tmp = $_FILES['userfile']['tmp_name'];

//recupero il nome originale del file caricato
$userfile_name = $_FILES['userfile']['name'];

/*copio il file dalla sua posizione temporanea alla mia cartella upload
 * Uso la funzione move_uloaded_file per verificare se effettivamente è
 * stato spostato correttamente nella cartella di detinazione. * 
 * Nel primo caso la funzione restituisce TRUE, oppure FALSE
 */
if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name)) {
  //Se l'operazione è andata a buon fine...
  echo 'File inviato con successo.';
}else{
  //Se l'operazione è fallta...
  echo 'Upload NON valido!'; 
}
?>


</body>
</html>
 
Ultima modifica di un moderatore:
ciao
visto che stai studiando, per verificare l'estenzione del file usa pathinfo fai prima
PHP:
<?php
//....
$estenzione=pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION); 
//ti restituisce l'estenzione del file
$tipo=array('jpg','gif','png');//e altre estenzioni che ti interessano
//e fai la verifica con in_array
//....
?>
poi una cosa
tu verifichi prima che sia un file doc o docx o pdf e se non lo è dal l'exit
poi verifichi se è un immagine, quindi con estenzione o jpg o gif o png
ora se carichi un'immagine per prima cosa verifica che sia doc o docx o pdf e non essendolo esci, quindi un'immagine non te la carica

p.s.
usa il bccode php quando hai del codice php
 
Grazie dei consigli

PHP:
<?php
//....
$estenzione=pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION); 
//ti restituisce l'estenzione del file
$tipo=array('jpg','gif','png');//e altre estenzioni che ti interessano
//e fai la verifica con in_array
//....
?>

poi una cosa
tu verifichi prima che sia un file doc o docx o pdf e se non lo è dal l'exit
poi verifichi se è un immagine, quindi con estenzione o jpg o gif o png
ora se carichi un'immagine per prima cosa verifica che sia doc o docx o pdf e non essendolo esci, quindi un'immagine non te la carica

p.s.
usa il bccode php quando hai del codice php


che dovrei fare una cosa del genere???



PHP:
<?php
//....
$estenzione=pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION); 
//ti restituisce l'estenzione del file

$ext_ok = array('doc', 'docx', 'pdf','png','jpeg','giff');
$temp = explode('.', $_FILES['userfile']['name']);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo 'Il file ha un estensione non ammessa!';
    exit;



?>
 
Ultima modifica:
ciao
circa, o usi il pathinfo o il sistema dell eplode.
o così
PHP:
<?php
//....
$ext_ok = array('doc', 'docx', 'pdf','png','jpeg','giff');
$temp = explode('.', $_FILES['userfile']['name']);
$ext = end($temp);
if (!in_array($ext, $ext_ok)) {
    echo 'Il file ha un estensione non ammessa!';
    exit;
}
//....
?>
oppure così
PHP:
<?php
//....
$ext_ok = array('doc', 'docx', 'pdf','png','jpeg','giff');
$ext=pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION); 
if (!in_array($ext, $ext_ok)) {
    echo 'Il file ha un estensione non ammessa!';
    exit;
}
//....
?>
il secondo metodo usa meno codice
 
Grazie per la risposta., cercherò di fare al termine della giuida qualche prova più concreta.

p.s.

Mi mancano 3 lezioni della guida php, devo dire che manca una cosa: la contestualizzazione delle cose. Mi piacerebbe poter fare un sito da zero a livello di php in modo da poter capire praticamente le cose affrontate in questa guida e quindi cosa fanno in maniera reale, ma soprattutto utile.
Solo questo del file upload mi sembra quella più contestualizzata, proprio perchè seguendo un corso base con un prof e leggendo un po' di php da altre fonti ho collegato un po' meglio che con gli altri argomenti
 
la guida è presente su questo sito. non nel forum, ma ci arrivi tramite la homepage di mrwebmaster
 

Discussioni simili