yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

Dateien online bearbeiten



Zuerst hier das Script:
PHP-Datei:
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
26
27
28
29
30
31
32
<?php
if (empty($gesendet)) {
    
ob_start();
    
readfile($_GET['file']);
    
$file=ob_get_contents();
    
ob_end_clean();

    echo 
'<html>
    <head>
    <title>'
.$_GET['file'].' editieren</title>
    </head>
    <body>
    <form action="'
.$_SERVER['SCRIPT_NAME'].'" method="post">
    <input type="hidden" name="filename" value="'
.$_GET['file'].'" />
    <input type="hidden" name="gesendet" value="jo" />
    <textarea name="datei" cols="50" rows="10">'
.htmlspecialchars($file).'
    </textarea>

    <input type="submit" name="ok" value="speichern">
    </form>
    </body>
    </html>'
;
} else {
    
$write=fopen($_POST['filename'], "w");
    if(
fwrite ($write$_POST['datei'])) {
        echo 
"Änderung erfolgreich";
    } else {
        echo 
"Schreiben fehlgeschlagen. Sind die Rechte richtig gesetzt?";
    }
    
fclose($write);
}
?>


Aufgerufen wird das Script mit dem Parameter file: editieren.php?file=datei.php .

Mit diesem Aufruf würdest du also die Datei datei.php, die im gleichen Verzeichnis wie die editieren.php liegt, im Editor öffnen.
Dafür wird ein temporärer Ausgabepuffer erstellt. Das heisst, alles, was nun ausgegeben werden soll, wird in diesen Puffer geschrieben, jedoch nicht ausgegeben. Nun wird mit readfile() die gewünschte Datei geöffnet, jedoch von der Funktion aus auch direkt ausgegeben. Da dies jedoch nicht gewollt ist, haben wir den Puffer. Nun wird der Inhalt des Puffers (und damit der Dateiinhalt) ausgelesen und anschließend der Puffer gelöscht.
Ausgegeben wird dies dann in dem Eingabefeld, jedoch etwas anders: Alle HTML-Sonderzeichen wie <, > und & werden mit htmlspecialchars umgewandelt. Ansonsten würde der Dateiinhalt ausgeführt werden, was diesmal ja nicht gewollt ist.

Mit dem Absenden wird die zu editierende Datei geöffnet und dabei die Datei komplett geleert. Somit wird verhindert, dass noch alte Dateireste übrig bleiben.
Anschließend wird der Dateiinhalt geschrieben und in Abhängigkeit vom (Miss-)Erfolg der Aktion eine Meldung ausgegeben. Anschließend wird die Datei wieder geschlossen und damit wieder verfügbar gemacht.

Wichtig ist nur, dass die zu editierende Datei die Dateirechte (chmod) 666 oder 777 besitzt. Ansonsten ist es PHP nicht möglich, die Datei zu beschreiben.
Natürlich sollte man auch nur Textdateien oder vergleichbare Dateien bearbeiten, dieses Script kann keine Bilder o.ä. verarbeiten.

Geschrieben von Phil Marx am 18.06.2004 (13171x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

Dann frage ich mich wie das bei so Seiten wie zum Beispiel mailchecker.de funktioniert, wo man ja auch die datei bearbeiten kann (halt über FTP) aber sie trotzden rechten 755 oder 644 bearbeiten kann!
Geschrieben von DiWoWo
Das hat in meinen Augen eher was mit den FTP-Funktionen zu tun: http://de.php.net/manual/de/function.ftp-fput.php



Bei diesen Script loggst du dich ja nicht auf dem Server ein und pipapo.

Wenn du auf dem FTP-Server bist, greifen da AFAIK andere Rechte und dafür gibts ja auch diese FTP.Funktionen :)
Geschrieben von Phil Marx
Das Script funktioniert bei mir nicht.
Sobald ich auf den Button klicke, wird die editieren.php ohne Parameter neu geladen. und meine datei.php ändert sich nicht.
An den Rechten kann es nicht liegen, da ich es auch mal mit Xampp versucht habe.
Muss ich bei dem Script etwas ändern, bzw ersetzen???
Geschrieben von Anakin
Hi,

eigentlich sollte das unter Xampp definitiv funktionieren.

Am besten knallst Du in die erste Zeile des Skriptes :

<? error_reporting(E_ALL); ?>

Anhand des Fehlers, kannst Du vielleicht daraufschliessen was falsch läuft.
Geschrieben von Ramin
Das habe ich jetzt versucht. geht aber nicht. Wenn ich auf speicher klick, ladet er das gleiche fenster neu, ohne paramerter (und der bringt dann nur den fehler, dass keine parameter vorhanden sind).

Aber ich glaub, das Script kann gar nicht funktionieren:
am anfang fragen wir nach, ob $gesendet leer ist. aber wenn man auf speichern klickt, wird $gesendet gar nicht verändert?!?!?!

ich habe jetzt selber versucht das script zu schreiben, aber jetzt hab ich nur noch ein Bug drin: ich bekomm die htmlspecialchars nicht raus.


<?php
$filename = $HTTP_GET_VARS["file"];

if ($HTTP_GET_VARS["speichern"])
{
$Inhalt = $HTTP_POST_VARS["Inhalt"];

$fp=fopen($filename, "w");

if(fwrite ($fp, $_POST['daten']))
echo "Änderung erfolgreich";
else
echo "Schreiben fehlgeschlagen";

fclose($fp);
}

else
{
ob_start();
readfile($filename);
$file=ob_get_contents();
ob_end_clean();

echo '<html>
<head>
<title>Seiten editieren</title>
</head>
<body>
<form action="editieren2.php?file='.$filename.'&speichern=1" method="post">
<textarea name="Inhalt" cols="50" rows="10">'.$file.'</textarea>

<input type="submit" name="ok" value="speichern">
</form>
</body>
</html>';
}
?>
Geschrieben von Anakin
@anakin
Du musst $_POST['daten'] zu $_POST['Inhalt'] sonst klappt das editieren nicht. Also heißt das Script:

<?php
$filename = $_GET['file'];

if (isset($_GET['speichern']))
{
$Inhalt = $_POST['Inhalt'];
$fp=fopen($filename, "w");
if(fwrite ($fp, $_POST['Inhalt']))
echo "Änderung erfolgreich";
else
echo "Schreiben fehlgeschlagen";

fclose($fp);
}
else
{
ob_start();
readfile($filename);
$file=ob_get_contents();
ob_end_clean();

echo '<html>
<head>
<title>Seiten editieren</title>
</head>
<body>
<form action="editieren.php?file='.$filename.'&speichern=1" method="post">
<textarea name="Inhalt" cols="50" rows="10">'.$file.'</textarea>

<input type="submit" name="ok" value="speichern">
</form>
</body>
</html>';
}
?>
Geschrieben von Horst Herzog
Bei mir klappt es zwar, jedoch wird vor alle " ein backslash gesetzt, und die datei funktioniert nicht mehr..
Geschrieben von dementius
siehe stripslashes in zeile 6

<?php
$filename = $_GET['file'];

if (isset($_GET['speichern']))
{
$Inhalt = stripslashes($_POST['Inhalt']);
$fp=fopen($filename, "w");

if(fwrite ($fp, $Inhalt))
echo "Änderung erfolgreich";
else
echo "Schreiben fehlgeschlagen";


fclose($fp);

} else {

ob_start();
readfile($filename);
$file=ob_get_contents();
ob_end_clean();

echo '<html>
<head>
<title>'.$_GET['file'].'</title>
</head>
<body>
<form action="editieren.php?file='.$filename.'&speichern=1" method="post">
<textarea name="Inhalt" cols="50" rows="10">'.$file.'</textarea>
<input type="submit" name="ok" value="speichern">
</form>
</body>
</html>';
}
?>
Geschrieben von keineZeit