Posts Tagged php

HIP-HOP su Lucid

INSTALLAZIONE HIP-HOP su Ubuntu 10.04:

#cd /usr/src

#apt-get update

#apt-get install git-core cmake g++ libboost-dev libmysqlclient-dev libxml2-dev libmcrypt-dev \
libicu-dev openssl binutils-dev libcap-dev libgd2-xpm-dev zlib1g-dev libtbb-dev libonig-dev libpcre3-dev \
autoconf libtool libcurl4-openssl-dev libboost-system-dev libboost-program-options-dev \
libboost-filesystem-dev wget \
memcached libreadline-dev libncurses-dev libmemcached-dev libicu-dev libbz2-dev

Recuperiamo i sorgenti di hip-hop:

#mkdir hiphop
#cd hiphop
#git clone git://github.com/facebook/hiphop-php.git
#cd hiphop-php
#export CMAKE_PREFIX_PATH=/usr/src/hiphop/hiphop-php
#export HPHP_HOME=`/bin/pwd`
#git submodule init
#git submodule update
#cd ..

Compiliamo libevent:

#wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
#tar -xzvf libevent-1.4.13-stable.tar.gz
#cd libevent-1.4.13-stable
#cp ../hiphop-php/src/third_party/libevent-1.4.13.fb-changes.diff .
#patch -p1 < libevent-1.4.13.fb-changes.diff
#./configure --prefix=$CMAKE_PREFIX_PATH
#make && make install
#cd ..

Compiliamo libcurl:

#wget http://curl.haxx.se/download/curl-7.20.0.tar.gz
#tar -xvzf curl-7.20.0.tar.gz
#cd curl-7.20.0
#cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff .
#patch -p1 < libcurl.fb-changes.diff
#./configure --prefix=$CMAKE_PREFIX_PATH
#make && make install
#cd ..

Compiliamo memcached: (la versione pacchettata per Lucid è troppo vecchia!)

#wget http://launchpad.net/libmemcached/1.0/0.44/+download/libmemcached-0.44.tar.gz
#tar zvxf libmemcached-0.44.tar.gz
#cd libmemcached-0.44
#./configure --prefix=$CMAKE_PREFIX_PATH
#make && make install
#cd ..

Compiliamo hiphop:

#cd hiphop-php
#cmake .
#make

N.B. su sistemi a 32-bit la compilazione fallira’, process.cpp deve essere patchato con questo codice:

--- process.cpp.orig 2010-10-17 21:06:02.000000000 -0600
+++ process.cpp 2010-10-17 21:03:52.000000000 -0600
@@ -436,9 +436,12 @@
}

static __inline void do_cpuid(u_int ax, u_int *p) {
- __asm __volatile("cpuid"
- : "=a" (p[0]), "=b" (p[1]), "=c" (p[2]), "=d" (p[3])
- : "0" (ax));
+ __asm __volatile("pushl %%ebx \n\t" /* save %ebx */
+ "cpuid \n\t"
+ "movl %%ebx, %1 \n\t" /* save what cpuid just put in %ebx */
+ "popl %%ebx \n\t" /* restore the old %ebx */
+ : "=a"(p[0]), "=r"(p[1]), "=c"(p[2]), "=d"(p[3])
+ : "0" (ax));
}

std::string Process::GetCPUModel() {

poi per utilizzarlo ….

http://github.com/facebook/hiphop-php/wiki/Running-HipHop

Share

, , , , ,

No Comments

Ubuntu server & php5-gd

Per motivi di sicurezza gli hacker di Canonical hanno deciso di pacchettizzare nei Repository ufficiali di Ubuntu una versione di php5-gd che non fornisce la funzione imagerotate, per tanto  se avete (come me) un qualche accrocchio che permette di ruotare le immagini prima di caricarle, sono dolori. unica ‘seria’ alternativa alla compilazione del php5 con abilitato il supporto  per imagerotate, è aggiungere questi repository ad apt:

deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

rimuovere con l’opzione –purge di apt il pacchetto php5-gd, fare un update e installare di nuovo php5-gd confermando di mantenere la vecchia versione del php.ini quando lo chiedera’,  dopo commentiamo i repository  appena aggiunti, facciamo nuovamente un update e il gioco è fatto.  ;)

Share

, , , , , , , ,

2 Comments

Accelaratore PHP – eAccelerator

Qui di seguito un esempio di implementazione di eAccelerator allo scopo di avere una cache di pagine HTML già pronte da fornire a chi le richiede  senza dover necessariamente attendere la risposta (generazione della pagina) da parte dell’interprete PHP ogni volta, risparmiando anche cicli di CPU sul server:

Installiamo quanto necessario alla compilazione:

# apt-get install php5-dev build-essential

Scaricare l’archivio del software da internet reperibile su http://www.eaccelerator.net/ oppure:

# wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6-rc1.tar.bz2

# tar xvfj eaccelerator-0.9.6-rc1.tar.bz2

# cd eaccelerator-0.9.6-rc1

#  /usr/bin/phpize

# ./configure

# make

# make install

Creiamo una directory che conterrà le pagine di cache e diamo permessi di lettura scrittura a $pigsANDdogs

# mkdir /var/cache/eaccelerator

# chmod 0777 /var/cache/eaccelerator

Adesso creiamo il file di configurazione:

# nano /etc/php5/conf.d/eaccelerator.ini

e inseriamo al suo interno quanto segue:


extension=”eaccelerator.so”
eaccelerator.shm_size=”16″
eaccelerator.cache_dir=”/var/cache/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=”"
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”0″
eaccelerator.shm_prune_period=”0″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″

Impostazioni di eAccelerator

eaccelerator.shm_size è il parametro che indica quanta memoria condivisa viene adoperata da eAccelerator per memorizzare la cache php. Il numero è in megabyte quindi eaccelerator.shm_size = “16″ significa attribuire 16 megabyte.

Eseguendo il comando:

cat /proc/sys/kernel/shmmax

Il numero restituito rappresenta la dimensione massima di memoria che un processo può allocare. Dividendolo per 1024 fissa il massimo valore per eaccelerator.shm_size. Ovvero eaccelerator.shm_size non deve mai superare (value di shmmax)/1024.

eaccelerator.cache_dir è la cartella dove eAccelerator salva la cache del codice php.

eaccelerator.enable se ha valore 1 allora eAccelerator è in funzione mentre se è a 0 (zero), il programma è disattivato. Questa funzione è molto utile perché consente di disabilitare temporaneamente la cache magari mentre si testano le performance del codice php appena sviluppato.

eaccelerator.optimizer funziona similmente a eaccelerator.enable; se impostato a 1, eAccelerator ottimizza le pagine mentre a zero l’esecuzione del codice php risulta lenta (come se non fosse in funzione il software).

eaccelerator.debug se attiva crea messaggi informativi nel file di log per il debugging.

eaccelerator.log_file qualora si voglia fare debugging è opportuno indicare dove memorizzare i log generati dal programma. eaccelerator.log_file = “/var/log/apache2/eaccelerator_log” memorizza un file testuale nella directory dei log usata anche da Apache.

eaccelerator.check_mtime assegnando 1 al parametro, eAccelerator controlla che la cache sia aggiornata, se è stata fatta una modifica ad una pagina questa deve essere ricompilata e memorizzata nuovamente. Disabilitando quest’opzione se una pagina già in cache viene modificata è necessario cancellare manualmente la cache per vedere la nuova versione della pagina. Ovviamente è consigliata l’attivazione.

eaccelerator.filter specifica quali file vengono memorizzati nella cache. Per esempio indicando eaccelerator.filter=”*.php”, solo i file con estensione .php saranno trattati dal programma. Con eaccelerator.filter=”!/home*”, eAccelerator non gestisce i file il cui nome contenga la stringa /home seguita da qualsiasi carattere; attenzione però perché un eventuale file /home/utente/script.php non viene processato da eAccelerator in quanto /home compare nel suo nome. Il punto esclamativo indica la non inclusione.

eaccelerator.shm_max indica il numero massimo in byte usati dalla memoria condivisa. Non c’è un limite come c’è per eaccelerator.shm_size. Per limitare la dimensione massima della memoria condivisa a 1 megabyte si può impostare eaccelerator.shm_max=”1M”, anche se è preferibile mettere zero per non restringere la cache. Non ha nulla a che vedere con la massima dimensione di una pagina singola memorizzata.

eaccelerator.shm_ttl quando non c’è più memoria a disposizione di eaccelerator.shm_only le pagine più vecchie, che sono state richieste da prima del valore messo in eaccelerator.shm_ttl, sono cancellate. Mettendo zero le pagine non sono cancellate. Settando eaccelerator.shm_ttl=”600″ il tempo è di 10 minuti (60 sec x 10).

eaccelerator.shm_prune_period simile a eaccelerator.shm_ttl, solo che vengono eliminate le pagine più vecchie.

eaccelerator.shm_only abilita o disabilita la memorizzazione sul disco rigido delle pagine elaborate da eAccelerator. Mettendo eaccelerator.shm_only=”0″ eAccelerator salva le pagine anche sul disco e non solo in memoria. E’ preferibile indicare zero.

eaccelerator.compress attiva la compressione delle pagine per risparmiare memoria. eaccelerator.compress=”0″ lascia le pagine non compresse.

eaccelerator.compress_level indica quanto comprimere le pagine elaborate. Nove è il massimo fattore di compressione.

Share

, , , ,

1 Comment