Het "opslaan als" schermpje met 1 druk op de knop
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)
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
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
?>
$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
Volgorde omdraaien misschien?
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?
Volgorde omdraaien misschien?
Nee dan krijg ik de errors dat de Headers als een keer verzonden zijn.
Als er niets naar de browser gaat voor de header heb je ook geen error.
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.
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)
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
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);
}
?>
$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);
}
?>
Gewijzigd op 21/07/2010 14:07:39 door - SanThe -
SanThe Nvt op 21/07/2010 14:06:48:
Regel 7 (was regel 24) onderaan zetten (laten staan).
Bedankt het werkt nu!! :D
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 -
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.
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
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.
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.
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.