[PHP] Bestanden beschermen tegen overschrijven bij uploaden*

Pagina: 1
Acties:
  • 137 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 01:59

aex351

I am the one

Topicstarter
Ik heb een tijd geleden een PHP class Upload script gemaakt, nu ben ik bezig het naar een bruikbare niveau te brengen voor mijn website.

Alles werkt, alleen ik zoek een manier waardoor dezelfde gebruiker, maar ook andere gebruikers een bestand kunnen uploaden met dezelfde bestandsnaam. Alles komt namelijk gewoon in 1 map terecht, en word bijgehouden met een mysql DB.

Het komt erop neer dat ik niet weet hoe ik de bestandsnaam kan veranderen bij de upload process.

Ik heb eens dit forum gezocht, maar ik kom geen bruikbare informatie tegen die dit probleem voor mij zou kunnen uplossen. Google ook helaas niets kunnen vinden.

Ik hoop hiermee voldoende informatie te hebben gegeven.

[ Voor 7% gewijzigd door aex351 op 29-06-2005 22:18 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Misschien handig als je even je script dat je gemaakt hebt hier post zodat we kunnen zien hoe het in elkaar zit en hoe je het kunt gebruiken.
Nu is er echt niets over te zeggen.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
aex351 schreef op woensdag 29 juni 2005 @ 22:17:
Alles komt namelijk gewoon in 1 map terecht, en word bijgehouden met een mysql DB.
Dan maak je voor iedere user een map en vervolgens gebruik je de DB om de lijst van bestanden te bekijken.

{signature}


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Met move_uploaded_file kun je de bestandsnaam opgeven. Als je die gewoon gelijk maakt aan het ID dat je opslaat in de database, dan kun je niets overschrijven. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 01:59

aex351

I am the one

Topicstarter
Terw_Dan schreef op woensdag 29 juni 2005 @ 22:19:
Misschien handig als je even je script dat je gemaakt hebt hier post zodat we kunnen zien hoe het in elkaar zit en hoe je het kunt gebruiken.
Nu is er echt niets over te zeggen.
Ok dat zal ik dan even doen, ik dacht het te kunnen oplossen met een makkelijk antwoord op mijn vraag.


Mijn code, Ik hoop dat jullie er iets van snappen, een gedeelte ten iedere geval.
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
    public function upload_bestand ($status_bestanden, $DB_LINK_CLASS) {
        //roep functie aan
        $this -> controleer_maak_dir($status_bestanden);
    
            if(is_uploaded_file( $_FILES['gebruiker_bestand']['tmp_name']))  { 
            
            //controleer grootte 
                if( $_FILES['gebruiker_bestand']['size'] > 1024000 ) { //bepaal zelf de max. grootte in bytes  1 kb = 1024 bytes 
                    $status_bestanden -> type .= 'Fout' ;
                    $status_bestanden -> melding .= "<br /><strong>FOUT :Het bestand is te groot</strong>"; 
                   } 
                else {
            
                    if(!move_uploaded_file($_FILES['gebruiker_bestand']['tmp_name'], $this->UPLOAD_DIR.$this->UPLOAD_EXTRA_DIR.$_FILES['gebruiker_bestand']['name'])) 
                     { 
                        $status_bestanden -> type .= 'Fout' ;
                        $status_bestanden -> melding .= "<br /><strong>FOUT : het bestand kon niet naar de juiste dir worden geplaatst</strong>"; 
                     }
                     else {
                        $this->BESTAND_NAAM = $_FILES['gebruiker_bestand']['name'];
                        $this->maak_mysql_entree($DB_LINK_CLASS, $cDIR);
                        $status_bestanden -> type .= 'Melding' ;
                        $status_bestanden -> melding .= "<br />Uw bestand <strong>".$_FILES['gebruiker_bestand']['name']."</strong> is geupload";  
                    
                     } 
                 } 
            }
            
            
            else { 
                $status_bestanden -> type .= 'Fout' ;
                $status_bestanden -> melding .= "<br /><strong>FOUT : Het Uploaden is mislukt</strong>"; 
            } 


    }


@-NMe- Ik zal wel iets over het hoofd zien.

[ Voor 25% gewijzigd door aex351 op 29-06-2005 22:48 ]

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
14
move_uploaded_file($_FILES['gebruiker_bestand']['tmp_name'], $this->UPLOAD_DIR.$this->UPLOAD_EXTRA_DIR.$_FILES['gebruiker_bestand']['name'])
In plaats van daar $_FILES['gebruiker_bestand']['name'] te gebruiken, neem je een uniek ID. Je zei in je startpost dat je de geuploade files bijhoudt in je database. Als het goed is heb je daar ook een uniek ID in staan; dat kun je mooi gebruiken. Neem gewoon dat ID als bestandsnaam (niet vergeten de extensie goed te zetten), en dan heb je altijd een unieke filename. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 01:59

aex351

I am the one

Topicstarter
Goede idee, alleen de maak_mysql_entree() functie die dus die entree in de Db moet maken word pas achteraf uitgevoert. Aangezien dan pas op dat punt alles goed is uitgevoert.

Anders zou ik het naar voren moeten halen, en indien die move_uploaded_file() niet gelukt is nog een query moeten uitvoeren om het weer te verwijderen.

< dit stukje webruimte is te huur >

Pagina: 1