Respostas:
Use os pacotes estáveis do Dotdeb Debian. Embora a documentação não observe isso, os pacotes estáveis atualmente funcionam bem com o Wheezy / testing. Depois de seguir as instruções, faça:
apt-get install php5-cli
como raiz.
Após instalar o php5-cli no dotdeb , instale o pacote php5-readline.
apt-get install php5-readline
php5-readline
está disponível no arquivo principal de jessie e sid. E você não precisa php5-cli
do dotdeb.
Como complemento à resposta de Gilles, que sugere recompilar o pacote PHP completo, você também pode esperar pelo PHP 5.4. Na versão 5.4, reestruturei a funcionalidade readline de que todas as peças necessárias estão no módulo readline, para que você possa construir isso sozinho.
$ wget ...php-5.4.0.tar.bz2
$ tar xjf php-5.4.0.tar.bz2
$ cd php-5.4.0/ext/readline
$ phpize && ./configure && make
Então você terminará com um modules/readline.so
arquivo que pode ser carregado do php.ini ( make install
será movido para extension_dir
)
Como alternativa, o distribuidor pode enviar o módulo readline (talvez vinculado ao libedit, e não readline) e o modo interativo estará disponível.
Isso tudo não vai ajudá-lo agora (como o PHP 5.4 ainda não foi lançado), mas pode ajudar outras pessoas a encontrar essa pergunta mais tarde.
Mais alguns detalhes no meu blog: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html
Editar: Na verdade, a postagem do blog é mais antiga que essa alteração, mas ainda pode ser interessante. Um pouco de informação está no relatório de bug # 53878, mas também não muito ... após o lançamento, http://php.net/commandline.interactive deve ter mais.
Instale rlwrap
e execute rlwrap php5
. O Rlwrap é um wrapper de linha de leitura genérico, que fornece edição e histórico da linha de comando para qualquer loop de leitura e avaliação. Como é um invólucro genérico, você não receberá nenhuma conclusão específica do PHP.
Como alternativa, obtenha o pacote de origem e reconstrua-o com suporte à linha de leitura. O suporte ao Readline foi deixado de fora apenas devido a problemas de licenciamento , mas esses problemas proíbem apenas a distribuição do PHP5 vinculado ao readline, eles não proíbem o uso.
apt-get source php5-cli
apt-get install build-essential fakeroot
apt-get build-dep php5-cli
cd php5-*/
# Edit debian/rules to configure with readline support
# Add an entry to debian/changelog to remember what you did
dpkg-buildpackage -rfakeroot -us -uc -b -nc
rlwrap
não parece ajudar muito. Quando corro rlwrap php5
, entro echo 1;
e pressiono return e, em seguida, Ctrl-D (final da entrada), ele gera a entrada em echo 1;
vez do resultado (1). Obrigado por observar que é um problema de licenciamento.
rlwrap php5
e apenas php5
, além da edição de linha de comando anterior. Se você digitar <?php echo 1;?>
, a saída será 1
, mas não será emitida imediatamente nos dois casos. A pesquisa no Google sugere que php5
simplesmente não é um PHP REPL, e você deve usar algo como phpsh .
<?php
ou ?>
no shell interativo. Concordo que o php não tem um REPL completo. Mas, usando uma versão compilada com o suporte a linha de leitura em funcionamento (por exemplo, o pacote dotdeb que vinculei), ela produzirá 1 (ou seja qual for a saída real) imediatamente após pressionar Enter. Concordo que não há diferença significativa entre rlwrap e nenhuma linha de leitura (além da edição de linhas e do histórico, que são legais, mas não tão úteis quanto a produção imediata).
Tente o seguinte:
$ php -a
Interactive mode enabled
<?php echo "hi!"; ?>
Pressione Ctrl-d
<?php ?>
blocos. Eu não estava ciente disso, e isso mostra que eu não entendi Gilles antes.
Para usuários do Ubuntu, php5-readline é o pacote adicional que você precisa instalar para ter um prompt de comando utilizável em php:
sudo apt-get install php5-cli php5-readline
sudo php5enmod readline
Eu tive que fazer isso no meu Ubuntu 14.04.
Nada disso funcionou para mim. Use http://www.phpsh.org/ .
No debian jessie e no debian sid use:
sudo apt-get install php5 php5-readline
então
php -a
Interactive mode enabled
php > echo 1+2;
3
php >
php>
prompt para mim :(