Eine Datei laden, Bearbeiten und speichern (auf dem server) PHP
Ich habe eine Seite, die Lasten html-code aus einer Textdatei in einer textarea und ich muss in der Lage sein, den Inhalt speichern, indem Sie ein Skript.
Ich bin mit einem PHP-Skript, laden Sie den code aus einer Datei und das echo aus der textarea, aber wie kann ich senden Sie zurück, den Inhalt auf das Skript und speichern Sie es auf die gleiche Datei oder eine Datei mit einem neuen Namen?
Ich dachte, wenn getElementById würde mir helfen, aber ich bin mir nicht sicher, wie.
Den script laden(es hat die Fähigkeit, Dateien zu löschen)
//The file hierarchy:
//
//Web root - admin - This file
// - pages - in here are the page text files
//The variable pagesList is the filename chosen in a dropdown list earlier
$page = $_GET["pagesList"];
$action = $_GET["action"];
//get the path to the page( all pages are in a folder named 'pages')
$filename = dirname(dirname(__FILE__))."/pages/".$page;
if(file_exists($filename) and is_file($filename)){
//If I want to load a file
if($action == "open"){
$f = fopen($filename,"rt");
$content = fread($f, filesize($filename));
echo $content;
@fclose($f);
//If I want to delete a file
}elseif($action == "delete" && is_file($filename)){
//move the working directory to where the file is
$old = getcwd();
chdir(dirname(dirname(__FILE__))."/pages/");
//----
if(unlink($filename))
echo "File deleted,".$filename;
else
echo "Error deleting file!";
//change back the working directory to where it was
chdir($old);
//If I want to save a file
}elseif($action == "save"){
if(file_exists($filename)){
//Unknown script, need help!
}else{
}
}
}
In der textarea nur eine Zeile enthalten:
<textarea id="html_content" style="width:600;height:200;"><?php include("loader.php") ?></textarea>
Um es zusammenzufassen: ich brauche Hilfe, um den Inhalt einer textarea in ein Skript für später speichern.
EDIT: Dank davidkonrad ich hatte gerade ein paar POST erhält Sie das Skript und fügen Sie file_put_content mit dem Inhalt gesendet.
Das problem, dass entstand, ist, dass jQuery offenbar setzt \ vor jedes "oder". Das versaut allen den html-code sollte sauber sein und gültig sein. Ich werde es zu ersetzen \", mit " irgendwie, str_replace nicht schneiden. Irgendwelche Ideen?
EDIT2: nochmals vielen Dank an davidkonrad, dass es behoben indem alsterrunde(jQuery) ) und urldecode(PHP) serverseitige.
InformationsquelleAutor Patrick Dahlin | 2014-02-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update, OK, wenn Sie nur Zweifel daran haben, wie Sie eine textarea-Komponente, um Ihre loader.php :
loader.php, jetzt haben Sie
Hier "test.html", "speichern" und der text eingegeben werden, in das Textfeld. verwenden Sie diese Variablen in Ihrem
if
..else
Schleife wie oben, zBNachteile ist
<textarea>
..</textarea>
sobald es eingefügt ist (so wie ich das verstehe, wird der HTML-Teil loader.php)NB : es sei denn, es gibt einen besonderen Grund, Sie nicht zu überprüfen, ob eine Datei bereits vorhanden ist, bevor zu schreiben. Und denkt immer noch unterwegs, um in den Verzeichnissen macht es nur kompliziert 🙂 Ist
/pages/
nicht nur ein relativer Pfad?Muss es nicht so kompliziert zu sein. Ich würde die Verwendung eines einfachen und strukturierten Ansatz, bestehend aus
file_put_contents
,file_get_contents
undunlink
, darunter auch einige kleine Fehler-handling$.ajax
Anrufe (jQuery) aufrufen der oben genannten PHP-KlasseDem folgenden Beispiel arbeiten ausführt, speichern, laden und löschen von HTML-Dateien in einen directoty
/files
, die Sie geben müssen, RW-Berechtigungen.file.php
file.html markup
file.html, Drehbuch :
Den HTML-Inhalt (tags, HTML-entities) gehalten wird nach dem speichern durch die Verwendung von
encodeURIComponent
undurldecode
. Versuchen Sie es selbst heraus, und betrachten Sie dies als Basis für ein Komplexes system. Wenn Sie möchten, erstellen Sie eine neue Datei, geben Sie einfach einen neuen Dateinamen in das Feld Dateiname. Wenn Sie möchten, eine Datei zu laden, geben Sie den Dateinamen in das Feld Dateiname. Ich denke, file_put_contents etc ist bei weitem robuster als der Umgang mit Datei-handles,chdir(dirname(dirname(__FILE__))."/pages/");
(??) und so weiter.OK, nicht ganz verstehen - warum kann das passieren Sie den Inhalt der textarea an das PHP-Skript von normaler form/submit? Der Grund für die Verwendung von POST statt GET einen Grund haben : HOLEN Sie hat einige ver-engen Grenzen, auf einem normalen PHP mit suhosin-patch, der Standard-limit von $_GET Feld ist 512 bytes. Für Browser, die das Gesamt max Länge für ein (alle Felder inklusive) ist über 2000 chars. Nicht viel beim Bearbeiten von HTML - Dateien Finden Sie unter stackoverflow.com/questions/417142/... - ich glaube, Sie werden am Ende mit POST am Ende 🙂
Ah, es gibt eine Grenze.. Nun, ist es möglich, eine textarea in einem Formular aus und senden dessen Inhalt durch die POST? Und ich meinte, ich würde gerne weiterhin mit dem script habe ich bereits, nicht mit JQuery oder eine zweite komplett neues Skript zu verarbeiten, was ich schon habe.
Nun wenn ich merkte, dass Sie bearbeitet Ihre Antwort, ich habe es über das gleiche versucht es selber und es ist einfach das, was ich brauchte :). Nun die jQuery-Funktion POST anscheinend stellt ein \ vor alle " und ' - Zeichen, werden für ungültig erklärt, alle html ich versuchen, zu retten, und auf jedem speichern die doppelte Schrägstriche so dass die Linie wirklich lange am Ende. Ich habe versucht ersetzen Sie die \ mit str_replace ohne Glück... ich bin wirklich zu verlieren mein temperament auf das jQuery "feature".
Hey @PatrickDahlin - tun, wie in meinem ersten Vorschlag, clientseitige
encodeURIComponent
, serversideurldecode
. Das ist eher normal, auf der Flucht (look it up) - nicht immer versuchen zu "lösen", es manuell mit str_replace oder irgendetwas anderes. Die beiden Sprachen javascript und PHP ist entworfen, um zu bewältigen, die durch die erwähnten Funktionen und andere.InformationsquelleAutor davidkonrad
versuchen mit Hilfe von php fputs-Funktion zum speichern der Datei
InformationsquelleAutor user3343272