Technisches und Persönliches

Schlagwort: #PHP

ftp-mysql-dump: eine Datenbank per FTP abholen

Die letzten Wochen arbeite ich recht intensiv an einem aktuellen Projekt und habe daher wenig Zeit aufs Bloggen verwendet. Dazu werde ich später sicherlich nochmal was schreiben. In diesem Zusammenhang kam ich aber an eine Aufgabenstellung, die mir immer mal wieder über den Weg läuft:

“Wie holt man eigentlich am besten einen Datenbankstand vom Webserver, wenn man kein SSH zur Verfügung hat?”

David

Bisher habe ich dafür oft Tools wie Adminer genutzt. Das klappt gut, aber da ich ein Freund von Automatisierung bin, habe ich diesmal ein Tool gesucht, welches sich in ein Makefile einbinden lässt. Meine Internet-Recherche hierzu stellte mich nicht unbedingt zufrieden, daher entschied ich mich das Ganze einfach selbst umzusetzen.

Die Grundidee war dabei möglichst ein Script zu haben, welches ohne große Abhängigkeiten funktioniert und sich automatisch zum FTP verbindet, dort dann ein Script hochlädt, dieses ausführt und direkt danach wieder löscht.

PHP Mails lokal loggen

Für ein PHP Projekt wollte ich kürzlich prüfen, welche Mails die Anwendung verschickt. Es ging nur um ein kleines Detail und daher wollte ich keine aufwändige Mailkonfiguration aufbauen, sondern einfach nur den Quellcode der Mails in eine Logdatei schreiben.

Nachdem ich mich zunächst bei sendmail umgesehen habe, ohne eine passenden Parameter zu finden, der die Mails nur in die Queue packt ohne sie aber zu versenden, bin ich dann in einem Blog auf eine einfache Lösung gestoßen.

Dazu hab ich einfach folgendes Script erstellt und ausführbar gemacht:

#!/usr/bin/php
<?php
  $logfile = '/var/log/phpmail.log';
  $log_output = "****" . date('Y-m-d H:i:s') . "****\n";
  $handle = fopen('php://stdin', 'r');
  $count = 0;
  while(!feof($handle)) {
    $count++;
    $buffer = trim(fgets($handle));
    if ($count <= 12) # Output header information
      $log_output .= $count . ": " . $buffer . "\n";
    else # Output body
      $log_output .= $buffer . "\n";
  }
  file_put_contents($logfile, $log_output, FILE_APPEND);
?>

Damit es beim “Senden” einer Mail ausgeführt wird, reicht eine einfache Anpassung in der php.ini des Apache:

$ sudo vim /etc/php/7.2/apache2/php.ini
; send mail to /var/log/phpmail.log
sendmail_path = /path/to/phpmail

Das wars schon. Mehr ist nicht notwendig und ab sofort kann man den Mailinhalt leicht aus der phpmail.log herauslesen, z.B. mit tail:

$ tail -f /var/log/phpmail.log

Mein Problem war in 10 Minuten gelöst. Danke Internet! :)

Präsentiert von WordPress & Theme erstellt von Anders Norén