Door
Koen Hollander
op 01-01-2013 10:51
gewijzigd op 01-01-2013 10:53
758 views
Goedendag PHPhulp. Meteen offtopic beginnen, gelukkig nieuw jaar allemaal. Ontopic:
Ik heb een klein upload scriptje van een website gehaald, dat script kijkt eerst of de extensie bestaat,zo nee: Fout. Zo ja: Uploaden in de map. Die map heeft dezelfde naam als een sessie. Nu heb ik dat wel keurig gespecificeerd in de naam, hij plompt ze toch gewoon in de root dir. Dit is mijn code
copy($_POST['userfile'], $_SESSION['usernames']) ;
echo "Het bestand is geupload onder de naam: $filename";
}
/*Als het bestandstype toegestaan is, bestand uploaden. u kunt het if en else gedeelte weglaten als u alle bestanden toe wilt laten staan. */
else
{
echo 'Bestandstype niet geldig' ;
}
?>
Als mijn gebruikersnaam in de sessie bijv. Kloentje2 is, en ik wil iets uploaden dan komt het bestand in de root dir. Naam: Kloentje2bestandsnaam Als ik deze regel:
Zo gaat het inderdaad nooit werken. Als je een bestand upload dan zet php die met een tijdelijke naam in een speciale dir. Vanuit die locatie moet je het bestand hernoemen en ergens anders plaatsen. De locatie waar het bestand terechtkomt staat in $_FILES['jouw_upload_input_naam']['tmp_name']. Wil je vervolgens dat geuploade bestand verplaatsen (noodzakelijk overigens, anders verdwijnt het weer als het script klaar is), dan doe je dat met [php]move_uploaded_file[/php].
if ($extentie_ok)
{
//copy($file, $_SESSION['username'] . $filename);
//copy($_POST['userfile'], $_SESSION['usernames']) ;
move_uploaded_file($file, "/".$_SESSION['username'] ) ;
echo "Het bestand is geupload onder de naam: $filename";
}
/*Als het bestandstype toegestaan is, bestand uploaden. u kunt het if en else gedeelte weglaten als u alle bestanden toe wilt laten staan. */
else
{
echo 'Bestandstype niet geldig' ;
}
?>
Het script zegt dat het goed is gegaan, maar ik zie niks in de map. De CHMOD is 7777
Met mijn eerdere opmerking bedoelde ik wat Erwin wat uitgebreider aangaf.
Koen: hulp kun je met alle plezier krijgen, maar misschien is het een goed voornemen voor 2013 om zelf (meer) moeite te doen.
Het lijkt mij dat je copy/paste doet en als het niet werkt, open je een topic.
Ga eens debuggen.
Je extensie kan dan mogelijk goed zijn, maar dat wil niet zeggen dat de upload is gelukt.
Iets wat jij kennelijk wel als standaard verwacht, omdat je verder geen enkele controle hebt.
Wat zit er in de overige variabelen?
Klopt het pad / de bestandsnaam die je gebruikt?
Ik mag overigens hopen dat je mensen geen php-files laat uploaden (en uitvoeren)...
Ik neem aan dat er in dit stukje script ook nog ergens wordt gecontroleerd of er wel iets is verzonden of dat het script 'maar zo' wordt aangeroepen?
Is je nog niet eerder verteld dat variabelen doorgaans beter buiten quotes kunnen?
Waarom gebruik je op regel 36 bij echo " en op regel 46 '?
Met
$extentie = substr($filename, -3);
haal je, volgens mij, de laatste drie karakters op van de $filename. In de array heb je ook bestandsextensies staan die 4 karakters lang zijn... :s
Wat wil je met
Ik heb werkelijk geen flauw idee. Ik heb nog nooit iets met uploaden gedaan. Ik moet inderdaad meer moeite doen. Kan iemand me dan een verbeterde versie laten zien? Dan weet ik ook wat ik fout doe.
Het script zegt dat het goed is gegaan, maar ik zie niks in de map. De CHMOD is 7777
Maar het script checkt niet eens of het wel goed is gegaan, het echo't alleen maar een van te voren bepaalde string. Als je (nu echt) de door mij gegeven link gaat bekijken, dan zie je dat move_uploaded_file een boolean teruggeeft om aan te geven of het gelukt is. Misschien dat ook eens checken?
Nu heb ik een if gemaakt die controleert of de extensie goed en EN kijkt of move_uploaded_file true terug geeft, er staat dat het goed is gegaan. Ik zie nog niks in de map.