Directory selection naar upload locatie werkt niet
Ik gebruik dit script om gebruikers een keuze te geven naar welke directory ze een bestand kunnen uploaden, het werkt om de een of andere reden alleen niet.
er wordt wel geupload maar naar de directory waar het script zelf in staat terwijl de map "upload" gescand zou moeten worden naar folder en in de drop-down worden die folders aangeboden maar het selecteren ervan als upload-locatie werkt dus niet.
Alvast bedankt!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
function directoryToArray($directory, $recursive) {
$array_items = array();
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($directory. "/" . $file)) {
if($recursive) {
$array_items = array_merge($array_items, directoryToArray($directory. "/" . $file, $recursive));
}
$file = $directory . "/" . $file;
$array_items[] = preg_replace("/\/\//si", "/", $file);
}
}
}
closedir($handle);
}
return $array_items;
}
$files = directoryToArray("upload/", false);
echo "<select name='folder' value='folder'>";
for ($i = 0; $i < count($files); $i++) {
echo '<option value="'. $files[$i] .'">' . $files[$i] . '</option>';
}
echo '</select>';
?>
<hr width="<?PHP echo HRWIDTH ?>" align="left">
<h2>Beheer audio</h2>
<p>Hieronder kan een mp3 bestand geselecteerd worden om te uploaden, max 10mb.<br /><br /></p>
<?php
echo "<form method='post' enctype='multipart/form-data'><input type='file' name='file' width='300'> <input type='submit' name='upload1' value='Upload'> </form>";
$map = $_POST["folder"]; //map waar die in komt (wel chmod permision 777 geven
if(isset($_POST['upload1'])) {
if($_FILES['file']['size'] <= 1024*10000) {
// Controle of het bestand groter is als 10 mb (tussen de [''] van $_FILES vul je de naam van het veld in)
$extension = array();
$extension[] = "audio/mp3"; // zet de extensions (vb: .jpg) in de array..
$extension[] = "audio/mpeg"; // altijd met audio/ ervoor en zonder punt
// Let op .jpg kan hij verschillend zien (bv: ook als .pjpg) zoek dus op internet een lijst anders krijg je vaak errors..
if(in_array($_FILES['file']['type'], $extension)) {
// Controle of hij een bestand met de juiste extension heeft geupload
if(is_uploaded_file($_FILES['file']['tmp_name'])) { //Contorleren of hij is geupload
move_uploaded_file($_FILES['file']['tmp_name'], $map.$_FILES['file']['name']);
// eerst geef je de file aan met de tmp naam waar die tijdelijk staat op geslagen, daarna de mapnaam en de filenaam met een punt er tussen
echo "<p><span style=\"color:#F00\">Bestand succesvol geupload..</span></p>";
} else {
echo "<p><span style=\"color:#F00\">Er is iets mis gegaan bij het uploaden, probeer het nogmaals</span></p>";
}
} else {
echo "<p><span style=\"color:#F00\">Het bestand heeft een verkeerde extensie</span></p>";
}
} else {
echo "<p><span style=\"color:#F00\">Het bestand moet kleiner zijn dan 10 mb</span></p>";
}
} else {
// Hier je formulier (deze is zichtbaar wanneer er niet op submit is gedrukt..)
}
?>
function directoryToArray($directory, $recursive) {
$array_items = array();
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($directory. "/" . $file)) {
if($recursive) {
$array_items = array_merge($array_items, directoryToArray($directory. "/" . $file, $recursive));
}
$file = $directory . "/" . $file;
$array_items[] = preg_replace("/\/\//si", "/", $file);
}
}
}
closedir($handle);
}
return $array_items;
}
$files = directoryToArray("upload/", false);
echo "<select name='folder' value='folder'>";
for ($i = 0; $i < count($files); $i++) {
echo '<option value="'. $files[$i] .'">' . $files[$i] . '</option>';
}
echo '</select>';
?>
<hr width="<?PHP echo HRWIDTH ?>" align="left">
<h2>Beheer audio</h2>
<p>Hieronder kan een mp3 bestand geselecteerd worden om te uploaden, max 10mb.<br /><br /></p>
<?php
echo "<form method='post' enctype='multipart/form-data'><input type='file' name='file' width='300'> <input type='submit' name='upload1' value='Upload'> </form>";
$map = $_POST["folder"]; //map waar die in komt (wel chmod permision 777 geven
if(isset($_POST['upload1'])) {
if($_FILES['file']['size'] <= 1024*10000) {
// Controle of het bestand groter is als 10 mb (tussen de [''] van $_FILES vul je de naam van het veld in)
$extension = array();
$extension[] = "audio/mp3"; // zet de extensions (vb: .jpg) in de array..
$extension[] = "audio/mpeg"; // altijd met audio/ ervoor en zonder punt
// Let op .jpg kan hij verschillend zien (bv: ook als .pjpg) zoek dus op internet een lijst anders krijg je vaak errors..
if(in_array($_FILES['file']['type'], $extension)) {
// Controle of hij een bestand met de juiste extension heeft geupload
if(is_uploaded_file($_FILES['file']['tmp_name'])) { //Contorleren of hij is geupload
move_uploaded_file($_FILES['file']['tmp_name'], $map.$_FILES['file']['name']);
// eerst geef je de file aan met de tmp naam waar die tijdelijk staat op geslagen, daarna de mapnaam en de filenaam met een punt er tussen
echo "<p><span style=\"color:#F00\">Bestand succesvol geupload..</span></p>";
} else {
echo "<p><span style=\"color:#F00\">Er is iets mis gegaan bij het uploaden, probeer het nogmaals</span></p>";
}
} else {
echo "<p><span style=\"color:#F00\">Het bestand heeft een verkeerde extensie</span></p>";
}
} else {
echo "<p><span style=\"color:#F00\">Het bestand moet kleiner zijn dan 10 mb</span></p>";
}
} else {
// Hier je formulier (deze is zichtbaar wanneer er niet op submit is gedrukt..)
}
?>
Gewijzigd op 30/08/2010 23:44:30 door Peps from Yesterday
is de referentie naar je Directory Upload juist? zit je op het juiste niveau? moet het niet bv "../uploads/" zijn?
Het pad naar de "upload" dir is juist want in het dropdown-menu verschijnen de mappen die in map "upload" staan gewoon.
als test staan in de map "upload" 3mappen, nl 1, 2 en 3. Maar 1 van deze mappen moet geupload worden..
Offtopic:
Iemand met een beetje kennis kan nu je index.php file overschrijven...
Ik zou dit niet doen en een standaard upload-map kiezen...
bedoel je als ik de map naar 775 CHMOD?
de map maar het script instaat is 771, als ik upload met het bovengenoemde script wordt het bestand wel geüpload, maar naar de map waar het script in staat ipv naar de map "upload" --> "1", "2" of "3"
de koppeling tussen het dropdown-menu met de upload locatie en het upload-script werkt niet, daar zit mijn probleem eigenlijk.
stel ik zou dit: $map = $_POST["folder"];
vervangen door bijvoorbeeld: ""
dan wordt er ook naar de map geüpload waar het script in staat. hij pakt de locatie zeg maar niet..
krijg je een error?
nee hij upload gewoon, maar niet naar de geselecteerde map uit het drop-down-menu
Code (php)
Weet je ook zeker dat er een slash tussen de directory en de filename zit? Ik zie niergens dat je deze erin stopt...
Code (php)
1
2
3
2
3
<?PHP
move_uploaded_file($_FILES['file']['tmp_name'], $map."/".$_FILES['file']['name']);
?>
move_uploaded_file($_FILES['file']['tmp_name'], $map."/".$_FILES['file']['name']);
?>
Helpt dit?
Gewijzigd op 31/08/2010 15:20:03 door SilverWolf NL
Ik heb nu die "/" in het option menu toegeveoegd:
Wat je zegt over het uploaden van een index.php, komt dat door het upload-script of door het script wat de "upload"-map scant naar mappen en die weergeeft in een drop-down? Ik wil inderdaad niet dat men de index.php kan overschrijven.
Maar wel dat de mappen in de "upload"-map dynamisch gegenereerd worden in het dropdown-menu..
Het komt door je upload script. Kijk of een bestand al bestaat voordat je met move_uploaded_file het verplaatst (functie is file_exists() geloof ik). Dit zorgt ervoor dat je nooit bestaande files kan overschrijven. Let er ook op dat je nu niet controleerd of er iets fout is gegaan bij het uploaden, dat is misschien ook wel handig. Moet nu met de hond en dan eten, maar daarna pas ik het wel even voor je aan (of als iemand anders het wil, be my guest...)
Maar hij geeft wel meldingen bij verkeerde extensie, te groot bestand en succesvolle upload geloof ik..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?PHP
//Heb de standaardwaarde van recursive op false staan, omdat dit waarschijnlijk vaker voor zal komen.
function directoryToArray($directory, $recursive=false) {
$array_items = array();
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($directory. "/" . $file)) {
if($recursive) {
$array_items = array_merge($array_items, directoryToArray($directory. "/" . $file, $recursive));
}
$file = $directory . "/" . $file;
$array_items[] = preg_replace("/\/\//si", "/", $file);
}
}
}
closedir($handle);
}
return $array_items;
}
//Kijken of formulier verzonden is
if($_SERVER['REQUEST_METHOD']=='POST'){
//Map in variable zetten
$map=$_POST["folder"];
//Kijken of er errors waren bij het uploaden
if($_FILES['file']['error']==0){
//Kijken of de grootte goed is
if($_FILES['file']['size'] <= 1024*10000){
//Kijken of het mime-type goed is
$extension=array("audio/mp3","audio/mpeg");
if(in_array($_FILES['file']['type'], $extension)) {
//Kijken of de file wel echt een 'uploaded file' is
if(is_uploaded_file($_FILES['file']['tmp_name'])){
//Kijken of er geen parent-folder gebruikt wordt
if(strpos($map,"../")===false){
//Naam goedmaken (alles behalve letters, cijvers, ._- wordt vervangen door _)
$name=preg_replace("#[^A-Za-z0-9\-\_\.]#si","_",$_FILES['file']['name']);
$locatie=$map."/".$_FILES['file']['name'];
//Kijken of bestand al bestaat en hernoemen als dat niet zo is
if(file_exists($locatie)){
$tname=$locatie;
$i=2;
while(true){
$tname=explode(".",$tname);
$ext=$tname[count($tname)-2];
$tname[count($tname)-2].="_v".$i;
$tname=implode(".",$tname);
if(file_exists($tname)){
$tname=$name;
$i++;
}else{
$locatie=$tname;
break;
}
}
echo '<p><span style="color:#0F0">Bestand hernoemd naar: '.$locatie.' </span></p>';
}
//Kijken of hij goed verplaatst is
if(move_uploaded_file($_FILES['file']['tmp_name'], $locatie)){
echo "<p><span style=\"color:#0F0\">Bestand succesvol geupload..</span></p>";
}else{
//File verplaatsen mislukt
echo "<p><span style=\"color:#F00\">Foutje: Er is iets mis gegaan bij het uploaden, probeer het nogmaals.</span></p>";
}
}else{
//Parent-folder in foldernaam
echo "<p><span style=\"color:#F00\">Foutje: Verkeerde folder geselecteerd, probeer het nogmaals.</span></p>";
}
}else{
//Bestand is geen geupload bestand
echo "<p><span style=\"color:#F00\">Foutje: Er is iets mis gegaan bij het uploaden, probeer het nogmaals.</span></p>";
}
}else{
//Verkeerde mime-type
echo "<p><span style=\"color:#F00\">Foutje: Het bestand heeft het verkeerde type (alleen mp3!).</span></p>";
}
}else{
//Groter dan 10MB
echo "<p><span style=\"color:#F00\">Foutje: Het bestand is groter dan 10MB.</span></p>";
}
}else{
//Error tijdens uploaden
echo "<p><span style=\"color:#F00\">Foutje: ".$_FILES['file']['error'].".</span></p>";
}
}else{
//Form laten zien
$files = directoryToArray("upload/");
echo '<form method="post" enctype="multipart/form-data">
<select name="folder" value="folder">'.PHP_EOL;
foreach($files as $file){
echo ' <option value="'. $file .'">' . $file . '</option>'.PHP_EOL;
}
echo ' </select><br />
<input type="file" name="file" width="300" /> <input type="submit" value="Upload">
</form>';
}
?>
//Heb de standaardwaarde van recursive op false staan, omdat dit waarschijnlijk vaker voor zal komen.
function directoryToArray($directory, $recursive=false) {
$array_items = array();
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if (is_dir($directory. "/" . $file)) {
if($recursive) {
$array_items = array_merge($array_items, directoryToArray($directory. "/" . $file, $recursive));
}
$file = $directory . "/" . $file;
$array_items[] = preg_replace("/\/\//si", "/", $file);
}
}
}
closedir($handle);
}
return $array_items;
}
//Kijken of formulier verzonden is
if($_SERVER['REQUEST_METHOD']=='POST'){
//Map in variable zetten
$map=$_POST["folder"];
//Kijken of er errors waren bij het uploaden
if($_FILES['file']['error']==0){
//Kijken of de grootte goed is
if($_FILES['file']['size'] <= 1024*10000){
//Kijken of het mime-type goed is
$extension=array("audio/mp3","audio/mpeg");
if(in_array($_FILES['file']['type'], $extension)) {
//Kijken of de file wel echt een 'uploaded file' is
if(is_uploaded_file($_FILES['file']['tmp_name'])){
//Kijken of er geen parent-folder gebruikt wordt
if(strpos($map,"../")===false){
//Naam goedmaken (alles behalve letters, cijvers, ._- wordt vervangen door _)
$name=preg_replace("#[^A-Za-z0-9\-\_\.]#si","_",$_FILES['file']['name']);
$locatie=$map."/".$_FILES['file']['name'];
//Kijken of bestand al bestaat en hernoemen als dat niet zo is
if(file_exists($locatie)){
$tname=$locatie;
$i=2;
while(true){
$tname=explode(".",$tname);
$ext=$tname[count($tname)-2];
$tname[count($tname)-2].="_v".$i;
$tname=implode(".",$tname);
if(file_exists($tname)){
$tname=$name;
$i++;
}else{
$locatie=$tname;
break;
}
}
echo '<p><span style="color:#0F0">Bestand hernoemd naar: '.$locatie.' </span></p>';
}
//Kijken of hij goed verplaatst is
if(move_uploaded_file($_FILES['file']['tmp_name'], $locatie)){
echo "<p><span style=\"color:#0F0\">Bestand succesvol geupload..</span></p>";
}else{
//File verplaatsen mislukt
echo "<p><span style=\"color:#F00\">Foutje: Er is iets mis gegaan bij het uploaden, probeer het nogmaals.</span></p>";
}
}else{
//Parent-folder in foldernaam
echo "<p><span style=\"color:#F00\">Foutje: Verkeerde folder geselecteerd, probeer het nogmaals.</span></p>";
}
}else{
//Bestand is geen geupload bestand
echo "<p><span style=\"color:#F00\">Foutje: Er is iets mis gegaan bij het uploaden, probeer het nogmaals.</span></p>";
}
}else{
//Verkeerde mime-type
echo "<p><span style=\"color:#F00\">Foutje: Het bestand heeft het verkeerde type (alleen mp3!).</span></p>";
}
}else{
//Groter dan 10MB
echo "<p><span style=\"color:#F00\">Foutje: Het bestand is groter dan 10MB.</span></p>";
}
}else{
//Error tijdens uploaden
echo "<p><span style=\"color:#F00\">Foutje: ".$_FILES['file']['error'].".</span></p>";
}
}else{
//Form laten zien
$files = directoryToArray("upload/");
echo '<form method="post" enctype="multipart/form-data">
<select name="folder" value="folder">'.PHP_EOL;
foreach($files as $file){
echo ' <option value="'. $file .'">' . $file . '</option>'.PHP_EOL;
}
echo ' </select><br />
<input type="file" name="file" width="300" /> <input type="submit" value="Upload">
</form>';
}
?>
Gewijzigd op 31/08/2010 20:06:02 door SilverWolf NL
Ik heb em even voor je online gezet: http://xxxxxxxxxxxxx.php
Ik krijg bij het uploaden van een +/- 5mb grote mp3 deze foutmelding:
Foutje: Verkeerde folder geselecteerd, probeer het nogmaals.
hmm
Gewijzigd op 31/08/2010 19:22:32 door Peps from Yesterday
if(strpos($map,"../")!==false){
Moet dit zijn
if(strpos($map,"../")===false){
wat rlx dat ie het nu doet, en goed!
erg bedankt iedereen voor de hulp!
Whoops, zal het zelf ook even aanpassen :$