Archive for the 'Apache, Webserver' Category

Mag 08 2008

[AutoSheet 0.1 beta] - Auto DataSheet in PHP

L’altro giorno stavo cercando su internet una funzione, classe, qualcosa in php che mi permettesse dato un record set sostanzialmente contenente un unico record di poter generare in automatico una scheda o profilo.

In pratica per tabelle che richiedano la visualizzazione di molteplici informazioni, campi e quantaltro è sempre una menata costruire l’HTML necessario per poi stampare i dati. Questo in particolare quanto si ha a che fare con sistemi informativi complessi. Capita meno frequentemente nella realizzazione di siti web.

Dal momento in cui, a differenza che per quanto riguarda i paginatori, dove c’è l’imbarazzo della scelta, non ho trovato nulla di utile.

Allora ho deciso di fare da me.

Premetto che è una versione molto fresca e ancora da sviluppare, testare, evolvere etc… ma voglio comunque pubblicarla.

Di seguito il codice (scusate ma si perde l’indentazione corretta):

// Funzione che genera il datasheet basato su N colonne, campo => valore e configurando il layout function autoSheet($arr, $cols = 4, $border = 0, $cellspacing = 0, $cellpadding = 5, $classfield = “field”, $classdato = “dato”, $caption = “Scheda”)
{
// Calcolo il ceil del numero delle righe che avrò bisogno
$rows = ceil(count($arr) / ($cols / 2));
$html = ‘<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”5″>’.”\n”;
$html .= ‘<caption>’.$caption.’</caption>’.”\n”;
for($i = 0; $i < $rows; $i++)
{
$html .= ‘<tr>’.”\n”;
for($j = 0; $j < ($cols / 2); $j++)
{
$html .= ‘<td class=”‘.$classfield.’”>’.strtoupper(str_replace(”_”, ” “, key($arr))).’</td>’.”\n”; $html .= ‘<td class=”‘.$classdato.’”>’.current($arr).’</td>’.”\n”; next($arr); } $html .= ‘</tr>’.”\n”;
}
$html .= ‘</table>’.”\n”; return $html;
}

In pratica come funziona:

Tutto quello che dobbiamo fornire a questa funzione è un semplicissimo array associativo dove la chiave rappresenta l’etichetta di una colonna, e il rispettivo valore rappresenta il risultato estratto da database.

Per poter avere una rappresentazione carina delle etichetta ho fatto in modo che nell’SQL che estraggo rinomino i campi mettendo degli _ che poi vado a sostituire con degli spazi.

Naturalmente sarà in futuro necessario prevedere altre features per dati di tipo particolare etc, però va visto a regime e in base ai casi concreti che si presentano.

Oltre all’array poi è semplicemente intuibile la possibilità di passare una serie di dati (opzionali) per formattare la tabella.

QUESTA FUNZIONE E’ LIBERAMENTE UTILIZZABILE, ESPANDIBILE E QUANTALTRO.
Si chiede solo la gentilezza di postare un commento in caso di modifiche importanti al fine di permettere a tutta la comunità di sfruttare questi miglioramenti.
In futuro questo post sarà oggetto di modifiche e integrazioni man mano che la espando e lavoro.

Ciao. Maxgrante

No responses yet

Apr 21 2008

Calo di Apache, ascesa di IIS

Oggi curiosando su netcraft ero convinto di vedere la solita ascesa di apache come server web a livello mondiale. Con davvero grande stupore invece mi trovo a vedere questo grafico:

[FONTE]: http://news.netcraft.com/archives/2008/04/14/april_2008_web_server_survey.html

Di primo acchito avevo pensato ad una crescita importante di Lighttpd… (che comunque cresce al punto che la linea verde inizia a intravedersi) e invece eccoti Microsoft che fa un balzo in avanti notevole in trend di crescita da ormai due anni…

Da notarsi anche Google, in grande ascesa…

Insomma, brutti tempi per il server web re indiscusso? Ai posteri l’ardua sentenza…

2 responses so far

Mar 28 2008

Risparmiare banda internet utilizzando mod_deflate in Apache

Vedremo in questo articolo come poter lavorare con il server web apache per migliorare le prestazioni del proprio server web e risparmiare al contempo anche banda internet (preziosa e costosa).

Per fare questo si può utilizzare un fantastico modulo di apache, mod_deflate.

FUNZIONAMENTO

Prima di tutto comprendiamo il funzionamento di mod_deflate e cosa fa. Questo modulo si occupa di comprimere html, documenti, immagini e quantaltro prima di servirle al client.
In tal modo otterremo una diminuzione nell’utilizzo della banda e il sito sarà in parte più rapido anche per quei navigatori che dispongono di connettività non a banda larga o comunque non eccelsa.

QUANDO UTILIZZARLO E COME

E’ importante però comprendere quando possiamo utilizzarlo e soprattutto se non sarà un boomerang che ci torna sulla faccia. Per farlo bisogna quindi analizzare il problema.

A) Contenuto del sito web

Nel caso in cui il nostro sito web sia composto prevalentemente da elementi testuali (CSS, HTML, XML etc…) otterremo un’effetto eccezionale comprimendo tali contenuti. Nel caso invece il sito sia composto da Flash, immagini pesanti etc… l’effetto sarà praticamente nullo.

B) Il nostro server ha abbastanza processore?

Un altro aspetto è legato alla potenza del server, infatti se da un lato si ottiene un miglioramento sull’aspetto della banda, avremo come controindicazione un impatto sul carico della CPU che per ogni richiesta deve comprimere il file prima di inviarlo al client. Se ne evince quindi che in caso di poca potenza rischiamo di risolvere i problemi di banda e causarne sull’HW del server web.

ATTIVAZIONE DEL MODULO

Se apache come di default su CentOS 5.1 (presa in esame per l’articolo) ha già incluso il modulo, bisogna solo scommentare la riga relativa:

LoadModule deflate_module modules/mod_deflate.so

CAMBIO CONFIGURAZIONE SERVER WEB

A questo punto dobbiamo definire in apache come e dove utilizzare il modulo.
Per fare questo è davvero inutile andare a sprecare bit su questo articolo :-D, per cui vi rimando direttamente alla parte di configurazione sul sito di apache stessa:

MOD_DEFLATE CONF

Una nota importante da fare, prima di chiudere l’articolo, è relativa alla possibilità di escludere alcuni browser che non supportano pagine zippate e di poter escludere file come ZIP, Immagini, flash etc… (visibile da docs su apache)

No responses yet

Gen 14 2008

Case insensitive in Apache

Nel caso vi capiti di dover spostare, migrare, gestire un sito web sviluppato sotto piattaforma Windows potrebbe capitare un problema dovuto alla differenza tra Windows e Linux nella gestione del case sensitive/insensitive.

Infatti se mentre sotto piattaforma Windows una URL che fa riferimento a: http://www.miosito.tld/immagine.html apre regolarmente l’eventuale file  IMMagine.html, sotto Linux otterremo un bel NOT FOUND 404.

Naturalmente la soluzione drastica di sistemare tutte le URL o i nomi dei files è abbastanza complicata, lunga, laboriosa e inutile. Per ovviare al problema in apache ci viene incontro il modulo mod_speling attivo o comunque presente su quasi tutti gli apache rilasciati con le varie distribuzioni.

Per poterlo utilizzare verificate con in httpd.conf vi sia scommentata e presente la riga:
LoadModule speling_module modules/mod_speling.so

Nel caso questa riga fosse commentata,  decommentatela e riavviate il server web.

Per default (giustamente) tale modulo è disattivo. Quindi sarà sufficiente definire per la directory o per il virtual host desiderato che tale modulo sia attivo. Per fare ciò è ad esempio possibile inserire queste semplici righe:
<Directory “DOCUMENT ROOT SITO WEB”>
CheckSpelling on
</Directory>

Riavviate il web server e tutto dovrebbe funzionare al meglio.

Ciao. Maxgrante
info[AT]massimo-caselli[DOT]com

6 responses so far

Lug 13 2007

Potenziale debolezza di php, memory limit

Casualmente mi sono imbattuto nel dover variare l’impostazione di memory limit su un server di cui non avevo il minimo accesso.
Solitamente infatti sono abituato a sviluppare su server Linux sui quali ho anche poteri di amministratore, in questo caso trattandosi di un hosting su server di un altro provider mi sono imbattuto nel dover aumentare memory_limit per poter far funzionare il noto CRM Sugar Force.

La variabile presente nel php.ini denominata memory_limit ha il compito di limitare il consumo di memoria massimo per uno script php in modo tale da evitare potenziali problemi al server web stesso in caso di cattiva gestione dello script o per qualche loop.
Per default tale valore è impostato ad 8 Mbyte, valore secondo me più che ragionevole.

In pratica Sugar Force richiede la bellezza di 32 Mbyte di memoria (se non erro) per poter funzionare.

Fatto sta che il provider in questione (giustamente) aveva l’impostazione di memory limit globale settata a 8 Mbyte e non funzionava una mazza…

Dubbioso sul poter realmente variare tale impostazione sono andato sul sito di php e nell’appendix ho scoperto quello che MAI mi sarei aspettato:

memory_limit “8M” PHP_INI_ALL

PHP_INI_ALL per intenderci indica che il valore è variabile da QUALUNQUE script php! Nemmeno come PHP_INI_PERDIR che indica invece che il valore è variabile o per directory da configurazione generale di apache o da .htaccess (se consentito Override da apache).

Insomma, nel caso specifico mi è anche andata bene perchà© ho potuto comodamente caricare in .htaccess “php_value memory_limit 64M” per poter far funzionare il CRM  perà questa cosa per me ha aperto un forte dubbio su tale scelta fatta dagli sviluppatori di php e in particolare dalla Zend.

Fortunatamente la soluzione è abbastanza facile, è infatti sufficiente disabilitare l’Override di apache ([per altro impostazione di default] non rendendo effettive le direttive di .htaccess che vengono quindi ignorate) e disattivando da php.ini la possibilità  di utilizzare la funzione ini_set().

Perà per un provider che eroga hosting per chiunque acquista uno spazio web (magari a prezzi stracciati) diventa limitativo e restrittivo.
Penso che un approccio diverso da parte della Zend e degli sviluppatori di php in merito a tale configurazione sarebbe più opportuno… almeno per le nuove versioni e configurazioni di default.

Ciao. Maxgrante
info[AT]massimo-caselli[DOT]com

5 responses so far

Next »