Ik heb op mijn site een script staan, dat ervoor zorgt dat er automatisch een .zip bestand gemaakt wordt als iemand op een knop drukt.
Omdat ik ISS gebruik als webserver gebruik kan ik geen .htaccess gebruiken, en het bestand dus niet beveiligen met mijn php login script. Daarom zocht ik een script dat ervoor zorgt dat als het bestand is gedownload, het automatisch verwijderd wordt.
Ik heb heel Google al afgezocht maar ik kon niks vinden.
Wie kan mij helpen?

Mathijs
Is het geen optie om het bestand nooit op te slaan en gewoon direct als download aan te bieden?
Als het script dat je nu gebruikt het bestand al opslaat zou je dat ook zo kunnen laten. Breidt het script dan uit met:

PHP Downloadscript

En gooi het aangemaakte bestand na pushen van de download direct weer weg...
Ik heb nu de volgende code:

formulier.php

<?php
// Deze 3 regels zijn het enige vereiste om te controleren of er is ingelogd 
ob_start();
session_start();
include("../auth.php");
checkAuth();
// Tot hier dus  
?>
<head>
<title>Downloaden...</title>
</head>
<body>
Klik hieronder om te downloaden
<FORM METHOD="post" action="zip.php">
  <INPUT TYPE="submit" VALUE="Download">
</FORM>
</body>


zip.php

<?php
// Deze 3 regels zijn het enige vereiste om te controleren of er is ingelogd 
ob_start();
session_start();
include("../auth.php");
checkAuth();
// Tot hier dus  

require_once("pclzip.lib.php"); // Lees de class in

$zip = new PclZip("website.zip");
if($zip->create("../../../../informatica") == 0)
  die("Error : " . $zip->errorInfo(true));
		header ( "Location: download.php" ); 
?> 


download.php

<?php
// Deze 3 regels zijn het enige vereiste om te controleren of er is ingelogd 
ob_start();
session_start();
include("../auth.php");
checkAuth();
// Tot hier dus  
$filename = 'website.zip';
            $filename = realpath($filename);

            if (!file_exists($filename)) {
                die("NO FILE HERE");
            }

            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            header("Cache-Control: private",false);
            header("Content-Type: application/zip");
            header("Content-Disposition: attachment; filename=\"".basename($filename)."\";");
            header("Content-Transfer-Encoding: binary");
            header("Content-Length: ".@filesize($filename));
            set_time_limit(0);
            @readfile("$filename") or die("File not found."); 
			header ( "Location: verwijder.php" ); ?>


verwijderen.php

<?php
require_once("pclzip.lib.php"); // Lees de class in

$zip = delete(PCLZIP_OPT_BY_NAME,"website.zip");
if($zip->delete() == 0)
  die("Error : " . $zip->errorInfo(true));
header ( "Location: ../index.php" ); 
?>


Het formuliertje, het zippen en het verwijderen werkt zoals het moet, maar als ik wil downloaden wacht hij niet totdat het downloaden klaar is en downloadt hij dus niets. Wie weet hoe ik dit kan oplossen?

Mathijs

EDIT 05-01-2008 21:18
Download.php gewijzigd
Ik mis in download.php de regel waar je de inhoud van het bestand leest en naar de browser stuurt? Dus bijvoorbeeld de functie readfile()...
Ik heb download.php nu gewijzigd naar de bovenstaande code, maar nu word ik niet doorgestuurd naar verwijderen.php, verder werkt de code wel goed.

Reageren