hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

proftp log user traffic mit mod_sql

Um den User Traffic in proftp mitzuloggen in einer MySQL Datenbank, muss man nur in der User Tabelle eine Spalte “traffic” hinzufügen vom Typ BIGINT, Default 0:

ALTER TABLE `ftpuser` ADD COLUMN `traffic` BIGINT NOT NULL DEFAULT '0';

Dann kan man einen SQLNamedQuery verwenden in der sql.conf, um die Menge des Traffics mitzuschneiden:

SQLLog RETR,STOR,APPE extendedlog
SQLNamedQuery extendedlog UPDATE "traffic= (traffic + %b) WHERE userid='%u'" ftpuser

Achtung, die Verwendung führt zu erhöhtem Traffic auf der Datenbank.

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

PHP: ftp_fget(): Entering Passive Mode (10,1,0,139,213,156).

Die Fehlermeldung:

 ftp_fget(): Entering Passive Mode (10,1,0,139,213,156)

bedeutet, dass der FTP Client eine neue passive Verbindung auf der IP 10.1.0.139 auf Port 213 * 256 + 156 = Port 54684 aufmachen soll.

Am einfachsten händelt man diese Situation, wenn man sich neu verbindet mit ftp_connect() und es nochmal versucht und eine passive Verbindung aufbaut mit ftp_pasv();

 

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Gaufrette mit File Streams arbeiten

Um mit Gaufrette (Symfony Extension) auch Stream Operationen an Dateien durchführen zu können, kann man den etwas dürr dokumentierten Stream Wrapper verwenden.

Dazu konfiguriert man in der gaufrette.yaml:

knp_gaufrette:
    stream_wrapper: ~
    filesystems:
        backup1:
            adapter: backup

Und kann dann z.B. folgender Maßen eine csv. Datei schreiben:

$stream = fopen('gaufrette://backup1/datei.csv', 'w+');

fputcsv($stream, [1,2,3]);
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

AWS: verifizieren einer Email Adresse in SES ohne Zugriff auf das Postfach

Um bei Amazon SES Email verschicken zu können, muss man die E-Mail Adresse erst verifizieren. Dies ist ein Problem, wenn man zwar Zugriff auf die Domain hat, aber keinen Mail-Server eingerichtet hat.

Um das Problem zu umgehen, verifiziert man erst die Domain in SES und richtet dann unter Configure Email Receiving die zu verifierende E-Mail Adresse ein und verbindet diese mit einem SNS Topic. Danach kann man eine Subscription einrichten auf das SNS Topic via Email und sich so die Verifikations-Email weiterleiten lassen auf ein vorhandenes Postfach.

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Symfony Service ID dynamisch konfigurieren mittels Parameter

Wenn man gern in seiner Depnedency Injection Kofiguration (services.yml) die Service Injektionen dynamisch konfigurierbar machen will über die parameters.yml,

parameters:
    my_class: 'App\MyClass'

kann man dies mittels der Symfony Expression Language Komponente tun:

composer require symfony/expression-language

Dann kann man in der services.yml definieren:

services:
    App\Command\MyCommand:
      arguments:
        - '@=service(parameter("my_class"))'
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Windows Composer Update Fatal error: Allowed memory size of 1610612736 bytes exhausted

Folgende Fehlermeldung hat mein Composer trotz unbegrenztem Speicher:

 composer update
 Loading composer repositories with package information
 Updating dependencies (including require-dev)

 VirtualAlloc() failed: [0x00000008] Zur Verarbeitung dieses Befehls sind nicht gen
 VirtualAlloc() failed: [0x00000008] Zur Verarbeitung dieses Befehls sind nicht gen

 Fatal error: Out of memory (allocated 1260388352) (tried to allocate 201326600 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleSet.php on line 83

Wenn man unter Windows ein composer Update nicht mehr durchführen kann, obwohl man das Memory Limit auf unbegrenzt gesetzt hat, dann hat man ein Problem:

Das Windows-Xammp ist nur als 32 bit System erhältlich und kann nur 2GB Ram bereitstellen im Moment, eine weitere Erhöhung ist nicht möglich.

Die Lösung ist  Composer mit einem 64bit PHP auf der Konsole auszuführen (dies hat dann bis zu 4GB Memory).

  • Download von PHP x64 Version
  • entpacken und php.ini anlegen (umbennnen der php.ini-development)
  • memory Limit erhöhen in php.ini: memory_limit = -1
  • auf der Konsole ausführen:
"C:\php-7.2.12-nts-Win32-VC15-x64\php" C:\ProgramData\ComposerSetup\bin\composer.phar update
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Yii2 versus Symfony 4 – ein Framework Vergleich

Ich habe lange mit Yii und dem Symfony Framework gearbeitet und will versuchen im Folgenden die Unterschiede von beiden Frameworks aus Programmierer Sicht zu erläutern.

Konfiguration von Umgebungen

Beim Erstellen von Web-Anwendungen hat man typischer Weise mindestens 2 Umgebungen: Die Entwicklungsumgebung, auf der man Fehler sehen will und die Live Umgebung, wo dies nicht passieren soll. Dazu kommen Test-Umgebung zum Ausführen automatisierter Tests und vielleicht eine Staging Umgebung.

Symfony löst das sehr geschickt, mit .env Dateien und eigenen Ordnern innerhalb des Konfigurations-Ordners.

Bei Yii muss der Programmierer selber hand anlegen, um die richtige Konfiguration zu laden, es sind von Hause aus nur 3 (dev, prod, test) Umgebungen vorgsehen, danach wird es unübersichtlich. weiterlesen…

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

PHP encode String zu Extended ASCII 8bit 255 Zeichen

Um auch Umlaute in ein Bit darzustellen, kann man den erweiterten ASCII Zeichensatz verwenden mit 255 Zeichen, der auch Umlaute enthält wie ä, ö, ü und ß.

Um dieses zu nutzen, kann man die folgende Funktion nutzen:

/**
 * @param string $string
 * @return string
 */
protected function asciiEncodeString(string $string): string
{
    $sourceEncoding = mb_detect_encoding($string);
    $destinationEncoding = 'CP437'; // Extended ASCII - Codepage 437
    $string = iconv($sourceEncoding, $destinationEncoding, $string);
    return $string;
}