b0sh.net

Proudly debugging the system since 1981

Tag: php Pagina 1 di 2

Addio all’hosting parte 4 – Ottimizzazione

PHP ha questo fastidioso problema che è stato concepito come se la RAM e la compilazione fossero il peccato originale.

Ne consegue che, con l’approccio di base, quando chiedete una pagina il povero webserver lancia PHP indicandogli la pagina richiesta, questo si legge lo script, processa tutti i file da includere, in modo ricorsivo, e quando ha finalmente lo script completo, lo trasforma in codice eseguibile (a.k.a. lo compila just in time) e come ultima cosa lo esegue. La cosa è immensamente inefficiente se deve essere fatta ogni volta che viene richiamata una pagina. Sarebbe bello delegare ad altri il linking e la compilazione per lasciare al sever solo l’esecuzione ma questo è molto complesso da fare con PHP (anche se qualcuno lo ha fatto) percui ho scelto l’approccio più tradizionale della cache.

Ci sono due moduli che possono venirci in aiuto APCu e OPCache.

Il concetto di base è di non rieleggere (e possibilmente non ricompilare) file messi in cache.
OPCache in particolar modo memorizzare il bytecode risultante dalla compilazione delle pagine in memoria e quindi raggiunge l’obbiettivo dell’efficienza. Su un server di produzione con aggiornamenti poco frequenti si possono calibrare le impostazioni per ricompilare il meno possibile.

La mia configurazione di OPCache assomiglia a questa :

zend_extension=/usr/lib64/php/modules/opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=120
opcache.blacklist_filename=/etc/php.d/opcache*.blacklist

In particolar modo la frequenza di rivalidazione a 2 minuti mi è sembrata ragionevole ma può essere ulteriormente aumentata. Il valore è in secondi, più sale e più aumentano gli hit della cache, ma aumenta anche il tempo che passa tra quando una modifica viene caricata sul server quando effettivamente diventa visibile.

OPCache è incluso di default a partire da PHP 5.5, ma nella mia installazione ho ancora PHP 5.4 quindi è necessario installarlo separatamente.

Come risultato ho un Time to first byte per wordpress di 0,4s e download dell’html in 0.6s. In hosting (dove immagino ci siano persone che pensano molto come ottimizzare i server in quanto ottimizzazione uguale minor costi) 0,45s e 0,8s

Con phpBB il Time to first byte scende addirittura a 0,13s e html completo in 0,52s .

Momenti di tristezza

Scoprire che le anonymous functions in php funzionano egreggiamente e in java, mediamente, è ancora una valle di lacrime (almeno per me, visto che java8 resta un miraggio).

Se vi andasse di approfondire qui e qui.

Malware

Se qualcuno dei miei 3 visitatori ha ricevuto una notifica riguardo alla presenza di malware su questo sito me ne scuso, non è ovviamente nelle mie intenzioni trasformare in zombie i vostri pc, ne dovete pensare che trascuri il software installato. Aggiorno con regolarità, non uso plugin e temi provenienti da fonti dalla dubbia reputazione … eppure capita.

Infatti questa mattina google mi scrive, anzi scrive a abuse(chicciola)b0sh.net, admin(chicciola)b0sh.net, administrator(chicciola)b0sh.net, contact(chicciola)b0sh.net, info(chicciola)b0sh.net, postmaster(chicciola)b0sh.net, support(chicciola)b0sh.net, webmaster@b0sh.net segnalandomi che da questo momento in poi il mio sito veniva marcato come potenzialmente dannoso.

Da una rapida indagine scopro un collegamento ad un javascript remoto alla fine di Index.php. Il software (wordpress) è stato interamente sostituito e reinstallato ma non penso sia stata una falla in questo software a permettere la modifica del file. In realta sullo stesso server, con lo stesso utente girava una versione non “aggiornatissima” di phpBB, celeberrimo target di spammer e cracker, che credo sia stata sfruttata per propagare l’infezione. In ogni caso anche la phpBB è stata sanitizzata (con l’equivalente digitale del napalm) e aggiornata. Certo che farsi tirare le orecche da BigG non è mai piacevole.

P.S. : I linguaggi di scripting sono tanto bellini, ma se c’è un buchino piccolo piccolo… a confronto un buffer overflow sembra una vulnerabilità trascurabile.

Nuovi Header

Piacciono ?

Sono delle fotografie di spezzoni di codice php, mio, un pochetto trattate per meglio adattarsi al resto del blog.

Il codice è arte.

L' ElePHPant !

elephpant.jpg

Lo voglio !

Si fa un gruppo d’acquisto ? http://shop.yourphppro.com/elePHPant.html

Filtro Bayesiano in PHP

elefante PHPSegnalo una interessante implementazione dei filtri bayesiani in php + mysql. Il fenomeno dello spam, ora molto focalizzato sulle caselle email, inizia già a prendere di mira il web “commentabile”. WordPress ha gia l’ottimo Akismet che sbaglia veramente poco ma per una applicazione “from scratch” può tornare molto utile.

Class: Bayesian Spam Filter (spam, filter, classified) – PHP Classes
This class can be used to detect spam in text messages using Bayesian techniques. It analyzes the text words in terms of n-grams in a way that is idiom independent. It can be trained to progressively distinguish what is spam and what is not spam by detecting patterns in training samples. Training data is stored in a MySQL database.

Classe per creare file zip a basso consumo di memoria

Ho provato varie classi per la creazione di file zip attraverso uno script PHP ma tutte consumavano una quantità di memoria pari almeno al doppio della dimensione complessiva dei file da comprimere. Quindi ne ho presa una e l’ho modificata in modo che il consumo di memoria sia pari al massimo al doppio della dimensione del file più grosso da comprimere.
Si può fare di meglio, probabilmente esiste di meglio in giro, ma questa modifica ha risolto i miei problemi. Magari risolve anche i vostri.

Compatibile con PHP 4

Download : zip1.zip

QuantumDB Eclipse Plugin

Segnalo un plug-in molto interessante per Eclipse. Io lo utilizzo per connettersi a database MySQL (mediante il driver JDBC apposito)… e il non doversi muovere dalla IDE per vedere cosa succede sul database è veramente comodo!

Naturalmente oltre che guardare è anche possibile modificare, dati e struttura. Qua il link : QuantumDB Eclipse Plugin

Il codice come immagine

Non riesco a trovare un bel header. Ho bisogno di una foto, e quelle che trovo un pò belline hanno i diritti riservati, e quindi sono fuori gioco. Fare foto a pagine di codice non è più di particolare effetto (lo hanno fatto in troppi). Avevo pensato anche a fotografare una tastiera focalizzando sui tasti “WER” e shoppare la R in una B … ma anche questo mi è sembrato un pò troppo banale. Da qua l’idea. Rendere visuale il codice. Ovvero un file di testo in una immagine. Naturalmente lavorando e giocando su alcuni parametri. Probabilmente potrebbe uscire qualcosa di bello con un testo, come alcuni codici sorgente, con ripetizioni periodiche.

Primi risultati :

P.S. : Si vanno fatte ancora alcune modifiche. Il problema è come viene gestito il testo e la sua rimappatura in uno spazio-colore. Probabilmente devo escludere dal testo qualsiasi cosa non sia un carattere alfanumerico in modo che i colori non si concentrino in una piccola zona ma si distribuiscano equamente.

Che mysql fosse veloce lo sapevo…

Solo non immaginavo che tornasse indietro nel tempo …

(Screenshot di PhpMyAdmin)

Pagina 1 di 2

Powered by WordPress & Theme by Anders Norén