Probleme mit Installationsscript (Einspielen SQL-Dump)

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

  • Probleme mit Installationsscript (Einspielen SQL-Dump)

    Mein Installationsscript offenbahrte in der Vergangenheit mir bisher nicht nachvollziehbare Schwächen. Diese Script lädt SQL-Dateien, trennt die einzelnen Anweisungen voneinander ab und führt diese dann nacheinander aus.

    PHP-Code:
    function install($filename$show=1)
    {
      global 
    $database$sql_prefix;

      
    //Datei einlesen
      
    $file implode(""file("sql/" $filename ".sql"));
      
    $array split(";\r\n\r\n"$file);
      
      
    //Anweisungen ausführen
      
    for($i=0$i<count($array); $i++)
      {
        
    $sql $array[$i];
        
    $sql str_replace("fn1_""fn" $sql_prefix "_"$sql);
        
    $query $database->db_query("$sql");
        
        
    //Statusmeldung ausgeben (Tabellenname)
        
    if($show)
        {
          
    $table split("`"$array[$i]);
          echo 
    str_replace("fn1_""fn" $sql_prefix "_"$table[1]) . "<br>";
        }
      }

    Das Problem ist, dass in letzter Zeit die Trennung der einzelnen Anweisungen gelegentlich Schwierigkeiten bereitet. Bei einigen Nutzern des Scriptes kam es vor, dass die Anweisungen nicht getrennt wurden, was selbstverständlich einen Fehler beim Ausführen von mysql_query() bewirkte.

    Amüsant ist, dass sich dieses Problem wohl nicht auf die Serverumgebung zurückführen lässt. Trat das Problem bei einem Nutzer auf, habe ich die Installation von meinem Rechner ausgeführt und wurde mit diesem Problem erstaunlicherweise nicht konfrontiert. Daher vermute ich, dass dies aus der Übertragung der Daten resultiert.

    Jetzt suche ich das eigentliche Problem und natürlich eine Möglichkeit, ein derartiges Verhalten des Scriptes künftig zu unterbinden. Da ich das Problem nicht replizieren kann, ist es mir in erster Linie wichtig, Hinweise bezüglich der Problemursache zu erhalten.
    [COLOR=red]Gesellschaftsforum.net[/COLOR] - Projekt zur Wiederbelebung der Diskussionskultur im Internet
    [COLOR=orange]1st News[/COLOR] - Das Newsletterscript für den professionellen Einsatz

  • #2
    Vielleicht die Zeilenumbrüche...?

    \r für Mac
    \n für Unix
    \r\n für Windows

    Kommentar


    • #3
      Würde ich auch drauf tippen. split(";\r\n\r\n", $file); ist das Problem.

      Kommentar


      • #4
        Aber mal was anderes...
        Ich verstehe nicht ganz, was du da machst.

        Du nutzt file(), erhälst damit ein zeilenweises Array zurück, machst das durch implode() wieder zu einem einzelnen, zusammenhängenden String und teilst es dann mit split() doch an den Zeilenumbrüchen wieder in ein Array?

        Mal davon abgesehen, das hier explode() wohl sinnvoller wäre, wieso machst du das so umständlich?
        Wenn jeder Datensatz in deiner .sql in einer einzelnen Zeile liegt, reicht file() doch vollkommen aus.

        Kommentar


        • #5
          Original geschrieben von Cologne
          Vielleicht die Zeilenumbrüche...?

          \r für Mac
          \n für Unix
          \r\n für Windows
          Ist soweit bekannt, nur stammen die Dateien von mir und sind entsprechend bewusst mit Zeilenumbrüchen der Form "\r\n" versehen. Genau deshalb kann ich das Problem nicht eindeutig darauf zurückführen. Das würde das Problem nur erklären, wenn der Entpackvorgang oder der Dateiupload entsprechende Änderungen bedingen würden.

          Warum so umständlich - gute Frage. Rührt daher, dass ich die Routine merhmals änderte und ich denke, ich werde bei der Trennung künftig auf tolerantere reguläre Ausdrücke setzen, weshalb es sinnvoll ist, dass mir der gesamte Dateiinhalt in einer Variablen vorliegt.
          [COLOR=red]Gesellschaftsforum.net[/COLOR] - Projekt zur Wiederbelebung der Diskussionskultur im Internet
          [COLOR=orange]1st News[/COLOR] - Das Newsletterscript für den professionellen Einsatz

          Kommentar


          • #6
            bau doch eine debug routine ein und bitte den nutzer diese einmail aufzurufen und dir das ergebnis zuzuschicken .. dann kannst du dir die sql-statements genauer ansehen
            Gruß
            Uzu

            private Homepage

            Kommentar

            Lädt...
            X