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
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
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 {} \;
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.
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.
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');
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.
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
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.
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:
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:
Danach kann man testen Zhalungen zu empfangen und zu senden und das Ergebnis auf der TestNet Blockchain verfolgen:
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
));