PHP Neuling: Suchen und ersetzen funktioniert nicht wie gewünscht.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Neuling: Suchen und ersetzen funktioniert nicht wie gewünscht.

    Hallo zusammen.

    Ich habe hier ein Script, das Zeilen aus der Datei TabzuOrdnung2.txt einliest.
    Die Zeilen in der Datei sehen wie folgendes Schema, allerdings mit Sonderzeichen, aus:
    Verbtabelle.php#Verb1,Verb2,Verb3 usw, wobei die Anzahl der Verben variabel ist.
    Jetzt sollen in einer Datei namens test.php nacheinander alle Platzhalter mit Verb1, Verb2 usw ersetzt werden.
    Leider wird in meinem Script nur Verb1 eingesetzt und für Verb3 keine Datei angelegt.
    Kann mir jemand weiterhelfen?
    Hier das Script:

    PHP-Code:
    <?php 
    error_reporting
    (E_ALL); 
    ini_set("display_errors""ON"); 
     
    ?>
    <?php
    $TabzO 
    'TabzuOrdnung2.txt';
    $Site 'test.php'
    $TZ '#';
    $TabzOArray file ($TabzO);
    $SiteArray file_get_contents ($Site);

    $chars = array    (
        
    'replace' => array('A','A','A','A','a','a','a','a','Ae','ae','C','c','E','E','E','e','e',),
        
    'browser' => array('Á','À','Â','Ã','á','à','â','ã','Ä','ä','Ç','ç','É','È','Ê','é','è',),
        
    'filesystem' => array('%C1','%C0','%C2','%C3','%E1','%E0','%E2','%E3',),
        
    'source' => array('&Aacut;','&Agrav;','&Acir;','&Atild;','&aacut;','&agrav;',),
                    ); 
    #Sonderzeichen gekürzt

    foreach ($TabzOArray as $nr => $TzOAzeile)     { 
                
    $TabzOArrayTeile explode ($TZ,$TzOAzeile);
                
    $TabzOArrayTeileRechts explode (',',$TabzOArrayTeile[1]);
                foreach (
    $TabzOArrayTeileRechts as $Nr => $zeile)     {
                        
    $zeile2 str_replace($chars['browser'], $chars['replace'], $zeile);
                        
    $zeile3 str_replace($chars['browser'], $chars['source'], $zeile);
                        echo 
    $zeile."<br>";
                        echo 
    $zeile2."<br>";
                        echo 
    $zeile3;
                        
    $SiteArray str_replace ('test1',$zeile3,$SiteArray);
                        
    $SiteArray str_replace ('test2',$zeile2,$SiteArray);
                        
    $SiteArray str_replace ('test3',$TabzOArrayTeile[0],$SiteArray);
                        
    $zeile2 $zeile2.'.php';
                        
    $schreib file_put_contents ($zeile2,$SiteArray); # Zeile 32
                                                                    
    }
                                                }
    ?>
    Also nur test3 wird ordnungsgemäß ersetzt, währenddessen die Ersetzungen der Sonderzeichen keinen Erfolg hat.

    Die Ausgabe der echos mit Fehlermeldungen:

    verb1
    verb1
    verb1verb2
    verb2
    verb2verb3
    verb3
    verb3
    Warning: file_put_contents(verb3 .php) [function.file-put-contents]: failed to open stream: Invalid argument in C:\Program Files\xampp\htdocs\SantoDaimePortal\test3\4.php on line 32

    Gruß
    Estrela
    Zuletzt geändert von Estrela; 31.08.2008, 11:37.
    Denk positiv.

  • #2
    Ich würd sagen, du musst erstmal den Quelltext korrigieren, denn hier ist eindeutig ein Syntax-Fehler vorhanden..
    ..und du wirst ja sicher nur kopiert haben..

    mfg
    Edit: Kann es sein, dass $zeile2 = 'verb3 '; < da ne leertaste zuviel ist?
    Lass hinter Zeile $zeile2 noch nen .'m'; oder so ausgeben um das zu überprüfen..
    Zuletzt geändert von Blackgreetz; 31.08.2008, 11:33.

    Kommentar


    • #3
      Hallo Blackgreetz.

      Das erste ist erledigt, kam durch die Kürzung zustande. Danke.
      Mit dem zweiten weiß ich jetzt nicht, was Du meinst.

      Gruß
      Estrela
      Denk positiv.

      Kommentar


      • #4
        In Deiner Fehlermeldung ist ein Leerzeichen im Datei-namen
        Bin mir nicht sicher, ob das immer so ist (wäre komisch) ...

        Warning: file_put_contents(verb3 .php) [function.file-put-contents]: failed to open stream

        Deshalb solltest du $zeile2 mal ausgeben lassen und gucken, ob am ende ein Leerzeichen ist .. z.b. indem du einen buchstaben anhängst und guckst, ob der dran ist oder nicht...

        Ansonsten sagt die Fehlermeldung ja, was der Grund ist, dass es nicht klappt..

        mfg

        Kommentar


        • #5
          Hallo Blackgreetz.

          Gut beobachtet, ist mir garnicht aufgefallen. Ich konnte den Fehler beheben, indem ich in der Datei TabzuOrdnung2.txt hinter dem letzten Verb ein "," einfügte; jetzt wird auch diese Datei geschrieben.
          Bleibt noch die Frage, warum die Ersetzungen mit test1+2 nicht erfolgen, sondern immer Verb1 eingesetzt wird; und zwar immer nur das erste Verb der ersten Zeile in TabzuOrdnung2.txt, es findet also kein durchwechseln statt.
          Ich habe da jetzt schon verschiedene Variationen probiert, aber ich komme nicht auf den Fehler.
          Kannst Du da weiterhelfen?

          Gruß
          Estrela
          Zuletzt geändert von Estrela; 31.08.2008, 13:12.
          Denk positiv.

          Kommentar


          • #6
            Debugging? Testausgaben? USW?

            Kommentar


            • #7
              Hallo TobiaZ.

              Die Testausgabe kannst Du oben sehen.
              Ich denke, es ist eher ein Fehler in der Konstruktion, soll heißen, ich habe die Anweisung für das Durchwechseln nicht richtig konstruiert.
              Wenn mir in dieser Hinsicht jemand konstruktive Hinweise geben könnte, währe das echt hilfreich.

              Gruß
              Estrela
              Denk positiv.

              Kommentar


              • #8
                Was ist $sitearray?

                Da willst du was ersetzen .. diese Testausgabe brauch man dann wohl auch

                Die anderen Sachen haben sich ja mit dem Leerzeichen erledigt..

                mfg

                Kommentar


                • #9
                  Hallo Blackgreetz.

                  Die Datei test.php hat folgenden Testinhalt:

                  <?php include 'dat/test1'; ?>
                  <?php include 'text/test2'; ?>
                  <?php include 'tabs/test3'; ?>

                  Im Prinzip ist der Inhalt also an den obigen echos zu erkennen.

                  Gruß
                  Estrela
                  Denk positiv.

                  Kommentar


                  • #10
                    Original geschrieben von Blackgreetz
                    Was ist $sitearray?

                    Kommentar


                    • #11
                      Hallo TobiaZ.

                      $SiteArray ist das Array, das durch
                      $SiteArray = file_get_contents ($Site); erzeugt wurde, enthält also den Inhalt der Datei test.php.
                      Und bis auf eine verkürzte Schreibweise sehe ich nichts auffälliges; und die Zuweisung funktioniert ja Grundsätzlich, was an der Ersetzung test3 zu ersehen ist.
                      Nur, das test3 ja direkt auf $TabzOArrayTeile[0] zugreift, während die Ersetzungen test1+2 auf die $zeile2+3 zugreifen, um die Modifizierungen der Sonderzeichen zu realisieren.
                      Und hier ist irgendwo der Fehler, weil bei dem Zugriff auf die $zeile kein Durchwechseln der Verben stattfindet.
                      Dabei habe ich doch die Zeile "tabelle.php#verb1,verb2,verb3," zweimal durch explode teilen lassen, so das doch mit
                      foreach ($TabzOArrayTeileRechts as $Nr => $zeile)
                      jedes Verb angesprochen sein müßte.
                      Oder nicht?

                      Ich hoffe, eure Fragestellung getroffen zu haben.

                      Der Fehlercode im Quellcode:

                      verb1<br>verb1<br>verb1<?php include 'dat/verb1'; ?>
                      <?php include 'text/verb1'; ?>
                      <?php include 'tabs/tabelle.php'; ?>verb2<br>verb2<br>verb2<?php include 'dat/verb1'; ?>
                      <?php include 'text/verb1'; ?>
                      <?php include 'tabs/tabelle.php'; ?>verb3<br>verb3<br>verb3<?php include 'dat/verb1'; ?>
                      <?php include 'text/verb1'; ?>
                      <?php include 'tabs/tabelle.php'; ?>
                      <br>

                      <br>
                      <br />
                      <b>Warning</b>: file_put_contents(
                      .php) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: Invalid argument in <b>C:\Program Files\xampp\htdocs\SantoDaimePortal\test3\4.php</b> on line <b>32</b><br />
                      <?php include 'dat/verb1'; ?>
                      <?php include 'text/verb1'; ?>
                      <?php include 'tabs/tabelle.php'; ?>verbb1<br>verbb1<br>verbb1<?php include 'dat/verb1'; ?>

                      <?php include 'text/verb1'; ?>
                      <?php include 'tabs/tabelle.php'; ?>verbb2<br>verbb2<br>verbb2<?php include 'dat/verb1'; ?>
                      <?php include 'text/verb1'; ?>
                      <?php include 'tabs/tabelle.php'; ?>verbb3<br>verbb3<br>verbb3<?php include 'dat/verb1'; ?>
                      <?php include 'text/verb1'; ?>
                      <?php include 'tabs/tabelle.php'; ?>
                      <br>
                      <br>
                      <br />
                      <b>Warning</b>: file_put_contents(
                      .php) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: Invalid argument in <b>C:\Program Files\xampp\htdocs\SantoDaimePortal\test3\4.php</b> on line <b>32</b><br />

                      // Hier das echo von $SiteArray:

                      <?php include 'dat/verb1'; ?>
                      <?php include 'text/verb1'; ?>
                      <?php include 'tabs/tabelle.php'; ?>



                      Gruß
                      Estrela
                      Zuletzt geändert von Estrela; 31.08.2008, 14:33.
                      Denk positiv.

                      Kommentar


                      • #12
                        $SiteArray ist das Array, das durch $SiteArray = file_get_contents ($Site); erzeugt wurde, enthält also den Inhalt der Datei test.php.
                        Und ist somt also gar kein Array!!!

                        Kommentar


                        • #13
                          Hallo TobiaZ.

                          Danke für die Begriffsaufklährung.
                          Die Assoziation entstand wahrscheinlich durch den Befehl file, der dann ja die Zeilen des Inhaltes der entsprechenden Datei als Array zurückliefert.
                          Im Gegensatz dazu liefert file_get_contents einen String zurück.
                          Hat aber mit der Aufgabe direkt nichts zu tuen, oder?

                          Ich habe jetzt mal ein wenig modifiziert:
                          PHP-Code:
                                      foreach ($TabzOArrayTeileRechts as $Nr => $zeile)     {
                                      echo 
                          $TabzOArrayTeileRechts[$Nr];
                                              
                          $zeile2 str_replace($chars['browser'], $chars['replace'], $TabzOArrayTeileRechts[$Nr]);
                                              
                          $zeile3 str_replace($chars['browser'], $chars['source'], $TabzOArrayTeileRechts[$Nr]); 
                          Und das echo liefert genau die Einträge, die ich brauche.
                          Also wie spreche ich sie in den nachfolgenden Ersetzungszeilen an?
                          Das müßte doch so stimmen.

                          Gruß
                          Estrela
                          Zuletzt geändert von Estrela; 31.08.2008, 16:53.
                          Denk positiv.

                          Kommentar


                          • #14
                            OffTopic:
                            Hat aber mit der Aufgabe direkt nichts zu tuen, oder?
                            Vermutlich nicht, aber da dein Quellcode so unübersichtlich und schlecht dokumentiert ist - von den Variablennamen mal ganz zu schweigen - ist es echt mühselig ihn zu prüfen. Man muss praktisch Zeile für Zeile durchgehen, als sei man selbst der Parser... Das ist mir zu viel, sorry.

                            Kommentar


                            • #15
                              Hallo TobiaZ.

                              Ich denke mal, das die Struktur des Scriptes von Dir als Profi recht schnell erfasst wurde und hinsichtlich der Komplexität keine Schwierigkeiten macht.
                              Aber es ist ja nicht das erste mal, das Du kurz vor dem Ziel die Zusammenarbeit verweigerst.
                              Und ich wüßte jetzt nicht, was hier an dem kleinen Script groß zu dokumentieren währe.

                              Leztendlich würde Deine Aussage bedeuten, das Du hier Postings abgelassen hast, ohne das Script zu verstehen.

                              Aber Du bist ja nicht der einzige Fachkundige hier und darum hoffe ich weiter auf den entscheidenen Hinweis.

                              Gruß
                              Estrela
                              Zuletzt geändert von Estrela; 31.08.2008, 17:03.
                              Denk positiv.

                              Kommentar

                              Lädt...
                              X