Ankündigung

Einklappen
Keine Ankündigung bisher.

system()

Einklappen

Neue Werbung 2019

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

  • system()

    Hallo Community,

    Ich habe mal wieder eine Frage.
    Ich habe mir ein Backupscript für eine incrementelle Sicherung geschrieben.
    Dabei nutze ich Netzlaufwerke.
    Alles funktioniert wunderbar!

    Aber ich habe trotzdem eine Frage zu der Funktion system().

    Die Funktion gibt ja eine Rückmeldung
    Code:
    Der Befehl wurde erfolgreich ausgefhrt.
    oder

    Code:
    K: wurde erfolgreich gel”scht.
    Jetzt würde ich gern meine eigenen Rückmeldungen ausgeben lassen, da mir diese nicht gefallen.
    Ist das möglich oder muß ich mit den Rückmeldungen leben?

    Gruß
    Mike

    //edit: nein, bei den Rückmeldungen haben sich keine Rechtschreibfehler eingeschlichen, das wird so ausgegeben

  • #2
    Jetzt würde ich gern meine eigenen Rückmeldungen ausgeben lassen, da mir diese nicht gefallen.
    Ist das möglich oder muß ich mit den Rückmeldungen leben?
    du willst checken ob return_var, also das optionale zweite argument ein bestimmtes muster aufweisst und dann eine andere(?) variable mit eigegen text füllen?

    Kommentar


    • #3
      Und wir sollen jetzt raten, wie Deine Scripte arbeiten oder was?

      Kommentar


      • #4
        @nikosch
        sorry das ich kein codeschnipsel mitgegeben habe...
        habe ich eben in der Eile vergessen...

        functions.php
        PHP-Code:
        function MapDevice($Lw$Server$share$usr$pass){
            
        $command "net use $Lw: \\\\$Server\\$share /user:$usr $pass";
            
        $rückmeldung system($command$return_value);
            return 
        $rueckmeldung;

        datei.php
        PHP-Code:
        MapDevice($cfg['quelllaufwerk'], $cfg['quellserver'], $cfg['quellfreigabe'] , $cfg['user'], $cfg['user_kennwort']);

        echo 
        $rueckmeldung
        Gruß Mike

        Kommentar


        • #5
          sowas ?

          PHP-Code:

          $test 
          "erfolg";
          $command "ls";
          ob_start();
          $rckmeldung system($command$return);
          $out ob_get_contents();
          ob_end_clean();
          if (
          stristr ($out$test)) print "bla"
          sorry, mein fehler, arbeite nicht mit system

          Kommentar


          • #6
            Tolles Pseudobeispiel, das hinten und vorne nicht stimmt. Es könnte Dir ja wer was abgucken

            Kommentar


            • #7
              Ich meinte Mike

              Kommentar


              • #8
                hab aber die ausgabe nicht unterdrückt, brachte also den gewünschten effekt nicht ...

                Kommentar


                • #9
                  Kannst die Ausgabe auch einfach ins Nirvana umleiten.

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Tolles Pseudobeispiel, das hinten und vorne nicht stimmt. Es könnte Dir ja wer was abgucken
                    wieso pseudobeispiel?

                    config.inc.php
                    PHP-Code:

                    $cfg
                    ['quelllaufwerk'] = "K";
                    $cfg['ziellaufwerk'] = "S";
                    $cfg['quellserver'] = "quell_server";
                    $cfg['zielserver'] = "ziel_server";
                    $cfg['quellfreigabe'] = "Programme";
                    $cfg['zielfreigabe'] = "backup";
                    $cfg['user'] = "user";
                    $cfg['user_kennwort'] = "kennwort";
                    $cfg['kw'] = date('W'time());
                    $cfg['jahr'] = date('Y'); 
                    dasi_functions.php
                    PHP-Code:
                    function MapDevice($Lw$Server$share$usr$pass){
                        
                    $command "net use $Lw: \\\\$Server\\$share /user:$usr $pass";
                        
                    $rückmeldung system($command$return_value)."<br>\n";
                        return 
                    $rueckmeldung;
                    }

                    function 
                    unMapDevice($device){
                        
                    $command "net use $device: /delete";
                        
                    system($command)."<br>\n";
                    }

                    function 
                    get_files($dir , & $result)
                    {
                        if (
                    false === is_dir($dir)) {
                            return 
                    false;
                        }

                        
                    $handle opendir($dir);

                        if (
                    false === $handle) {
                            return 
                    false;
                        }

                        while (
                    false !== ($file readdir($handle))) {

                            
                    // Ausschluss von . und ..
                            
                    if ('.' == $file || '..' == $file) {
                                
                    // nächstes Element
                                
                    continue;
                            }

                            
                    // Verarbeitung von Verzeichnisnamen
                            
                    if (is_dir($dir $file)) {

                                
                    // Selbstaufruf
                                
                    get_files($dir $file '/' $result);

                                
                    // nächstes Element
                                
                    continue;
                            }

                            
                    // log.txt Datei ausschließen
                            
                    if ($file == "log.txt") {
                                continue;
                            }
                            
                    //Dateigröße bestimmen
                            
                    $size filesize("$dir$file");

                            
                    //letzte Änderung der Datei bestimmen
                            
                    $last_modfy filemtime("$dir$file");

                            
                    //Timelimit setzen
                            
                    set_time_limit(500);
                            
                            
                    // Array Zuweisung des Dateinamens
                            
                    $result[] = array('path' => $dir'name' => $file'size' => $size'change' => $last_modfy );

                        }
                        
                    closedir($handle);

                        return 
                    $result;

                    datei.php
                    PHP-Code:
                    require("config.inc.php");
                    require(
                    "dasi_functions.php");

                    //Startzeit festlegen und ausgeben
                    $zeitstempel_anfang time();
                    $start date('H:m:s'$zeitstempel_anfang);
                    echo 
                    "Startzeit der Sicherung:<br>";
                    echo 
                    $start."<br>";


                    //einbinden des Quell- und des Ziellaufwerkes mit Hilfe der daten aus der config
                    MapDevice($cfg['quelllaufwerk'], $cfg['quellserver'], $cfg['quellfreigabe'] , $cfg['user'], $cfg['user_kennwort']);
                    MapDevice($cfg['ziellaufwerk'], $cfg['zielserver'], $cfg['zielfreigabe'], $cfg['user'], $cfg['user_kennwort']);

                    echo 
                    $rueckmeldung;

                    //zuweisung der Laufwerksbuchstaben zur weiteren Nutzung
                    $device $cfg['quelllaufwerk'].":/";
                    $device2 =$cfg['ziellaufwerk'].":/";

                    //log.txt - Datei zeilenweise auslesen und in Array schreiben
                    $dateiinhalt file($device."log.txt");
                    foreach (
                    $dateiinhalt as $zeile)
                    {
                        list(
                    $path$name$size$change) = explode(";"$zeile);
                        
                    $log_array[] = array('path' => $path'name' => $name'size' => $size'change' => $change);

                    }


                    //Zählervariablen initialisieren
                    $i 0;
                    $j 0;

                    //Variablen als Array deklarieren
                    $result = array();
                    $copy = array();

                    // Freigabe Laufwerk auslesen und in Array schreiben
                    get_files($device$result);

                    //Arrayinhalt zählen
                    $count_vz count($result);

                    //Durch Schleife log.txt - Array  und  Verzeichnis Array vergleichen und bei
                    //Ungleichheit betreffende Array Zeile in das Copy Array schieben
                    while ($j $count_vz) {
                        if (
                    $log_array[$i]['path'] == $result[$j]['path'] && $log_array[$i]['name'] == $result[$j]['name'] &&
                        
                    $log_array[$i]['size'] == $result[$j]['size'] && $log_array[$i]['change'] == $result[$j]['change']) {
                            
                    $i++;
                            
                    $j++;
                            continue;
                        }
                        elseif (
                    $log_array[$i]['name'] != $result[$j]['name']){

                            
                    $copy[] = $result[$j];
                            
                    $j++;
                            continue;
                        }
                        else
                            
                    $copy[] = $result[$j];
                        
                    $j++;
                        
                    $i++;
                        continue;
                    }

                    // Info über Anzahl der geänderten Datensätze
                    $jahr $cfg['jahr'];
                    $kw_dir $cfg['kw']."kw";
                    echo 
                    "<br><br>";
                    $count count($copy);
                    if (empty(
                    $copy)) {     
                         echo 
                    "keine geäderten daten vorhanden!";
                    }
                    else{
                        if (
                    is_dir($device2.$jahr)) {
                                
                    mkdir($device2.$kw_dir);
                        }
                        else {
                            
                    mkdir($device2.$jahr);
                            
                    mkdir($device2.$jahr."/".$kw_dir);
                        }
                        echo 
                    $count." geänderte Datensätze gefunden!";
                    }

                    echo 
                    "<br><br>";


                    /*$kw_dir = $cfg['kw']."kw";
                    if (is_dir($device2.$kw_dir) === TRUE) {
                        echo "ordner $kw_dir ist bereits vorhanden!";
                    }
                    else{
                        mkdir($device2.$kw_dir);
                    }*/
                    /*
                    //Festlegen des neuen Pfad zur Weiterverarbeitung
                    $path_new = $device2.$kw_dir;*/

                    //Zählervariable initialisieren
                    $c=0;

                    //Durch Schleife abgelegten Pfad in seine Bestandteile zerlegen
                    //um Ordner und weitere Unterordner zu identifizieren...
                    while ($c $count) {
                        
                    $path_explode explode("/",$copy[$c]['path'] );
                        
                    $count_path_explode count($path_explode);
                        
                    $b 1;
                        
                    $path_new $device2.$jahr."/".$kw_dir;

                        
                    //.. und ggf anzulegen
                        
                    while ($b $count_path_explode) {
                            if (
                    $path_explode[$b] != "") {
                                if (!
                    is_dir($path_new."/".$path_explode[$b])) {
                                    
                    mkdir($path_new."/".$path_explode[$b]);
                                }
                                
                            }

                            
                    $path_new $path_new."/".$path_explode[$b];
                            
                    $b++;
                        }
                        
                    //festlegen der zu kopierenden Quelldatei incl. Pfad
                        
                    $copy_source $copy[$c]['path'].$copy[$c]['name'];

                        
                    //festlegen der Zieldatei incl. Pfad
                        
                    $copy_target $path_new."/".$copy[$c]['name'];

                        
                    //ausführen des kopervorgangs
                        
                    copy($copy_source$copy_target);
                        
                    $c++;
                    }



                    //log.txt Datei erstellen bzw alte log.txt Datei überschreiben
                    $log_file fopen($device."log.txt""w");
                    fclose($log_file);

                    //Quelllaufwerks Array mit Schleife zeilenweise auslesen...
                    for ($i=0$i<$count_vz$i++){
                        
                    $name $result[$i]['name'];
                        
                    $size $result[$i]['size'];
                        
                    $change $result[$i]['change'];
                        
                    $path $result[$i]['path'];
                            
                    //.. und zeilenweise in log.txt Datei schreiben
                            
                    $log_file fopen($device."/log.txt""a+" );
                            
                    $daten $path.";".$name.";".$size.";".$change."\r\n";
                            
                    fputs($log_file$daten );
                            
                    fclose($log_file);
                    }

                    //Endzeit festlegen und ausgeben
                    $zeitstempel_ende time();
                    $ende date('H:m:s'$zeitstempel_ende);
                    echo 
                    "Endzeit der Sicherung:<br>";
                    echo 
                    $ende."<br>";

                    //Netzlaufwerke trennen
                    unMapDevice($cfg['quelllaufwerk']);
                    unMapDevice($cfg['ziellaufwerk']); 
                    soviel zu pseudo...

                    @moma

                    danke, werde ich mal versuchen!

                    ist auch das erste mal das ich mit system arbeite, deshalb fragte ich ja auch.

                    Kommentar


                    • #11
                      wenn du das sagst.

                      aber ich brauch die doch, um zu testen obs gut lief.

                      oder einfach nur den return_value untersuchen, völlig auf stristr verzichten und schauen ob das ding 0 zurückliefert?

                      dein vorschalg scheint mir eleganter....

                      Kommentar


                      • #12
                        Code:
                        function MapDevice($Lw, $Server, $share, $usr, $pass){
                        	$command = "net use $Lw: \\\\$Server\\$share /user:$usr $pass";
                        	$rückmeldung = system($command, $return_value);
                        	return $rueckmeldung;
                        }

                        Code:
                        MapDevice($cfg['quelllaufwerk'], $cfg['quellserver'], $cfg['quellfreigabe'] , $cfg['user'], $cfg['user_kennwort']);
                        
                        echo $rueckmeldung; // wo soll die herkommen?
                        So viel zu nicht pseudo.

                        aber ich brauch die doch, um zu testen obs gut lief.

                        oder einfach nur den return_value untersuchen, völlig auf stristr verzichten und schauen ob das ding 0 zurückliefert?
                        Weiß ich jetzt auch nicht ausm Stehgreif, aber das würde ich versuchen, ja. Eine von den Rückgaben wirds schon sein. Im Ursprungsbeispiel, bei ls siehts vielleicht anders aus.

                        Kommentar


                        • #13
                          Zitat von nikosch Beitrag anzeigen
                          echo $rueckmeldung; // wo soll die herkommen?
                          jetzt wo du es sagts

                          einfach mal ü in ue

                          Kommentar


                          • #14
                            Der Aufruf ist auch falsch. Auch in Deinem langen Beispiel.
                            PHP-Code:
                            //einbinden des Quell- und des Ziellaufwerkes mit Hilfe der daten aus der config
                            MapDevice($cfg['quelllaufwerk'], $cfg['quellserver'], $cfg['quellfreigabe'] , $cfg['user'], $cfg['user_kennwort']);
                            MapDevice($cfg['ziellaufwerk'], $cfg['zielserver'], $cfg['zielfreigabe'], $cfg['user'], $cfg['user_kennwort']);

                            echo 
                            $rueckmeldung
                            echo $rueckmeldung; // wo soll die herkommen?

                            Kommentar


                            • #15
                              Thx, da komm ich immer nicht drauf.
                              auf den eleganten weg...

                              @Mike30:

                              würde prüfsummen über die datei laufen lassen, den log nicht in auf quell oder zieldatei haben, grösenänderungen bestimmen, einen diff über textdateien laufen lassen. jedes x-te mal ein fullbackup starten, alle actionen im logfile vermerken und das log nicht überschreiben ....

                              Kommentar

                              Lädt...
                              X