[PHP] Probleem met renamen & d/l bestanden.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hey,

Ik wil in een file systeem m'n files o.a. beveiligen door ze een andere naam te geven zodra ik ze upload, en hem wanneer ik hem download tijdelijk terug te renamen, zodat ik wel de originele bestandsnaam terug krijg, en niet de nieuwe naam van het bestand.

Ik wilde het op deze manier doen, maar nu renamed hij hem terug, al voordat hij het bestand ter download aanbied.
Het zal vrij logisch zijn hoe het wel moet, maar ik weet nog niet echt hoe, kan iemand me er misschien mee helpen?

PHP:
1
2
3
4
5
6
7
8
// renamen
rename("$filenaam_nieuw","$filenaam_oud");

// ter download aanbieden
header("location: $filenaam_oud");

// terug renamen
rename("$filenaam_oud","$filenaam_nieuw");

[ Voor 8% gewijzigd door TangLeFuzZ op 24-10-2003 22:51 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij is dit heel lastig te realiseren.. zodra je de download start, en je veranderd tijdens het downloaden de bestandsnaam denk ik dat je webserver daarover gaat klagen.. Die is het bestand immers nog aan het lezen!
Weet het niet 100% zeker, maar ik zou zeggen test dat even! :)

Je zou kunnen onderzoeken of er een manier is om apache bijvoorbeeld bestanden te laten cachen, zodat het wel weer mogelijk is om de naam meteen te veranderen!

Een andere tip zou kunnen zijn om een tijdelijk bestand aan te maken met als naam de gebruiker' SESSID of iets dergelijks, maar hoe je deze later weer zou kunnen verwijderen mag je zelf verzinnen :D

[ Voor 16% gewijzigd door Verwijderd op 24-10-2003 22:53 ]


Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

Dit lijkt me niet mogelijk.

Kun je niet gewoon met .htaccess je bestanden beveiligen. Een wachtwoord lijkt me in elk geval veiliger dan ze een andere naam te geven.

Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Verwijderd schreef op 24 October 2003 @ 22:52:
Volgens mij is dit heel lastig te realiseren.. zodra je de download start, en je veranderd tijdens het downloaden de bestandsnaam denk ik dat je webserver daarover gaat klagen.. Die is het bestand immers nog aan het lezen!
Stom! daar had ik nog niet eens aan gedacht...
Koraalduivel schreef op 24 October 2003 @ 23:05:
Dit lijkt me niet mogelijk.

Kun je niet gewoon met .htaccess je bestanden beveiligen. Een wachtwoord lijkt me in elk geval veiliger dan ze een andere naam te geven.
Kan wel, maar is niet echt fijn in mijn geval denk ik... ik ben een systeem aan het maken waar mensen eigen bestanden kunnen uploaden, en ik wil graag dat ze zonder extra moeite ook die bestanden direct kunnen downloaden wanneer ze zijn ingelogd, maar ze moeten wel beveiligd zijn en niet bereikbaar voor andere users.

Misschien moet ik het 'terug renamen' pas een x aantal minuten na het downloaden doen, alhoewel dit ook lastig is omdat ik natuurlijk niet weet hoe snel iemand een file binnen haalt.
Zou het wel op een paar uur kunnen zetten, aangezien de bestanden niet veel groter dan een paar mb mogen zijn.

Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

terug renamen kan je doen dmv een header waarna je gewoon de inhoud van het bestand afdrukt.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
        if (!empty($fid) && is_numeric($fid)){
            $qryopt[] = 'uid = '.$_SESSION['uinfo']['uid'];
            $qryopt[] = 'AND fid = '.$fid;
            
            $qryid = $this->pm->core('dbl')->select('files', array('fid', 'filename', 'date', 'size', 'mime', 'ident', 'pid'), $qryopt);
            $fileinfo = $this->pm->core('dbl')->fetchArray($qryid, true, DB::DB_NUM);
            
            if (!empty($fileinfo[0][4])){
                
                // it's a little baby file!!
                header('Content-Disposition: atachment; filename="'.htmlentities($fileinfo[0][1]).'"');
                header('Content-Type: '.$fileinfo[0][4]);
                print(file_get_contents($this->storageDir.$fileinfo[0][5]));
                
            } else {
                
                $this->redirect($fid);
                
            } 
?>


Zal niet helemaal goed gehighlight worden denk ik, maar het idee is duidelijk hoop ik.

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Relaxt! Dat is inderdaad duidelijk genoeg :)

Ik zit nu alleen nog met het probleem dat het een behoorlijk aantal verschillende soorten files mogen zijn, hoe doe ik dit nu precies met de Content-Type header?

m.a.w., kan ik 1 content type gebruiken die bij alle files zal werken? (weet nog niet zoveel van headers e.d. af)

Edit: ik kom er net achter dat je die kunt opvragen met de functie mime_content_type, maar die wordt jammer genoeg nog niet ondersteund in de php versie die bij ons draait :(

[ Voor 22% gewijzigd door TangLeFuzZ op 24-10-2003 23:41 ]


Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

Ik store het mime type wanneer ze de file uploaden, staat nl in de $_FILES superglobal.

Weet niet hoe dat juist zit in jou PHP versie.

PHP:
1
$file['mime']        = $_FILES[$fileIndex]['type'];

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Perfect! Nogmaals bedankt :)

Het werkt nu precies zoals ik het wilde hebben..!
Pagina: 1