Como instalo uma CLI PHP com um prompt interativo utilizável no Debian Wheezy?


10

Quando instalo o php5-cli no Debian Wheezy (atualmente testando), o prompt interativo é muito inutilizável devido à falta de suporte à linha de leitura (bug 341868 ). Qual é a maneira mais fácil de instalar uma versão vinculada ao libreadline (para edição de linha utilizável)?

Respostas:


10

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.


1
nup ainda não há php>prompt para mim :(
mulllhausen

6

Após instalar o php5-cli no dotdeb , instale o pacote php5-readline.

apt-get install php5-readline

Isto está disponível apenas em Jessie (testing) - packages.debian.org/…
William Turrell

@ williamt Obrigado, acredito que esteja nos repositórios do dotdeb.
Cmd #

O pacote php5-readlineestá disponível no arquivo principal de jessie e sid. E você não precisa php5-clido dotdeb.
Ortomala Lokni

4

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.soarquivo que pode ser carregado do php.ini ( make installserá 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.


Obrigado, isso ajudou. Encontrou 2 problemas no Ubuntu, no entanto. Estava faltando a biblioteca libedit (corrigida pela instalação do libedit-dev) e ocorreu este erro de compilação: bugs.php.net/bug.php?id=62612 A solução também está lá.
Dziamid

Engraçado como eu me contradiz! aqui eu sugiro phpize etc. no bug eu digo que não é "totalmente" apoiada a fazê-lo ;-)
Johannes

3

Instale rlwrape 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

rlwrapnã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.
Matthew Flaschen

3
@ Matthew: Eu não sei nada sobre PHP, mas, ao tentar isso no lenny, não vejo diferença entre rlwrap php5e 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 php5simplesmente não é um PHP REPL, e você deve usar algo como phpsh .
Gilles 'SO- stop be evil'

1
você não entra no <?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).
Matthew Flaschen

@ Matthew: Ah, então o suporte ao readline faz mais do que apenas vincular ao readline, mas também altera o comportamento do programa? Isso parece estranho. Em seguida, você pode reconstruir a partir do código-fonte ou usar os pacotes dotdeb, se eles funcionarem para você.
Gilles 'SO- stop be evil'

Sim, muitas coisas no PHP parecem estranhas. ;) Mas parece que o caminho do código da linha de leitura é diferente nessa área apenas tangencialmente relacionado à linha de leitura.
Matthew Flaschen

3

Tente o seguinte:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

Pressione Ctrl-d


5
Isso não parecer que tem algo a ver com a instalação de PHP
Michael Mrozek

1
Isso é realmente muito útil, mesmo que não responda diretamente à pergunta. Isso mostra que, no caminho que não é de linha, o PHP executa apenas o código dentro de <?php ?>blocos. Eu não estava ciente disso, e isso mostra que eu não entendi Gilles antes.
Matthew Flaschen

3

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.



1

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 >
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.