原创

通过PHP单例模式与长连接减少MySql连接数

在Mysql驱动的PHP网站中,MySql连接的一般都是利用脚本的结束来进行释放,在一些分层写的php网站中,若一个页面含有多个数据访问类,由于每个数据访问类都会有数据库的连接,导致这一个页面在脚本结束前会有多个数据库连接,在一些大型的页面连接可能多至数十上百,为此需要进行必要的控制,对于解释性的PHP语言,脚本是顺序执行的,也就是说数据库连接的利用同时只有一个,根据这个特点,可以用单例模式来进行改造。

<?php
  class ConnecToDB
  {
      private static $instance;
      private function _constuct()
      {
      } //私有构造函数,防止外界构造新对象,
      public static function GetConnec()
      {
          if (!self::$instance instanceof self) {
              self::$instance =new self;//若当前对象实例不存在
          }
          $temp=self::$instance; //获取当前单例
            return $temp::Con() ;  //调用对象私有方法连接 数据库
      }
      //连接到数据库
      private static function 
                    

最新配置Nginx实现图片防盗链并排除对搜索引擎的屏蔽教程

配置Nginx实现图片防盗链并排除对搜索引擎的屏蔽

有时候我们不希望自己网站的图片被别的网站调用,因为这会消耗我们服务器大量的带宽,把服务器拖慢,我们可以用图片防盗链技术来达到我们的目的。

于对nginx服务器,我们使用ngx_http_referer_module模块来实现上述需求。

nginx referer指令简介

nginx模块ngx_http_referer_module通常用于阻止对“Referer”(来源)头字段中具有无效值的请求访问站点.我们应该牢记,有些合法的请求是不会带referer来源头部的,所以有时候不要拒绝来源头部(referer)为空的请求.…

    

使用HTTP/2服务端推送(Server Push),大幅提升网页脚本图片加载速度

使用HTTP/2服务端推送(Server Push),大幅提升网页脚本图片加载速度

内容概览

NGINX从1.13.9版本开始支持HTTP/2服务端推送, 使用此特性,能大幅提升前端页面加载速度,如,js.css,image等的加载速度大幅提升。经测试js.css的加载时间,从平均几百毫秒到几秒提升到几毫秒到十几毫秒(1M带宽测试)。

升级工作主要包括:

  1. 升级NGINX
  2. 修改NGINX配置
  3. 修改PHP程序
                        

解决PHP的一个长期存在的通过Opcache泄漏敏感数据的问题。

PHP中有一个非常古老的安全漏洞,它涉及在单个主进程共享多个PHP-FPM池的环境中处理OPCache的方式。这是现在运行PHP的最常见方式,也可能会对您产生影响。

漏洞

PHP有一种加速其解释器动态特性的方法,称为字节码缓存。PHP在每个页面加载中进行解释,这意味着PHP被转换为服务器理解并可以执行的字节码。由于大多数PHP页面不会每秒都更改,因此PHP会将该字节码缓存在内存中,并将其作为响应提供,而不必 每次都编译(“ 解释 ”)PHP脚本。…

        

为PHP-FPM和nginx设置多个进程池而安全地运行多个网站

为PHP-FPM和nginx设置多个进程池而安全地运行多个网站

在本文中,我们将向您展示在不同Linux用户的LEMP上运行站点的安全性和隔离性优势。这将通过为每个nginx服务器块(站点或虚拟主机)创建不同的php-fpm进程池来完成。

设置安全LEMP的原因

在常见的LEMP设置下,只有一个php-fpm进程池为同一用户下的所有站点运行所有PHP脚本。这带来两个主要问题:

  • 如果一个nginx服务器块上的Web应用程序(即子域或单独的站点)受到攻击,此服务器上的所有站点也将受到影响。攻击者能够读取其他站点的配置文件,包括数据库详细信息,甚至可以更改其文件。
  • 如果您想让用户访问服务器上的站点,您几乎可以访问所有站点。例如,您的开发人员需要处理开发环境。但是,即使拥有非常严格的文件权限,您仍然可以在相同的服务器上访问所有站点,包括您的主站点。
                

nginx不同站点的php-fpm的PHP_ADMIN_VALUE值会覆盖其它站点值的问题!

让我们看看这两个Nginx配置:

server {
    listen         80;
    server_name    example.com;
    location / {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME  /var/www/html/site1/i.php;
        fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root:/var/www/html/site1:/tmp/:/proc/"; #禁止跨目录访问 
        include fastcgi_params;
    }
}
server { 
    listen         80;
    server_name    example.net;
    location / {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME  /var/www/html/site2/i.php;
        include fastcgi_params;
    }
            

网页的图片,js ,css ,视频 都加 http accept-ranges头,以提高性能

网页的图片,js ,css ,视频 都加 http accept-ranges头,以支持多线程加载,断点续传,提高性能!目前各大网站都在使用此方式!

nginx 设置为:

server {
  listen 80;
  server_name p2hp.com;
  location ~ ^/(img/|js/|css/|upload/|font/|fonts/|res/|video) {
    add_header Access-Control-Allow-Origin *;
    add_header Accept-Ranges bytes;
    root /var/www/...;
    access_log off;
    expires 30d;
  }
  ...
}

                    

重大事件:PHP JIT 已进入 PHP RFC,并将在PHP 8.0中实现

重大事件:PHP JIT 已进入 PHP RFC,并将在PHP 8.0中实现.

查看 https://wiki.php.net/rfc/jit

以下为翻译:

PHP RFC:JIT

介绍

众所周知,PHP 7的性能跳跃最初是由尝试为PHP实现JIT而启动的。我们在2011年开始在Zend(主要是由Dmitry)开展这些工作,从那时起尝试了3种不同的实现。我们从未提出过发布其中任何一个的建议,主要有三个原因:它们导致典型的Web应用程序没有实质性的性能提升; 它们的开发和维护非常复杂; 我们仍然有其他方向可以探索以提高性能,而无需使用JIT。

今日JIT的案例

尽管支持JIT的PHP的大部分基础都没有改变 - 我们相信今天有一个很好的案例可用于支持JIT的PHP。

首先,我们相信我们已经达到了使用其他优化策略提高PHP性能的能力。换句话说 - 除非我们使用JIT,否则我们无法进一步提高PHP的性能。

其次 -