[PHP] Tijdelijk bestand downloaden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ejwagenvoort
  • Registratie: Juni 2002
  • Laatst online: 18-08 20:07
Ik probeer een php-script te schrijven waarbij het volgende achtereenvolgens moet gebeuren.

1. Leeg bestand volschrijven.
2. Het bestand ter download aanbieden.
3. Het bestand leegschrijven (d.w.z. overschrijven zonder inhoud).

Ik heb het onder meer zo geprobeerd:
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
<?php
if(isset($_POST[nnbs1]) OR isset($_POST[nnbs2]) OR isset($_POST[nnbs3]) OR isset($_POST[filteren])) {
// Laten we eerst controleren of het bestand bestaat en of we er in kunnen schrijven.
if (is_writable($filename)) {

    // In ons voorbeeld openen we $filename in 'toevoeg' modus.
    // De bestands pointer is aan het einde van het bestand
    // en daar gaat $somecontent naar toe als we het fwrite()'en.
    if (!$handle = fopen($filename, 'w')) {
         echo "Kan het bestand niet openen ($filename)";
    }

    // Schrijf $somecontent naar ons bestand dat we geopend hebben.
    if (!fwrite($handle, $somecontent)) {
        echo "Kan niet schrijven naar bestand ($filename)";
    }

    fclose($handle);

} else {
    echo "Het bestand $filename is niet schrijfbaar";
}
}

//het bestand ter download aanbieden
if(isset($_POST[nnbs1]) OR isset($_POST[nnbs2]) OR isset($_POST[nnbs3])) { streamAttached('/server/financien.txt','financien.txt');  }
if(isset($_POST[filteren])) { streamAttached('/server/incasso.csv','incasso.csv'); }

if(isset($_POST[nnbs1]) OR isset($_POST[nnbs2]) OR isset($_POST[nnbs3]) OR isset($_POST[filteren])) {
//het bestand weer leegmaken
if (is_writable($filename)) {

    // In ons voorbeeld openen we $filename in 'toevoeg' modus.
    // De bestands pointer is aan het einde van het bestand
    // en daar gaat $somecontent naar toe als we het fwrite()'en.
    if (!$handle = fopen($filename, 'w')) {
         echo "Kan het bestand niet openen ($filename)";
    }

    // Maak het bestand leeg.
    if (!fwrite($handle,'')) {
        echo "Kan niet schrijven naar bestand ($filename)";
    }

    fclose($handle);

} else {
    echo "Het bestand $filename is niet schrijfbaar";
}
}   
?>


Het script dat de download aanbiedt is als volgt:
PHP:
1
2
3
4
5
6
7
8
9
function streamAttached($path,$name)
{ 
    header('Pragma: no-cache'); 
    header('Cache-control: private, must-revalidate'); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Length: " .(string)(filesize($path)) ); 
    header('Content-Disposition: attachment; filename="'.($name).'"');
    readfile($path);
}



Daarnaast heb ik geprobeerd dit met een popup te doen, maar ook dat werkt niet. Een tmpfile() geeft ook problemen wanneer ik probeer te downloaden. Wie kan mij helpen of heeft een suggestie?

[ Voor 8% gewijzigd door een moderator op 13-10-2007 15:52 . Reden: [code]-tags. Doe je dat de volgende keer zelf? :) ]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

HTTP is stateless, en dat breekt je hier op. Je kan niet de file aanmaken, hem versturen en pas ná het versturen de file weer wissen, domweg omdat de pagina klaar moet zijn met parsen voordat je de file verstuurd krijgt. De file is dus gewist voordat je hem kan versturen.

Waarom gebruik je in plaats van een file te maken en weer te verwijderen niet gewoon fpassthru ofzo?

Verder: Waar hoort mijn topic?

WEB>>PRG

'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.