PROZONE powered by Tophost
  Home   Forum   Regolamento Help Login Registrati   *
Statistiche
Utenti
Utenti Totali: 1707
Ultimo utente: xal
Statistiche
Posts Totali: 29470
Topics Totali: 3404
Online Oggi: 51
Presenze Massime Online: 559
(23 Luglio 2008, 14:24:28)
Utenti Online
Utenti: 2
Visitatori: 43
Totale: 45
Siti amici
Design & Multimedia

Dire e Fare il blog che ti aiuta

Wordpress
Pagine: [1]
 
Autore Topic: PHP come modulo o come CGI?  (Letto 4435 volte)
lacellula
Moderatore
*
Posts: 1 138


PHP come modulo o come CGI?
« il: 13 Giugno 2007, 11:35:43 »

PHP come modulo VS PHP come CGI.
PHP è un gran bel progetto opensource, bisogna ammetterlo. Il suo codice sorgente è disponibile e per questo motivo lo si può ricompilare per meglio adattarlo alle proprie esigenze. Alla luce di ciò è possibile, in alcuni server / VPS, ricompilare PHP e renderlo eseguibile come CGI, in ambienti Apache. Ma esattamente cosa vuol dire avere PHP come CGI e qual'è il vantaggio?

Per spiegare questo facciamo un passo indietro. PHP è un interprete che prende del codice formattato secondo lo standard di programmazione PHP e, attraverso un parsing interno mediante il quale vengono richiamate molte librerie, lo traduce in codice plaintext/html. C'è molta confusione su questo fatto e spesso sento dire che php crea del codice macchina a partire da un file .php! Il parsing può essere fatto sia a livello di modulo di apache che a livello di CGI e la sostanziale differenza risiede nel fatto che il modulo è direttamente collegato ad apache, condividendo alcune caratteristiche critiche come la memoria, mentre il CGI è un "programma" a sé stante. Se PHP è modulato con apache e va in crash, potrebbe andare in crash anche apache, con il risultato che per colpa di un sito l'intero network può andare offline. Inoltre PHP come modulo di apache può presentare alcuni inconvenienti di sicurezza che, in determinate configurazioni del server, potrebbero portare al blocco dello stesso o all'acquisizione di privilegi non reali.

E usando PHP come CGI? I problemi sopra descritti vengono eliminati o quantomeno attenuati. In primis apache può chiedere di processare un file a PHP-cgi e se questo va in crash apache genera un errore ma non va in crash a sua volta. Inoltre non si permette ad un utente, che può essere benissimo un "malintenzionato" per dirla alla Microsoft, di accedere al server con le credenziali di apache-user. Per ultima cosa PHP-cgi è molto più flessibile in quanto può essere ricompilato con librerie aggiuntive o, di pari merito, senza alcune librerie che potrebbero pesare sul sistema senza essere utilizzate. Prendiamo ad esempio le librerie exif (che leggono i metadati dalle immagini JPEG ove presenti) o mssql (che si interfacciano ad un database Microsoft SQL), sono abilitate su tantissimi server ma scarsamente utilizzate. Prendiamo, invece, le librerie imap (mediante le quali si può accedere ad un mailserver col protocollo imap/imap-tls) o openSSL (attreverso le quali si possono utilizzare connessioni sicure cifrate) che quasi mai sono disponibili sebbene, in alcuni ambiti, molto importanti. Usando PHP come modulo se tali estensioni non sono presenti non possono essere utilizzate mentre se c'è la possibilità di usare PHP come CGI possono essere incluse.

Non è da sottovalutare nemmeno il fatto che avendo PHP-cgi è possibile avere una propria versione del PHP.INI e intervenire su un gran numero di variabili che potrebbero rendere più veloce (o più lento!) e più sicuro (o meno sicuro!) tutto l'ambiente...

Un altro vantaggio è dovuto dal fatto che spesso i provider si dimenticano di aggiornare PHP a versioni più performanti ed evolute, oltre che sicure. PHP 5 è ormai sufficientemente maturo da poter essere usato ed è molto più "veloce" rispetto al suo fratello maggiore PHP 4.

Una breve guida per usare PHP come CGI.

Prima di iniziare vediamo quali sono i requisti per poter avere un PHP personalizzato, se non si è ovviamente il responsabile del server!
  • Avere Apache come webserver
  • Avere la possibilità di CHMOD e in particolare la possibilità di rendere eseguibilei i files
  • Poter usare un file .htaccess

E' consigliato, ma non necessario, avere un accesso shell. In questa parte della guida terrò conto che ogni operazione viene fatta da shell. In particolare se si vuole ricompilare PHP la shell è quasi d'obbligo mentre se si vuole usare un eseguibile già pronto basta un comune programma FTP.

Per poter utilizzare PHP come CGI è necessario ricompilarlo partendo dai sorgenti e dai moduli che si intende includere. Ricompilare PHP però è un lavoro molto particolare che richiede conoscenze, anche perchè è spesso fattibile su sistemi GNU/Linux o via ssl/shell. Nella stragrande maggioranza dei casi, però, l'interprete compilato può essere trasferito da un sistema ad un altro e, grazie anche alla licenza GNU, può venir usato senza problemi. Per questo motivo trovare in rete un PHP già compilato non è un problema (se vi dovesse servire posso fornirvi il "mio").

Supponiamo che il file si chiami php5.cgi, prestando attenzione al fatto che in ambiente GNU/Linux l'estensione non è indicativa del tipo di file. Avendo questo file si è quasi giunti alla fine! Basta, infatti, metterlo su una qualsiasi cartella, che in questa guida chiameremo cgi-bin, e renderlo eseguibile. Vediamo come:

Codice:
cd /home/lacellula/www/www.miosito.it/cgi-bin/

chmod +x php5.cgi
Ovviamente il path /home/lacellula/www/ è di fantasia

Per poter istruire Apache a trattare i files .php con PHP-cgi basta usare un file .htaccess da mettere nella directory /home/lacellula/www/www.miosito.it/

Codice:
Options +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5.cgi

Tutto fatto! A questo punto basta un phpinfo() per vedere se tutto ha funzionato. Riepiloghiamo un pò la struttura

/
 .htaccess
 phpinfo.php
/cgi-bin/
    php5.cgi
    php.ini (facoltativo, vedere avanti)

PHP.ini personalizzato
Prima accennavo al fatto che mediante PHP-cgi è possibile avere un php.ini personalizzato. E' vero, basta infatti copiare (o creare) un file che si chiama php.ini e metterlo nella directory cgi-bin. Non è essenziale perchè se tale file non risulta presente PHP-cgi provvede ad usare quello di default del server.

Conclusioni.
E' vero, non serve a molti avere una versione di PHP propria e sono tanti i provider che impediscono una direzione in tal senso ma perchè, quantomeno, non provare? Spesso si è costretti a cambiare host, perdendo magari cifre anticipate, perchè "il cliente vuole un software che con questa versione di PHP non gira" quando basterebbe una piccola configurazione per evitare ciò.

Altrettanto spesso si rinuncia a funzioni molto utili, come ad esempio la compressione/decompressione zip o gz, perchè il  provider ha server con PHP 4.x o comunque è una estensione disabilitata.
« Ultima modifica: 13 Giugno 2007, 11:46:02 da lacellula » Loggato

luke
Utente Attivo
****
Posts: 315


Re: PHP come modulo o come CGI?
« Risposta #1 il: 14 Giugno 2007, 08:01:34 »

Grazie, grazie, grazie per questo articolo. Sembra strano come i tread più interessanti e informativi passino inosservati, mentre i tread del tipo "questo provider non funziona" si animino di un sacco di detrattori (concorrenza e loro claque?) e sostenitori (provider stessi e loro amici?).

Meditate gente, meditate!

^_^
Loggato

gja
Utente Attivo
****
Posts: 264


Re: PHP come modulo o come CGI?
« Risposta #2 il: 14 Giugno 2007, 18:30:19 »

grandioso lacellula !  Sorriso
i suoi interventi tecnici sono da dieci e lode  Occhiolino
Loggato
Pagine: [1]
 
 
Salta a:  

Oggetto Iniziato da Risposte Visto Ultimo Post
Poco Pagare Poco Avere... Vero O No? « 1 2 » Qbic 15 10897 Ultimo Post 15 Novembre 2008, 14:49:51
da alberto.pizzarelli
Attacco "lamer" Verso Tophost [era:Attacco Hacker] « 1 2 3 4 » Tophost 57 21960 Ultimo Post 18 Giugno 2005, 12:32:08
da ErEiSeR
Ottimizzare Wordpress Per I Motori Di Ricerca guardaqua 7 7042 Ultimo Post 11 Giugno 2006, 18:56:42
da guardaqua
Guida A Mod_rewrite (parte 4) doGmaI 10 13636 Ultimo Post 20 Novembre 2008, 13:37:10
da abbeyschool
phpBB3 su TopHost MaryLou 10 6491 Ultimo Post 4 Luglio 2008, 10:58:02
da loris1966
Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC
Traduzione Italiana a cura di SMItalia

TinyPortal v0.9.8 © Bloc
XHTML 1.0 Valido! CSS Valido!


Ultima visita di Google a questa pagina 31 Luglio 2010, 06:02:32