GVKun编程网logo

【编程开发】PHP---面向对象教程(php语言之面向对象编程 educoder)

7

对于想了解【编程开发】PHP---面向对象教程的读者,本文将是一篇不可错过的文章,我们将详细介绍php语言之面向对象编程educoder,并且为您提供关于12.21php-fpm的pool12.22p

对于想了解【编程开发】PHP---面向对象教程的读者,本文将是一篇不可错过的文章,我们将详细介绍php语言之面向对象编程 educoder,并且为您提供关于12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理、5、PHP-将浮点数转为整数 php 浮点数比较 php 浮点数精度 php 浮点数格式、Brew 安装 php,但“php -v”返回 MacOS 原生 php 的信息、file_get_contents('php://input') 不适用于 Laravel+Octane / Swoole PHP 代码使用 PHP-FPM使用 Octane+Swoole的有价值信息。

本文目录一览:

【编程开发】PHP---面向对象教程(php语言之面向对象编程 educoder)

【编程开发】PHP---面向对象教程(php语言之面向对象编程 educoder)

面向对象编程

类:在现实世界中,任何事物都有种类的概念:车

  类是由特征行为构成的。

    特征:都是不动的,从出厂的时候就已经内置好了(属性

    行为:一种动的状态。(方法(函数))

  行为依赖于这些特征,而特征只有通过这些行为才能施展。

 

对象调用属性、方法

<?php
header("Content-Type:text/html; charset=utf-8");

class Persion{
    const NAME = "小王";
    public $name = "小明";        //public访问控制符
    public $name1 = "小红";

    public function run($my_nume){
        echo $my_nume;
    }


}

//对象调用属性 以及方法 使用->
//对象调用属性的时候,直接加属性名,不要加$符
//对象调用方法的时候,直接写方法名就可以了
//调用类常量,可以用当前对象,加::的形式来调用

$p = new Persion();   //返回的是一个对象

echo $p->name;  

$p->run("小蓝");

echo $p::NAME;
echo Persion::NAME;  //也通过直接调用当前类 加::的形式来调用

 

类常量:const

  const用于类成员常量的定义,一经定义,不可修改。

  const和define的区别:

    1、const可以在类中使用,define不能

    2、const不能在条件语句中定义常量

    ☆ const定义的常量是大小写敏感,而define可以通第三个参数来指定大小写是否敏感。

 

构造函数:__construct()

  我们在创建一个类的时候有时候需要初始化一些操作,这个时候我们需要使用初始化函数,在PHP中有两种初始化方法:

  1、构造函数:__construct() 。注意:构造函数是自动运行的,在你实例化的时候就自动执行了。

class MyPc
{
    function __construct(){
        //初始化操作
    }
}
new MyPc();

构造函数怎么传递参数呢?通过在类名实例化的小括号里传递我们的参数:

class MyPc{

    function __construct($name)
    {
        echo ''你好''.$name;
    }
}

new MyPc("小王");

 

  2、建立一个对象方法

注意:此时测方法名没有大小写区分,只要与类名一致,均会被当成构造函数,在实例化时自动调用。

class MyPc
{
    function MyPc(){    //当方法名跟我们的类名一致的时候,PHP就会自动的把它当成构造函数来使用
        echo "123";
    }
}

new MyPc();

注意:

__construct的优先级比对象方法高,当类中有__construct时必须放在类的开头。

class MyPc{

    function __construct($name)        
    {
        //如果用__construct方法,则必须放在类中的开头
        echo ''你好''.$name;
    }

    function MyPc()
    {
        //此时的MyPc()方法就是一个普通的方法
        echo "asd";
    }
}

(new MyPc("小王"))->MyPc();
//此时要实例化类,则必须传入一个参数,因为构造函数定义的时候需要一个参数,之后由于没有定义一个参数来赋值类,所以用括号扩起来。

 

析构函数:__destruct()    了解就好

  能够在对象释放时自动被调用的方法被称为析构函数。

理解:  

  我们可以理解为垃圾回收机制,当对象内部的操作执行完毕的时候,__destruct()被调用,然后对象所使用的内存被释放出来。

规则:

  先进先出

 

 

$this 关键字

  $this关键字:是用来访问当前对象中的对象属性和对象方法的系统变量

 理解:

  我们可以理解为$this是在对象中特殊的一种使用构造函数和变量的方法。

  注意:$this仅能在当前对象中使用

class Pc{
    public $name = "小马";

    function computer($name=''小明'',$c='''')        
    {

        $this->name = $name;
        //可以动态的修改类的属性,第一个name不加$,表示类的属性
        //第二个是传入的参数
        echo $this->name;
        //在类的里面,调用其他属性和方法用$this
        //用$this加->调用属性和方法
        //注意,这里的name不用加$符号
    }

}


//类不被实例化,是不会展示类里面所有功能的。
$p = new Pc();
$p->computer();
//这里没有传递参数,则定义时必须给形参一个默认值

 

类成员的访问控制

访问控制符:

  就是把一些相关的属性和行为隐藏起来,从而得到保护和安全。

public:

  表示全局,在类的内部和外部子类都可以访问。

protected:

  表示受保护的,只有本类或子类或父类中使用。

private:

  表示私有,只有本类内部可以使用。

☆ 类,是要被实例化返回一个对象的,在对象访问的时候,访问属性和方法只能用public来访问,不能用其他两个。即无法用->来访问proteced和private的属性和方法。

class Pc{
    public $name = "小马";

    protected $age = ''18'';
    //受保护的,在本类中可以使用$this->来调用,但是在外部实例化的时候是不能调用的
    //可继承
    private $city = ''上海'';
    public function test()        
    {
        return $this->name."在".$this->city;
        //方法最好有返回值热,retur和echo都可以,建议用return
        //$this 调用本类的属性和方法
    }

}

//类的外面想要调用属性,要先实例化该类
$p = new Pc();
/*echo $p->name;    //正常调用
echo $p->age;    //Fatal error: Cannot access protected property 
echo $p->city;    //Fatal error: Cannot access private property */
echo $p->test();

 

类的自动加载:__autoload()

  使用"__"开头的基本上都是系统的构造函数

作用:  

  快速取得对象名称并自动载入进当前页面,当实例化类的时候,会自动获取类的名称,并在当前文件中及当前文件目录下自动加载

<?php
header("Content-Type:text/html; charset=utf-8");

//类的自动加载
//自动加载函数,可以放到类的外面,执行该文件的时候会自动执行
function __autoload($class_name){
    include($class_name.".php");
    //如果本文件中没有这个类,那么会在本文件目录下自动加载以该类名称命名的文件
}

$p = new Pc(); 
echo $p->name;
#$p = new MyPc(); 

//如果本文件中没有这个类,那么会在本文件目录下自动加载以该类名称命名的文件
class Pc
{
    public $name = "adf";
}

 

类的继承:extends

  PHP类的继承,我们可以理解成共享被继承类的内容。PHP中使用extends单一继承的方法,请切记:(非C++多继承)被继承的类我们叫做父类(基类),继承者称为子类(派生类)。

 

PHP继承的规则:

  可多重继承,但是不能同时继承多个。可避免属性和方法的重名。

 

 

关键字:parent

  子类(派生类)继承父类(基类)。子类想访问跟子类方法同名的父类的时候,并且子类的方法也不想被方法重载的时候。这时候使用parent。

  在类中定义方法的时候,如果不写访问控制符,那么默认是public属性。

//基类、父类
class A
{
    function test(){
        echo "父类";
    }
}

class B extends A
{
    function test()
    {
        #echo "子类";
        parent::test();
    }
}

$p = new B();
$p->test();
//如果子类中的方法名与父类中的方法名重复,那么子类的方法会覆盖父类中的方法。(方法的重载)

当子类和父类的方法重名的时候,由于直接调用方法会默认调用子类的方法,因此我们使用parent关键字来调用父类中的方法。(在子类中使用)

 

方法重载

  基类方法重载:

    因为属于向下继承的原理,基类不能使用派生类里的内容,这时基类的一些方法不能完成我们的一些派生类的功能。

    我们就可以进行方法重载,避免新建方法带来的混乱。

  理解:方法重载我们也可以理解为方法覆盖,在派生类中使用与基类方法重名的方法名来执行重载。

例子与上面parent一样。

 

范围操作符: "::"

  注意:这个符号用于类中(而不是对象中)访问成员,对象访问成员使用的是"->"符号。

  使用场景:

    1、在使用类的时候,父类和子类具有相同的属性和方法时,利用它可以避免混淆。

    2、在类外的时候,没有创建对象的情况下使用该操作符访问类的成员。

  记住:

    在多数情况下,我们使用范围解析操作符是为了访问被重写的方法。我们也可以用其访问静态和常数成员

//基类、父类
class A
{
    const Name=''小明'';
    public static function test()
    {
        echo "静态方法";
    }

    public function aa()
    {

    }
}

//调取类常量
echo A::Name;
A::test();
//加::来调用一些静态的属性和方法
A::aa();
//不可以调用普通的方法名,Non-static method A::aa() should not be called statically 

注意:不允许直接调用普通方法。

  

静态成员的作用

  静态:只要在成员前加上关键字static,该变量就成为静态成员了。

  1、静态变量属于类,而不属于类的某个实例。这个变量对所有实例都有效。

  2、声明为static的类、函数和变量将不能引用实例方法或变量。

  3、静态变量和方法必须通过类名进行引用而不能通过实例对象引用。

//基类、父类
class A
{
    public static function test()
    {
        echo "这是一个普通方法";
    }
}

//调用静态的,无论是方法还是属性,都可以用::
A::test();

 

匿名类    (了解即可,PHP7新加入的)

  PHP7支持通过new class来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。

 

 trait技术

  Traits是一种为类似PHP的单继承语言而准备的代码复用机制。Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。

  作用:我们在没有增加代码复杂的情况下,实现了代码的复用。  

   trait类可以理解为复制粘贴类,由trait关键字定义,用use关键字调用(粘贴)。

 

//基类、父类
trait Pc
{
    public function usb()
    {
        echo "usb";
    }

    function key()
    {
        echo "key";
    }
}
//trati类、复制粘贴类
class A 
{
    use Pc;

}

$a = new A();
$a->key();

 

问题:trait类和继承类有什么区别 ???

 

 

抽象类:abstract(类似纯虚函数,纯虚函数的定义是在虚函数定义的基础上,再让函数等于0即可)

  抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象类或者方法我们需要使用abstract关键字。

定义:

  一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。

总结:

  1、类中至少有一个抽象方法,可以有其他普通方法。

  2、抽象方法不允许有{ },即不能有方法体。

  3、抽象方法前面必须加abstract。

几个特点:

  1、不能被实例化,只能被继承。

  2、继承的派生类当中要把所有的抽象方法重载才能实例化。

abstract class A 
{
    abstract function usb();

    function test(){

    }
}

#new A();
//抽象类不能被实例化 //Cannot instantiate abstract class A
class B extends A{ function usb(){ echo "子类重载"; } //如果没有重载抽象类中的所有抽象方法,会出现以下报错 //Class B contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (A::useb) } $b = new b(); $b->usb();

  ☆派生类里面必须实现抽象类里面的所有方法,少了一个都不行。

 

 接口:interface(类似C++的抽象类,但是C++抽象类的定义是:包含由纯虚函数的类被称为抽象类)

  接口:一种成员属性全部为抽象的特殊抽象类,在程序中同为规范的作用。

  

接口的引用:

  接口引用区别之前我们学的继承关键字extends,继承只能是单一性,而接口可以使用关键字:implement引用多个引用并用逗号“,”分开。

 

interface Pc
{
    //接口类的所有方法都是抽象方法
    //所有抽象方法都必须是public属性,默认是publi。
    function key();
    function usb($name);

}

interface person{
    public function age();
    public function name($p_name);
}
//接口类只允许被实现和引用
//接口允许多引用,然后用“,”分开就行
class B implements Pc,person
{
    //如果要实现接口类,要把接口类里面的所有抽象方法都给实现
    //少一个都不行
    function key(){

    }
    function usb($name){
        echo "这是一个参数".$name;    
    }
    function age(){
        echo "18";
    }
    function name($p_name){
        echo "名字是:".$p_name;
    }
}
$b = new B();
#b->usb("鼠标");
$b->age();
$b->name("小红");

 

关键字:self:

  self用来访问当前类的内容的关键字,类似于$this关键字,但$this是需要类实例化以后才可以使用,self可以直接访问当前类中的内部成员。

   注意:

    因为没有实例化类访问内部属性或者方法是没有意义的,

    所以self一般用来访问类中的:静态成员,常量,或者其他定义内容。

 

 

关键字:final

  final是用来定义类和方法的一个重要关键字,当定义类的时候该类将不能被继承,当用来定义方法的时候该方法将不能被重载。

 

//使用final关键字,A类将不被任何类继承
#final class A
class A 
{
    public $name = "小明";

    //如果不想父类的方法被重写,使用final关键字
    final public function test(){
        echo "父类";
    }
}

//此时B类继承A类将会报错:Class B may not inherit from final class (A)
class B extends A
{
    //此时父类方法使用final关键字,子类就不能再进行重载了,会报错:Cannot override final method A::test()
    public function test()
    {
        echo $this->name;
    }
}

$a = new B();
$a->test();

 

对象复制与克隆

  产生背景:

    有时候我们需要在一个项目里面使用两个或多个一样的对象,如果使用new关键字重新创建对象,再赋值上相同的属性,这样做比较繁琐而且也容易出错,PHP提供了对象克隆功能,可以根据一个对象完全克隆出一个一模一样的对象,而且克隆以后,两个对象互不干扰。

关键字:clone

  $克隆对象名称 = clone $原对象名称;

  克隆一个跟$原对象名称一模一样的一个对象。

__clone()

  如果想在克隆后改变原对象的内容,需要在类中添加一个特殊的__clone()方法来重写原本的属性和方法。__clone()方法只会在对象呗克隆的时候自动调用。

 

 

☆☆

MySQLoi基本操作1

  1、面向过程:

     我们用mysqli_connect()函数建立一个连接。然后选择数据库,然后发送SQL指令,最后释放资源。

  2、面向对象:

    new新建一个mysqli对象,传入数据库连接的相关参数就可以获得一个mysqli对象。可以通过$mysqli->connect_errno判断连接是否有误。

<?php 
$mysqli = new mysqli("localhost","root","123qwe");
$mysqli->select_db("test");
$mysqli->set_charset("utf8");

$mysqli_result = $mysqli->query("select * from admin");
$result = $mysqli_result->fetch_all();
var_dump($result);
$mysqli_result->close();

$mysqli->close();

 

 

 MySQLoi基本操作2

查询:

  面向对象执行操作也有4中。分别为查询、新增、更新、删除。

  //查询:

    $result = $link->query(''select * from user'');

   //获得结果集中行的数目:

    $num_rows = $result->num_rows.''<br/>'';

 

 

Mysqli基本操作3

结果集:

  执行$mysqli->query();

  返回一个结果集。

  想要从结果集中取出数据,可以用$mysqli_result->要求返回的形式。

 

<?php
header("Content-Type:text/html; charset=utf-8");

//连接数据库
$link = new mysqli(''localhost'',''root'',''123qwe'',''test'');

//设置字符集
$link->set_charset(''utf8'');
$sql = ''select * from user'';

//返回一个结果集
$link_result = $link->query($sql);

//取出结果集
$resulut = $link_result->fetch_assoc();
#$resulut = $link_result->fetch_row();
#$resulut = $link_result->fetch_array();
var_dump($resulut);

//释放结果集
$link_result->close();

//关闭资源
$link->close();

 

---------------------------------------------------------------------------------------------------------

哪几种形式:

  fetch_assoc()

    查询到的一条数据以关联数组的形式返回

  

---------------------------------------------------------------------------------------------------------

  fetch_row()

    查询到的一条数据以索引数组的形式返回

  

--------------------------------------------------------------------------------------------------------

  fetch_array()

    查询到的一条数据以索引数组和关联数组的混合形式返回

  

---------------------------------------------------------------------------------------------------------

   fetch_all()

    查询到的所有数据以索引数组的形式返回

  

 

 

 

 魔术方法:__get

  __get(string $name)

    在读取不可访问的属性的值时该函数会被调用。$name是属性名。

class Demo
{
    private $age= 18;
    public $name;

    //当你访问不存在的或者权限不够的时候
    function __get($name){
        if($this->name == ''admin''){
            return $this->$name;
        }else{
            return "数据出错";
        }
        
    }

}

$a = new Demo();
$a->name=''admin'';
echo $a->age;
//此时__get()的参数$name为age

 

 

 魔术方法:__set

    __set(string $name,mixed $val)

        设置不可访问的值时会调用该方法

class Demo
{
    private $age;
    public $name;

    //当你设置不存在的或者权限不够的属性时,自动调用该方法
    //起到一层过滤作用,一种安全机制
    function __set($name,$val){
        if($this->name == ''admin''){
            echo $this->$name=$val;

        }else{
            echo "权限不够";
        }
    }

}

$a = new Demo();
$a->name = ''admin'';
$a->age=18;

//此时__set()的参数$name为age,$val为18

 

 

 魔术方法:__toString

    __toString:

      尝试直接访问一个实例化出来的对象时会调用该方法。

class A
{
    //此魔术方法要求必须有返回值。且只能用return
    function __toString(){
        return "";
        //如果使用echo,会出现以下报错
        //Catchable fatal error: Method A::__toString() must return a string value 
    }
}
//当你尝试直接输出对象的时候会自动调用
$a = new A();
echo $a;
//如果类A中没有任何内容,直接输出会报错
//Catchable fatal error: Object of class A could not be converted to string

 

 魔术方法:__sleep

  serivaliza()函数(序列化函数)会检查类中是否存在魔术方法__sleep(),如果存在,该方法会先被调用,然后才执行序列化操作。

  作用:

    此功能可以用于清理对象,并返回一个包含对象中所有应该被序列化的变量名称的数组。

    如果该方法会返回任何内容,则NULL被序列化,并产生E_NOTICE级别的警告错误。

  做什么:

    __sleep()常用作提交未提交的数据,或类似的数据清理工作。同时,如果有一些很大的对象,担不需要保存全部信息

 

魔术方法:__wakeup

    与上面的__sleep()相反,unserivalize()函数(反序列函数)会检查是否存在一个__wakeup()方法,如存在则先调用该方法,预先准备对象。

 

 

笨鸟先飞早入林,笨人勤学早成材。

转载请注明出处:
撰写人:fox-yu  http://www.cnblogs.com/fox-yu/

12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理

12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理

12.21 php-fpm的pool

为了避免因多站点使用同一个pool时因一个站点故障导致pool出问题,进而影响使用同一个pool的其他站点的正常运行,要对每个站点配置一个单独的pool。

为php-fpm增加pool

[root@cham002 cham.com]# cd /usr/local/php-fpm/etc/
[root@cham002 etc]# ls
pear.conf  php-fpm.conf  php-fpm.conf.default  php.ini
[root@cham002 etc]# cat php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
#listen = /tmp/php-fcgi.sock
listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[root@cham002 etc]# vi !$
vi php-fpm.conf

[champin.com]
#listen = /tmp/champin.sock
listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

语法检测:

[root@cham002 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 00:36:35] ERROR: [pool champin.com] unable to set listen address as it''s already used in another pool ''www''
[09-Jan-2018 00:36:35] ERROR: failed to post process the configuration
[09-Jan-2018 00:36:35] ERROR: FPM initialization failed

原因是我以为名字不对,后来换了名字还是不行,仔细看配置文件发现原因

[root@cham002 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 00:45:20] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@cham002 etc]# /etc/init.d/php-fpm reload
Reload service php-fpm  done

[root@cham002 etc]# ps aux |grep php-fpm
root      6251  0.5  0.4 227212  4980 ?        Ss   00:49   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm   6252  0.0  0.4 227152  4712 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6253  0.0  0.4 227152  4712 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6254  0.0  0.4 227152  4712 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6255  0.0  0.4 227152  4712 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6256  0.0  0.4 227152  4716 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6257  0.0  0.4 227152  4716 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6258  0.0  0.4 227152  4716 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6259  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6260  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6261  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6262  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6263  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6264  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6265  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6266  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6267  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6268  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6269  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6270  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6271  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool www
php-fpm   6272  0.0  0.4 227152  4716 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6273  0.0  0.4 227152  4716 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6274  0.0  0.4 227152  4716 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6275  0.0  0.4 227152  4720 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6276  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6277  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6278  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6279  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6280  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6281  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6282  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6283  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6284  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6285  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6286  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6287  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6288  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6289  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6290  0.0  0.4 227152  4724 ?        S    00:49   0:00 php-fpm: pool champ
php-fpm   6291  0.0  0.4 227152  4728 ?        S    00:49   0:00 php-fpm: pool champ
root      6293  1.0  0.0 112680   976 pts/1    R+   00:49   0:00 grep --color=auto php-fpm

为站点配置pool

[root@cham002 etc]# cd /usr/local/nginx/conf/vhost/
[root@cham002 vhost]# ls
aaa.com.conf  load.conf  proxy.conf  ssl.conf  test.com.conf
[root@cham002 vhost]# vim aaa.com.conf 

server
{
    listen 80 default_server;
    server_name aaa.com;
    index index.html index.htm index.php;
    root /data/wwwroot/default;
 location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/champ.sock;
       #fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
    }

}

说明: 把fastcgi_pass地址改为和php-fpm.conf中一样的地址就可以。

 

添加php-fpm.conf子配置文件

为了便于管理,可以将php-fpm中的每个pool单独进行管理。进行如下操作,添加php-fpm子配置文件:

[root@cham002 vhost]# cd /usr/local/php-fpm/etc/
[root@cham002 etc]# vim php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf

说明: 在全局变量版块添加参数“include = etc/php-fpm.d/*.conf”。然后可以清除php-fpm配置文件中其他参数,再到php-fpm.d目录下进行单独设置。

[root@cham002 vhost]# cd /usr/local/php-fpm/etc/
[root@cham002 etc]# mkdir php-fpm.d
[root@cham002 etc]# cd php-fpm.d/
[root@cham002 php-fpm.d]# vim www.conf
[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[root@cham002 php-fpm.d]# ls
www.conf

[root@cham002 php-fpm.d]# vim champ.conf
[champ]
listen = /tmp/champ.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[root@cham002 php-fpm.d]# ls
champ.conf  www.conf


[root@cham002 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 01:20:26] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@cham002 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done


[root@cham002 php-fpm.d]# ps aux |grep php-fpm
root      6508  1.5  0.4 227240  4988 ?        Ss   01:26   0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm   6509  0.0  0.4 227180  4720 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6510  0.0  0.4 227180  4720 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6511  0.0  0.4 227180  4720 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6512  0.0  0.4 227180  4720 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6513  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6514  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6515  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6516  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6517  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6518  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6519  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6520  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6521  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6522  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6523  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6524  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6525  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6526  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6527  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6528  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool champ
php-fpm   6529  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6530  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6531  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6532  0.0  0.4 227180  4724 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6533  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6534  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6535  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6536  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6537  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6538  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6539  0.0  0.4 227180  4728 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6540  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6541  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6542  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6543  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6544  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6545  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6546  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6547  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
php-fpm   6548  0.0  0.4 227180  4732 ?        S    01:26   0:00 php-fpm: pool www
root      6550  0.0  0.0 112680   976 pts/1    R+   01:26   0:00 grep --color=auto php-fpm


配置完成后使用ps查看php-fpm进程信息。

12.22 php-fpm的慢执行日志

开启慢执行日志:

[root@cham002 php-fpm.d]# vim www.conf 

[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
request_slowlog_timeout = 1
#当请求超过1秒开始记录日志
slowlog = /usr/local/php-fpm/var/log/www-slow.log
#日志存放路径

试验

在使用www pool的站点添加文件: 

[root@cham002 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 01:31:57] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@cham002 php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm  done

[root@cham002 php-fpm.d]# ls /usr/local/php-fpm/var/log/www-slow.log
/usr/local/php-fpm/var/log/www-slow.log

[root@cham002 php-fpm.d]# vim /data/wwwroot/test.com/sleep.php

<?php
 echo "test slow log";
sleep(2);
echo "done";
?>

 试一下

[root@cham002 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php
<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.12.1</center>
</body>
</html>
[root@cham002 php-fpm.d]# cat /usr/local/nginx/conf/vhost/test.com.conf 
server
{
    listen 80;
#报502的错误,查看配置文件,发现监听的地址被注重掉了
[root@cham002 php-fpm.d]# cat /usr/local/nginx/conf/vhost/test.com.conf 
server
{
    listen 80;
    server_name test.com test2.com test3.com;
    index index.html index.htm index.php;
    root /data/wwwroot/test.com;
    if ($host != ''test.com'' ) {
        rewrite  ^/(.*)$  http://test.com/$1  permanent;
    }
   # location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
   # {
   #       expires      7d;
   #       access_log off;
   # }
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
{
    expires 7d;
    valid_referers none blocked server_names  *.test.com ;
    if ($invalid_referer) {
        return 403;
    }
    access_log off;
}


    location ~ .*\.(js|css)$
    {
          expires      12h;
          access_log off;
    }
    location /admin/
    {
       allow 127.0.0.1;
       allow 192.168.230.135;
       deny all;
    }

    location ~ .*(upload|image)/.*\.php$
    {
        deny all;
    }
    
    if ($http_user_agent ~ ''Spider/3.0|YoudaoBot|Tomato'')
    {
      return 403;
    }

    location ~ \.php$
    {
        include fastcgi_params;
        #fastcgi_pass unix:/tmp/php-fcgi.sock;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
    }



    access_log /tmp/test.com.log cham;
}

[root@cham002 php-fpm.d]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@cham002 php-fpm.d]#  /usr/local/nginx/sbin/nginx -s reload


[root@cham002 php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php
test slow logdone

Reload service php-fpm  done


[root@cham002 php-fpm.d]# cat /usr/local/php-fpm/var/log/www-slow.log 
##查看日志!!!!!
[09-Jan-2018 01:50:17]  [pool www] pid 6700
script_filename = /data/wwwroot/test.com/sleep.php
[0x00007f98c94b02f8] sleep() /data/wwwroot/test.com/sleep.php:3

日志中表明详细信息

说明:一般会写成2秒,多数php脚本都会超过1秒

 

12.23 php-fpm中指定open_basedir

当一台服务器跑多个站点时,使用open_basedir限定各个站点所能访问的服务器上的目录的范围。在php-fpm服务中,可以针对每个pool设定open _ basedir。

核心配置参数:

[root@cham002 php-fpm.d]# vim www.conf 

[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/


[root@cham002 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
[root@cham002 php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Mon, 08 Jan 2018 18:05:28 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

[root@cham002 php-fpm.d]# vi /usr/local/php-fpm/etc/php.ini

[root@cham002 php-fpm.d]# grep error_log /usr/local/php-fpm/etc/php.ini
; server-specific log, STDERR, or a location specified by the error_log
; Set maximum length of log_errors. In error_log information about the source is
;error_log = php_errors.log
;error_log = syslog
error_log = /usr/local/php-fpm/var/log/php_errors.log
; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=
[root@cham002 php-fpm.d]# ls /usr/local/php-fpm/var/log/
php-fpm.log   www-slow.log  
[root@cham002 php-fpm.d]# vim www.conf 故意写错地址
[root@cham002 php-fpm.d]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@cham002 php-fpm.d]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log
[root@cham002 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done

[root@cham002 php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php
No input file specified.
[root@cham002 php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.12.1
Date: Mon, 08 Jan 2018 18:17:50 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

[root@cham002 php-fpm.d]# cat /usr/local/php-fpm/var/log/php_errors.log
[08-Jan-2018 18:17:44 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/3.php) is not within the allowed path(s): (/data/wwwroot/etest.com:/tmp/) in Unknown on line 0
[08-Jan-2018 18:17:44 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0
[08-Jan-2018 18:17:50 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/3.php) is not within the allowed path(s): (/data/wwwroot/etest.com:/tmp/) in Unknown on line 0
[08-Jan-2018 18:17:50 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0

改正之后再来测试
[root@cham002 php-fpm.d]# vim www.conf 

[root@cham002 php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Mon, 08 Jan 2018 18:21:54 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30


 

12.24 php-fpm进程管理

php-fpm中pool配置参数解析:

[root@cham002 php-fpm.d]# cat www.conf 
[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
;定义进程启动方式(dynamic表示动态,static表示静态)
;只有此处设置为dynamic,下面的配置才生效
pm.max_children = 50
;最多可启动的子进程数量
pm.start_servers = 20
;设定初始启动的进程数量
pm.min_spare_servers = 5
;表示php-fpm空闲时最少要有几个子进程
pm.max_spare_servers = 35
;表示php-fpm空闲时最多要有几个子进程
pm.max_requests = 500
;表示一个子进程最多可接受多少个请求
rlimit_files = 1024
;表示每个子进程打开的多少个文件句柄
request_slowlog_timeout = 1
;当请求超过1秒开始记录日志
slowlog = /usr/local/php-fpm/var/log/www-slow.log
;日志存放地址
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/

 

5、PHP-将浮点数转为整数 php 浮点数比较 php 浮点数精度 php 浮点数格式

5、PHP-将浮点数转为整数 php 浮点数比较 php 浮点数精度 php 浮点数格式

1、使用强制类型转换

首先PHP支持如下所示的数据类型:

<span>1. </span>Integer    (整数)
<span>2. </span>Float      (浮点数)
<span>3. </span>String     (字符串)
<span>4. </span>Boolean    (布尔值)
<span>5. </span>Array      (数组)
<span>6. </span>Object     (对象)
登录后复制

此外还有两个特殊的类型:NULL(空)、resource(资源)。

注:
1. 没有被赋值、已经被重置或者被赋值为特殊值NULL的变量就是NULL类型的变量。
2. 特定的内置函数(例如数据库函数)将返回resource类型的变量。

接着可以使用类似C语言的强制类型转换,例如

<span><?php </span><span>$a</span>=<span>6.66666</span>;
<span>$b</span>=(integer)<span>$a</span>;
<span>echo</span><span>$b</span>;</span>
登录后复制

将输出一个6,直接舍去了小数部分

立即学习“PHP免费学习笔记(深入)”;

2、使用float floor ( float value) 函数

舍去法取整,返回不大于 value 的下一个整数,将 value 的小数部分舍去取整。floor() 返回的类型仍然是 float,因为float 值的范围通常比 integer 要大。

echo <span>floor</span>(<span>4.3</span>);   <span>// 输出4 </span>
echo <span>floor</span>(<span>9.999</span>); <span>// 输出9</span>
登录后复制

3、使用float ceil ( float value) 函数

进一法取整,返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为float 值的范围通常比 integer 要大。

echo <span>ceil</span>(<span>4.3</span>);    <span>// 输出5 </span>
echo <span>ceil</span>(<span>9.999</span>);  <span>// 输出10</span>
登录后复制

4、使用float round ( float val [, int precision])函数

对浮点数进行四舍五入,返回将 val 根据指定精度 precision(十进制小数点后数字的数目)进行四舍五入的结果。precision 也可以是负数或零(默认值)。

echo <span>round</span>(<span>3.4</span>);         <span>// 输出3 </span>
echo <span>round</span>(<span>3.5</span>);         <span>// 输出4 </span>
echo <span>round</span>(<span>3.6</span>);         <span>// 输出4 </span>
echo <span>round</span>(<span>3.6</span>, <span>0</span>);      <span>// 输出4 </span>
echo <span>round</span>(<span>1.95583</span>, <span>2</span>);  <span>// 输出1.96 </span>
echo <span>round</span>(<span>1241757</span>, -<span>3</span>); <span>// 输出1242000 </span>
echo <span>round</span>(<span>5.045</span>, <span>2</span>);    <span>// 输出5.04 </span>
echo <span>round</span>(<span>5.055</span>, <span>2</span>);    <span>// 输出5.06</span>
登录后复制
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了5、PHP-将浮点数转为整数,包括了php,浮点数方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Brew 安装 php,但“php -v”返回 MacOS 原生 php 的信息

Brew 安装 php,但“php -v”返回 MacOS 原生 php 的信息

删除系统二进制文件通常不是一个好主意。相反,您可以在 ~/.zshrc 文件中添加别名。在文件末尾添加:

alias php="/usr/local/bin/php"
,

解决方案是将其放入 ~/.bash-profile

export PATH=/usr/local/bin:$PATH

重启电脑,它准备好了,现在当我php -v

PHP 8.0.3 (cli) (built: Mar  4 2021 20:45:17) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.3,Copyright (c) Zend Technologies
    with Zend OPcache v8.0.3,Copyright (c),by Zend Technologies

file_get_contents('php://input') 不适用于 Laravel+Octane / Swoole PHP 代码使用 PHP-FPM使用 Octane+Swoole

file_get_contents('php://input') 不适用于 Laravel+Octane / Swoole PHP 代码使用 PHP-FPM使用 Octane+Swoole

如何解决file_get_contents(''php://input'') 不适用于 Laravel+Octane / Swoole PHP 代码使用 PHP-FPM使用 Octane+Swoole?

我正在从 Laravel 8 迁移到 Laravel 8 + Octane / Swoole。一切正常,但 PHP://input 始终为空。另外,我检查 $_POST 和 $_SERVER 值。

file_get_contents(''PHP://input'') 被 AWS SNS Message Validator 使用。

阅读 PHP://input 的任何替代方案?

PHP 代码

echo "PHP://input: ".file_get_contents(''PHP://input'');

使用 PHP-FPM

$ curl -i -X POST --data "dataaaa" https://example.com/aws/sns/webhook
PHP://input: dataaaa

使用 Octane+Swoole

$ curl -i -X POST --data "dataaaa" https://example.com/aws/sns/webhook
PHP://input:

解决方法

问题

[+] Building 10.5s (9/9) FINISHED => [internal] load build definition from Dockerfile 0.2s => => transferring dockerfile: 133B 0.0s => [internal] load .dockerignore 0.2s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/python:3.9 0.9s => [auth] library/python:pull token for registry-1.docker.io 0.0s => CACHED [1/3] FROM docker.io/library/python:3.9@sha256:acb4e43d0c66c168e72ceaba5913cde472e4a17017cec9346969c9725a1fea94 0.0s => [internal] load build context 0.1s => => transferring context: 12.01kB 0.0s => [2/3] ADD main.py . 0.5s => [3/3] RUN pip install pillow 6.9s => exporting to image 1.5s => => exporting layers 1.2s => => writing image sha256:95e56740a3427899906e9c6522198f5d749fd13870450b046a2bd874b3a04548 0.0s => => naming to docker.io/library/background-revolution 在 Swoole 上不可用。始终是同一个运行进程。

解决方案:PSR-7 请求

php://input

当然,对于辛烷值,Laravel PSR-7 requests 需要 use Psr\Http\Message\RequestInterface; public function sesSubscriptionWebhook(RequestInterface $request) { // $input = file_get_contents(''php://input''); // dont work on swoole $input = $request->getBody(); } symfony/psr-http-message-bridge

此外,如果您的问题与 AWS SES 相关,您需要将 nyholm/psr7 更改为 Message::fromRawPostData()

关于【编程开发】PHP---面向对象教程php语言之面向对象编程 educoder的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理、5、PHP-将浮点数转为整数 php 浮点数比较 php 浮点数精度 php 浮点数格式、Brew 安装 php,但“php -v”返回 MacOS 原生 php 的信息、file_get_contents('php://input') 不适用于 Laravel+Octane / Swoole PHP 代码使用 PHP-FPM使用 Octane+Swoole的相关知识,请在本站寻找。

本文标签: