Kategorien
PHP

PHP Wie verwendet man password_verify, password_hash und password_needs_rehash richtig

Mit der ab PHP 5.5. eingeführten Passwort-Hash Funktionalität kann man das Problem umgehen, dass ständig neue Hash Funktionen benutzen werden müssen, weil die alte zu leicht knackbar ist.

Bei bestehenden Projekten steht man dann an dem Punkt, wo man bestehenden Hashes in der Datenbank hat und diese nicht einfach neu hashen kann, weil man den Klartext nicht kennt. Diese Funktionalität wird einem durch die neue password_verify Funktion abgenommen.

So könnte ein neues Login-Funktion aussehen, welches dieses Problem umgeht. Beim Anheben der Hash-Sicherheit (Zeitdauer zum Berechnen des Hashes) kann man den Wert $currentHashOption[‚cost‘] erhöhen

$username = 'asd@asdasd.de';
$password = 'xxxxxx';

$user = User::findByName($username);

if(password_verify($password, $user->password_hash) === false){
 throw new Exception('Invalid Login');
}
$currentHashAlgorithm = PASSWORD_DEFAULT;
$currentHashOption = ['cost' => 15];

$passwordsNeedsRehash = password_needs_rehash(
 $user->password_hash,
 $algorithm = $currentHashAlgorithm,
 $currentHashOption
);
if($passwordsNeedsRehash === true){
 $user->password_hash = password_hash($password, $currentHashAlgorithm, $currentHashOption);
 $user->save();
}
Kategorien
PHP Server Administration

Analyse von sehr großen gzip/bzip2 gepackten Log-Dateien per Stream

Man kann per Stream in PHP beim verarbeiten der Daten sehr große Log-Dateien, die mehrere GB groß sind, sehr leicht analysieren mit Hilfe von Stream Compression Filter.

Damit kann die Datei ohne sie komplett in den Speicher laden zu müssen entpackt und analysiert werden beim Einlesen der Datei.

Dadurch kann man während des einlesens der Log-Datei schon nach beliebigen Stellen im Code suchen:

$file = 'X:/file.log.bz2';
$searchString = '2017-01-01';

if(file_exists($file)){
   $handle = fopen($file, 'r');
   stream_filter_append($handle, 'bzip2.decompress');
   while(!feof($handle)){
      $line = fgets($handle);
      if(strpos($line, $searchString) !== false){
         echo $line;
      }
   }
   fclose($handle);
}
Kategorien
Webdeveloper Tools

Warum man Software Projekte nicht bei Agenturen entwicklen lassen sollte

Agenturen beschäftigen meist Freelancer, die für die Entwicklung einegstellt werden, sollten kommen ausschließlich eigene Programmierer zum Einsatz. Der Fokus liegt dabei auf einer schnellen und kostengünstigen Programmierung des Projektes. Dies äußert sich in einer schlechten Code Qualität, d.h. praktisch, wenn ein anderer Programmierer später etwas ändern soll, dann dauert das Ewigkeiten, da der Code so schlecht ist, dass man nicht durchsieht. Guter Code ist vor allem gut lesbar und verständlich, wozu es erfahrene Programmierer benötigt, denen auch Zeit dafür eingeräumt wird guten Code zu schreiben.

Bei Agenturen wird der Programmierer nicht angehalten guten Code zu schreiben und oft entscheiden man sich als Freelancer nur „im Ausnahmefall“ bei einer Agentur zu arbeiten, weil dies meist mit vielen Überstunden, Zeitdruck und schlechter Bezahlung einher geht. Deswegen landen nicht die guten Programmierer bei Agenturen, sondern eher die schwarzen Schafe.

Meine Empfehlung ist, nicht auf eine Agentur zu setzen bei der Entwicklung von Software, sondern lieber auf einen oder mehrer gute Freelancer, der das Projekt gewissenhaft und in direkter Kommunikation umsetzt.

Beim Vergleich von Angeboten von verschiedenen Freelancern sollte nicht nur auf den Preis, sondern auch auf die Erfahrung des Programmierers und Qualität der dadurch entstehenden Software ein Augenmerk gelegt werden.

Meine Gedanken darüber habe ich aus meinen und den Erfahrungen von anderen Freelancern über die Jahre in Berlin gesammelt.

Kategorien
PHP

Verabreiten großer Dateien in PHP mittels Generator

Um große Datenmengen mit PHP zu verarbeiten benötigt man viel Memory Speicher, weil große Mengen Daten geladen und dann verarbeitet werden. Eine speichersparende Alternative bieten Generatoren ab PHP 5.5., die mit dem yield Befehl durch große Datenmengen iterieren können und nur Speicherplatz für einen Datensatz belegen.

Beispiel: Verarbeiten einer großen CSV Datei mittels Generators:

<?php
class CsvFile {

    protected $file;

    public function __construct($file) {
        $this->file = fopen($file, 'r');
    }

    public function parse() {
        while (!feof($this->file)) {
            yield fgetcsv($this->file);
        }
        return;
    }
}

$csv = new CsvFile('/pathTo/file.csv');
foreach ($csv->parse() as $row) {
    echo $row;
}
Kategorien
Diverses

Vergleich: Bücher verkaufen bei Momox und Rebuy

Ich habe heute alles ausgemistet und meine seit Jahren nicht mehr angefassten programmierbücher versucht zu verkaufen bei momox.de und rebuy.de.

Dazu habe ich mir die App des jeweiligen Anbieters heruntergeladen und meine Bücher eingescannt. Man erhält sofort einen Preis und kann entscheiden, ob man das Buch/CD/DVD verkaufen will. Wenn man mindestens 10€ zusammen hat, kann man den Verkauf abschließen und bekommt kostenlos einen Packetgutschein für Post oder DHL und schickt dann sein Packet an den Anbieter. Der schaut sich die Artikel an und den Zustand und überweist dann das Geld.

Vorteil von momox

Die App ist besser, der Barcodescanner genauer zu händeln und übersichtlicher/intuitiver zu bedienen.

Über die App kann man auch DHL Versand auswählen (rebuy hat zwar auch DHL im Angebot, aber die App bietet nur Hermes an).

Man erhält 5€ mit dem Rabatcoupon (bei mir war es momox16 oder bald momox17, mal schauen).

Momox nervt einen auch weniger mit Marketing für den Verkauf von ihren Artikeln.

Rebuy überweist das Geld nicht direkt auf das Konto, sondern schreibt einem erstmal ein „Guthaben“ in Ihrem Shop gut, damit man dort einkaufen geht. Um das Geld auf das Konto zu bekommen muss man noch extra tätig werden.

Vorteile von rebuy

Man muss weniger Daten eintippen auf der App, ich musste allerdings nicht mal initial meine Bankdaten eingeben, was ich komisch finde, aber mal sehen.

Zwischenstand

Jetzt gerade sind beide Pakete auf dem Weg mit der DHL zu den Anbietern, ich hoffe es verläuft alles reibungslos.

Ich fand es ganz interessant, bei beiden zu verkaufen, weil der eine oft mehr zahlt als der andere, man kann so gut die Preise vergleichen und sich den besten raussuchen.

Ergebnis

Sowohl Rebuy und Momox haben mir nach nur einer Woche das volle Geld überwiesen ohne Probleme mit der Ware.

Deswegen lautet meine Empfehlung: Momox

Kategorien
MySQL Server Administration

MySQL Monitoriong der ProcessList / Queries mit einem Konsolen Befehl

Ein hilreicher Befehl für die problem-Analyse von MySQL Servern ist sich die ProcessList anzuschauen, um zu sehen, welche Quueries aktuell ausgeführt werden. Wenn man dies kombiniert mit dem watch Befehl und diesen 1 mal pro Sekunde neuladen lässt und auf die Queries reduziert, hat man eine guter Übersicht, was auf dem MySQL Server los ist und welche Queries problematisch seien könnten:

watch -n 1 "mysql -u root --password='XXX' -h localhost -s -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE Command=\"Query\";'"

Wichtig ist, den Befehl als root laufen zu lassen, um auch alle Queries zu sehen.

Mit Hilfe des Parameter -n kann man die Aktualisierungrate in Sekunden angeben.

Das MySQL root-Passwort ist zu ergänzen.

 

Ausgabe:

5361925476      user     localhost       NULL    Query   0       executing       SELECT * FROM xxx WHERE yyy

5361925477      user     localhost       NULL    Query   0       executing       UPDATE zzz WHERE zzz
Kategorien
WordPress

WordPress Posts mit Links autoamtisch als Spam markieren

Damit man von dn ganzen Spam Bots nicht genervt wird, deren Zie es immer ist einen Kommentar mit einem oder mehreren Links auf ener Webseite zu platzieren, habe ich ein kurzes Skript geschrieben, was in die function.php eingefügt werden muss. Das Skript markiert alle Kommentare als Spam, die einen Link enthalten.

add_action( 'comment_post', 'show_message_function', 10, 2 );
function show_message_function( $comment_ID, $comment_approved ) {
   $comment = get_comment( $comment_ID);
   if(!empty($comment)){
      $content = $comment->comment_content;
      if(!empty($content)){
         $content = strtolower($content);
         $hasLink = strpos($content, 'http') !== false || strpos($content, 'www.') !== false || strpos($content, 'href') !== false;
         if($hasLink){
            //when has link, set to spam
            $commentarr = array();
            $commentarr['comment_ID'] = $comment_ID;
            $commentarr['comment_approved'] = 'spam';
            wp_update_comment( $commentarr );
         }
      }

   }

}
Kategorien
Web Frontend Webdeveloper Tools

HTML mal schnell erstellen: Zen Coding mit PHPStorm

Kategorien
Server Administration

Untersuchung des Traffics zwischen lokaler Rechner und Server am Beispiel von XDebug

Wenn man untersuchen will, was an der Kommunikation vom lokalen Rechner und Server bei XDebug nicht funktioniert, kann man sich den Traffic anschauen auf dem Port 9000, der am Server ankommt:

watch -n 1 "netstat | grep 9000"

//Ausgabe
Every 1.0s: netstat | grep 9000                                                                                          Tue Feb  7 16:01:50 2017

tcp        0      0 name:58572        host.server:9000 ESTABLISHED

und am lokalen PC kann man den Traffic beobachtet:

C:\>netstat  1 | find /i "9000"

//Ausgabe
  TCP    172.17.20.65:9000      server:58440    HERGESTELLT
  TCP    172.17.20.65:9000      server:58440    HERGESTELLT

Wenn Xdebug bis zum lokalen System kommt, erhält man eine Ausgabe wie oben sichtbar (Windows).

Kategorien
PHP Server Administration

PHP auf Linux Konsole on-the-fly ausführen

Wenn man einen kurzen PHP Befehl ausführen will auf der Konsole, kann man mit dem –run Parameter Code schnell und unkompliziert ausführen

php -r "echo 'hello world';"

//Ausgabe
hello world