Mit PHP HTML-Dateien generieren
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
array
ausgabe
bezeichnung
code
datei
datum
eingabe
erstellen
favorit
fehler
funktion
http
index
klicken
speichern
test
umlaut
url
verzeichnis
zeichen
-
Hallo
Weiß jemand, wie man mit PHP-Skripten o. Ä. HTML-Dateien generieren und auf dem Server in einem ebenfalls generierten Verzeichnis speichern kann?
Und zwar soll die Datei index.html heißen und folgenden Inhalt haben:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>{bezeichnung}</title> <meta http-equiv="refresh" content="1; URL={zielurl}"> </head> <body> <h3>Sie werden in Kürze weitergeleitet.</h3> <p>Falls nicht, klicken Sie bitte <a href="{zielurl}">hier</a>.</p> </body> </html>
Das Verzeichnis soll ebenfalls {bezeichnung} heißen.
{bezeichnung} und {zielurl} soll das PHP-Skript einem Formular entnehmen.
Vielen Dank für jeden Vorschlag
Beitrag zuletzt geändert: 20.2.2014 17:28:53 von funnyweb -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
So:
$config = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>{bezeichnung}</title> <meta http-equiv="refresh" content="1; URL={zielurl}"> </head> <body> <h3>Sie werden in Kürze weitergeleitet.</h3> <p>Falls nicht, klicken Sie bitte <a href="{zielurl}">hier</a>.</p> </body> </html>'; $temp = fopen($bezeichnung."index.html","w"); fwrite($temp, $config); fclose($temp); chmod("../config.php",0600);
Wenn du es auf einen anderen Webserver übertragen möchtest, dann setze dich mit CURL oder url_fopen auseinander. -
Tut mir leid, das nachzufragen, aber: warum willst du diese Datein auf dem Server speichern, wenn du sie auch einfach mit jeder Anfrage zurückgeben kannst. Dann musst du (falls das eine größere Anzahl wird) nur {Bezeichnung} speichern
-
Hallo
hier als BSP mit Formular zur Eingabe der Bezeichnung und Zielurl
folgenden Quellcode in eine .php Datei speichern (z.B. make_site.php oder so)
<html> <head> <title>Seite erstellen</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF" text="#000000"> <br> <h1>Seite erstellen</h1> <hr> <?php // ---------------------------------------------------------------- if (!empty($_POST['bezeichnung']) && !empty($_POST['zielurl'])) { $go_bezeichnung = trim($_POST['bezeichnung']); $go_zielurl = trim($_POST['zielurl']); $go_datum = trim($_POST['datum']); $content = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>'.$go_bezeichnung.'</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="refresh" content="3; URL='.$go_zielurl.'"> <meta name="date" content="'.$go_datum.'"> </head> <body bgcolor="#FFFF33" text="#000000" link="#0000CC"> <div align="center"> <h1>'.$go_bezeichnung.'</h1> <br> <h3>Sie werden in Kürze weitergeleitet.</h3> <br> <p>Falls nicht, klicken Sie bitte <a href="'.$go_zielurl.'"><strong style="font-size:24px;">hier</strong></a>.</p> <br> </div> </body> </html> '; if (!is_dir($go_bezeichnung)) { $new_dir = mkdir($go_bezeichnung); if (!$new_dir) { die('Fehler ... konnte Verzeichnis nicht erstellen'); } $filename = 'index.html'; $filepath = $go_bezeichnung.'/'.$filename; $new_file = file_put_contents($filepath, $content, LOCK_EX); if (!$new_file) { die('Fehler ... konnte die Datei nicht erstellen'); } print '<br>'."\n"; print '<p>OK ... Verzeichnis und Datei erstellt ... <a href="'.$filepath.'" target="_blank"><strong>'.$filepath.'</strong></a></p>'."\n"; print '<br>'."\n"; print '<p>Erstellt am: '.$go_datum.'</p>'."\n"; print '<br>'."\n"; print '<br>'."\n"; print '<p>Neu starten .... <a href="javascript:history.back();">Seite erstellen</a></p>'."\n"; print '<br>'."\n"; } else { print '<br>'."\n"; print '<p>Fehler .... Das Verzeichnis <a href="'.$go_bezeichnung.'" target="_blank"><strong>'.$go_bezeichnung.'</strong></a> existiert bereits.'."\n"; print '<br>'."\n"; } } else { // ---------------------------------------------------------------- ?> <form name="form1" method="post" action=""> Bezeichnung: <input type="text" name="bezeichnung" size="50" maxlength="100"> <br> Ziel URL: <input type="text" name="zielurl" size="50" maxlength="150"> <br> <input type="hidden" name="datum" value="<?php echo date('Y-m-d H:i:s'); ?>"> <br> OK ........ <input type="submit" name="go" value="Speichern"> </form> <br> <br> <?php // ---------------------------------------------------------------- } // ---------------------------------------------------------------- ?> <br> <br> </body> </html>
aber das nur als rudimentäres Beispiel,
habe den Seiten-Code bischen geändert / erweitert ... refresh = 3 Sekunden, usw.
... das mit dem Datum kannst Du auch weg lassen ... aber egal
die User-Eingaben aus Formular ($_POST['bezeichnung'], etc)
sollte man dringend vor der Weiter-Verwendung noch prüfen / filtern
damit damit kein Unfug gemacht werden kann (hacking)
aber wie schon gesagt wurde, stellt sich die Frage, warum statisch speichern,
das geht auch dynamisch ... z.B. auch über mod_rewrite
EDIT ... PS ... das Thema gehört ins PHP-Forum und nicht ins HTML-Forum
evtl. bitte verschieben ...
Beitrag zuletzt geändert: 18.2.2014 16:00:31 von favoriten -
Vielen Dank all-in1 und favoriten für die erstklassigen Vorschläge!
jalstudios schrieb:
Tut mir leid, das nachzufragen, aber: warum willst du diese Datein auf dem Server speichern, wenn du sie auch einfach mit jeder Anfrage zurückgeben kannst. Dann musst du (falls das eine größere Anzahl wird) nur {Bezeichnung} speichernfavoriten schrieb:
Natürlich – das wäre viel einfacher. Aber ich brauche einen wirklich existierenden Ordner, weil ich Subdomains zuordnen möchte.
[…] aber wie schon gesagt wurde, stellt sich die Frage, warum statisch speichern,
das geht auch dynamisch ... z.B. auch über mod_rewrite […]
-
Du solltest aufpassen, dass man darüber kein PHP einschleusen kann, dass die Datein also nicht mit PHP ausgegeben werden, sondern einfach per HTML. Sonst wäre das eine gravierende Sicherheitslücke.
-
Hallo
hier nochmal eine erweiterte Version von meinem BSP
mit der Variable
kannst Du einstellen,$runtype = 'test';
ob das Script nur eine Test DEBUG Ausgabe mit <pre> macht
oder ob es wirklich den Ordner und die Datei erstellen soll
<?php // ---------------------------------------------------------------- header("Content-Type: text/html; charset=utf-8"); mb_internal_encoding('UTF-8'); ## $runtype = 'live'; // ----- erstellt Dir und File ----- $runtype = 'test'; // ----- nur Test DEBUG Ausgabe ----- // ---------------------------------------------------------------- ?> <html> <head> <title>Seite erstellen</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body bgcolor="#FFFFFF" text="#000000"> <br> <h1>Seite erstellen</h1> <hr> <?php // ---------------------------------------------------------------- function escape_user_input($strvar) { if (mb_detect_encoding($strvar, 'UTF-8', true) === false) { $strvar = utf8_encode($strvar); } $strvar = strip_tags($strvar); $strvar = stripslashes($strvar); $strvar = html_entity_decode($strvar); $replace = ' '; $strvar = str_replace("\s",$replace,$strvar); $strvar = trim(preg_replace('/ {2,}/',$replace,$strvar)); $zeichen = '0-9a-zA-Z_ \-'; $umlaute = utf8_encode('äöüßÄÖÜ'); $pattern = '/'.$zeichen.$umlaute.'/u'; $strvar = preg_replace($pattern,$replace,$strvar); $strvar = trim($strvar,$replace); return $strvar; } // ---------------------------------------------------------------- function clean_dirname($strvar) { $spacer = '-'; $strvar = mb_strtolower($strvar); $strvar = str_replace(' ', $spacer, $strvar); $strvar = str_ireplace(array(utf8_encode('ä'),utf8_encode('ö'),utf8_encode('ü'),utf8_encode('ß')), array('ae','oe','ue','ss'), $strvar); $strvar = trim($strvar,$spacer); return $strvar; } // ---------------------------------------------------------------- if (!empty($_POST['bezeichnung']) && !empty($_POST['zielurl'])) { $go_bezeichnung = trim($_POST['bezeichnung']); $go_zielurl = trim($_POST['zielurl']); $go_datum = trim($_POST['datum']); $go_bezeichnung = escape_user_input($go_bezeichnung); $go_zielurl = escape_user_input($go_zielurl); $go_dirname = clean_dirname($go_bezeichnung); // ------------------------------------------ $content = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>'.$go_bezeichnung.'</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="refresh" content="3; URL='.$go_zielurl.'"> <meta name="date" content="'.$go_datum.'"> </head> <body bgcolor="#FFFF33" text="#000000" link="#0000CC"> <div align="center"> <h1>'.$go_bezeichnung.'</h1> <br> <h3>Sie werden in Kürze weitergeleitet.</h3> <br> <p>Falls nicht, klicken Sie bitte <a href="'.$go_zielurl.'" title="'.$go_bezeichnung.'"><strong style="font-size:24px;">hier</strong></a>.</p> <br> </div> </body> </html> '; // ------------------------------------------ if (!is_dir($go_dirname)) { $filepath = ''; // ------------------------------------------ if ($runtype == 'live') { $new_dir = mkdir($go_dirname, 0766); if (!$new_dir) { die('Fehler ... konnte das Verzeichnis nicht erstellen'); } else { print '<p>OK ... Verzeichnis: <a href="'.$go_dirname.'" target="_blank"><strong>'.$go_dirname.'</strong></a> wurde erstellt</p>'."\n"; } $filename = 'index.html'; $filepath = $go_dirname.'/'.$filename; $new_file = file_put_contents($filepath, $content, LOCK_EX); if (!$new_file) { die('Fehler ... konnte die Datei nicht erstellen'); } else { chmod($filepath, 0755); print '<p>OK ... Datei: <a href="'.$filepath.'" target="_blank"><strong>'.$filepath.'</strong></a> wurde erstellt</p>'."\n"; } } else { print '<br>'."\n"; print '<br>'."\n"; print '<pre style="text-align:left; background:#DEDEDE;">'."\n"; print htmlentities(print_r($content,true)); print '</pre>'."\n"; } // ------------------------------------------ print '<br>'."\n"; print '<br>'."\n"; print '<br>'."\n"; print '<p>Erstellt am: '.$go_datum.'</p>'."\n"; print '<br>'."\n"; print '<p>PathDirName: '.$go_dirname.'</p>'."\n"; print '<br>'."\n"; print '<p>Bezeichnung: '.$go_bezeichnung.'</p>'."\n"; print '<br>'."\n"; print '<p>URL Adresse: '.$go_zielurl.'</p>'."\n"; print '<br>'."\n"; print '<br>'."\n"; print '<br>'."\n"; print '<p>Neu starten .... <a href="javascript:history.back();">Seite erstellen</a></p>'."\n"; print '<br>'."\n"; // ------------------------------------------ } else { print '<br>'."\n"; print '<p>Fehler .... Das Verzeichnis <a href="'.$go_dirname.'" target="_blank"><strong>'.$go_dirname.'</strong></a> existiert bereits.'."\n"; print '<br>'."\n"; } // ------------------------------------------ } else { // ---------------------------------------------------------------- ?> <form name="form1" method="post" action=""> Bezeichnung: <input type="text" name="bezeichnung" size="50" maxlength="100"> <br> Ziel URL: <input type="text" name="zielurl" size="50" maxlength="150"> <br> <input type="hidden" name="datum" value="<?php echo date('Y-m-d H:i:s'); ?>"> <br> OK ........ <input type="submit" name="go" value="Speichern"> </form> <br> <br> <?php // ---------------------------------------------------------------- } // ---------------------------------------------------------------- ?> <br> <br> </body> </html>
jetzt mit der Funktion: escape_user_input() ... zum Filtern der User-Eingaben
und mit der Funktion: clean_dirname() ... damit Directory keine Sonderzeichen bekommt
aber ...
... auch wenn Du den Seiten Subdomains zuordnen willst,
... dann geht das ebenso dynamisch (z.B. mit mod_rewrite)
... ohne solche statischen Ordner und Dateien erstellen zu müssen.
-
favoriten schrieb:
Hallo favoriten, du hast dir ja richtig Mühe gemacht! Ganz vielen lieben Dank!
Hallo
hier nochmal eine erweiterte Version von meinem BSP
mit der Variable
kannst Du einstellen,$runtype = 'test';
ob das Script nur eine Test DEBUG Ausgabe mit <pre> macht
oder ob es wirklich den Ordner und die Datei erstellen soll
<?php // ---------------------------------------------------------------- header("Content-Type: text/html; charset=utf-8"); mb_internal_encoding('UTF-8'); ## $runtype = 'live'; // ----- erstellt Dir und File ----- $runtype = 'test'; // ----- nur Test DEBUG Ausgabe ----- // ---------------------------------------------------------------- ?> <html> <head> <title>Seite erstellen</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body bgcolor="#FFFFFF" text="#000000"> <br> <h1>Seite erstellen</h1> <hr> <?php // ---------------------------------------------------------------- function escape_user_input($strvar) { if (mb_detect_encoding($strvar, 'UTF-8', true) === false) { $strvar = utf8_encode($strvar); } $strvar = strip_tags($strvar); $strvar = stripslashes($strvar); $strvar = html_entity_decode($strvar); $replace = ' '; $strvar = str_replace("\s",$replace,$strvar); $strvar = trim(preg_replace('/ {2,}/',$replace,$strvar)); $zeichen = '0-9a-zA-Z_ \-'; $umlaute = utf8_encode('äöüßÄÖÜ'); $pattern = '/'.$zeichen.$umlaute.'/u'; $strvar = preg_replace($pattern,$replace,$strvar); $strvar = trim($strvar,$replace); return $strvar; } // ---------------------------------------------------------------- function clean_dirname($strvar) { $spacer = '-'; $strvar = mb_strtolower($strvar); $strvar = str_replace(' ', $spacer, $strvar); $strvar = str_ireplace(array(utf8_encode('ä'),utf8_encode('ö'),utf8_encode('ü'),utf8_encode('ß')), array('ae','oe','ue','ss'), $strvar); $strvar = trim($strvar,$spacer); return $strvar; } // ---------------------------------------------------------------- if (!empty($_POST['bezeichnung']) && !empty($_POST['zielurl'])) { $go_bezeichnung = trim($_POST['bezeichnung']); $go_zielurl = trim($_POST['zielurl']); $go_datum = trim($_POST['datum']); $go_bezeichnung = escape_user_input($go_bezeichnung); $go_zielurl = escape_user_input($go_zielurl); $go_dirname = clean_dirname($go_bezeichnung); // ------------------------------------------ $content = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>'.$go_bezeichnung.'</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="refresh" content="3; URL='.$go_zielurl.'"> <meta name="date" content="'.$go_datum.'"> </head> <body bgcolor="#FFFF33" text="#000000" link="#0000CC"> <div align="center"> <h1>'.$go_bezeichnung.'</h1> <br> <h3>Sie werden in Kürze weitergeleitet.</h3> <br> <p>Falls nicht, klicken Sie bitte <a href="'.$go_zielurl.'" title="'.$go_bezeichnung.'"><strong style="font-size:24px;">hier</strong></a>.</p> <br> </div> </body> </html> '; // ------------------------------------------ if (!is_dir($go_dirname)) { $filepath = ''; // ------------------------------------------ if ($runtype == 'live') { $new_dir = mkdir($go_dirname, 0766); if (!$new_dir) { die('Fehler ... konnte das Verzeichnis nicht erstellen'); } else { print '<p>OK ... Verzeichnis: <a href="'.$go_dirname.'" target="_blank"><strong>'.$go_dirname.'</strong></a> wurde erstellt</p>'."\n"; } $filename = 'index.html'; $filepath = $go_dirname.'/'.$filename; $new_file = file_put_contents($filepath, $content, LOCK_EX); if (!$new_file) { die('Fehler ... konnte die Datei nicht erstellen'); } else { chmod($filepath, 0755); print '<p>OK ... Datei: <a href="'.$filepath.'" target="_blank"><strong>'.$filepath.'</strong></a> wurde erstellt</p>'."\n"; } } else { print '<br>'."\n"; print '<br>'."\n"; print '<pre style="text-align:left; background:#DEDEDE;">'."\n"; print htmlentities(print_r($content,true)); print '</pre>'."\n"; } // ------------------------------------------ print '<br>'."\n"; print '<br>'."\n"; print '<br>'."\n"; print '<p>Erstellt am: '.$go_datum.'</p>'."\n"; print '<br>'."\n"; print '<p>PathDirName: '.$go_dirname.'</p>'."\n"; print '<br>'."\n"; print '<p>Bezeichnung: '.$go_bezeichnung.'</p>'."\n"; print '<br>'."\n"; print '<p>URL Adresse: '.$go_zielurl.'</p>'."\n"; print '<br>'."\n"; print '<br>'."\n"; print '<br>'."\n"; print '<p>Neu starten .... <a href="javascript:history.back();">Seite erstellen</a></p>'."\n"; print '<br>'."\n"; // ------------------------------------------ } else { print '<br>'."\n"; print '<p>Fehler .... Das Verzeichnis <a href="'.$go_dirname.'" target="_blank"><strong>'.$go_dirname.'</strong></a> existiert bereits.'."\n"; print '<br>'."\n"; } // ------------------------------------------ } else { // ---------------------------------------------------------------- ?> <form name="form1" method="post" action=""> Bezeichnung: <input type="text" name="bezeichnung" size="50" maxlength="100"> <br> Ziel URL: <input type="text" name="zielurl" size="50" maxlength="150"> <br> <input type="hidden" name="datum" value="<?php echo date('Y-m-d H:i:s'); ?>"> <br> OK ........ <input type="submit" name="go" value="Speichern"> </form> <br> <br> <?php // ---------------------------------------------------------------- } // ---------------------------------------------------------------- ?> <br> <br> </body> </html>
jetzt mit der Funktion: escape_user_input() ... zum Filtern der User-Eingaben
und mit der Funktion: clean_dirname() ... damit Directory keine Sonderzeichen bekommt
aber ...
... auch wenn Du den Seiten Subdomains zuordnen willst,
... dann geht das ebenso dynamisch (z.B. mit mod_rewrite)
... ohne solche statischen Ordner und Dateien erstellen zu müssen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage