Maddin: PHP Script automatisch generierte SFTP Übertragung

Hallo,
habe ein kleines Problem und hoffe Ihr könnt mir helfen.
Arbeite mit MySql Datenbank und Php.
Muß einen Webshop bauen, die Kundendaten müssen an dritte als csv Datei weitergeliefert werden, da Versand von dort aus geschiet.
Da ich aber nicht für jede neue Bestellung erstens ein Dump machen kann und diesen dann in einer csv Datei von meinem lokalen Rechner überspielen kann (z.B. Urlaub) würde ich das gerne automatisieren.
Es gibt doch bestimmt schon PHP Scripte die so was machen können und die ich nur entsprechend bearbeiten müßte. Sprich wenn Bestellung abgeschickt wird: erstens csv Datei generieren und zweitens diese per SFTP übertragen.
Kennt ihr solche Scripte? Wenn ja wo finde ich da eine vernünftige Lösung?

Danke für jede Hilfe,
Martin

  1. Hi,

    wo ist denn das Problem? Eine csv-Datei ist derart primitiv aufgebaut, dass nicht viel mehr als die Ausgabe von ein paar Kommas notwendig ist um die Aufgabe zu lösen. Ein shell_exec dass dann noch scp aufruft und fertig. Eine exakt für deine Anwendung passende Umsetzung wirst du nicht finden - aber vielleicht kannst du dir die 10 Zeilen auch selbst tippen.

    Schöne Grüße
    Julian

    1. Hi Julian,
      danke, daß Du mir das Zutraust, aber shell_exec, scp ???????
      Sagt mir leider nichts. Sorry bin bis jetzt noch nicht vor so einem Problem gestanden...
      Kennst Du irgendwo ein Beispiel, damit ich mir die Sachen mal ansehen kann???

      Grüße,
      Martin

      1. Hi,

        Hi Julian,
        danke, daß Du mir das Zutraust, aber shell_exec, scp ???????
        Sagt mir leider nichts. Sorry bin bis jetzt noch nicht vor so einem Problem gestanden...
        Kennst Du irgendwo ein Beispiel, damit ich mir die Sachen mal ansehen kann???

        shell_exec führt ein externes Programm aus. Siehe die zugehörige PHP-Dokumentation.
        scp ist ein Unix-Programm das eine Datei per SFTP von einem Rechner auf den anderen kopiert. Siehe man-page.

          
        shell_exec("scp datei123 user@server:pfad");  
        
        

        müsste die Datei "datei123" auf den Server "server", Username "user" nach "pfad" kopieren.

        Vorher speicherst du also deine CSV-Datei ($handler = fopen("datei123","w+"), per if($handler) prüfen ob Datei öffnen erfolgreich, flock($handler,2), fwrite($handler,$csvblabla), fclose($handler)) und kopierst sie dann mittels der oben genannten Zeile auf den anderen Rechner. Bzgl. dem Erzeugen von CSV-Dateien solltest du dich mit dem einfachen Format auseinandersetzen, Implementationen lassen sich sicher zahlreich per Google auffinden.

        Schöne Grüße
        Julian

        1. Hi,
          dann versuche ich es dochnochmal hier....

          Also bin mittlerweile soweit, daß ich die Datei per sftp übertragen kann, aber eine neue Datei erstellen bekomme ich nicht hin (kann die Daten nur in eine schon bestehende Datei schreiben)

          Da das Script automatisch ablaufen muß, sprich durch eine Aktion ausgelöst wird, wollte ich als Dateinamen den Timestamp mit einbinden um die Eindeutigkeit zu garantieren als Dateiname z.B. maddin-timestamp.csv da es recht unwahrscheinlich ist, daß genau zur gleichen Zeit die Aktion zweimal ausgelöst wird. (wer hier auch eine bessere Idee hat - sehr gerne!!!!).

          Wie erstelle ich per php eine neue Datei mit eindeutigem Namen und kann dann gleich auf diese Datei zurückgreifen (ach ja, die Datei muß natürlich für spätere Referenzen auch auf meinem lokalen Server gespeichert bleiben... also nicht nur temporär)

          Wäre euch wirkich dankbar, wenn ihr mir weiterhelfen könntet.

          Danke und Grüße,
          Maddin

          1. Hi,

            Wie erstelle ich per php eine neue Datei mit eindeutigem Namen und kann dann gleich auf diese Datei zurückgreifen (ach ja, die Datei muß natürlich für spätere Referenzen auch auf meinem lokalen Server gespeichert bleiben... also nicht nur temporär)

            ungetestetes Stückchen Programmcode, dass den Timestamp als Ausgangsname nimmt, und Ziffern hinten dran hängt, wenn der Timestamp schon existiert. Anschließend wird in die Datei der Inhalt der Variable $data geschrieben. (Mit PHP5 und file_put_contents würde sich der Programmcode um 3 Zeilen verkürzen, siehe dazu das Manual.)

              
            // Dateiinhalt festlegen  
            $data = "Lustiger Inhalt...";  
              
            // Dateinamen bestimmen  
            $filename = "maddin-".date("U")."-"; // maddin-<timestamp>-<nr>.csv  
            $extension = ".csv";  
            $nr = 0;  
            while(file_exists($filename.$nr.$extension)) $nr++;  
            $filename .= $nr.$extension;  
              
            // In die Datei schreiben  
            $handler = fopen($filename,"w+");  
            flock($handler,LOCK_EX);  
            fwrite($handler,$data);  
            fclose($handler);  
            
            

            Schöne Grüße
            Julian

        2. Hi Julian,
          danke nochmal auch für den Tip bezüglich des erstellens der Datei

          shell_exec("scp datei123 user@server:pfad");

            
          Aber dieser Secure Copy Befehl funktioniert bei mir leider nicht (da wird nichts verschoben....)  
            
          Diesbezüglich noch irgendwelche gute Ideen??  
            
          Grüße,  
          Martin
          
          1. Hey Maddin,

            shell_exec("scp datei123 user@server:pfad");

            
            >   
            > Aber dieser Secure Copy Befehl funktioniert bei mir leider nicht (da wird nichts verschoben....)  
              
            hast du Konsolenzugriff, so dass du ihn mal testen kannst? Was heißt "funktioniert nicht"? Kannst du mal per var\_dump(shell\_exec("scp datei123 user@server:pfad")); testen ob irgendwelche Fehler auftreten?  
              
            Schöne Grüße  
            Julian
            
            -- 
            <http://lighttraffic.de> | <http://derjulian.net>
            
            1. Hi Julian,
              habe ich gemacht... Bekomme
              string(0) ""
              als Antwort...

              Grüße,
              Martin

              1. Hi,

                tut mir leid. Der Fehler wurde dadurch verursacht, dass das Passwort gefehlt hat, was sich per Schlüpsselgenerierung hätte lösen lassen. Ich habe aber eine viel elegantere Möglichkeit gefunden. PHP bietet für den Transport von Dateien per SCP Funktionen an:
                http://de3.php.net/manual/de/function.ssh2-scp-send.php
                Beispiel und Dokumentation auf der verlinkten Seite. Vorher muss das Modul installiert werden: http://de3.php.net/manual/de/ref.ssh2.php

                Schöne Grüße
                Julian

                1. Danke für den Tip, hatte ich auch schon ausprobiert
                  nur
                  scp
                  und
                  ssh2_connect
                  liefern mir ein call for undefined function
                  nud mein provider konnte mir da auch nicht weiterhelfen....

                  Grüße,
                  Maddin

                  1. Hi,

                    liefern mir ein call for undefined function
                    nud mein provider konnte mir da auch nicht weiterhelfen....

                    das Modul muss installiert werden. Wie das geht steht auf der verlinkten Seite. Es sollte nur ein Knopfdruck für deinen Provider sein.

                    Schöne Grüße
                    Julian

                    1. das Modul muss installiert werden. Wie das geht steht auf der verlinkten Seite. Es sollte nur ein Knopfdruck für deinen Provider sein.

                      »»

                      Ja, aber er will es nicht machen - da hilft es nichts ob es einfach ist oder nicht.....

                      1. Hi,

                        das Modul muss installiert werden. Wie das geht steht auf der verlinkten Seite. Es sollte nur ein Knopfdruck für deinen Provider sein.
                        »»

                        Ja, aber er will es nicht machen - da hilft es nichts ob es einfach ist oder nicht.....

                        dann informiere dich über Schlüsselgenerierung um ohne Passwort per SSH Daten kopieren zu können oder wechsle zu einem anderen Provider.

                        Schöne Grüße
                        Julian

  2. Hi,
    bin jetzt einen großen Schritt weiter.
    Das mit der Datei klappt ganz gut und Übertragung via FTP auch.
    Nachdem aber kritische Informationen übertragen werden will ich das ganze via SFTP machen und hier bräuchte ich wirklich fachmännische Hilfe!!
    Wäre wirklich dankbar, wenn mir hier jemand weiterhelfen könnte!!

    Grüße,
    Martin