PHP7有未有你们说的那么帅爆了

2020-02-07 23:42栏目:bob体育平台
TAG:

本文实例讲述了PHP实现操作redis的封装类。分享给大家供大家参考,具体如下:

最近遇到一台装有Fedora Core 5.0 Linux操作系统的服务器,原来安装的Apache 2.0、PHP 5.1.2不支持GD库,PHP网页中用GD库生成的验证码图片、统计图都无法显示。我试过在此基础上安装PHP-gd-5.1.2-5.i386.rpm包后还是不行。于是,想到了先卸载已安装PHP的所有RPM包,再重装PHP的方法。于是动手尝试,问题解决。
  
  一、在/var目录下新建一个临时目录PHP,将Fedora Core 5.0第2~5张光盘RPM目录中,以“PHP-”开头的RPM文件复制到/var/PHP目录中;
  
  二、在终端中执行以下命令(红字部分):
  1、查看已安装的PHP有哪些RPM包:
  [root@smis ~]# rpm -qa|grep PHP
  PHP-pear-1.4.6-2
  PHP-5.1.2-5
  PHP-gd-5.1.2-5
  PHP-ldap-5.1.2-5
  
  2、卸载用上述命令查看后列出的RPM包:
  [root@smis ~]# rpm -e PHP-pear-1.4.6-2 PHP-5.1.2-5 PHP-gd-5.1.2-5 PHP-ldap-5.1.2-5
  
  3、进入/var/PHP目录:
  [root@smis ~]# cd /var/PHP
  
  4、列出/var/PHP目录下的文件:
  [root@smis PHP]# ls
  PHP-5.1.2-5.i386.rpm           PHP-ncurses-5.1.2-5.i386.rpm
  PHP-bcmath-5.1.2-5.i386.rpm    PHP-odbc-5.1.2-5.i386.rpm
  PHP-dba-5.1.2-5.i386.rpm       PHP-pdo-5.1.2-5.i386.rpm
  PHP-devel-5.1.2-5.i386.rpm     PHP-pear-1.4.6-2.noarch.rpm
  PHP-gd-5.1.2-5.i386.rpm        PHP-pgsql-5.1.2-5.i386.rpm
  PHP-imap-5.1.2-5.i386.rpm      PHP-snmp-5.1.2-5.i386.rpm
  PHP-ldap-5.1.2-5.i386.rpm      PHP-soap-5.1.2-5.i386.rpm
  PHP-mbstring-5.1.2-5.i386.rpm  PHP-xml-5.1.2-5.i386.rpm
  PHP-mysql-5.1.2-5.i386.rpm     PHP-xmlrpc-5.1.2-5.i386.rpm
  
  5、安装你需要的组件的RPM包:
  [root@smis PHP]# rpm -ivh PHP-5.1.2-5.i386.rpm PHP-ncurses-5.1.2-5.i386.rpm PHP-bcmath-5.1.2-5.i386.rpm PHP-odbc-5.1.2-5.i386.rpm PHP-dba-5.1.2-5.i386.rpm PHP-pdo-5.1.2-5.i386.rpm PHP-devel-5.1.2-5.i386.rpm PHP-pear-1.4.6-2.noarch.rpm PHP-gd-5.1.2-5.i386.rpm PHP-pgsql-5.1.2-5.i386.rpm PHP-snmp-5.1.2-5.i386.rpm PHP-ldap-5.1.2-5.i386.rpm PHP-soap-5.1.2-5.i386.rpm PHP-mbstring-5.1.2-5.i386.rpm PHP-xml-5.1.2-5.i386.rpm PHP-mysql-5.1.2-5.i386.rpm PHP-xmlrpc-5.1.2-5.i386.rpm
  warning: PHP-5.1.2-5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
  Preparing...                ########################################### [100%]
     1:PHP                    ########################################### [  6%]
     2:PHP-pdo                ########################################### [ 12%]
     3:PHP-ncurses            ########################################### [ 18%]
     4:PHP-bcmath             ########################################### [ 24%]
     5:PHP-odbc               ########################################### [ 29%]
     6:PHP-dba                ########################################### [ 35%]
     7:PHP-devel              ########################################### [ 41%]
     8:PHP-pear               ########################################### [ 47%]
     9:PHP-gd                 ########################################### [ 53%]
    10:PHP-pgsql              ########################################### [ 59%]
    11:PHP-snmp               ########################################### [ 65%]
    12:PHP-ldap               ########################################### [ 71%]
    13:PHP-soap               ########################################### [ 76%]
    14:PHP-mbstring           ########################################### [ 82%]
    15:PHP-xml                ########################################### [ 88%]
    16:PHP-mysql              ########################################### [ 94%]
    17:PHP-xmlrpc             ########################################### [100%]
  
  6、重新启动Apache服务:
  [root@smis PHP]# service httpd restart
  停止 httpd:                                               [确定]
  启动 httpd:                                               [确定]
  
  7、完毕。

男人不能快,但程序一定要快。PHP7到底快不快,我们拭目以待。

null,// 只支持一台 Master 'slave'=>array; /** * 构造函数 * * @param boolean $isUseCluster 是否采用 M/S 方案 */ public function __construct{ $this->_isUseCluster = $isUseCluster; } /** * 连接服务器,注意:这里使用长连接,提高效率,但不会自动关闭 * * @param array $config Redis服务器配置 * @param boolean $isMaster 当前添加的服务器是否为 Master 服务器 * @return boolean */ public function connect($config=array('host'=>'127.0.0.1','port'=>6379), $isMaster=true){ // default port if(!isset{ $config['port'] = 6379; } // 设置 Master 连接 if{ $this->_linkHandle['master'] = new Redis(); $ret = $this->_linkHandle['master']->pconnect($config['host'],$config['port']); }else{ // 多个 Slave 连接 $this->_linkHandle['slave'][$this->_sn] = new Redis(); $ret = $this->_linkHandle['slave'][$this->_sn]->pconnect($config['host'],$config['port']); ++$this->_sn; } return $ret; } /** * 关闭连接 * * @param int $flag 关闭选择 0:关闭 Master 1:关闭 Slave 2:关闭所有 * @return boolean */ public function close{ switch{ // 关闭 Master case 0: $this->getRedis; break; // 关闭 Slave case 1: for($i=0; $i_sn; ++$i){ $this->_linkHandle['slave'][$i]->close(); } break; // 关闭所有 case 1: $this->getRedis; for($i=0; $i_sn; ++$i){ $this->_linkHandle['slave'][$i]->close(); } break; } return true; } /** * 得到 Redis 原始对象可以有更多的操作 * * @param boolean $isMaster 返回服务器的类型 true:返回Master false:返回Slave * @param boolean $slaveOne 返回的Slave选择 true:负载均衡随机返回一个Slave选择 false:返回所有的Slave选择 * @return redis object */ public function getRedis($isMaster=true,$slaveOne=true){ // 只返回 Master if{ return $this->_linkHandle['master']; }else{ return $slaveOne ? $this->_getSlaveRedis() : $this->_linkHandle['slave']; } } /** * 写缓存 * * @param string $key 组存KEY * @param string $value 缓存值 * @param int $expire 过期时间, 0:表示无过期时间 */ public function set($key, $value, $expire=0){ // 永不超时 if{ $ret = $this->getRedis; }else{ $ret = $this->getRedis()->setex($key, $expire, $value); } return $ret; } /** * 读缓存 * * @param string $key 缓存KEY,支持一次取多个 $key = array * @return string || boolean 失败返回 false, 成功返回字符串 */ public function get{ // 是否一次取多个值 $func = is_array ? 'mGet' : 'get'; // 没有使用M/S if(! $this->_isUseCluster){ return $this->getRedis; } // 使用了 M/S return $this->_getSlaveRedis; }/* // magic function public function __call{ return call_user_func; }*/ /** * 条件形式设置缓存,如果 key 不存时就设置,存在时设置失败 * * @param string $key 缓存KEY * @param string $value 缓存值 * @return boolean */ public function setnx{ return $this->getRedis()->setnx; } /** * 删除缓存 * * @param string || array $key 缓存KEY,支持单个健:"key1" 或多个健:array * @return int 删除的健的数量 */ public function remove{ // $key => "key1" || array return $this->getRedis; } /** * 值加加操作,类似 ++$i ,如果 key 不存在时自动设置为 0 后进行加加操作 * * @param string $key 缓存KEY * @param int $default 操作时的默认值 * @return int 操作后的值 */ public function incr{ if{ return $this->getRedis; }else{ return $this->getRedis()->incrBy; } } /** * 值减减操作,类似 --$i ,如果 key 不存在时自动设置为 0 后进行减减操作 * * @param string $key 缓存KEY * @param int $default 操作时的默认值 * @return int 操作后的值 */ public function decr{ if{ return $this->getRedis; }else{ return $this->getRedis()->decrBy; } } /** * 添空当前数据库 * * @return boolean */ public function clear(){ return $this->getRedis; } /* =================== 以下私有方法 =================== */ /** * 随机 HASH 得到 Redis Slave 服务器句柄 * * @return redis object */ private function _getSlaveRedis(){ // 就一台 Slave 机直接返回 if{ return $this->_linkHandle['slave'][0]; } // 随机 Hash 得到 Slave 的句柄 $hash = $this->_hashId, $this->_sn); return $this->_linkHandle['slave'][$hash]; } /** * 根据ID得到 hash 后 0~m-1 之间的值 * * @param string $id * @param int $m * @return int */ private function _hashId { //把字符串K转换为 0~m-1 之间的一个值作为对应记录的散列地址 $k = md5; $b = bin2hex; $h = 0; for { //相加模式HASH $h += substr; } $hash = %$m; return $hash; } /** * lpush */ public function lpush{ return $this->getRedis; } /** * add lpop */ public function lpop{ return $this->getRedis; } /** * lrange */ public function lrange{ return $this->getRedis()->lrange; } /** * set hash opeation */ public function hset{ if{ return $this->getRedis()->hset($name,$key,serialize; } return $this->getRedis()->hset; } /** * get hash opeation */ public function hget($name,$key = null,$serialize=true){ if{ $row = $this->getRedis; if{ unserialize; } return $row; } return $this->getRedis; } /** * delete hash opeation */ public function hdel{ if{ return $this->getRedis; } return $this->getRedis; } /** * Transaction start */ public function multi(){ return $this->getRedis; } /** * Transaction send */ public function exec(){ return $this->getRedis; }}// End Class// ================= TEST DEMO =================// 只有一台 Redis 的应用$redis = new RedisCluster();$redis->connect(array('host'=>'127.0.0.1','port'=>6379));//*$cron_id = 10001;$CRON_KEY = 'CRON_LIST'; //$PHONE_KEY = 'PHONE_LIST:'.$cron_id;////cron info$cron = $redis->hget;if{ $cron = array('id'=>10,'name'=>'jackluo');//mysql data $redis->hset($CRON_KEY,$cron_id,$cron); // set redis }//phone list$phone_list = $redis->lrange;print_r;if{ $phone_list =explode(',','13228191831,18608041585'); //mysql data //join list if{ $redis->multi(); foreach ($phone_list as $phone) { $redis->lpush; } $redis->exec(); }}print_r;/*$list = $redis->hget;var_dump;*///*///$redis->set;/* $redis->lpush; $redis->lpush; $redis->lpush; $list = $redis->lrange; print_r; $lpop = $redis->lpop; print_r; $lpop = $redis->lpop; print_r; $lpop = $redis->lpop; print_r;*/// var_dump;

PHP7正式发布到现在已经一年半了,刚出道就号称比旧版本快了几倍,各种开源框架或系统运行在PHP7上速度效率提高了几倍,反正不管是媒体还是开发者都在煽风点火,不,应该是赞不绝口。我就静静看你们装逼,不说话。

希望本文所述对大家PHP程序设计有所帮助。

一般手机系统升级我是跑最后的,因为不愿意踩坑,毕竟iOS和Android这种系统都会出现bug,何况世界上被人黑的最多的语言。

今日时机已到,看看PHP7有没有传说的那么王炸。

已经有最新PHP7的最新版本,大家可自行下载。为了测试PHP5和PHP7(PHP6已被放弃,心疼1s)的性能,我在不同的目录安装了两个php版本。

安装过程就略过了,无论源码安装还是包管理工具安装,记得自己的路径即可。

PHP7:

# /usr/local/php7/bin/php -vPHP 7.1.5  (built: May 13 2017 23:36:41) Copyright  1997-2017 The PHP GroupZend Engine v3.1.0, Copyright  1998-2017 Zend Technologies

PHP5:

# /usr/bin/php -vPHP 5.6.30  (built: Jan 19 2017 22:31:39) Copyright  1997-2016 The PHP GroupZend Engine v2.6.0, Copyright  1998-2016 Zend Technologies

环境说明:为了保证最佳的测试效果,本次测试在直接在生产环境进行,更逼近真实情况。操作系统:CentOS 7.2 64位基础配置:1核 1GB 1Mbps主机品牌:腾讯云

vim test.php

$arr = array();for ($i = 0; $i < 500000; $i++) { $arr[$i] = $i;}$tmp = array();foreach ($arr as $i) { if ($i % 2 == 0) { $is_exists = array_key_exists; if ($is_exists) { array_push; } }}

PHP5版本测试:

time /usr/bin/php test.php real 0m0.301suser 0m0.239ssys 0m0.050s--------------------------time /usr/bin/php test.phpreal 0m0.310suser 0m0.241ssys 0m0.054s--------------------------time /usr/bin/php test.phpreal 0m0.289suser 0m0.238ssys 0m0.050s

PHP7版本测试:

time /usr/local/php7/bin/php test.phpreal 0m0.087suser 0m0.063ssys 0m0.024s-------------------------------------time /usr/local/php7/bin/php test.phpreal 0m0.106suser 0m0.073ssys 0m0.033s--------------------------------------time /usr/local/php7/bin/php test.phpreal 0m0.083suser 0m0.061ssys 0m0.022s

通过数据可以看出来,单纯的php脚本测试,可以看出php7性能提升了3到4倍。

首先我们创建一个用户表:

Table: test_userCreate Table: CREATE TABLE `test_user` ( `uid` int NOT NULL AUTO_INCREMENT, `name` char NOT NULL DEFAULT '', PRIMARY KEY  ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

给test_user表插入一条数据:

insert into test_user  values ;MariaDB [test]> select * from test_user;+-----+------+| uid | name |+-----+------+| 1 | dada |+-----+------+

创建数据库测试脚本test_db.php,确保你的两个PHP版本都安装了PDO扩展。

/usr/bin/php -m|grep pdopdo_mysqlpdo_sqlite/usr/local/php7/bin/php -m|grep pdopdo_mysqlpdo_sqlite

我的两个PHP版本已经安装了PDO(不要再使用php_mysql扩展,已经过时了,PHP7已经完全抛弃,mysqli也不建议使用)。

接下来我们通过PDO编写脚本,测试select执行50万次的性能对比:

$host = "yourHost";$user = "yourUser";$pass = "yourPass";$db = "test";$port = 3306;try{ $dbh = new PDO("mysql:host=$host;dbname=$db", $user, $pass); echo "Connected<p>";}catch (Exception $e){ echo "Unable to connect: " . $e->getMessage() ."<p>";}$sql = "select SQL_NO_CACHE * from test_user;";$tmp = array();for ($i=1; $i<=500000; $i++) { $ret = $dbh->query; foreach ($ret as $row) { $tmp['id'] = $row['id']; $tmp['name'] = $row['name']; }}

PHP5测试test_db.php:

版权声明:本文由bob体育app发布于bob体育平台,转载请注明出处:PHP7有未有你们说的那么帅爆了