Hey, speichert Shopware in irgendeiner Datei die FTP Zugangsdaten? Ich möchte ein Script machen, welches Mysql und FTP-Daten sichert. Mysql Daten lese ich aus der config.php. Nun weiß ich nicht, ob ich die FTP Daten aus einer Datei lesen kann, oder ob es diese garnicht gibt. Oder gibt es eine Möglichkeit per PHP die Shopwarefiles zu sichern ohne FTP Zugangsdaten? Danke
Hey ottscho, du könntest doch die ftp Daten per Plugin abfragen.
[quote=“taaucher”]Hey ottscho, du könntest doch die ftp Daten per Plugin abfragen.[/quote] Ja klar, Ich könnte den User nach den Zugangsdaten fragen. Aber ich will so wenig wie möglich manuell eingeben lassen. Daher wäre es natürlich super, wenn es irgendwo schon in einer shopware config stehen würde, wo ich es auslesen kann. Die Abfrage über den User ist natürlich meine letzte Option
Also ich würde das jetzt nicht schlimm finden. Das macht man in der Regel doch 1x. Das Resultat daraus nimmt doch viel weniger Zeit/Aufwand in Anspruch Wieder eine tolle Idee!:thumbup:
Moin, zum sichern benötigst du keine FTP-Daten. Da legst du einen Ordner /backup/ mit einer .htaccess geschützt - da drin dann Unterordner (z.B. Tag/Monat/Jahr) und dann kopierst du die Dateien rekursiv mit den PHP-Bord-Funktionen. Ich würde auch niemals nie, die FTP-Daten irgendwo im System speichern - das ist ein Sicherheitsrisiko.
Okay, danke. Werde ich versuchen. Wo packe ich eig. meinen PHP Code ein. Ich will z.B. dies Anwenden: mkdir('test',0777);
Mache ich das in die Pluginname.php: <?php class Shopware_Controllers_Backend_Sicherung extends Enlight_Controller_Action
{
public function init(){
$this->View()-\>addTemplateDir(dirname(\_\_FILE\_\_)."/templates/"); } public function indexAction(){ $this-\>View()-\>loadTemplate("backend/plugins/Sicherung/index.tpl"); } public function skeletonAction(){ $this-\>View()-\>loadTemplate("backend/plugins/Sicherung/skeleton.tpl"); } public function doSicherungAction(){ mkdir("test", 0777); $this-\>View()-\>loadTemplate("backend/plugins/Sicherung/sicherung.tpl"); } } ?\>
Oder kann ich auch PHP Code in die tpl packen? Also hier: backend/plugins/Sicherung/sicherung.tpl
Okay, ich habe es nun so: public function doSicherungAction(){ //Backupordner erstellen if (!is\_dir('Backup')) mkdir('Backup', 0777); //Einlesen der SQL Zugangsdaten include 'config.php'; // Backup erstellen $datei = date("d\.m\.Y\_H",time()).date("i",time()); $datei .= ".sql"; if (file\_exists($datei)) unlink($datei); system("/usr/bin/mysqldump -u$DB\_USER -p$DB\_PASSWORD -h $DB\_HOST $DB\_DATABASE \> ".dirname(\_\_FILE\_\_)."Backup/$datei", $fp); $this-\>View()-\>loadTemplate("backend/plugins/Sicherung/sicherung.tpl"); }
Der PHP Code wird scheinbar ausgeführt. Sprich der Ordner Backup wird im Shopware-Install-Ordner erstellt. Leider klappt es nicht mit dem dump. Jmd einen Tipp?
Hi, {quote] system("/usr/bin/mysqldump -u$DB\_USER -p$DB\_PASSWORD -h $DB\_HOST $DB\_DATABASE \> ".dirname(\_\_FILE\_\_)."Backup/$datei", $fp);
[/quote] also das mit system() zu machen find ich ja nicht so prickelnd… Zumal das bei vielen warscheinlich auch nicht gehen wird… Werte doch mal nach dem Befehl die Variable fp aus… Wenn ein false drin steht, wirds wohl leider nicht gehen… was mir grad noch auffällt. Mach mal ein system("/usr/bin/mysqldump -u $DB\_USER -p $DB\_PASSWORD -h $DB\_HOST $DB\_DATABASE \> ".dirname(\_\_FILE\_\_)."Backup/$datei", $fp);
draus… P.S. Hatte ich übrigens auch schon mal angefangen sowas Aber nach dem ich deinen Post hier gelesen hab, hab ichs liegen lassen… Viele Grüße Thomas
Okay, nun klappt es über system() Gibt es den noch eine andere Möglichkeit die DB über PHP zu sichern. So dass ich es in einem Script verwenden kann?
[quote=„ottscho“]Okay, nun klappt es über system() Gibt es den noch eine andere Möglichkeit die DB über PHP zu sichern. So dass ich es in einem Script verwenden kann?[/quote] Hi… über einfache Datenbank-Abfragen, dann die Insert-Statements, bzw. die CREATE-Table-Statements erzeugen. Wichtig, was man aber auch nicht vergessen darf sind die Indizies der Tabellen… Thomas
Mhhh, in der Mysql Doku finde ich es nur über den dump Befehl. Ich habe nun so eine kleine Sicherung erstellt, aber wenn diese nicht überall läuft, ist es natürlich auch doof. //Backupordner erstellen if (!is\_dir('Backup')) mkdir('Backup', 0777); //Shopwarefiles in tar sichern $shellBefehl = 'tar --exclude=Backup -zcvf Backup/shopware\_files.tar.gz \*'; exec($shellBefehl, $var); //Einlesen der SQL Zugangsdaten include 'config.php'; //Backup der SQL DB erstellen system("/usr/bin/mysqldump -u$DB\_USER -p$DB\_PASSWORD -h $DB\_HOST $DB\_DATABASE \> Backup/shopware.sql", $fp); $date= date("d\.m\.Y\_H",time()).date("i",time()); $shellBefehl = 'tar -zcvf Backup/backup'.$date.'.tar.gz Backup/\*'; exec($shellBefehl, $var); //Temp Dateien löschen exec("rm Backup/shopware.sql Backup/shopware\_files.tar.gz", $var);
Dein Weg über Insert, Create etc. geht bestimmt besser, aber ist für mich im Moment sehr aufwendig. Aber falls du den Code parat hättest, würde ich den natürlich einbauen Bei allen die PHP_SafeMode = OFF haben, sollte das mit system() gehen, oder?
Müsste man mal von verschiedenen Leuten bei den unterschiedlichen Hostern testen lassen - aber eigentlich steht Exec und co. bei recht vielen Providern zur Verfügung. Finde die Lösung so eigentlich auch eleganter, als das über einen manuellen Dump zu machen - baue doch einfach eine Beta Version, dann publischen wir das im Store und sammeln Verbesserungsvorschläge. P.s. Ich würde auf jeden Fall verschlüsselte Archive zusammenbauen - geht z.B. mit dem Shell-Befehl “zip” - gerade das DB-Backup enthält ja äußerst sensible Daten!