[PILLOLE PHP] Come determinare il sistema operativo del web server?
Una domanda che ho sentito molto spesso è: Come è possibile determinare il sistema operativo del server?
A questa domanda vedo spesso dare delle risposte stravaganti la più frequente delle quali consiste nell’applicare delle improbabili espressioni regolari alla variabile $_SERVER[‘SERVER_SOFTWARE’].
Prima di vedere una soluzione più elegante e sicura rispondiamo brevemente ad una domanda:
A che scopo determinare il sistema operativo del server?
Semplice: in rare circostanze PHP si comporta in modo diverso a dipendenza se il sistema operativo sul quale gira è Linux o Windows (un esempio non trascurabile di questa differenza lo vedremo nella prossima pillola). Ora, se lo script che stai sviluppando è per te, non c’è nessun problema. Conosci il sistema operativo del tuo server ed agirai di conseguenza. Ma se intendi distribuire il codice, allora dovrai tenere conto di queste differenze e dunque dovrai rilevare il sistema operativo.
Come rilevare il sistema operativo?
PHP mette a disposizione la costante PHP_OS che restituisce appunto il sistema operativo, ma… c’è sempre un ma!
Se per i sistemi operativi Linux PHP_OS ritorna la stringa “Linux”, per i sistemi Windows può ritornarci (a dipendenza del tipo di sistema) almeno tre valori: WINNT, WIN32, Windows.
Ma questo non è un problema così grave. Ci basterà trasformare la stringa tutta in maiuscolo e verificare che le prime tre lettere siano WIN.
Bene. Ti propongo una semplice funzione per determinare se il sistema operativo è Linux, Windows o altro.
function serverOS() { $sys = strtoupper(PHP_OS); if(substr($sys,0,3) == "WIN") { $os = 1; } elseif($sys == "LINUX") { $os = 2; } else { $os = 3; } return $os; }
Come vedi questa funzione ritorna 1 per Windows, 2 per Linux e 3 per altri sistemi.
Conclusione
In questo articolo abbiamo esplorato una particolarità di PHP ed abbiamo risolto in modo elegante la determinazione del sistema operativo del web server. Come detto questa procedura ci risulterà utile in quei casi dove il tipo di sistema operativo determina delle differenze come vedremo nella prossima pillola.
8 commenti
Trackback e pingback
-
Tweets that mention [PILLOLE PHP] Come determinare il sistema operativo del web server? | Your Inspiration Web -- Topsy.com
[...] This post was mentioned on Twitter by PHP Italia, mtx_maurizio. mtx_maurizio said: RT @YIW [PILLOLE PHP] Come determinare il… -
I migliori post della settimana #90 | Web Developer / Web Designer / SEO Specialist / Napoli :: EmaWebDesign
[...] Come determinare il sistema operativo del web server in PHP? Pubblicato in Migliori post della settimana | Nessun commento… -
[PILLOLE PHP] Come ottenere le date in italiano? | Your Inspiration Web
[...] come ormai dovresti sapere… c’è sempre un ma. Nella precedente pillola PHP avevo anticipato che a volte succede che…
Ottima pillola!
In realtà non mi sono mai posto il problema perchè non sapevo che ci potessero essere delle differenze nell’interpretazione del codice PHP in base al sistema operativo del server.
Hai per caso qualche esempio pratico di uno script che, a seconda del sistema, assume comportamenti differenti?
Ciao Daniele. In realtà non si tratta di differenze di interpretazione, ma di differenze che hanno direttamente a che vedere con il sitema operativo.
Ad esempio l’utilizzo della funzione chmod() su windows non ha nessun senso.
Nella prossima pillola vedremo un caso comunque molto più importante.
molto interessante, si in effetti, (vado a memoria) per cambiare permessi alle cartelle ci sono comandi diversi a seconda se la piattaforma sia linux o win; in generale quindi tutti i comandi di sistema?
Non proprio. Windows ha un sistema completamente diverso per assegnare i permessi. Negli hosting win, di solito c’é una cartella privata e tutto il resto é pubblico ed accessibile e soprattutto non può essere modificato.
Ovviamente i comandi di sistema sono diversi ma in questo caso non li abbiamo nemmeno accennati. Infatti ho parlato della FUNZIONE chmod() e non del comando chmod che potrei utilizzare con le funzioni system() o exec() anche se non ve ne sarebbe motivo.
Bene Maurizio aspettiamo la prossima pillola per vedere se manca qualcosa alle mie conoascenze.