Eu tenho um script PHP que pode ser colocado em um sistema Windows ou Linux. Eu preciso executar comandos diferentes em ambos os casos.
Como posso detectar em que ambiente estou? (de preferência algo PHP em vez de hacks inteligentes do sistema)
Atualizar
Para esclarecer, o script está sendo executado na linha de comando.
\strncasecmp(\PHP_OS, 'WIN', 3) === 0
,\strtoupper(\substr(\PHP_OS, 0, 3)) === 'WIN'
e\stripos(\PHP_OS, 'WIN')
estão abaixo de 15%. Como as três soluções levam apenas cerca de 100 nanossegundos, isso seria uma micro otimização. Portanto, escolha a solução que desejar. Finalmente, você pode argumentar que\strncasecmp(\PHP_OS, 'WIN', 3) === 0
é o mais legível.Respostas:
Verifique o valor dos documentos
PHP_OS
constantes .Ele fornecerá vários valores no Windows
WIN32
, como ,WINNT
ouWindows
.Veja também: Valores possíveis para: PHP_OS e
php_uname
Docs :fonte
stripos(PHP_OS, 'WIN') === 0
pode ser usado em vez disso, sem dúvida mais legível / simples.Você pode verificar se o separador de diretório é
/
(para unix / linux / mac) ou\
no Windows. O nome constante éDIRECTORY_SEPARATOR
.fonte
strpos(__FILE__,92)
explora o mesmo comportamento;PATH_SEPARATOR>":"
também retorna true para Windows (PATH_SEPARATOR é ":" em todos os outros sistemas operacionais).function is_linux(){return (DIRECTORY_SEPARATOR == '/') ? true : false;}
parece um pouco mais elegante que a resposta aceita. A detecção mencionada acima com DIRECTORY_SEPARATOR é a mais rápida.
fonte
strncasecmp
leva os primeiros n caracteres, não apenas n caracteres. Se você tentou, você teria descoberto questrncasecmp('DARWIN', 'WIN', 3) == 0
avaliafalse
.Note-se que PHP_OS relata o sistema operacional que o PHP foi construído em , que não é necessariamente o mesmo sistema operacional que está actualmente em execução.
Se você está no PHP> = 5.3 e precisa apenas saber se está executando no Windows ou não no Windows, testar se uma das constantes específicas do Windows está definida pode ser uma boa aposta, por exemplo:
fonte
A função php_uname pode ser usada para detectar isso.
fonte
De acordo com constantes predefinidas: notas fornecidas pelo usuário Volker e solução rdcapasso, você pode simplesmente criar uma classe auxiliar como esta:
Uso:
fonte
Isso deve funcionar no PHP 4.3 ou superior:
fonte
A partir do PHP 7.2.0, você pode detectar o sistema operacional em execução usando a constante
PHP_OS_FAMILY
:Veja a documentação oficial do PHP para seus possíveis valores.
fonte
Constantes predefinidas principais: http://us3.php.net/manual/en/reserved.constants.php que possui a
PHP_OS (string)
constante.Ou se você deseja detectar o sistema operacional do cliente:
Em http://us3.php.net/manual/en/function.get-browser.php
De acordo com a sua edição, você pode consultar este nome de servidor PHP publicado na linha de comando
Você pode usar
assim
Faria o truque para você, veja aqui http://php.net/manual/en/function.php-uname.php
fonte
Para detectar se é Windows, OS X ou Linux:
stripos
é um pouco mais lento do quesubstr
nesse caso específico, mas é eficiente o suficiente para uma tarefa tão pequena e mais elegante.fonte
Você pode verificar se existe uma constante no PHP> 5.3.0 ( manual )
Anteriormente, esse método era usado no Symfony. Agora eles usam um método diferente :
fonte
Se você quiser verificar se está executando no Linux, apenas teste se
(PHP_OS === 'Linux')
. Não há necessidade de usar strtolower () e substr ().fonte
fonte
Em http://www.php.net/manual/en/reserved.variables.server.php#102162 :
Essa é toda a matriz $ _SERVER ... como o ArtWorkAD observou, usando a chave HTTP_USER_AGENT, você pode extrair o SO mais explicitamente.
fonte