解决php的交互式命令行不能正常启动的问题兼介绍psysh
今天在自己的mac电脑上试着启动php的交互式命令行,发现敲下命令后一直卡在提示进入的地方,但没有出现已经进入的提示符,百度了下应该是与readline有关。
于是安装php的readline扩展,在php的源码目录中找到readline扩展的源码目录,用phpize命令来安装扩展。
phpize
./configure --with-php-config=php-config工具目录
make
make install
然后在php.ini中添加扩展:
extension=readline.so
执行下php -m | grep readline,检查扩展是否生效。注意这里安装的是cli的扩展,所以与cgi无关,所以无需重启php-fpm。可以看下官方文档的介绍针对命令行的扩展:Readline,手册中说:“readline 扩展函数实现了访问 GNU Readline 库的接口. 这些函数提供了可编辑的命令行. 一个例子是在 Bash 中允许你使用箭头按键来插入字符或者翻看历史命令. 因为这个库的交互特性,这个功能在你写的 Web 程序中没多大用处, 但是当你写的脚本被用在命令行中时非常有用.”
所以,如果你想使用php的repl,那就需要安装这个扩展,同时安装时需要注意系统中应该有GNU Readline库,因为php的readline需要访问这个库的接口。如果没有这个库的话,很多交互式命令行是不能正常使用的,比如敲击方向键无法移动光标反而出现了乱码一样的怪字符。
命令行下执行php -a就可以启动repl。另外,国外有人做了一个比php原生的repl稍微好用些的repl,叫psysh,感兴趣的朋友可以看看。
linux下一般会有readline工具和支持这个工具的包,它提供了交互式的文本编辑功能。很多语言和工具,比如python、node、ruby等也都提供了交互式命令行工具,也可以把它叫做交互式解释器,英文缩写为REPL(read-eval-print-loop)。
解决php的交互式命令行不能正常启动的问题兼介绍psysh的更多相关文章
- Spark-Unit2-Spark交互式命令行与SparkWordCount
一.Spark交互式命令行 启动脚本:spark-shell 先启动spark:./start-all.sh 本地模式启动命令:/bin/spark-shell 集群模式启动命令:/bin/spark ...
- Python多版本情况下四种快速进入交互式命令行的操作技巧
因为工作需求或者学习需要等原因,部分小伙伴的电脑中同时安装了Python2和Python3,相信在Python多版本的切换中常常会遇到Python傻傻分不清楚的情况,今天小编整理了四个操作技巧,以帮助 ...
- python 交互式命令行数据库连接助手 -- mysql、sql server (mssql)、redis
目录 python 交互式命令行数据库连接助手 0. 操作示例 1. python 连接mssql 2. python 连接mysql 3. python 连接redis n. Tips python ...
- cmd命令行带参启动程序
cmd命令行带参启动程序 有一些程序不支持被直接启动,编写代码时,我们可以通过Process类来启动某个进程(某个软件),在不用代码调从而启动某个软件时,windows系统下,通常我们会用到cmd命令 ...
- 使用批处理文件命令行方式快速启动和停止IIS、SqlServer
原文:使用批处理文件命令行方式快速启动和停止IIS.SqlServer 虽然现在内存便宜了,但是自己还是嫌自己的512M内存太小,没办法,后台运行的东西太多了,有很多都是有用的没法关闭的.IIS和SQ ...
- Teamviewer远程ssh命令行更改密码启动
Teamviewer远程ssh命令行更改密码启动 设置密码 $ sudo teamviewer passwd [NewPasswd ] 查看teamviewer信息 $ teamviewer info ...
- 命令行的方式启动和关闭Mysql
命令行的方式启动和关闭Mysql mysql -h 主机名 -P 端口号 -u 用户名 -p 密码 例如:mysql -h localhost -P 3306 -u root -p11111(p和密码 ...
- 解决windows 下 mysql命令行导入备份文件 查询时乱码的问题
Mysql导入乱码,一般在命令行会遇到.下面说的是命令行的情况下解决乱码问题: 方法一: 通过增加参数 –default-character-set = utf8 解决乱码问题 mysql -uroo ...
- XXL-JOB使用命令行的方式启动python时,日志过多导致阻塞的解决方式
一.Runtime.getRuntime().exec()的阻塞问题 这个问题也不能算是XXL-JOB的问题,而是Java的Runtime.getRuntime().exec()造成的,Buffere ...
随机推荐
- 从零开始学习html(十)CSS格式化排版——下
六.文字排版--删除线 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&q ...
- npm 安装指定模块版本
npm list 查看具体模块 如: npm list @antv/g6 如需要安装指定的模块和版本 保存时 - --save-dev 是你开发时候依赖的东西,--save 是你发布之后还 ...
- JMeter初体验
Meter是开源软件Apache基金会下的一个性能测试工具,用来测试部署在服务器端的应用程序的性能. 1.JMeter下载和安装 JMeter可以在JMeter的官方网站下载,目前能下载的是JMete ...
- servlet3.0 web.xml 标头
<?xml version="1.1" encoding="UTF-8"?> <web-app xmlns="http://java ...
- SQL Server 高并发Insert数据解析,实践
在现实的生产环境中,有可能遇到高并发insert的应用.在此应用时由于堆表(Heap)和聚集表的结构不同导致在高并发的情形下insert效率不尽相同.接下来我会简单的以测试用例来简要说明.并举例说明如 ...
- C#DateTime.ToString 格式化时间字符串和数值类型转换为字符串
我们经常会遇到对时间进行转换,达到不同的显示效果,默认格式为:2006-6-6 14:33:34,如果要换成200606,06-2006,2006-6-6或更多的格式该怎么办呢?这里将要用到:Date ...
- winform中容器是如使用的
1.容器 (1)FlowLayouPanel 普通容器[内部流式布局] (2)Groupbox 带有标题的普通容器[内部普通布局,超出范围隐藏] (3)Panel 普通容器[内部普通布局,超出范围隐藏 ...
- 使用动态跟踪技术SystemTap监控MySQL、Oracle性能
[IT168 技术]本文根据吕海波2018年5月11日在[第九届中国数据库技术大会]上的演讲内容整理而成. 讲师介绍: 吕海波,美创科技研究员,ITPUB管理版版主.出版技术书籍<Oracle内 ...
- Git钩子详解
钩子 Git钩子是在Git仓库中特定事件发生时自动运行的脚本.可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子.Client端钩子被operation ...
- 【Vue.js学习】生命周期及数据绑定
一.生命后期 官网的图片说明: Vue的生命周期总结 var app = new Vue({ el:"#app", beforeCreate: function(){ consol ...