2012-04-15 5 views
2

Ich bin mit dem php einige HTML-CodesWie HTML-Code speichern, der in PHP generiert wird?

Es ist in der jetzt,

<textarea> 
<html> 
.... 
</html> 
</textarea> 

zu erzeugen, was ich auf einen Knopf 'Speichern als HTML' tun möchte, ist erstellen

Wenn ich darauf drücke, hat es ein Fenster speichern als Dialogfeld, erlauben Benutzer den Speicherort wählen,

dann speichern an diesem Ort, wenn Sie bestätigen (der Dialog sollte nicht von mir erstellt werden, mit dem Windows eins .)

Ist der Workflow: zuerst habe ich eine temporäre HTML-Datei in meinem Server gespeichert, dann den Benutzer öffnen-Dialog, (ich brauche mir keine Gedanken über das 'Speichern zu Teil', nur die Temp HTML Dateipfad), und wenn der Benutzer schließt, lösche ich die temporäre Datei. Also, wie kann es realisiert werden? Danke

Nochmals vielen Dank.

+0

Ein Dokument, das es wert sein könnte, über Datei-Download-Injection-Angriffe zu lesen: https://www.aspectsecurity.com/wp-content/plugins/download-monitor/download.php?id=9 – nico

Antwort

2

PHP ist auf dem server-. Seite nicht vergessen, sobald die Seite generat ist ed, es ist auf dem Client. Ich denke, es macht mehr Sinn, solche Dinge mit Javascript zu tun, obwohl Sie die Daten auch auf eine PHP-Seite posten könnten, die dann die Daten erhalten würde.

Senden Sie die 'Input' Daten in einer PHP-Seite nach der Methode POST:

<form action="savedata.php"> 
    <input id="someElement" name="someElementName" type="textarea" /> 
    <input type="submit" /> 
</form> 

es auf dem PHP Ende Erhalten:

# savedata.php 

$inputdata = $_POST["someElementName"]; 
$filename = "somefile.html"; 
file_put_contents($filename, $inputdata); 

Dann könnten Sie einen Link in PHP haben die zum Download Datei.

echo "<a href='".$filename."'>Right-click, Save Target As...</a>"; 

Danach können Sie die Datei von Ihrem Server wie folgt löschen: -:

unlink($filename); 

Zum Öffnen einer Datei Dialog speichern Umleitung auf die Datei, sollte Ihr Browser speichern Dateidialog eine Öffnung

header('Content-type: text/plain'); 
header('Content-disposition: attachment; filename="$filename"'); 

Um eine Vorschau der Datei anzuzeigen, einen iframe machen:

echo "<iframe src='$filename' width=600 height=200 frameborder=0 />"; 
+0

Thx, afterall wie kann ich "speichern als"? – user782104

+0

@ user782104 aktualisierte Antwort – Ozzy

+0

der Teil, wo es Header sagt ('Content-disposition: Anhang; Dateiname = "$ filename"'); ist verantwortlich für diese –

4

Sie können nicht einfach einen Tag in ein <textarea> Tag setzen, es funktioniert nicht so.

Ich würde vorschlagen, dass Sie eine vorgefertigte Lösung wie TinyMCE verwenden, die sich um die meisten Dinge für Sie kümmern wird. Verwenden Sie auch etwas wie HTML Purifier, um Benutzereingaben zu bereinigen, bevor Sie sie speichern, da jemand ein bösartiges Skript speichern könnte.

Die TinyMCE-Websites haben viele Beispiele, wie man sie benutzt.

+0

Ich benutze derzeit ckeditor, es ist ähnlich, glaube ich, gibt es irgendwelche speichern als Funktion von ihnen? Danke – user782104

+0

@ user782104: Ich habe nie ckeditor verwendet, aber es sieht so aus, als wäre es möglich. Siehe zum Beispiel: http://goo.gl/4TcWG oder http://stackoverflow.com/questions/7777110/can-we-save-ckeditor-data-into-doc-file (und ich habe es nicht googelt a viel ...) – nico

2

können Sie tun, dass PHP-Header-Funktion, wie diese (Ihre HTML vorausgesetzt, auf dieser Seite veröffentlicht wird:

<?php 

header('Content-Disposition: attachment; filename="filename.html"'); 
echo $_POST['html']; 
?> 

Satz dieser PHP-Seite das Ziel dieser Form sein, und ich denke, man getan wird

EDIT: aber für mögliche XSS-Angriffe achten sollten wie Damien Pirsy im Kommentar erwähnt, immer können Sie die Eingabe obwohl sanieren, Dinge Streifen, die nicht wie Skripte benötigt werden

+3

Dies wäre jedoch ein Paradies für XSS-Angreifer. Lassen Sie sie beliebige HTML-Dateien auf Ihrem Server erstellen ... nun, riecht –

+0

Sie haben Recht, aber man kann es nutzen und es so sanieren wie sie wollen, wie Strip-Skripte und alles –

+2

Nun, das wäre eine schöne Integration zu Ihrem Antwort –

Verwandte Themen