Directory selection naar upload locatie werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peps from Yesterday

Peps from Yesterday

30/08/2010 23:43:40
Quote Anchor link
Hoi,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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'>&nbsp;&nbsp;&nbsp;&nbsp;<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
 
PHP hulp

PHP hulp

18/04/2024 23:29:02
 
Didier mercier

didier mercier

31/08/2010 12:04:18
Quote Anchor link
hallo,

is de referentie naar je Directory Upload juist? zit je op het juiste niveau? moet het niet bv "../uploads/" zijn?
 
Peps from Yesterday

Peps from Yesterday

31/08/2010 12:38:26
Quote Anchor link
Thanks voor je reactie didier!

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..
 
SilverWolf NL

SilverWolf NL

31/08/2010 13:29:19
Quote Anchor link
Heb je de upload folders al geCHMOD naar 755 (of 775 geprobeerd)?

Offtopic:

Iemand met een beetje kennis kan nu je index.php file overschrijven...
Ik zou dit niet doen en een standaard upload-map kiezen...
 
Peps from Yesterday

Peps from Yesterday

31/08/2010 14:20:55
Quote Anchor link
wanneer kan iemand de index.php overschrijven en waarom?
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..
 
Didier mercier

didier mercier

31/08/2010 14:30:12
Quote Anchor link
krijg je een error?
 
Peps from Yesterday

Peps from Yesterday

31/08/2010 14:31:00
Quote Anchor link
nee hij upload gewoon, maar niet naar de geselecteerde map uit het drop-down-menu
 
SilverWolf NL

SilverWolf NL

31/08/2010 15:17:59
Quote Anchor link
Wat ik bedoel met je index overschrijven is dat je zonder jou formulier te gebruiken een file kunt uploaden naar elke map met dit script... Dit betekend dus dat je, als je de stuctuur kent, gewoon index.php kan oploaden naar jouw index.php. Dit is toch niet wat je wil? Verder zie ik nog iets: je gebruikt een for om de array door te lopen, ken je foreach al?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?PHP
$array
=array(1,2,3);
foreach($array as $value){
    echo $value."<br />".PHP_EOL;
}

//Uitkomst:
?>

1<br />
2<br />
3<br />


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?PHP
move_uploaded_file($_FILES['file']['tmp_name'], $map."/".$_FILES['file']['name']);
?>


Helpt dit?
Gewijzigd op 31/08/2010 15:20:03 door SilverWolf NL
 
Peps from Yesterday

Peps from Yesterday

31/08/2010 15:35:39
Quote Anchor link
Thanks SilverWolf

Ik heb nu die "/" in het option menu toegeveoegd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo '<option value="'. $files[$i] .'/">' . $files[$i] . '/</option>'; ?>


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..
 
SilverWolf NL

SilverWolf NL

31/08/2010 17:14:20
Quote Anchor link
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...)
 
Peps from Yesterday

Peps from Yesterday

31/08/2010 17:23:25
Quote Anchor link
Thanks! Dat zou rlx zijn!

Maar hij geeft wel meldingen bij verkeerde extensie, te groot bestand en succesvolle upload geloof ik..
 
SilverWolf NL

SilverWolf NL

31/08/2010 18:47:52
Quote Anchor link
Ik ben uiteindelijk hier op uitgekomen (niet getest trouwens):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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" />&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="Upload">
</form>'
;
}

?>
Gewijzigd op 31/08/2010 20:06:02 door SilverWolf NL
 
Peps from Yesterday

Peps from Yesterday

31/08/2010 19:05:28
Quote Anchor link
Super bedankt!

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
 
- SanThe -

- SanThe -

31/08/2010 19:08:24
Quote Anchor link
Dit
if(strpos($map,"../")!==false){

Moet dit zijn
if(strpos($map,"../")===false){
 
Peps from Yesterday

Peps from Yesterday

31/08/2010 19:22:00
Quote Anchor link
haha perfect, dat was het!
wat rlx dat ie het nu doet, en goed!

erg bedankt iedereen voor de hulp!
 
SilverWolf NL

SilverWolf NL

31/08/2010 20:05:33
Quote Anchor link
Whoops, zal het zelf ook even aanpassen :$
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.