Como executar o código PHP a partir da linha de comando?

163

Eu gostaria de executar uma única instrução php como if(function_exists("my_func")) echo 'function exists'; diretamente com a linha de comando sem precisar usar um arquivo php separado.

Como isso é possível ?

Steve
fonte
1
fazer function_exists () sem usar outros arquivos que contenham função definida pelo usuário não será muito bom, exceto para testar a versão do PHP, que você pode descobrir de outras maneiras. Qual função você deseja testar?
Matt Gibson
Eu estou olhando para testar esta função: sg_load ()
Steve
2
Parece que o que você realmente deseja é descobrir se a extensão php sourceguardian está ativada?
Matt Gibson
2
então phpinfo () deve lhe dizer.
JPIC

Respostas:

256

Se você for fazer PHP na linha de comando, recomendo instalar o phpsh, um shell PHP decente . É muito mais divertido.

De qualquer forma, o comando php oferece duas opções para executar o código na linha de comando :

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line

Você pode usar a opção -r do php :

php -r 'echo function_exists("foo") ? "yes" : "no";'

O comando PHP acima acima deve gerar no e retornar 0 como você pode ver:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";'
no
>>> echo $? # print the return value of the previous command
0

Outra opção engraçada é php -a :

-a               Run as interactive shell

É meio coxo comparado ao phpsh , mas se você não quiser instalar o incrível shell interativo para php criado pelo facebook para obter a conclusão da guia, o histórico etc. , use -a como tal :

>>> php -a
Interactive shell

php > echo function_exists("foo") ? "yes" : "no";
no
php > 

Se não funcionar na sua caixa como na minha caixa * es * ( testada no Ubuntu e Arch), provavelmente a sua configuração do PHP está confusa ou com problemas . Se você executar este comando:

php -i | grep 'API'

Você deve ver:

Server API => Command Line Interface

Caso contrário , isso significa que talvez outro comando forneça a CLI SAPI . Experimente o php-cli, talvez seja um pacote ou um comando disponível no seu sistema operacional.

Se você perceber que seu comando php usa a SAPI (API de servidor) da CLI (Command Line Interface), execute php -h | grep codepara descobrir qual opção maluca - como isso não mudou durante o ano - permite executar o código em sua versão / configuração.

Mais alguns exemplos, apenas para garantir que funcione nas minhas caixas:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes

Além disso, observe que é possível que uma extensão seja carregada na CLI e não na CGI ou Apache SAPI. É provável que vários SAPIs PHP usem arquivos php.ini diferentes , por exemplo, /etc/php/cli/php.inivs /etc/php/cgi/php.inivs /etc/php/apache/php.iniem uma caixa do Gentoo. Descubra com qual arquivo ini é usado php -i | grep ini.

jpic
fonte
Talvez sua configuração de php esteja quebrada. Eu atualizei minha resposta, incluindo dicas para descobrir isso.
JPIC
Adicionada uma observação sobre php -a que pode ser útil para você.
JPIC
6
Observe que o phpsh não é mais mantido por seu autor (Facebook) e alguém na página dos Grupos do Google disse em 2012 que "o phpsh não é mais suportado ou útil" . Você pode procurar no Boris REPL um console php aprimorado.
quer
3

Na linha de comando:

php -i | grep sourceguardian

Se estiver lá, você receberá algum texto. Caso contrário, você não receberá nada.

Matt Gibson
fonte
4
Ou sou cego ou esta resposta não tem nada a ver com a pergunta. Como essa resposta deve responder à pergunta " Como executar o código PHP diretamente da linha de comando, sem salvar o código PHP no .phparquivo? "?
Trejder
15
@trejder Por um momento, me perguntei se havia respondido à pergunta errada, mas depois examinei o histórico de edição e os comentários. Isso responde ao que o OP parecia realmente precisar: descobrir se uma extensão PHP específica foi carregada. A questão já foi reformulada, por isso não se encaixa tão bem agora.
Matt Gibson
3

Você pode usar :

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

A tag curta " <? = " Também pode ser útil:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

A tag de fechamento "?>" É opcional, mas não esqueça a final ";" !

fred727
fonte
2
Isso parece ser mais problemático do que a resposta aceita de 7 anos. Usando php -rvocê não precisa se preocupar em abrir tags PHP.
miken32
1

Usando PHP na linha de comando

use "em vez de ' no windows ao usar a versão cli com -r

php -r "echo 1"

- correto

php -r 'echo 1'

-- incorreta

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1
user1942505
fonte