Archiv der Kategorie: PHP

PHP

Shell: Sehr große Verzeichnisse löschen (PHP Sessions)

Szenario:

  • Fehler bei PHP’s Sessionbereinigung (garbage collection)
  • große Anzahl Dateien in einem Ordner, die nicht mehr gebraucht werden (hier: über 17 mio)
  • Löschen muss im laufenden Betrieb stattfinden, da Produktiv-Server.

Methode 1 (langsam und sicher):

find /var/lib/php/sessions -type f -mtime +3 -delete

Hier werden alle Dateien (-type f) gelöscht, deren Modifikation 3 Tage zurücklag (mtime +3) – dieser Parameter kann angepasst/weggelassen werden. Es empfiehlt sich, den vollen Pfad anzugeben, um versehentliches Löschen in einem anderen verzeichnis (zb ./) auszuschliessen. Sollte der Hauptspeicher knapp sein: Shell: RAM und Swap freigeben ohne Reboot

Weiterlesen

Shell: Lokaler Webserver ohne Apache2/nginx mit Python, PHP oder node js

manchmal soll auf die Schnelle eine HTML- oder Javascript-Datei getestet werden, ohne das ein Webserver im System installiert ist (zB Apache2 oder nginx). Abhilfe können hier Python, PHP oder node js als installierte Skript-Sprachen bieten.

PHP (muss installiert sein):
In den Ordner wechseln, in dem die ausführbaren Datein liegen (zB index.php oder index.html). Hier wird der eingebaute Server (-S, grosses „s“) für Port 8000 aufgerufen.

php -S localhost:8000

Python (muss installiert sein, Annahme: Python3):
In den Ordner wechseln, ind em die ausführbaren Datein liegen (zB main.py oder index.html).

python -m http.server 8000 --bind 127.0.0.1

Python ruft hier das http.server Modul auf, verbindet es mit Port 8000 und bindet es an die lokale IP 127.0.0.1 (sonst wären auch Zugriffe mit anderen IP’s möglich)

node js (muss installiert sein):

npm install -g http-server
http-server

Npm ist der Paket-Amanager von node js und wird mit diesem installiert. Die Zeile „npm install ..“ muss natürlich nur beim ersten Mal aufgerufen werden, um das http-server Paket zu installieren. Danach wird in den ordenr mit den auszuführenden Dateien gewechselt und „http-server“ aufgerufen.

PHP: Objekte rekursiv mit JsonSerializable als JSON ausgeben

Die Funktion json_encode() liefert bei Objekten nur den öffentlichen Teil der Eigenschaften zurück (das dann auch rekursiv). Wenn Eigenschaften in einem protected- oder private-Bereich stehen, dann werden diese Daten nicht zurückgeliefert.

Möchte man nun ein Objekt, dass aus verschiedenen Unterobjekten besteht ausgeben als JSON, dann versagt hier gewollt json_encode().

Umgehen kann man das Problem mit JsonSerializable. Das gewünschte Objekt muss JsonSerializable implementieren und eine öffentliche Methode jsonSerialize() haben.

In dieser Methode wird über ein return der Teil der Daten zurückgegeben, die json_encode verarbeiten soll:

class Demo implements JsonSerializable 
{
    public $id; // würde exportiert werden
    protected $record; // würde nicht exportiert werden
    private $mode; // würde ebenfalls nicht exportiert werden
    private $unwanted;

    public function jsonSerialize()
    {
        return [
            'id' => $this->id,
            'record' => $this->record,
            'mode' => $this->mode
        ];
    }

Statt einer einfachen Zuweisung der Eigenschaften auf der rechten Seite kann natürlich auch eine Methode des Objekt aufgerufen werden, die dann die gewünschten Daten zurückliefert (zB $this->getRecord()).

Wird jetzt das Objekt Demo mit json_encode() ausgegeben, dann würden im oberen Beispiel die Eigenschaften „id“, „record“ und „mode“ ausgegeben.

PHP: ChromeLogger zum Debuggen PHP-Script direkt zu Chrome

https://raw.githubusercontent.com/ccampbell/chromephp/master/ChromePhp.php
https://craig.is/writing/chrome-logger

1. ChromeLogger installieren (Extension für Chrome)
2. ChromePhp herunterladen und in Projekt einbinden
3. Chrome console öffnen (Weitere Tools > Entwicklertools > Console)
4. ChromeLogger aktivieren (kleines Konsolensymbol neben der URL-Zeile anklicken, damit es blau wird)

include 'ChromePhp.php';
ChromePhp::log('Hello console!');
ChromePhp::log($_SERVER);
ChromePhp::warn('something went wrong!');

Beim Ausführen des Scriptes erscheinen die Ausgabe in der Chrome Console.