-
Semplice Upload PHP
Salve ragazzi, ho un piccolo problema, non si tratta altro che di un semplice codice PHP, ma non riesco a capire quale sia il problema...:
Codice PHP:
<?php
$ext = substr($_FILES['uploaded']['name'],strrpos($_FILES['uploaded']['name'],"."),strlen($_FILES['uploaded']['name']));
$cartella = str_replace($ext, '', $_FILES['uploaded']['name']);
$anno = $_POST['COMBO'];
if($anno==biennio)
$target = "./files/bie/";
if($anno==informatica)
$target = "./files/info/";
if($anno==meccanica)
$target = "./files/mec/";
if($anno==elettronica)
$target = "./files/elet/";
if($anno==matematica)
$target = "./files/mate/";
if($anno==italiano)
$target = "./files/ita/";
if($anno==sistemi)
$target = "./files/sys/";
chdir($target);
mkdir("$cartella",0777);
$lollo = $target.$cartella."/";
$target = $lollo. basename( $_FILES['uploaded']['name']) ;
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
}
else {
echo "Sorry, there was a problem uploading your file.";
}
?>
Provando ad uppare però mi dice: "Sorry, there was a problem uploading your file.".
Non capisco il codice HTML è ok, ma non so perchè non lo uppa...Vi spiego un pò il codice:
Sostanzialmente il file sarà caricato in una directory a seconda delle scelte del codice html la struttura sarà ad esempio: "./files/bie/esempio/esempio.rar. Quindi, dopo aver estrapolato il nome togliendo l'estensione dal file da uppare creo la cartella e dico di inserire il file da uppare nella cartella appena creata, ma non ci riesco...aiutino???
-
io inizierei col farmi stampare $target inserendo un
Codice PHP:
echo $target;
subito dopo
Codice PHP:
$target = $lollo. basename( $_FILES['uploaded']['name']) ;
-
Ci avevo già pensato e provando ad inserire un immagine ecco il risultato:
./files/bie/gradient/gradient.jpg
Sorry, there was a problem uploading your file.
-
Prova a far stampare il codice di UPLOAD_ERR_OK
Ma la cartella è stata creata?
-
Ecco il risultato:
./files/bie/gradient/gradient.jpg
Sorry, there was a problem uploading your file.
0
-
Il fatto che UPLOAD_ERR_OK sia 0 vuol dire che l'upload è avvenuto senza errori.
Il fatto che non avvenga lo spostamento del file potrebbe dipendere dalla mancata creazione della cartella oppure dai permessi su di essa.
Prova a verificare queste cose.
-
Dunque mi sono accorto di un piccolo errore. In questa riga:
Codice PHP:
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
terget assume tutto il path compreso il file con estensione, quindi è una cosa che non si può fare, ho perchiò modificato in questo modo:
Codice PHP:
<?php
$ext = substr($_FILES['uploaded']['name'],strrpos($_FILES['uploaded']['name'],"."),strlen($_FILES['uploaded']['name']));
$cartella = str_replace($ext, '', $_FILES['uploaded']['name']);
$anno = $_POST['COMBO'];
if($anno==biennio)
$target = "./files/bie/";
if($anno==informatica)
$target = "./files/info/";
if($anno==meccanica)
$target = "./files/mec/";
if($anno==elettronica)
$target = "./files/elet/";
if($anno==matematica)
$target = "./files/mate/";
if($anno==italiano)
$target = "./files/ita/";
if($anno==sistemi)
$target = "./files/sys/";
chdir($target);
mkdir("$cartella",7777);
$lollo = $target.$cartella."/";
if(move_uploaded_file($_FILES['uploaded']['name'], $lollo))
{
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
}
else {
echo "Sorry, there was a problem uploading your file.";
}
?>
Ma purtroppo non mi uppa il file. Dunque, i permessi li ho settati tutti con:
Codice PHP:
mkdir("$cartella",7777);
Inoltre la cartella la crea, ma non uppa il file.....
-
No, anzi la destinazione deve essere comprensiva del nome file (che può essere anche diverso dal file origine).
I permessi in fase di creazione li puoi lasciare a 655 (ti sconsiglio di usare la quarta cifra).
Il problema è in chdir (ti fa perdere il riferimento al file temporaneo uploadato)
Cambia il codice
Codice PHP:
chdir($target);
mkdir("$cartella",0777);
in
Codice PHP:
mkdir($target.$cartella, 655);
Mi sorge una domanda: perchè ti serve che che sia files/xxx/nomefile/nomefile.ext?
(così ogni cartella nomefile avrà sempre e solo un file al suo interno)
Non ti va bene files/xxx/nomefile.ext?
Tieni presente che se carichi un file con lo stesso nome di uno già esistente, mkdir ti darà errore
-
Ti spiego, la cartella non conterrà solo un file ma 4-5 e mi serve che il nome della cartella e del file siano uguali, poi gli altri file si genereranno in seguito..
EDIT---
Comunque grazie, il problema è stato risolto =D