PHP接口
1.概述
本手册描述了PHP在Linux环境下连接UXDB数据库。
2.PHP安装
-
安装依赖 在安装PHP,需要先安装libsqlite3x和oniguruma依赖。
yum install libsqlite3x-devel -y yum install oniguruma-devel -y -
安装PHP a. 在/usr/local路径下,下载官网的PHP包:
wget https://www.php.net/distributions/php-7.4.8.tar.gzb. 解压安装包:
tar -zxvf php-7.4.8.tar.gzc.在php-7.4.8路径下,执行如下命令:
./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7 --enable-bcmath --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mbstring --enable-phpdbg --enable-shmop --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-zlib --with-curl --with-pear --with-openssl --enable-pcntld. 编译并安装php:
make make install -
配置环境变量
在/etc/profile文件里面添加相关的PHP配置。
sudo vim /etc/profileexport GIT SSL NO VERIFY=true export VALGRIND HOME=/usr/local/valgrind export JAVA HOME=/usr/local/java/jdk1.8.0 161 export PHP HOME=/usr/local/php7 PATH=SPATH:SJAVA HOME/bin:SVALGRIND HOME/bin:$PHP HOME/bin export PATH执行如下命令使配置生效:
source /etc/profile
3.uxsql和pdo_uxsql扩展安装
-
获取动态库
-
安装动态库
在PHP扩展安装路径下,解压安装包,得到两个so文件pdo_uxsql.so 和 uxsql.so。
cd /usr/local/php7/lib/php/extensions/no-debug-non-zts-20190902 tar -xvf uxdb-php-linux.tar
4.相关配置
-
php.ini
a. 将源码路径下的php.ini文件拷贝至/usr/local/php7路径下。
cp /usr/local/php-7.4.8/php.ini-development /usr/local/php7/php.inib. 修改配置文件php.ini,如下:
vim /usr/local/php7/php.ini在文件中找到cgi.fix_pathinfo配置项,去掉注释并设置为0,这主要是为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,从而避免恶意脚本注入的攻击。
; A setting of zero causes PHP to behave as before. ; Default is 1. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 ; If cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside ; of the web tree and people will not be able to circumvent .htaccess security. ; http://php.net/cgi.discard-path cgi.discard_path=1新增扩展pdo_uxsql和uxsql:
extension=pdo_uxsql extension=uxsql -
关于php命令
修改完php.ini配置文件后,通过php --ini命令查看ini文件加载情况,如图为已加载:
[root@ux215 php7]# php --ini Configuration File (php.ini) Path: /usr/local/php7 Loaded Configuration File: /usr/local/php7/php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none) [root@ux215 php7]#注意
php.ini应该放在安装目录下,而不是安装目录的/etc/下,否则php可能找不到配置文件。
假设安装目录为/usr/local/php7/,那么php.ini应该放在这个目录下,而不是在/usr/local/php7/etc/下。
通过如下命令查看扩展包,确认包含pdo_uxsql和uxsql。
php -m -
创建用户
创建分组 www:
groupadd www创建用户www:
useradd -g www www -
php-fpm.conf和
www.confphp-fpm.conf和
www.conf这两个文档不做任何修改,只需要拷贝至特定目录下:cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
5.php脚本连接使用uxdb
-
启动uxdb
进入uxdb安装目录的bin目录下:
cd /home/uxdb/uxdbinstall/dbsql/bin初始化集群:
./initdb -W -D test启动数据库:
./ux_ctl -D test start -
启动php
执行如下命令启动php:
/usr/local/php7/sbin/php-fpm查看进程:
ps aux | grep php-fpm netstat -tln | grep 9000[root@ux215 php7]# /usr/local/php7/sbin/php-fpm [root@ux215 php7]# ps aux | grep php-fpm root 104595 0.0 0.2 218152 4284 ? Ss 16:49 0:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) www 104596 0.0 0.2 220236 4204 ? S 16:49 0:00 php-fpm: pool www www 104597 0.0 0.2 220236 4208 ? S 16:49 0:00 php-fpm: pool www root 104624 0.0 0.0 112712 968 pts/2 S+ 16:49 0:00 grep --color=auto php-fpm [root@ux215 php7]# netstat -tln | grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN -
脚本连接
在/usr/local/php7/bin目录下创建test.php脚本文件,文件内容如下:
<?php $host = "host=127.0.0.1"; $port = "port=5432"; $dbname = "dbname=UXDB"; $credentials = "user=UXDB password=1"; $db = ux_connect( "$host $port $dbname $credentials" ); if(!$db){ echo "Error : Unable to open database\n"; } else { echo "Opened database successfully\n"; } $sql =<<<EOF CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL); EOF; $ret = ux_query($db, $sql); if(!$ret){ echo ux_last_error($db); } else { echo "Table created successfully\n"; } $sql =<<<EOF INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); EOF; $ret = ux_query($db, $sql); if(!$ret){ echo ux_last_error($db); } else { echo "Records created successfully\n"; } $sql =<<<EOF SELECT * from COMPANY; EOF; $ret = ux_query($db, $sql); if(!$ret){ echo ux_last_error($db); exit; } while($row = ux_fetch_row($ret)){ echo "ID = ". $row[0] . "\n"; echo "NAME = ". $row[1] ."\n"; echo "ADDRESS = ". $row[3] ."\n"; echo "SALARY = ".$row[4] ."\n\n"; } echo "Operation done successfully\n"; ux_close($db); ?>执行如下命令,查看结果:
php test.php[uxdb@ux215 ~]$ php test.php Opened database successfully Table created successfully Records created successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully [uxdb@ux215 ~]$ -
uxdb验证
进入uxdb安装目录的bin目录下:
cd /home/uxdb/uxdbinstall/dbsql/bin连接数据库:
./uxsql查看company表中的内容:
select * from company ;uxsql (2.1.1.3) Type "help" for help. uxdb=# select * from company; id | name | age | address | salary ----+--------+-----+------------+-------- 1 | Paul | 32 | California | 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 (4 rows) uxdb=#