精华内容
下载资源
问答
  • PHP5+MySQL网站开发实例精讲 源码

    千次下载 热门讨论 2013-04-11 10:37:05
    PHP5+MySQL 网站开发实例精讲》全面、详细地介绍了基于PHP和MySQL的动态网络开发技术的原理和基础编程知识。全书共分为四篇18章,以“PHP基础知识→MySQL数据库基础知识→PHP高级开发→常用模块编程与综合案例开发...
  • php7和php5对比

    万次阅读 多人点赞 2018-07-31 22:35:23
    PHP7来一发 PHP7正式发布到现在已经一年半了,刚出道就号称比旧版本快了几倍,各种开源框架或系统运行在PHP7上速度效率提高了几倍,反正不管是媒体还是开发者都在煽风点火,不,应该是赞不绝口。 我就静静看你们...

    PHP7来一发

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

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

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

    安装两个PHP版本

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

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

    PHP7:

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

    PHP5:

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

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

    PHP7和PHP5的对决

    1. 纯php脚本测试

    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($i, $arr);
            if ($is_exists) {
               array_push($tmp, $i);
            }
        }
    }
    

    PHP5版本测试:

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

    PHP7版本测试:

    time /usr/local/php7/bin/php test.php
    
    real    0m0.087s
    user    0m0.063s
    sys     0m0.024s
    -------------------------------------
    time /usr/local/php7/bin/php test.php
    
    real    0m0.106s
    user    0m0.073s
    sys     0m0.033s
    --------------------------------------
    time /usr/local/php7/bin/php test.php
    
    real    0m0.083s
    user    0m0.061s
    sys     0m0.022s
    

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

    2.php数据库操作测试

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

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

    给test_user表插入一条数据:

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

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

    /usr/bin/php -m|grep pdo
    pdo_mysql
    pdo_sqlite
    
    /usr/local/php7/bin/php -m|grep pdo
    pdo_mysql
    pdo_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($sql);  
      foreach ($ret as $row) {
        $tmp['id']   = $row['id'];
        $tmp['name'] = $row['name'];
      }
    }
    

    PHP5测试test_db.php:

    time /usr/bin/php test_db.php
    real    0m48.396s
    user    0m11.149s  
    sys     0m3.998s
    
    real    0m51.447s
    user    0m11.800s
    sys     0m4.395s
    
    real    0m51.517s
    user    0m11.733s
    sys     0m4.439s
    
    

    PHP7测试test_db.php:

    real    0m47.900s
    user    0m9.875s
    sys     0m4.130s
    
    real    0m46.977s
    user    0m9.760s
    sys     0m3.983s
    
    real    0m50.010s
    user    0m10.268s
    sys     0m4.307s
    

    这次脚本执行了50w次查询,user执行时间PHP7执行的脚本几乎都比PHP5要少一秒!是少一秒不是一毫秒。

    3.PHP框架测试

    • thinkphp

    国内肯定是首选thinkphp框架,选择最新的thinkphp5。我这里直接在官网下载的thinkphp5.0.9版本。

    • (一)框架入口测试

    PHP5下的测试:

    time /usr/bin/php ./public/index.php
    real    0m0.036s
    user    0m0.026s
    sys     0m0.010s
    
    real    0m0.038s
    user    0m0.026s
    sys     0m0.012s
    
    real    0m0.041s
    user    0m0.032s
    sys     0m0.009s
    

    PHP7下的测试:

    time /usr/local/php7/bin/php ./public/index.php
    real    0m0.027s
    user    0m0.021s
    sys     0m0.005s
    
    real    0m0.027s
    user    0m0.018s
    sys     0m0.009s
    
    real    0m0.025s
    user    0m0.023s
    sys     0m0.002s
    

    在入口测试下,可以看到PHP和PHP7没有太大的区别,但PHP7还是稍微快一点。

    • (二)框架逻辑测试
      在框架入口复用第一步的逻辑:
    <?php
    namespace app\index\controller;
    
    class Index
    {
        public function index()
        {
           $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($i, $arr);
                   if ($is_exists) {
                       array_push($tmp, $i);
                   }
              }
          }
        }
    }
    

    PHP5版本:

    time /usr/bin/php ./public/index.php
    real    0m0.538s
    user    0m0.463s
    sys     0m0.072s
    
    real    0m0.454s
    user    0m0.386s
    sys     0m0.065s
    
    real    0m0.387s
    user    0m0.331s
    sys     0m0.055s
    

    PHP7版本:

    time /usr/local/php7/bin/php ./public/index.php
    real    0m0.150s
    user    0m0.123s
    sys     0m0.024s
    
    real    0m0.137s
    user    0m0.105s
    sys     0m0.031s
    
    real    0m0.123s
    user    0m0.096s
    sys     0m0.026s
    

    在thinkphp框架中使用PHP7版本,性能提升大约是PHP5版本的4倍!

    • laravel

    然后我们测试下现在最火热的PHP艺术家的框架。

    • (一) 框架入口测试
      PHP5版本:
    time /usr/bin/php ./public/index.php
    
    real    0m0.104s
    user    0m0.081s
    sys     0m0.022s
    
    real    0m0.148s
    user    0m0.122s
    sys     0m0.025s
    
    real    0m0.122s
    user    0m0.100s
    sys     0m0.021s
    

    PHP版本

    time /usr/local/php7/bin/php ./public/index.php
    
    real    0m0.079s
    user    0m0.064s
    sys     0m0.015s
    
    real    0m0.081s
    user    0m0.067s
    sys     0m0.014s
    
    real    0m0.067s
    user    0m0.054s
    sys     0m0.013s
    

    我们可以看到laravel的框架入口测试中,PHP5和PHP7的表现差异不大,但即使PHP5最高快的0.081s也比PHP7版本最慢的0.067s要慢。所以PHP7还是更胜一筹。

    • (二)框架逻辑测试
      尝试增加一点逻辑,和thinkphp一样,复用测试逻辑。
      首先修改laravel路由,直接调用UserController的index方法:
    Route::get('/', 'UserController@index');
    

    在index方法中写入测试逻辑:

    public function index()
    {
          $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($i, $arr);
                   if ($is_exists) {
                       array_push($tmp, $i);
                   }
              }
          }
    }
    

    PHP5版本

    time /usr/bin/php ./public/index.php
    real    0m0.510s
    user    0m0.377s
    sys     0m0.079s
    
    real    0m0.627s
    user    0m0.447s
    sys     0m0.091s
    
    real    0m0.519s
    user    0m0.436s
    sys     0m0.079s
    

    PHP7版本

    time /usr/local/php7/bin/php ./public/index.php
    
    real    0m0.201s
    user    0m0.167s
    sys     0m0.032s
    
    real    0m0.216s
    user    0m0.174s
    sys     0m0.040s
    
    real    0m0.169s
    user    0m0.134s
    sys     0m0.034s
    

    PHP7性能提升了3到4倍

    压力测试

    1000个请求,50个并发

    • PHP5版本:

     

    image.png

     

    三次样本如下:

     

    image.png

     

    image.png

     

    image.png

    • PHP7版本:

       

       

      1

     

    2

     

    3

     

    4

    通过压力测试,在PHP7版本下,可以看到单个请求时间和请求完成时间以及每个连接请求实际运行时间的平均值都耗时更少,最重要的性能指标QPS也是高于PHP5的版本。

    PHP7的opcache性能测试

    开启opcache:

     

    image.png

     

    image.png

     

    image.png

     

    image.png

    卧槽!开启了opcache的PHP7果然是要起飞的节奏,相比未开启的PHP7性能提升了十几倍,相比PHP5提升了将进20倍!问你怕不怕!

    PHP脚本测试数据如下:

     

    PHP7 vs PHP5.png

     

    纯php脚本测试过程,PHP7性能大约是PHP5的3到4倍。

    压力测试数据如下:

     

     

    PHP5 vs PHP7 vs PHP7+OPCACHE.png

    结论:

    本文对PHP7和PHP5进行简单对比,性能确实有3到4倍提升,无论是在php纯脚本中,还是在框架中,PHP7高性能的表现都是一致的。

    PHP7很快,PHP7+OpCache飞快,PHP7确实牛逼,PHP的新时代已来临,赶紧用起来!

    展开全文
  • php7和php5区别

    万次阅读 多人点赞 2018-04-03 11:30:25
    1、php标量类型和返回类型声明 #主要分为两种模式,强制性模式和严格模式 declare(strict_types=1) #1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。 2、NULL合并运算符 $site = is...

    1、php标量类型和返回类型声明

    #主要分为两种模式,强制性模式和严格模式
    declare(strict_types=1)
    #1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。
    

    2、NULL合并运算符

    $site = isset($_GET['site']) ? $_GET['site'] : 'wo';
    #简写成
    $site = $_GET['site'] ??'wo';
    

    3、组合预算符

    // 整型比较
    print( 1 <=> 1);print(PHP_EOL);
    print( 1 <=> 2);print(PHP_EOL);
    print( 2 <=> 1);print(PHP_EOL);
    print(PHP_EOL); // PHP_EOL 为换行符
    //结果:
    0
    -1
    1
    
    

    4、常量数组

    // 使用 define 函数来定义数组
    define('sites', [
       'Google',
       'Jser',
       'Taobao'
    ]);
    
    print(sites[1]);
    

    5、匿名类

    interface Logger { 
       public function log(string $msg); 
    } 
    
    class Application { 
       private $logger; 
    
       public function getLogger(): Logger { 
          return $this->logger; 
       } 
    
       public function setLogger(Logger $logger) { 
          $this->logger = $logger; 
       }   
    } 
    
    $app = new Application; 
    // 使用 new class 创建匿名类 
    $app->setLogger(new class implements Logger { 
       public function log(string $msg) { 
          print($msg); 
       } 
    }); 
    
    $app->getLogger()->log("我的第一条日志"); 
    

    6、Closure::call()方法增加,意思向类绑定个匿名函数

    <?php 
    class A { 
        private $x = 1; 
    } 
    
    // PHP 7 之前版本定义闭包函数代码 
    $getXCB = function() { 
        return $this->x; 
    }; 
    
    // 闭包函数绑定到类 A 上 
    $getX = $getXCB->bindTo(new A, 'A');  
    
    echo $getX(); 
    print(PHP_EOL); 
    
    // PHP 7+ 代码 
    $getX = function() { 
        return $this->x; 
    }; 
    echo $getX->call(new A); 
    ?>
    

    7、CSPRNG(伪随机数产生器)。

    PHP 7 通过引入几个 CSPRNG 函数提供一种简单的机制来生成密码学上强壮的随机数。
    
    random_bytes() - 加密生存被保护的伪随机字符串。
    
    random_int() - 加密生存被保护的伪随机整数。
    

    8、异常

    PHP 7 异常用于向下兼容及增强旧的assert()函数。
    
    

    9、use 语句改变

    #可以导入同一个namespace下的类简写
    use some\namespace\{ClassA, ClassB, ClassC as C};
    

    10、Session 选项

    1.session_start()可以定义数组
    <?php
    session_start(&#91;
       'cache_limiter' => 'private',
       'read_and_close' => true,
    ]);
    ?>
    2.引入了一个新的php.ini设置(session.lazy_write),默认情况下设置为 true,意味着session数据只在发生变化时才写入。
    

    11、PHP 7 移除的扩展

    ereg
    
    mssql
    
    mysql
    
    sybase_ct
    
    
    

    为什么 PHP7 比 PHP5 性能提升了?

    1、变量存储字节减小,减少内存占用,提升变量操作速度

    2、改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率

    3、改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率

    推荐阅读:

    黑客常用渗透利器
    MYSQL各类总结
    常用运维知识

    参考:

    关于php7新特性官网介绍

    展开全文
  • Centos下PHP5升级PHP7

    万次阅读 2017-12-22 10:35:09
    首先下载PHP7安装包,使用wget http://am1.php.net/distributions/php-7.2.0.tar.bz2,或者直接访问下载,然后ftp到linux服务器 解压压缩包,tar –xjf php-7.0.2.tar.bz2 进入文件夹,cd php-7.0.2 ,安装必要的...
    1. 首先下载PHP7安装包,使用wget http://am1.php.net/distributions/php-7.2.0.tar.bz2,或者直接访问下载,然后ftp到linux服务器
    2. 解压压缩包,tar –xjf php-7.0.2.tar.bz2
    3. 进入文件夹,cd php-7.0.2 ,安装必要的依赖工具,
    yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel

    这里主要是升级,一般在php5都安装了,所以这一步可以省略
    4. 安装几个依赖(必须安装,否则后面无法生成apache所用的libphp7.so文件)

    yum -y install perl
    yum –y install perl-devel
    yum -y install httpd-devel
    find /usr  -name apxs 取得所用路径,后面编译时用到。

    5.准备编译工作

    ./configure --prefix=/usr/local/php7 --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath -enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip --enable-pcntl --with-curl --with-fpm-user=nginx --enable-ftp --enable-session --enable-xml --with-apxs2=/usr/bin/apxs

    **注意:其中的 –enable-gd-native-ttf 可以不安装,处理图形用的,如果有需求可以以后以扩展形式装
    –with-apxs2=/usr/bin/apxs 后面的路径改为第4步得到的路径
    –prefix=/usr/local/php7 单独安装在php7的文件夹,避免和php5冲突**
    6.编译
    make
    这一步容易出现很多问题,
    如果遇到譬如:undefine 。。。。
    /ext/cli./php …
    Openssl
    等等错误,而且确定安装了相关的模块,则一般清除之前的编译,删除相关文件后重新编译

    make clean
    rm –rf /usr/local/php7

    一般都可以解决问题。
    其他的错误可以参照这篇博客查阅这篇博客:
    http://www.cnblogs.com/sweetXiaoma/p/5855732.html
    http://www.linuxidc.com/Linux/2017-08/146220.htm
    关键还是自行解决,介于linux发行版太多,而且每台服务器的环境配置都不同,所以会遇到很多奇葩的问题。
    7.安装
    Make install
    8.准备配置文件

    cp php.ini-developement /etc/php.ini   //根据实际情况,可以使用production或者development默认配置
    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

    9.需要修改apache的配置文件
    Vi /etc/httpd/conf/httpd.conf 找到LoadModule php7_module modules/libphp7.so,如果没有手动加上,
    将LoadModule php5_module modules/libphp5.so注释掉
    cp /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf_5
    Vi /etc/httpd/conf.d/php.conf
    改为下面这样:(将涉及到php5的注释掉,改为php7相关模块)

    <IfModule prefork.c>
      LoadModule php7_module modules/libphp7.so
    </IfModule>
    
    <Files ".user.ini">
        <IfModule mod_authz_core.c>
            Require all denied
        </IfModule>
        <IfModule !mod_authz_core.c>
            Order allow,deny
            Deny from all
            Satisfy All
    </IfModule>
    </Files>
    DirectoryIndex index.php
    # mod_php options
    <IfModule  mod_php7.c>
        <FilesMatch \.php$>
            SetHandler application/x-httpd-php
    </FilesMatch>
        php_value session.save_handler "files"
        php_value session.save_path    "/var/lib/php/session"
        php_value soap.wsdl_cache_dir  "/var/lib/php/wsdlcache"
    </IfModule>

    10.重启apache服务器
    service httpd restart

    展开全文
  • php7和PHP5对比的新特性和性能优化

    万次阅读 2018-05-22 16:37:40
    1)在 PHP5中,从 php 脚本到 opcodes 的执行的过程是: Lexing:词法扫描分析,将源文件转换成 token 流; Parsing:语法分析,在此阶段生成 op arrays。 2)PHP7 中在语法分析阶段不再直接生成 op arrays,...

    1  抽象语法树( AST)

       1)在 PHP5中,从 php 脚本到 opcodes 的执行的过程是:

    1. Lexing:词法扫描分析,将源文件转换成 token 流;
    2. Parsing:语法分析,在此阶段生成 op arrays。

    2)PHP7 中在语法分析阶段不再直接生成 op arrays,而是先生成 AST,所以过程多了一步:

    1. Lexing:词法扫描分析,将源文件转换成 token 流;
    2. Parsing:语法分析,从 token 流生成抽象语法树;
    3. Compilation:从抽象语法树生成 op arrays。

    添加了抽象语法树:内存的使用增加了,但是执行时间上却有所降低

    AST在PHP编译过程作为一个中间件的角色,替换原来直接从解释器吐出opcode的方式,让解释器(parser)和编译器(compliler)解耦,可以减少一些Hack代码,同时,让实现更容易理解和可维护

    2 Natice TLS

     

    PHP在多线程模式下,需要解决“线程安全”(TS,Thread Safe)的问题,因为线程是共享进程的内存空间的,所以每个线程本身需要通过某种方式,构建私有的空间来保存自己的私有数据,避免和其他线程相互污染。

    而PHP5采用的方式,就是维护一个全局大数组,为每一个线程分配一份独立的存储空间,线程通过各自拥有的key值来访问这个全局数据组。而这个独有的key值在PHP5中需要传递给每一个需要用到全局变量的函数,PHP7认为这种传递的方式并不友好,并且存在一些问题。因而,尝试采用一个全局的线程特定变量来保存这个key值。

    3 指定参数 返回值类型

    PHP语言一个非常重要的特点就是“弱类型”,它让PHP的程序变得非常容易编写.

    PHP7可选的方式支持类型定义,除此之外,还引入了一个开关指令declare(strict_type=1);,当这个指令一旦开启,将会强制当前文件下的程序遵循严格的函数传参类型和返回类型。

    4 zval 结构的变化

     

    在PHP5的时候, zval的定义如下:

     
    1. struct _zval_struct {
    2.      union {
    3.           long lval;
    4.           double dval;
    5.           struct {
    6.                char *val;
    7.                int len;
    8.           } str;
    9.           HashTable *ht;
    10.           zend_object_value obj;
    11.           zend_ast *ast;
    12.      } value;
    13.      zend_uint refcount__gc;
    14.      zend_uchar type;
    15.      zend_uchar is_ref__gc;
    16. };

    首先这个结构体的大小是(在64位系统)24个字节, 我们仔细看这个zval.value联合体, 其中zend_object_value是最大的长板, 它导致整个value需要16个字节, 这个应该是很容易可以优化掉的, 比如把它挪出来, 用个指针代替,因为毕竟IS_OBJECT也不是最最常用的类型.

    第二, 这个结构体的每一个字段都有明确的含义定义, 没有预留任何的自定义字段, 导致在PHP5时代做很多的优化的时候, 需要存储一些和zval相关的信息的时候, 不得不采用其他结构体映射, 或者外部包装后打补丁的方式来扩充zval, 比如5.3的时候新引入专门解决循环引用的GC, 它不得采用如下的比较hack的做法

    第三, PHP的zval大部分都是按值传递, 写时拷贝的值, 但是有俩个例外, 就是对象和资源, 他们永远都是按引用传递, 这样就造成一个问题, 对象和资源在除了zval中的引用计数以外, 还需要一个全局的引用计数, 这样才能保证内存可以回收. 所以在PHP5的时代, 以对象为例, 它有俩套引用计数, 一个是zval中的, 另外一个是obj自身的计数:

     

    第四, 我们知道PHP中, 大量的计算都是面向字符串的, 然而因为引用计数是作用在zval的, 那么就会导致如果要拷贝一个字符串类型的zval, 我们别无他法只能复制这个字符串. 当我们把一个zval的字符串作为key添加到一个数组里的时候, 我们别无他法只能复制这个字符串. 虽然在PHP5.4的时候, 我们引入了INTERNED STRING, 但是还是不能根本解决这个问题.

    还比如, PHP中大量的结构体都是基于Hashtable实现的, 增删改查Hashtable的操作占据了大量的CPU时间, 而字符串要查找首先要求它的Hash值, 理论上我们完全可以把一个字符串的Hash值计算好以后, 就存下来, 避免再次计算等等

    第五, 这个是关于引用的, PHP5的时代, 我们采用写时分离, 但是结合到引用这里就有了一个经典的性能问题:

    第六, 也是最重要的一个, 为什么说它重要呢? 因为这点促成了很大的性能提升, 我们习惯了在PHP5的时代调用MAKE_STD_ZVAL在堆内存上分配一个zval, 然后对他进行操作, 最后呢通过RETURN_ZVAL把这个zval的值”copy”给return_value, 然后又销毁了这个zval, 比如pathinfo这个函数:

     

    5 异常处理

    PHP 5 的 try ... catch ... finally 无法处理传统错误,如果需要,你通常会考虑用 set_error_handler() 来 Hack 一下。但是仍有很多错误类型是 set_error_handler() 捕捉不到的

     PHP 7引入 Throwable 接口,错误及异常都实现了 Throwable,无法直接实现 Throwable,但可以扩展 \Exception 和 \Error 类。可以用 Throwable 捕捉异常跟错误。\Exception 是所有PHP及用户异常的基类;\Error 是所有内部PHP错误的基类。

    $name = "Tony";

    try {

        $name = $name->method();

    } catch (\Error $e) {

        echo "出错消息 --- ", $e->getMessage(), PHP_EOL;

    }

     

    try {

        $name = $name->method();

    } catch (\Throwable $e) {

        echo "出错消息 --- ", $e->getMessage(), PHP_EOL;

    }

     

    try {

        intdiv(5, 0);

    } catch (\DivisionByZeroError $e) {

        echo "出错消息 --- ", $e->getMessage(), PHP_EOL;

    }

     

    6 hashtable 的变化

    7 执行器

    8 新的参数解析方式

    PHP5  对应的参数解析 zend_parse_parament,

    PHP7对应的参数解析:fast_zpp  

    展开全文
  • PHP5到PHP7的注意事项

    万次阅读 2016-12-09 16:32:50
    并且,从今年8月7日开始发行PHP7.0的beta3 即将发布的PHP7 的RC1版本。脚步越来越近,有更多的人来学习PHP7的新特性。PHP学院将对PHP7的新特性进行连载。 并且,现在国内PHPer中喜欢尝新鲜的
  • 如何切换apache中的php5与php7

    万次阅读 2017-09-22 23:04:46
    1 查询官网打开官网,找到FAQhttps://...to switch Version of PHP do? Answer to the Shortcut -> PHP Version Switch switch PHP Version needed immediately.2 改变php版本在win10的开始菜单中找到 php v
  • 一、背景 早上突然发现服务器这边...connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: xxx, server: xxx, request: "GET / HTTP/1...
  • PHP5升级到PHP7注意点(windows环境)

    千次阅读 2016-05-14 16:37:50
    windows环境下将php5升级到php7
  • Apache LoadModule php5_module 配置

    千次阅读 2014-09-17 19:17:17
     LoadModule php5_module “D:/Program Files/PHP/php-5.3.29-Win32-VC9-x86/php5apache2_2.dll”  PHPIniDir “D:/Program Files/PHP/php-5.3.29-Win32-VC9-x86”  AddType application/x-httpd-php .php ....
  • Cannot load php5apache2_4.dll into server解决办法;

    万次阅读 多人点赞 2015-11-01 14:05:58
    我们在安装好Apache服务器,一开始正常,但安装PHP配置完成之后,再次启动apache的时候出现了错误 the requested operation has failed; Apache服务无法启动,查看Apache错误日志,有类似下面这些内容: httpd.exe: ...
  • 网上的教程,的确先安装Apache,在安装php,不过php还是下绿色版的好,在修改httpd.conf文件时,大多数人都 是:LoadModule php5_module c:\Program Files\php\php5apache2.dll,都是apache restart出错。...
  • apache配置 php中没有php5apache2_4.dll

    千次阅读 2014-06-11 11:16:52
    今天,在win7系统下安装Apache+php+MySQL时,终于体会到了版本多也...在给apache配置php的过程中,如果php安装目录里没有php5apache2_2.dll,一定是下载的版本不对。 php 5.5有好几个版本: VC11 x86 Non Thread
  • 2、安装php和php5-fpm模块 sudo apt-get install nginx php5-fpm 启动nginx,并访问127.0.0.1: /etc/init.d/nginx start 如下图: 3、编辑配置文件 sudo vim /etc/nginx/site-availabl
  • Ubuntu16.04 php5安装失败解决方案

    万次阅读 2016-05-12 00:05:13
    Ubuntu16.04 php5安装失败解决方案笔者在Ubuntu16.04桌面系统安装php5时,提示Package php5 have no installation candidate,在...
  • PHP5中PDO的简单使用

    万次阅读 2012-05-06 10:27:08
    关键字:PHP PHP5 PDO 数据库抽象类 PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的...
  • 我所用的环境和版本: Windows XP ...php-5.2.17-Win32-VC6-x86.msi  (选择模块:Apache 2.2.x Module) Win32 Binary without crypto (no mod_ssl) (MSI Installer): httpd-2.2.22-
  • 在给apache配置php的过程中,如果php安装目录里没有php5apache2_2.dll,一定是下载的版本不对。 php 5.3.4有v9版和v6好几个版本 网站左边有几段文字: which version do i choose? if you are using php with ...
  • 什么是phpphp是什么?

    万次阅读 多人点赞 2019-04-10 10:26:45
    什么是php? PHPPHP Hypertext Preprocessor(超文本与处理器)的首字母缩写。这种方法叫做递归缩写。 ​ php有多种用途,特别是web网站开发。快速,灵活,实用使得php能够更好的开发任何网站。 ​ PHP 是一种 ...
  • PHP环境搭建

    千人学习 2017-02-15 20:53:21
    本课程旨在讲解LAMP平台的搭建与部署,学完本课程,PHP相关学习人员能够独立的搭建PHP的运行及开发环境LAMP平台,学会开发中常用的SSH工具XSHELL及FTP工具filezilla等工具的使用及作用,掌握部分linux命令。
  • 无论是IIS 还是 Apache, 在启动PHP的时候,默认都从系统变量"C:\Windows"这个目录中寻找。 如果要在系统中同时使用IIS和... 例如: 1 LoadModule php5_module "D:/wamp/bin/php/php5.4.3/php5apache2_2.dll"
  • 主要讲解PHP的入门知识,包含PHP环境的安装、基础语法、PHP数据类型、运算符、常用语句、常用变量、函数、数组等,以及和mysql的数据操作,实战制作一个表单和数据库的互动:录入数据、修改数据、删除数据。
  • 官方php_redis.dll找了很久,感谢热心的网友,这是php官方的 php_redis.dll http://windows.php.net/downloads/pecl/releases/redis/2.2.7/
  • 配置PHP5支持MySQL 打开PHP配置文件“F:\PHP\php5328Win32\php.ini”,查找“extension=php_mysql.dll”, 把前面的分号去掉,保存文件,启动服务; 却提示“PHP startup: Unable to load dynamic library :F:\...
  • PHP5.X系列命令行跑php程序 出现PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/php_gd2.dll····· 解决方案: 从网上查看会有...
  • apache不能启动 加入下面... LoadModule php5_module modules/php5apache2.dll<br />AddType application/x-httpd-php .php<br /> 测试N久,终于发现问题,就是由于apache版本的不同,LoadModule?...
  • PHP5.6与PHP7之间的区别

    万次阅读 2019-12-16 16:38:07
    一、俩者的区别 1.PHP7.0比PHP5.6性能提升了俩倍。 2.PHP7.0全面一致支持64位。 3.PHP7.0之前出现的致命错误,... 4.增加了空结合操作符(??),相当于三元运算符。...在PHP5中只可以是类名、接口、数组或者callable(PH...
  • PHP学习心得

    万次阅读 多人点赞 2017-08-18 23:27:16
    学习PHP有半个月了。每天都要打代码and写笔记。学过C和Java,在学习PHP的过程中比较顺利吧 (^-^) 代码打得越多,运行得越多,慢慢得会对程序理解得越深。下面就讲讲我学习PHP的心得。 PHP入门很容易,语法很简单...
  • 支持PHP5.2的phpMyAdmin 官方最终版

    千次下载 热门讨论 2015-01-05 22:05:31
    支持PHP5.2的phpMyAdmin 官方最终版, 4.0 以上的其他版本已经不再支持PHP5.2了,保存留个纪念吧!
  • 在买了中国信息港vps主机之后,想搭建一个DZ论坛、wordpress和一个织梦的门户网站,可是在使用的过程中,发生了一个...c:\php5\pear'”错误,以下是Discuz的一个报错。 Fatal error: require_once() [function.require

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,608,314
精华内容 1,043,325
关键字:

php5