[Batch, Shell] Bestimmte Dateitypen in Unterordnern löschen

Es war lange ruhig hier im Blog, aber nun habe ich wieder was neues für euch.

Für das Löschen von Dateien eines bestimmten Datentypes habe ich für euch zwei Skripte, eins für Windows und eins für Linux/Unix/OSX.
Nach dem Aufruf dieser Datei wird nach einem zu löschen Dateityp gefragt. Hier könnt ihr z.B. „url“ (natürlich ohne Anführungszeichen) eingeben.
Anschließend durchläuft das Skript den Ordner, in dem es liegt und alle weiteren Unterordner und löscht alle Dateien mit dieser Dateiendung.
Hier ist eine Schleife einprogrammiert, die erst beendet wird, wenn ihr den Dateityp „end“ eingebt.

ACHTUNG: Es gibt keine Löschbestätigung!

Für Windows:

Ihr erstellt euch eine Datei mit dem Datentyp „cmd“ und öffnet diese im Texteditor eures Vertrauen (ich bin Fan von Notepad++).
Folgender Inhalt:

@ECHO off
ECHO ======= start =======
START
	set /p Filetype="Filetype to delete: "
	if "%Filetype%" == "end" goto END
	goto DO_DELETE

REM ---- deleting ----
:DO_DELETE
	del /s *.%Filetype%
	goto START
:END

ECHO ======= finished =======
pause

Für Linux/Unix/OSX:

Am besten erstellt ihr euch hier eine Datei mit dem VI mit der Dateiendung „sh“.
Folgender Inhalt:

#!/bin/bash
echo "======= start ======="

while [ "$Filetype" != "end" ]
do
	echo "Filetype to delete: "
	read Filetype

	if [ "$Filetype" != "end" ]
	then
		# ---- deleting ----
		find . -name "*.$Filetype" -exec rm -vf {} \;
	fi
done

echo "======= finished ======="

Vergesst hier nicht, die Datei noch mit z.B. chmod 755 ausführbar zu machen!

Veröffentlicht in Batch, Shell. Schlagwörter: , , , , , , , , . 3 Comments »

[PHP] Daten mit Komma separieren und letztes Zeichen abschneiden

Da ich diesen Fall schon öfters gebraucht habe, dachte ich mir, dass ich hierzu eine kleine aber feine Lösung veröffentliche.
Hier also dieser kleine Code-Ausschnitt:


$rechner_array = split(',',$rechner);
$rechner_array_size = count($rechner_array);
foreach($rechner_array as $element) {
  $counter++;
  $element = trim($element);
  $einzelne_rechner .= ''.$element.'';
  if($counter!=$rechner_array_size) {
    $einzelne_rechner .= '\',\'';
  }
}

Tja, das war mein erster einfacher Gedanke. Durch die äußerst hilfreichen Kommentare, sind weitere Lösungen hinzugekommen.
Der klassische Einzeile für obiges Beispiel lautet:

implode(',', $rechner);

oder

join(',', $rechner);

Split ist nämlich ein NoGo.

Und mit Entfernung von Leerzeichen ergibt sich:

implode(',', array_map(‘trim’, $rechner));

Vielen Dank an alle.

Veröffentlicht in PHP. Schlagwörter: , , , , . 7 Comments »

[PHP] variable Variablennamen bei POST

Hinweis: Dies ist sicherheitstechnisch eine sehr bedenkliche Vorgehensweise und sollte auch nicht (vor allem im Produktivsystem) eingesetzt werden!
Ich hatte das leidige Thema aus einem Formular alle POST-Variablen in verwendbare Variablen umzuspeichern:

 $rechnernummer = $_POST['rechnernummer'];
 $monitor_nr = $_POST['monitor_nr'];
 $externe_ip = $_POST['externe_ip'];
 $ipnummer = $_POST['ipnummer'];
 $zertifikat = $_POST['zertifikat'];
 $passwort = $_POST['passwort'];
 $macadresse = $_POST['macadresse'];
 $orts_id = $_POST['orts_id'];
 $verwendungs_id = $_POST['verwendungs_id'];
 $bereichs_id = $_POST['bereichs_id'];
 $seriennummer = $_POST['seriennummer'];
 $bemerkung = $_POST['bemerkung'];

Dies ist natürlich alles andere als dynamisch und sparsamer Code.
Daher habe ich mich nach einer besseren Alternative umgeschaut und bin dabei auf folgendes gestoßen:

foreach($_POST as $k=>$v) $$k=$v;

Dieser Einzeiler macht genau das, was ich gesucht habe.

Hinweis: Aus Sicherheitsgründen ist es ratsam, dass alles, was per POST verschickt wird, erst validiert werden sollte, bevor ihr es blind (wie in meinem Beispiel) weiterverwendet.

Veröffentlicht in PHP. Schlagwörter: , , . 14 Comments »

[PHP,MySQL] Orte aus Datenbank geokodieren

Für ein Projekt war es nötig, eine Geokodierung vorhandener Daten von Orten inkl. Adresse durchzuführen.
Die erste Idee für mich war es, Google Maps dafür einzusetzen. Hier braucht man nur für die Geokodierung sogar kein Javascript einzusetzen, sondern
man kann dies direkt mit PHP und natürlich MySQL erledigen.

Ich setze an dieser Stelle eine erfolgreiche Verbindung per mysql_connect() zur MySQL-Datenbank voraus. Außerdem benötigt ihr einen Google Maps-API Key, den ihr hier erhaltet.
Wie ich feststellen musste, ist dieser IP- bzw. Domainabhängig, d.h. er funktioniert nur unter der IP/Domain, die ihr bei der Anmeldung des Keys angegeben hat.

Um schön modular und nicht reduntant zu arbeiten habe ich 2 Funktionen geschrieben.
Eine dient für die Geokodierung eines Ortes geocodeOrt($adresse, $orts_id) , die andere itteriert durch alle in der Datenbank vorhandenen Orte namens alleOrte() und übergibt an geocodeOrt($adresse, $orts_id) die Parameter $adresse bestehend aus Straße, Hausnummer, PLZ , Ort und die $orts_id, was die ID des geokodiertem Ort ist.

Funktion alleOrte():

function alleOrte() {
 $query_alleOrte = "SELECT orts_id as id, concat(strasse,',',plz,' ',ort) as adresse FROM orte";
 $query_alleOrte_result = mysql_query($query_alleOrte);

 while ($row = mysql_fetch_array($query_alleOrte_result)) {
  geocodeOrt($row['adresse'], $row['id']);
 }
}

Und nun die spannendere Funktion geocodeOrt($adresse, $orts_id):

function geocodeOrt($adresse, $id) {
 define("MAPS_HOST", "maps.google.com");
 define("KEY", KEY); // hier euren Key als String eintragen

 $delay = 0;
 $base_url = "http://" . MAPS_HOST . "/maps/geo?output=xml" . "&key=" . KEY;
 $geocode_pending = true;
 while ($geocode_pending) {
  $request_url = $base_url . "&q=" . urlencode($adresse);
  $xml = simplexml_load_file($request_url) or die("url not loading");

  $status = $xml->Response->Status->code;
  if (strcmp($status, "200") == 0) {
   // Successful geocode
   $geocode_pending = false;
   $coordinates = $xml->Response->Placemark->Point->coordinates;
   $coordinatesSplit = split(",", $coordinates);
   // Format: Laenge, Breite, Hoehe
   $breite = $coordinatesSplit[1];
   $laenge = $coordinatesSplit[0];

   $query_update = "UPDATE orte
   SET laengengrad = '$laenge',
   breitengrad = '$breite'
   WHERE orts_id = '$id'";

   $update_result = mysql_query($query_update);
   if (!$update_result) {
    die("Invalid query: " . mysql_error());
   }
 } else if (strcmp($status, "620") == 0) {
  // sent geocodes too fast
  $delay += 100000;
 } else {
   // failure to geocode
   $geocode_pending = false;
   echo "Address " . $adresse . " failed to geocoded. ";
   echo "Received status " . $status . "\n";
  }
  usleep($delay);
 }
}

Da die Funktion geocodeOrt($adresse, $id) seperat ist, könnt ihr nun auch praktisch diese Funktion aufrufen, wenn in eurem z.B. CMS einen neuen Ort anlegt und direkt dann die Geokodierung durchführen möchtet.
So braucht ihr nicht wieder komplett alle Orte neu geokodieren zu lassen.

Ich hoffe, euch ist nun einiges klarer damit geworden und ich konnte euch helfen.

Veröffentlicht in PHP. Schlagwörter: , , , , , , . Leave a Comment »

[WordPress] Syntax-Highlighting im Blog bei WordPress.com

Dies hatte ich schon lange bemängelt, doch durch Zufall bin ich auf eine aktuelle News des WordPress-Blogs gestoßen, auf der das Verschönern von Code auf WordPress.org Blogs behandelt wird.
Anschließend habe ich die Kommentare gelesen und musste feststellen, dass diese Funktion schon seit längerem auch bei WordPress.com Blogs der Fall ist.

Wir ihr schon bei den letzten Aritkeln sehen könnt, verwende ich dies bereits und macht den Beitrag schon um einiges leserlicher.

Wenn ihr also Code einbinden möchtet, packt vor dem Codeblock einfach ein

[ code language="php"]

(oder eine andere Programmiersprache nach Wahl, siehe hier) und dahinter einfach ein

[ /code]

und erstrahlt der Codeblock in schönen Farben, wenn ihr den Artikel anschaut. Allerdings seht ihr das noch nicht in eurem Blogposting-Tool bzw. im Backend.

Veröffentlicht in Wordpress. Schlagwörter: , , , . 6 Comments »

[Joomla, PHP] Externe PHP-Dateien in Joomla einbinden

Da ich auch schon seit einiger Zeit an einer Lösung für dieses Problem gesessen habe und irgendwie auch nichts anständiges im Netz gefunden habe, schreibe ich euch nun die einfache Lösung, die mir ein Freund liebenswürdig mitgeteilt hat.

Ich habe nämlich darüber gegrübelt, wie man denn bei externen PHP-Dateien auf die Sessions insbesondere die Benutzer-IDs der aktuellen Joomla-Session / Sitzung kommt.
Um die Lösung zu veranschaulichen, mache ich an dieser Stelle ein einfaches Beispiel:

Ihr erstellt einen Ordner im Joomla-Root-Verzeichnis z.B. „test“ , indem ihr außerdem noch eine „test.php“ mit folgendem Inhalt anlegt:

Den Rest des Beitrags lesen »

Veröffentlicht in Joomla. Schlagwörter: , , , , . 5 Comments »

[PHP] PDFs erzeugen mit FPDF

PDFs erzeugen geht ganz leicht mit FPDF.

Dazu lädt man die aktuellste Version von FPDF herunter und entpackt diese in einen Unterordner des PHP-Projektes.
Anschließend wird diese Library per

require('../fpdf/fpdf.php');

in die PHP-Datei eingebunden.

Nun kann man eine Instanz des FPDF-Objekts erzeugen und loslegen:

$pdf=new FPDF(); // Instanziierung
$pdf->AddPage(); // Erste Seite wird generiert
$pdf->SetFont('Arial','B',16); // Schriftart, B=Bold(Fett), Schriftgröße
$pdf->Cell(40,10,'Hello World!'); // Erzeugung eines Textbereiches der Größe 40x10 mit Inhalt "Hello World!"
$pdf->Output(); // PDF wird generiert (Standard = an den Browser zum Download geschickt)

Beim Instanziieren gibt es mehrere Parameter, mit denen man noch die Maße des PDFs und die Ausrichtung angeben kann. Standardgemäß ist A4 und Landscape ausgewählt, wenn man keine Parameter den den Konstruktor übergibt. Möchte man die Ausrichtung „Portrait“, also senkrecht, oder ein anderes Format haben, kann dies so erledigen:

$pdf=new FPDF('P','mm','A5');

Weiterhin lässt sich die Ausgabe auch dahingehend konfigurieren, dass das erzeugte PDF direkt in einem gewünschten Pfad gespeichert wird:

$pdf->Output('../pdfs/document.pdf','F');

Für mehr Einstellungen und Hilfe schaut doch einfach mal bei den Tutorials von FPDF vorbei. Diese sind gut und anschaulich erklärt.

Veröffentlicht in PHP. Schlagwörter: , , . Leave a Comment »
Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.