不重新编译php, 单独编译添加扩展

文章来源: https://blog.csdn.net/qmhball/article/details/79015888

之前给php安装一个LDAP扩展,查了下如何在不重新编译php的基础上,添加l扩展的方法。

问题

php自身提供了很多扩展,比如curl,gmp, mbstring等等。我们在编译安装php时未必安装了所有扩展。那么在安装完php后,如果想单独安装某个php自身的扩展怎么办呢?

我们以curl扩展模块的安装为例说明如何单独添加扩展。

步骤
1.进入php源码的扩展目录。本例中我的源码对应目录如下:

/data/src/php-7.0.14/ext 


2.进入模块目录,我们安装的是curl扩展,所以进入curl目录。此时,我们所在的目录是

/data/src/php-7.0.14/ext/curl


3.执行phpize。注意,如果你的机器上有多个php版本,一定要执行你准备安装扩展的php版本对应的phpize。比如,我的机器上同时有php7和php5.3.3。我当前准备为php7安装curl扩展。所以执行php7对应的phpize

/usr/local/php70/bin/phpize

结果类似:

/usr/local/php70/bin/phpize

结果类似:
Configuring for:
PHP Api Version:         20151012
Zend Module Api No:      20151012
Zend Extension Api No:   320151012   

4.执行

./configure --with-php-config=/usr/local/php70/bin/php-config

PS:如果你的机器上只有一个php版本,大多时候不需要特别使用–with-php-config指明相应的php-config所在位置。

5.执行make,之后会在./modules/目录下生成curl.so文件

6.执行make install

结果类似:
Installing shared extensions:     /usr/local/php70/lib/php/20151012/


执行结果告诉你将curl.so安装到了哪个目录。

一般情况,如果你正确的指定了php-config或者你的机器只有一个php版本,so都会被正确安装到相应php的extension_dir。如果执行make install后,extension_dir目录下没有相应的so,可以手动将第5步中生成的so文件cp过去。

要查看具体extension_dir,可以执行如下命令。

php -i| grep extension_dir

结果类似
extension_dir => /usr/local/php70/lib/php/20151012/ => /usr/local/php70/lib/php/20151012/ 

7.在php.ini中增加

extension=curl.so

如果不知道php.ini的具体位置,可以通过如下命令查看

php --ini

8.执行如下命令,查看是否安装成功

php -m | grep curl

如果你看到了curl, 恭喜你,安装成功!

注意:如果你是使用fpm,apache等方式执行php。在修改相应的php.ini后,还需要重新启动fpm或apache,新的扩展才会生效。

git 配置文件

Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

1./etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。

2.~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。

3.当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:

$ git config --global user.name "peter" 
$ git config --global user.email peter@example.com 

a. git 查看当前用户的配置

git config –global –list

b. git 查看系统config

git config –system –list

c. git 查看当前仓库的配置

git config –local –list

可以在配置文件里设置忽略filemode, 忽略一些不应该被提交的文件。

类似于这样:

PS: 设置忽略提交文件其他方法

【方式一】

在仓库目录下新建一个名为.gitignore的文件(因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键Git Bash,按照linux的方式来新建.gitignore文件)。

.gitignore文件对其所在的目录及所在目录的全部子目录均有效。通过将.gitignore文件添加到仓库,其他开发者更新该文件到本地仓库,以共享同一套忽略规则。

【方式二】

通过配置.git/info/exclude文件来忽略文件。这种方式对仓库全局有效,只能对自己本地仓库有作用,其他人没办法通过这种方式来共享忽略规则,除非他人也修改其本地仓库的该文件。

跳板机ssh_config 配置

跳板机或堡垒机,有的时候需要快速登录到各个服务器上,在我们了解ssh命令之后,于是我们用下列这样的命令跳到服务器上:

ssh username@hostname -p port

然后输入密码

这样很麻烦,每次都要输入一大串,还要记ip,于是ssh config可以满足要求:

ssh 别名 //可以很方便的登录到各个服务器上

配置方法:在/etc/ssh/ssh_config文件中

Host web1
     HostName 主机名
     User 用户名
     Port 端口号 (如果端口号是22,可以不写)

配置好后,就可以ssh 别名直接登录过去,但是还是需要输入密码,解决方法是将公钥拷贝到目标机器上

1.密钥生成

ssh-keygen -t rsa //然后一直回车就可以了 

2.拷贝公钥

scp ~/.ssh/id_rsa.pub username@hostname:~/.ssh/ (公钥拷贝到目标机器)
目标机器: cat id_rsa.pub >> .ssh/authorized_keys

3.重启服务器的ssh

/etc/init.d/ssh restart

最后就可以通过 ssh 别名的方式,从跳板机登录到各个服务器上了

工作中常用linux 命令(持续更新)

A.scp 用于linux之间复制文件与目录

1.远程传输到本地

scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
scp -r www.runoob.com:/home/root/others/ /home/space/music/

2.本地传输到远程

scp local_file remote_username@remote_ip:remote_folder 
或者 
scp local_file remote_username@remote_ip:remote_file 
或者 
scp local_file remote_ip:remote_folder 
或者 
scp local_file remote_ip:remote_file 

B.tar命令–打包与解压

tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
tar -cvzf xyz.tar.gz --exclude=xxx/libs xxx //压缩xxx目录,排除xxx/libs目录,多个排除用多个--exclude
 tar -xzvf jdk-8u131-linux-x64.tar.gz -C /usr/local/java //解压到指定目录
按文件中列表来打包文件

1.cat package.list | xargs tar czvf  phpletu.tar.gz 其中package.list 是要打包的文件列表
2.tar -czvf -T package.list -f /backup.tar.gz   -T选项可以指定打包package.list文件列表里的文件 

C. 删除除了某个文件名之外的所有文件

find -type f ./* | grep -v '保留的文件名' | xargs rm 

D. linux 如何合并文件?

 cat a1.sql a2.sql a3.sql > a_all.sql
 或者
 cat *.sql > merge.sql

E. sed 替换文件内容

sed -i s/xxx/yyy/g 文件名

F. du 查看磁盘文件目录占用空间大小

du -ah --max-depth=1 | sort -rn (这样由于h参数,带有字母,所以排序不是想要的)
不排序的话,我之前常用的是du -ah --max-depth=1

-s 仅显示总计
-d1(--max-depth=1) 超过指定层数的目录后,予以忽略
-s 和 --max-depth=1 是矛盾的,所以不能同时使用
-a 输出所有文件的磁盘用量,不仅仅是目录

结论:
du -s * | sort -rn 这样可以
du -s * | sort -rn | head -n 10 显示前10

G. 查询access log 里ip 出现前几的ip

假设access log格式如下:
{"@timestamp":"xxx","time:local":"yy","remote_user":"","host":"zzz","remote_addr":'ggg',"http_real_x_ip":"ddd"}

假设取remote_addr这个作为统计ip
cat access_log.2019-11-30 | cut -d ',' -f 5 | awk -F ':' '{print $2}' | sort | uniq | head -n 10

cut 
-d 以xxx为分隔符,分隔单行的字符串这里以逗号为分隔符
-f 取分隔后的第几段 这里取第6段

awk
-F 以xxx为分隔符
'{print $2}' 打印第二段

awk 这里也可以继续换成 cut -d ':' -f 2

H. grep 查找字符串命令

//在当前目录下,所有文件中搜索Hello world字符串,并显所在行

grep -nR --color=always 'Hello world' ./*
grep 'xxxx' xxx.log > out.log

or 

cat xxx.log | grep 'xxxx' > out.log
满足两个条件中的一个条件(包含"xx" 或者包含"yy")的命令

grep -E 'xx|yy' xxx.log > out.log

cat xxx.log | grep -E 'xx|yy' > out.log

H. 查找指定扩展名文件中含有xxx的内容

find . -name '*.php' | xargs grep -nR --color=always '&new'

I. 查找多条件求与

//grep -E 'A.*B.*C.*D' ./file

grep -nR --color=always -E 'u6bcf.*u65e5.*u63d0.*u9192' ./tapd_cloud_send_mail-2020-01-09.*