Sql Backup, ohne backup Datei servseitig zu speichern

mille

Erfahrenes Mitglied
Hallo!

Ich arbeite gerade an einem einfachen "CMS".
Hier moechte ich nun eine Möglichkeit einbauen, ein backup zu ziehen.
So weit, so gut. ICh habe jetzt einen ueberdimensionierten String, welche alle SQL Befehle beinhaltet.
Diesen möchte ich in eine Datei schreiben und NICHT auf dem server speichern sondern an den Benutzer schicken (quasi als download).
Nun weiss ich nicht wie ich das realisieren soll, ohne die Datei zwischenzeitlich auf dem Server zu hinterlegen.

Kurze verbaler Algorithmus:
Sql DB auslesen -> in String speichern -> string in eine temporäre Datei schreiben (existiert nur im Zwischenspeicher des Servers) -> datei per header an den User schicken -> user downloaded und speichert Datei lokal -> Datei im Zwischenspeicher kann verworfen werden.

Mir geht es darum, das ich dem PHP Skript keine Schreibrechte auf dem Server geben möchte!

MfG
mille
 
Du kannst die Header-Datei ja so ändern wie du möchtest.
Gib doch einfach den String in der PHP-Datei aus, und setz den Header auf den Dateityp .sql
Der WebBrowser des Users sollte dann nachfragen, was mit der Datei gemacht werden soll.

Vielleicht klappt das ja.

mfg
da_loki
 
Gumbo hat gesagt.:
Gib die Zeichenkette doch direkt aus anstatt sie erst in einer Datei zu speichern.
Das wäre ne Idee. Geht aber nicht, da ich die Seite für einen DAU mache, dem kann ich ein Copy-Past-Save nicht zu muten.
Der soll einfach nur klciken, speichern klicken und hochladen druecken fürs Einlesen des Backups *g*.

Aber die Idee von Loki gefällt mir.
Einfach quasi ausgeben, nur als Header festlegen, das es sich um eine *.cont.bu Datei handelt. Also content.backup File?

ich probiers
 
Also ich habs gelöst.
Danke Loki. Danke @PHP Documentation ;)


Hier der Code:
PHP:
    header("Content-Disposition: attachment; filename=".$filename);
    $bu = "";
    $sqlbot->getBackup($tbl_arr, $bu); // erzeugt das Backup in String $bu
    echo $bu;
    exit;

Die Datei $filename hat bei mir folgenden schematischen Inhalt:

Code:
-- Host: localhost
-- Erstellungszeit: 26. March 2006 um 14:16
-- PHP-Version: 5.1.1
--
-- Datenbank: `__tables`
--

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

TRUNCATE TABLE `TBL_menuepunkte`;

--
-- Daten für Tabelle `TBL_menuepunkte`
--

INSERT INTO `TBL_menuepunkte` (ID, menuepunkt, kategorie) VALUES ('3', 'Lackierung', '4');

INSERT INTO `TBL_menuepunkte` (ID, menuepunkt, kategorie) VALUES ('2', 'Unfallinstandsetzung', '4');

INSERT INTO `TBL_menuepunkte` (ID, menuepunkt, kategorie) VALUES ('4', 'Auto', '-1');

INSERT INTO `TBL_menuepunkte` (ID, menuepunkt, kategorie) VALUES ('5', 'Busse', '-1');

INSERT INTO `TBL_menuepunkte` (ID, menuepunkt, kategorie) VALUES ('6', 'Werbeplakatierung', '5');

-- Host: localhost
-- Erstellungszeit: 26. March 2006 um 14:16
-- PHP-Version: 5.1.1
--
-- Datenbank: `__tables`
--

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

TRUNCATE TABLE `TBL_menuepunkte_inhalt`;

--
-- Daten für Tabelle `TBL_menuepunkte_inhalt`
--

INSERT INTO `TBL_menuepunkte_inhalt` (ID, menuepunkt_ID, content) VALUES ('1', '2', 'Inhalt zum Men&uuml;punkt <strong>Unfallinstandsetzung<br /><br /></strong>hier noch zus&auml;tzliche infos<strong></strong>');
 
Zuletzt bearbeitet:
Probier mal Folgendes:
PHP:
<?php

	$headerFields = array(
		'Date'                => date('D, d M Y H:i:s T', time()),
		'Content-Type'        => 'application/octet-stream',
		'Content-Disposition' => 'attachment; filename="'.date('Y-m-d\TH-i-sO', time()).'.bak.sql"',
		'Content-Length'      => strlen($string)
	);

	foreach( $headerFields as $fieldName => $fieldValue ) {
		header($fieldName.': '.$fieldValue);
	}
	echo $string;   // Daten aus der Datenbank
	exit;

?>
 
Was ist denn da jetzt anders?

Ich habe das mal bei mir eingefügt und bei mir wird somit kein downlaoddialog erzwungen.
Aber nehmen wir mal an, der wärejetzt erzwungen worden, worin besteht dann der Unterschied? Bzw. was ist anders?
 
Prinzipiell gibt es keinen Unterschied. Ich habe nur etwas länger für meinen Beitrag gebraucht und habe deinen daher noch nicht wahrgenommen.
 
Zurück