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
Kategorien
Server Administration

Linux löschen aller Datein mit Namen Regex

Um alle Dateien zu löschen, die einem bestimmten Regex entsprechen, kann man find benutzen:

find . -type f -iname "*error.log\.?"
//findet:
xxerror.log.1
yyyError.log.2
fatalError.log.1

Löschen kann man die gefundenen Dateien mittels des Linux Befehls:

find . -type f -iname "*error.log\.?" -exec rm {} \;
Kategorien
PHP Server Administration

Stress Testing Tools

Zum Stress- bzw. Last-Testen von PHP Applikationen kann man das Tool Apache bench  oder Seige benutzen.

Damit lässt sich das Verhalten einer Applkation unter hoher Last testen.

Kategorien
PHP Server Administration Webdeveloper Tools

Server Management mit Forge

Ein sehr einfaches und gutes Tool für das Server Management von PHP Applikationen ist Laravel Forge, mit dem man seine App auf AWS, Digital Ocean oder Linode betreiben kann inkl.

  • Load Balancing
  • Cron Jobs
  • Domain-Management
  • SSL Zertifikate
  • Queues
Kategorien
PHP

PHP asynchornen Thread starten

Mit PHP kann man nativ keine asynchronen Threads starten, aber über das Betriebsystem natürlich schon. Mit dem Linux command „ab“ kann man sehr einfach einen neuen Thread erstellen und langlaufende Aktionen auslagern. Zum Escapen von shell Argumente kann mn die Funktion escapeshellarg benutzen.

 exec('echo "php create-report.php" | at now');
Kategorien
VBA Excel

VBA Fehler beim Kompilieren: Ungültiges Zeichen

Ich habe beim Makro scheiben mit dem Mac einen Fehler bekommen, den ich nicht beheben konnte, weil dieser nicht am Code lag:
Fehler beim Kompilieren: Ungültiges Zeichen
Die Lösung war, den „fehlerhaften“ Code nochmals abzutippen, dann ging es. Meine Erklärung ist, das ein im Editor nicht angezeites Zeichen mit in den Code gekommen ist.

Kategorien
VBA Excel

VBA Regex Lite mit Like

Native in VBA sind Regex leider nicht möglich, sondern nur über eine ActiveX Bibliothek erhätlich. Wenn man auch für Mac programmieren will, kommt dies nicht in Frage. Statt dessen kann man den Regex Lite befehl „Like“ benutzen, mit dem ähnliche abegspeckte Operationen machen kann.

Bsp.

success = text Like "T-#########-#"
'matches:
'T-123456789-1

success = text Like "[0-9a-z][0-9a-z]"
'matches:
'1a, 2b
Kategorien
Redis

Redis Performance Probleme messen und analysieren

Um Latenz Probleme bei Redis zu analysieren, kann man das eingebaute Latency Tool von redis-cli benutzen, mit dem um 100 Requests pro Sekunde auf den Redis gepingt werden und man die Antwortszeit analysieren kann.

Konsolen Bsp:

Im Intervall von i=10 Sekunden auf localhost getestet

redis-cli --latency-history -i 10 -h 127.0.0.1 -p 6379

Output:

min: 0, max: 10, avg: 0.89 (906 samples) -- 10.01 seconds range
min: 0, max: 32, avg: 1.44 (862 samples) -- 10.00 seconds range
min: 0, max: 6, avg: 0.50 (939 samples) -- 10.00 seconds range
min: 0, max: 7, avg: 0.47 (941 samples) -- 10.01 seconds range
min: 0, max: 12, avg: 0.47 (942 samples) -- 10.00 seconds range
min: 0, max: 137, avg: 2.70 (779 samples) -- 10.01 seconds range
min: 0, max: 119, avg: 5.92 (626 samples) -- 10.06 seconds range
min: 0, max: 2389, avg: 7.31 (572 samples) -- 10.00 seconds range
min: 0, max: 14, avg: 0.64 (926 samples) -- 10.00 seconds range
min: 0, max: 9, avg: 0.50 (938 samples) -- 10.01 seconds range
min: 0, max: 16, avg: 0.47 (941 samples) -- 10.01 seconds range
min: 0, max: 21, avg: 0.56 (933 samples) -- 10.01 seconds range
min: 0, max: 23, avg: 0.56 (933 samples) -- 10.01 seconds range
min: 0, max: 150, avg: 1.95 (827 samples) -- 10.01 seconds range
min: 0, max: 131, avg: 4.22 (696 samples) -- 10.01 seconds range
min: 0, max: 131, avg: 7.06 (581 samples) -- 10.01 seconds range
min: 0, max: 4136, avg: 10.33 (488 samples) -- 10.01 seconds range
min: 0, max: 17, avg: 1.15 (886 samples) -- 10.02 seconds range
min: 0, max: 18, avg: 0.88 (906 samples) -- 10.01 seconds range
min: 0, max: 11, avg: 0.61 (928 samples) -- 10.00 seconds range
min: 0, max: 12, avg: 0.55 (936 samples) -- 10.01 seconds range
min: 0, max: 9, avg: 0.51 (937 samples) -- 10.01 seconds range

Hier kann man gut sehen, dass die Probleme mit einem Abstand von 60 Sekunden  auftreten. Dies lag in dem Fall daran, dass Redis alle 60s sich selber auf die Festplatte persistiert hat. Die entsprechende Option in den redis.conf lautete:

save 60 1000

und mit der Option

save ""

kann das persistieren auf der Festplatte ausgeschaltet werden.

 

Aber auch die Option

appendonly yes

musste auf „no“ gesetzt werden, weil es dadurch auch auf zu viele Schreibzugriffe kam.

Kategorien
Webdeveloper Tools

Bitcoins senden testen im TestNet

Um die Zahlung mit Bitcoins zu testen ohne zahlungspflichtige Transaktionen auszulösen, muss man sich einen Wallet besorgen, bei dem man auch Test-Bitcoins (TestNet Bitcoins) senden kan:

https://copay.io/

Dort kann man sich ein Wallet einrichten in der Testwährung und erhält dann eine Bitcoin-Adresse aus dem TestNet, die alle mit „m“, z.B. mqfc7CVvhSD2eGVwkHS8s8Wc1FyZz8Z8xD

Auf dieses Konto kann man sich dann Bitcoins aufladen lassen auf der Webseite:

http://tpfaucet.appspot.com/

Danach kann man testen Zhalungen zu empfangen und zu senden und das Ergebnis auf der TestNet Blockchain verfolgen:

http://tbtc.blockr.io/

Kategorien
PHP

PHP PDO Connection Timeout für Datenbank setzen und bestimmen

Normalerweise soll man das Datenbank Connection Timeout in PHP auslesen können mittels:

$pdo = new PDO('mysql:host=localhost;port=80;dbname=xxx', 'xxx', 'xxxx');
$pdo->getAttribute(PDO::ATTR_TIMEOUT);

Allerdings gibt das bei meiner alten PDO Version die Fehlermeldung:

SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute

Also habe ich ein Testscript geschrieben, mit dem man das Timeout provozieren kann (das Messen der Zeit ist nicht enthalten, wäre nett, wenn jemand das posten könnte):

$pdo = new PDO('mysql:host=localhost;port=80;dbname=xxx', 'xxx', 'xxxx');

Damit wird das Timeout ausgelöst.

Um das Timeout zu verlängern, kann man den Parameter PDO::ATTR_TIMEOUT setzen:

$pdo = new PDO('mysql:host=localhost;port=80;dbname=xxx', 'xxx', 'xxxx', array(
   PDO::ATTR_TIMEOUT => 5
));