Replacen?

Status
Niet open voor verdere reacties.

LarsL

Gebruiker
Lid geworden
19 sep 2008
Berichten
155
Hallo allemaal, ik heb een page editor script gemaakt (met wat hulp), de match werkt wel maar de replace echter niet, het moet natuurlijk naar de file geschreven worden maar hoe moet ik het naar die betreffende file wegschrijven? want het gedeelte uit de match moet weggeschreven worden op de plaats van de oude code, en niet dat het hele bestand herschreven moet worden :confused:

Hier de code:

PHP:
<?php
require_once '../config.php';
/**
 * Script by Lars
 **/
if (isset($_SESSION["username"])) {
    function load($file)
    {
    	$pattern = '/<body>(.*?)<\/body>/msU';
        $loadfile = file_get_contents(htmlspecialchars($file));
        preg_match($pattern, $loadfile, $loaded);
        if (isset($_POST['edit'])) {
            $replacetext = $_POST['text'];          
        $strNewFile = preg_replace('/<body>(.*?)<\/body>/msU',$replacetext, $loadfile);         
            echo 'Succesvol veranderd!';
        } else {
            echo '<html><head><title>Page Editor</title></head><body><form method="post">';
            echo 'Pagina: <textarea cols="55" rows ="5" name="text">' . $loaded[0] .
                '</textarea>';
            echo '<br />';
            echo '<input type="submit" name="edit" value="Aanpassen!" />';
            echo '</form>';
            echo '</body></html>';
        }
    }
    if (isset($_GET['file'])) {
    if (file_exists($_GET['file']).".php") {
  load($_GET['file'].".php");
  }
    else {
 echo 'Geen hackers pl0x';
}
  }
} else {
    header("Location: index.php");
}
?>

Heeft iemand hier een oplossing voor?

Alvast bedankt,
Lars. :D
 
Ik begrijp niet helemaal wat je hier probeert te doen, maar volgensmij lijkt je code al redelijk compleet>

Je laadt het hele bestand in een string, vervolgens vervang je in die string de stukken die je wilde editen, en daarna schrijf je de hele string weer terug naar de file... dan overschrijf je inderdaad de hele file met een nieuwe, maar alleen de relevante informatie wordt vervangen. De rest van de input string is niet veranderd, dus die wordt gewoon netjes terug gezet.

Het wordt pas een probleem als je probeert een file van meerdere MB's in lengte te editen; maar dat lijkt me niet echt de bedoeling?
 
Ik begrijp niet helemaal wat je hier probeert te doen, maar volgensmij lijkt je code al redelijk compleet>

Je laadt het hele bestand in een string, vervolgens vervang je in die string de stukken die je wilde editen, en daarna schrijf je de hele string weer terug naar de file... dan overschrijf je inderdaad de hele file met een nieuwe, maar alleen de relevante informatie wordt vervangen. De rest van de input string is niet veranderd, dus die wordt gewoon netjes terug gezet.

Het wordt pas een probleem als je probeert een file van meerdere MB's in lengte te editen; maar dat lijkt me niet echt de bedoeling?

Oké, maar hoe schrijf ik dat dan naar de file? met fwrite?
 
fwrite kan ook, maar de snelste manier is om gewoon file_put_contents ( $file, $text ) te gebruiken.
Dan geef je een filename op; die wordt automatisch geopend, vervolgens leeggegooid, en daarna wordt de string die je meegeeft erin gegooid, en vervolgens wordt ie weer gesloten.

( http://nl2.php.net/manual/en/function.file-put-contents.php )
 
fwrite kan ook, maar de snelste manier is om gewoon file_put_contents ( $file, $text ) te gebruiken.
Dan geef je een filename op; die wordt automatisch geopend, vervolgens leeggegooid, en daarna wordt de string die je meegeeft erin gegooid, en vervolgens wordt ie weer gesloten.

( http://nl2.php.net/manual/en/function.file-put-contents.php )
Maar als die leeg gegooid word gaan er toch gegevens die niet gereplaced moeten worden verloren?
 
Nee, als jij $loadfile = file_get_contents(htmlspecialchars($file)); gebruikt, worden ALLE contents uit het bestand ingeladen.

Als je vervolgens in $loadfile een onderdeel vervangt, en vervolgens ook $loadfile weer terugschrijft naar het bestand, dan gaat het goed.

Je moet alleen opletten dat je in $loadfile dus alleen het relevante stuk vervangt, en niet alles.

Files bewerken in PHP kun je het beste doen door de hele file in het geheugen te laden en daar alle relevante wijzigingen te maken, en vervolgens de hele file terug te schrijven. Bewerken in het geheugen is namelijk veel eenvoudiger :)
 
Nee, als jij $loadfile = file_get_contents(htmlspecialchars($file)); gebruikt, worden ALLE contents uit het bestand ingeladen.

Als je vervolgens in $loadfile een onderdeel vervangt, en vervolgens ook $loadfile weer terugschrijft naar het bestand, dan gaat het goed.

Je moet alleen opletten dat je in $loadfile dus alleen het relevante stuk vervangt, en niet alles.

Files bewerken in PHP kun je het beste doen door de hele file in het geheugen te laden en daar alle relevante wijzigingen te maken, en vervolgens de hele file terug te schrijven. Bewerken in het geheugen is namelijk veel eenvoudiger :)

Bedankt, hij werkt!
Nog een klein vraagje: Hij escaped bijv de quotes, hoe voorkom ik dat? htmlspecialchars weghalen werkt niet.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan