Ubuntu16.04 PHP7 编译安装 PHP 扩展包 curl 安装记录

安装 PHP7.2.4 curl 扩展:

学习慕课网-Swoole入门到实战打造高性能赛事直播平台-7.9 章节时报错 undefined curl_init(),导致无法发送阿里大鱼短信,以下是报错信息

PHP Fatal error:  Uncaught Error: Call to undefined function Aliyun\Core\Http\curl_init() in /home/misswell/Code/thinkphp_5.1.0_rc/extend/ali/lib/Core/Http/HttpHelper.php:13

原因是缺少 curl 扩展

我的安装代码:

misswell@ubuntu:~/Downloads$ wget http://curl.haxx.se/download/curl-7.32.0.tar.gz
misswell@ubuntu:~/Downloads$ tar zxvf curl-7.32.0.tar.gz 
misswell@ubuntu:~/Downloads$ cd curl-7.32.0
misswell@ubuntu:~/Downloads/curl-7.32.0$ ./configure --prefix=/usr/local/curl
misswell@ubuntu:~/Downloads/curl-7.32.0$ cd  ../php-7.2.4/ext/curl/
misswell@ubuntu:~/Downloads/php-7.2.4/ext/curl$ /home/misswell/soft/php/bin/phpize 
misswell@ubuntu:~/Downloads/php-7.2.4/ext/curl$ ./configure --with-php-config=/home/misswell/soft/php/bin/php-config  --with-curl=/home/misswell/Downloads/curl-7.32.0
misswell@ubuntu:~/Downloads/php-7.2.4/ext/curl$ make && make install
...
Installing shared extensions:     /home/misswell/soft/php/lib/php/extensions/no-debug-non-zts-20170718/

解释:

php源码目录:/home/misswell/Downloads/php-7.2.4/

php编译目录:/home/misswell/soft/php/

curl源码目录:/home/misswell/Downloads/curl-7.32.0/

1.curl,主要用于发送http请求,是php的一个扩展包。
2.安装过程:
(1)curl下载:http://curl.haxx.se/download.html
(2)具体安装过程:

wget http://curl.haxx.se/download/curl-7.32.0.tar.gz

tar zxvf curl-7.32.0.tar.gz

cd curl-7.32.0

./configure --prefix=/usr/local/curl

cd /(php源码目录)/ext/curl

运行phpize: /(php编译目录)/bin/phpize

./configure --with-php-config=/(php编译目录)/bin/php-config --with-curl=/(curl源码目录)

make && make install

修改php.ini,增加:extension=curl.so(如果没有安装过其他php扩展,则需要同时配置extension_dir="/(php编译后目录)/lib/php/extensions/no-debug-non-zts-20121212/",上一个步骤生成.so文件的时候,会输出extension_dir目录)

(3)检验是否安装成功:

/(php编译后目录)/bin/php -m | grep curl ——正常打印curl,则表示安装成功(php -m会打印出已安装的扩展模块)

Linux下环境变量配置方法

环境变量配置的两个方法:

1)修改 /etc/profile 文件 推荐使用这种方法,因为所有用户的 shell 都有权使用这些环境变量,缺点是可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的 shell;

[root@test ~]# vim /etc/profile
....
export PATH=$PATH:/usr/local/mysql/bin
 
#使用source命令使修改立刻生效: 
[root@test ~]# source  /etc/profile

2)修改 .bashrc 文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果需要给某个用户权限
使用这些环境变量,只需要修改其个人用户主目录下的 .bashrc 文件就可以了。

[root@test ~]# vim /root/.bashrc
export PATH=$PATH:/usr/local/mysql/bin
 
[root@test ~]# source  /root/.bashrc
[app@test ~]$ vim ~/.bashrc
......
KETTLE_HOME=/data/nstc/kettle3.2
export KETTLE_HOME
 
#注意:配置好环境变量后,要记得export输出这个变量,否则如下source后无效!
[app@test ~]$ source .bashrc //使之生效
[app@test ~]$ echo $KETTLE_HOME
/data/nstc/kettle3.2
[app@test ~]$ env
.........
KETTLE_HOME=/data/nstc/kettle3.2

.bash_profile 和 .bashrc 的区别:

/etc/profile:  此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:  为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:  每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:  该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
~/.bash_logout:  当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系.

记一次阿里云 ECS 服务器数据盘无损扩容

原数据盘 20G 扩容至 25G,购买后通过 SSH 登陆实例进行操作;

操作步骤完全参考阿里云帮助即可:https://help.aliyun.com/document_detail/25452.html

[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   15G   23G  39% /
tmpfs           939M     0  939M   0% /dev/shm
/dev/vdb1        20G   13G  6.7G  65% /home/wwwroot
[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# umount /dev/vdb1
[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   15G   23G  39% /
tmpfs           939M     0  939M   0% /dev/shm
[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# fdisk -l

Disk /dev/vda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00020f03

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           1        5222    41940992   83  Linux

Disk /dev/vdb: 26.8 GB, 26843545600 bytes
16 heads, 63 sectors/track, 52012 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x78d92770

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1               1       41610    20971408+  83  Linux
[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# fdisk /dev/vdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): d
Selected partition 1

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-52012, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-52012, default 52012): 
Using default value 52012

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# e2fsck -f /dev/vdb1
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vdb1: 95741/1310720 files (0.8% non-contiguous), 3228283/5242852 blocks
[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# resize2fs /dev/vdb1
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vdb1 to 6553504 (4k) blocks.
The filesystem on /dev/vdb1 is now 6553504 blocks long.

[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# mount /dev/vdb1 /home/wwwroot
[root@iZ2ze4knyxhkgpnbo7brn7Z ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   15G   23G  39% /
tmpfs           939M     0  939M   0% /dev/shm
/dev/vdb1        25G   13G   12G  52% /home/wwwroot

值得注意的点是 fdisk 命令操作时, 是使用 fdisk /dev/vdb 而不是 fdisk /dev/vdb1,这里没仔细看坑了我好长时间,一直扩容失败;

扩容成功。

rsync 带不带尾部斜杠的不同作用

rsync 是很好用的同步软件,使用增量方式同步。不过使用 rsync 时有没有尾部斜杠效果是不同的

使用方法  rsync  src   dest

总结一下规律:

src 目录没有带斜杠:则在  dest 下面有 src 文件夹

src 目录没有带斜杠:则在 dest 目录下面只有 src 目录下面的文件

换言之:如果忽略了源文件斜杠  rsync 将创建源文件目录的最后一个文件夹名字并且包含它的所有文件,如果添加了斜杠 rsync 将跳过那个目录直接复制里面的内容

dest 带不带斜杠没有任何影响。 Continue reading rsync 带不带尾部斜杠的不同作用

执行 umount 的时提示: device is busy 的处理方法

错误

[root@iZ25xpwwmfnZ ~]# umount /dev/vdb5
umount: /data/wwwroot/www.1001alading.com/Uploads: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

查看

[root@iZ25xpwwmfnZ ~]# fuser -m -v /data/wwwroot/www.1001alading.com/Uploads
                     USER        PID ACCESS COMMAND
/data/wwwroot/www.1001alading.com/Uploads:
                     www        2925 f.... nginx
                     www        2927 F.... nginx
                     root      18365 f.... AliYunDun
                     root      28557 f.... pick.sh

杀进程

[root@iZ25xpwwmfnZ ~]# fuser -m -v -i -k /data/wwwroot/www.1001alading.com/Uploads
                     USER        PID ACCESS COMMAND
/data/wwwroot/www.1001alading.com/Uploads:
                     www        2925 f.... nginx
                     www        2927 F.... nginx
                     www        2928 F.... nginx
                     root      18365 f.... AliYunDun
                     root      28557 f.... pick.sh
Kill process 2925 ? (y/N) y
Kill process 2927 ? (y/N) y
Kill process 2928 ? (y/N) y
Kill process 18365 ? (y/N) y
Kill process 28557 ? (y/N) y

再次卸载

资料转移记录

mkdir /home/Uploads
mkdir /home/temp
mv /home/wwwroot/ald.1001ald/Uploads/* /home/Uploads
umount /dev/vdb1
mount /dev/vdb1 /home/temp
mv -rf /home/Uploads /home/wwwroot/ald.1001ald
mv /home/wwwroot/ald.1001ald/ /home/temp
umount /dev/vdb1
mount /dev/vdb1 /home/wwwroot
vim /etc/rc.d/rc.local
mount /dev/vdb1 /home/wwwroot