Het "opslaan als" schermpje met 1 druk op de knop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Erik van Veen

Erik van Veen

21/07/2010 13:46:57
Quote Anchor link
Beste forumleden,

Hierbij heb ik een vraag over het onderstaande script. Dit script wordt nu aangeroepen door op een knop te drukken. Met dit script zou een .zip bestand gemaakt moeten worden en meteen een "opslaan als" scherm tevoorschijn moeten komen, alleen kwam ik er achter dan ik twee keer op de knop moet drukken totdat het "opslaan als" schermpje verschijnt en ik wil dus dan met 1 druk op de knop het bestand wordt gemaakt (en op de server wordt gezet) en dat daarna gelijk een scherm "opslaan als" verschrijnt zodat je het ook nog op een andere plek kan opslaan. Ik hoop dat iemand mij kan helpen met het verbeteren van dit onderstaande script. Ik maak gebruik van Internet Explorer 8.

Met vriendelijke groeten,

Erik van Veen

-------------------------------------------------
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
<?php
$datum
= date("Y-m-d", $_SERVER['REQUEST_TIME']);
$file = "backups/$datum.zip";

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    }


$datum = date("Y-m-d", $_SERVER['REQUEST_TIME']); //Haal de huidige datum op van de server
require_once("pclzip.lib.php"); // Lees de PCL class in
$zip = new PclZip("backups/$datum.zip"); //Selecteer de juiste map en bestandsnaam voor het opslaan (Ik heb gekozen voor de huidige datum)
if($zip->add("../applicatie/") == 0) //De map van het subdomein (../ staat voor het hoofddomein)
die("Error : " . $zip->errorInfo(true)); //Geef een error als het niet kan
echo "Uw backup is opgeslagen in Applicatie/Backups!!"; //Het volledige path naar de backup is nu: Applicatie/Backups/$datum.zip
?>
Gewijzigd op 21/07/2010 13:47:56 door Erik van Veen
 
PHP hulp

PHP hulp

28/11/2024 23:32:46
 
- SanThe -

- SanThe -

21/07/2010 13:52:57
Quote Anchor link
Je biedt eerst de file aan en dan vervolgens ga je de file pas maken.
Volgorde omdraaien misschien?
 
Erik van Veen

Erik van Veen

21/07/2010 13:57:21
Quote Anchor link
SanThe Nvt op 21/07/2010 13:52:57:
Je biedt eerst de file aan en dan vervolgens ga je de file pas maken.
Volgorde omdraaien misschien?


Nee dan krijg ik de errors dat de Headers als een keer verzonden zijn.
 
- SanThe -

- SanThe -

21/07/2010 13:59:27
Quote Anchor link
Dan laat je de echo (regel 24) daar lekker staan.
Als er niets naar de browser gaat voor de header heb je ook geen error.
 
Erik van Veen

Erik van Veen

21/07/2010 14:02:34
Quote Anchor link
SanThe Nvt op 21/07/2010 13:59:27:
Dan laat je de echo (regel 24) daar lekker staan.
Als er niets naar de browser gaat voor de header heb je ook geen error.


Met het volgende script krijg ik dus jammer genoeg die errors dat de headers al een keer verstuurt zijn. Hoe kan ik dit oplossen?

----------------------------------------------------

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
<?php
$datum
= date("Y-m-d", $_SERVER['REQUEST_TIME']); //Haal de huidige datum op van de server
require_once("pclzip.lib.php"); // Lees de PCL class in
$zip = new PclZip("backups/$datum.zip"); //Selecteer de juiste map en bestandsnaam voor het opslaan (Ik heb gekozen voor de huidige datum)
if($zip->add("../applicatie/") == 0) //De map van het subdomein (../ staat voor het hoofddomein)
die("Error : " . $zip->errorInfo(true)); //Geef een error als het niet kan
echo "Uw backup is opgeslagen in Applicatie/Backups!!"; //Het volledige path naar de backup is nu: Applicatie/Backups/$datum.zip

$datum = date("Y-m-d", $_SERVER['REQUEST_TIME']);
$file = "backups/$datum.zip";

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    }

?>
 
- SanThe -

- SanThe -

21/07/2010 14:06:48
Quote Anchor link
Regel 7 (was regel 24) onderaan zetten (laten staan).
Gewijzigd op 21/07/2010 14:07:39 door - SanThe -
 
Erik van Veen

Erik van Veen

21/07/2010 14:11:49
Quote Anchor link
SanThe Nvt op 21/07/2010 14:06:48:
Regel 7 (was regel 24) onderaan zetten (laten staan).


Bedankt het werkt nu!! :D
 
Michael -

Michael -

21/07/2010 14:14:01
Quote Anchor link
Erik, volgens mij snap je niet helemaal wat de error "headers already sent" inhoud.
Zoals SanThe al zei moet jou echo na de header. Ga anders eens googlen wat ie error precies inhoud.

Edit: Te laat :) Mooi dat 't nu werkt.
Gewijzigd op 21/07/2010 14:14:57 door Michael -
 
Erik van Veen

Erik van Veen

21/07/2010 14:20:17
Quote Anchor link
Tur min op 21/07/2010 14:14:01:
Erik, volgens mij snap je niet helemaal wat de error "headers already sent" inhoud.
Zoals SanThe al zei moet jou echo na de header. Ga anders eens googlen wat ie error precies inhoud.

Edit: Te laat :) Mooi dat 't nu werkt.


Die echo heb ik zelfs helemaal weg gehaald want je kreeg hem toch niet te zien :P
 
Niek s

niek s

21/07/2010 14:47:33
Quote Anchor link
Zoals de foutmelding zegt:
jij gaat een echo duwen. Dat betekent dat er data naar de browser gaat. Voor die data komen altijd headers.
Als jij dus eerst data stuurt (en dus automatisch headers), en je gaat later de headers aanpassen, dan werkt dat niet. Je kan immers niet zeggen "deze headers moet je zometeen sturen" als ze al weg zijn.

Vuistregel: geen echo's of andere output voor dat je headers gaat aanpassen. Via header(), via set_cookie(), via session_start() of elke andere functie die headers aanpassen.
 
Erik van Veen

Erik van Veen

21/07/2010 14:59:37
Quote Anchor link
Niek s op 21/07/2010 14:47:33:
Zoals de foutmelding zegt:
jij gaat een echo duwen. Dat betekent dat er data naar de browser gaat. Voor die data komen altijd headers.
Als jij dus eerst data stuurt (en dus automatisch headers), en je gaat later de headers aanpassen, dan werkt dat niet. Je kan immers niet zeggen "deze headers moet je zometeen sturen" als ze al weg zijn.

Vuistregel: geen echo's of andere output voor dat je headers gaat aanpassen. Via header(), via set_cookie(), via session_start() of elke andere functie die headers aanpassen.


Bedankt voor de goede uitleg.
 



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.