本文将介绍[PHP]include详解_PHP教程的详细情况,特别是关于phpinclude的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于12.2
本文将介绍[PHP]include详解_PHP教程的详细情况,特别是关于php include的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理、12.21 php-fpm的pool12.22 php-fpm慢执行日志12.23 open_basedir12.24 php-fpm进程管理、5、PHP-将浮点数转为整数 php 浮点数比较 php 浮点数精度 php 浮点数格式、Brew 安装 php,但“php -v”返回 MacOS 原生 php 的信息的知识。
本文目录一览:- [PHP]include详解_PHP教程(php include)
- 12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理
- 12.21 php-fpm的pool12.22 php-fpm慢执行日志12.23 open_basedir12.24 php-fpm进程管理
- 5、PHP-将浮点数转为整数 php 浮点数比较 php 浮点数精度 php 浮点数格式
- Brew 安装 php,但“php -v”返回 MacOS 原生 php 的信息
[PHP]include详解_PHP教程(php include)
include加载文件顺序
寻找包含文件的顺序是:
首先在当前工作目录的相对的 include_path 下寻找,
然后是当前运行脚本所在目录相对的 include_path 下寻找。
例如 include_path 是 .,当前工作目录是 /includetest/,脚本中要 include 一个 includetest/a.php 并且在该文件中有一句 include “b.php”,则寻找 b.php 的顺序先是 /includetest/,然后是 /includetest/include/。如果文件名以 ./ 或者 ../ 开始,则只在当前工作目录相对的 include_path 下寻找。
代码结构如下:
~/public_html/includetest> ls -R
.:
a.php b.php include
./include:
a.php b.php其中各文件代码为:
~/public_html/includetest> cat a.php
set_include_path(".");
include "include/a.php";
echo __FILE__ . PHP_EOL;
~/public_html/includetest> cat b.php
echo __FILE__ . PHP_EOL;
~/public_html/includetest> cat include/a.php
include "b.php";
echo __FILE__ . PHP_EOL;
~/public_html/includetest> cat include/b.php
echo __FILE__ . PHP_EOL;输出结果为:
~/public_html/includetest> php a.php
# 可以看到include/a.php中include "b.php";会先加载includetest/b.php文件
/home/zhanhailiang/public_html/includetest/b.php
/home/zhanhailiang/public_html/includetest/include/a.php
/home/zhanhailiang/public_html/includetest/a.php注意:工作目录与运行脚本所在目录的概念区别。
include变量作用域
当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。
代码如下:
~/public_html/includetest> cat c.php
include "d.php";
echo $d.PHP_EOL;
e();
~/public_html/includetest> cat d.php
$d = "hello world";
function e() {
echo "hello world, e()".PHP_EOL;
}
~/public_html/includetest> php c.php
hello world
hello world, e()相应地,如果 include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。 An exception to this rule are magic constants which are evaluated by the parser before the include occurs.
include代码执行
当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此原因,目标文件中应被当作 PHP代码执行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中。
include处理远程文件
如果“URL fopen wrappers”在 PHP 中被激活(默认配置),可以用 URL(通过 HTTP 或者其它支持的封装协议——所支持的协议见支持的协议和封装协议)而不是本地文件来指定要被包含的文件。如果目标服务器将目标文件作为 PHP 代码解释,则可以用适用于 HTTP GET 的 URL 请求字符串来向被包括的文件传递变量。严格的说这和包含一个文件并继承父文件的变量空间并不是一回事;该脚本文件实际上已经在远程服务器上运行了,而本地脚本则包括了其结果。
include处理返回值
处理返回值:可以在被包括的文件中使用 return 语句来终止该文件中程序的执行并返回调用它的脚本。同样也可以从被包含的文件中返回值。可以像普通函数一样获得 include 调用的返回值。不过这在包含远程文件时却不行,除非远程文件的输出具有合法的 PHP 开始和结束标记(如同任何本地文件一样)。可以在标记内定义所需的变量,该变量在文件被包含的位置之后就可用了。
因为 include 是一个特殊的语言结构,其参数不需要括号。在比较其返回值时要注意。
如果文件不能被包含,则返回 FALSE 并发出一个 E_WARNING 警告。
如果在包含文件中定义有函数,这些函数可以独立于是否在 return 之前还是之后在主文件中使用。如果文件被包含两次,PHP 5 发出致命错误因为函数已经被定义,但是 PHP 在 return 之后不会抱怨函数已定义。推荐使用 include_once 而不是检查文件是否已包含并在包含文件中有条件返回。
立即学习“PHP免费学习笔记(深入)”;
另一个将 PHP 文件“包含”到一个变量中的方法是用输出控制函数结合 include 来捕获其输出。
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/
12.21 php-fpm的pool12.22 php-fpm慢执行日志12.23 open_basedir12.24 php-fpm进程管理
12.21 php-fpm的pool
知识点
pool 池子,每一个池子都可以监听不同的sock或者是TCP/IP,nginx如果有多个站点,那么每个站点都能去使用一个独立的pool,这样做的好处是,当其中一个php发生错误了(资源不够),所以就有必要让每一个站点使用独立的pool
例如:php程序编写时发生了错误,就会导致整个php资源耗尽,因为pool只支持57个进程,当进程满的时候,如果再有新的请求,将会发现资源被耗尽,就会反馈用户502
增加pool并指定让那个站点使用
配置方法一:
在php-fpm.conf下直接添加一段
[aming.com]
listen = /tmp/aming.sock
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
配置方法二:
使用类似配置vhost的办法,创建目录,单个文件对单个站点(这样的办法看起来不急干净,便于维护) 创建存放的目录
[root@aminglinux-02 vhost]# cd /usr/local/php-fpm/etc/
[root@aminglinux-02 etc]# mkdir php-fpm.d
[root@aminglinux-02 etc]# ls
pear.conf php-fpm.conf php-fpm.conf.default php-fpm.d php.ini
在php-fpm.conf主配置文件下添加配置,并删除之前的pool的配置;删除前cat一次文件,以便拷贝pool的配置到新的配置文件里
[root@aminglinux-02 etc]# vim php-fpm.conf
include = etc/php-fpm.d/*.conf
在新创建的目录下,创建对应站点的pool
[root@aminglinux-02 php-fpm.d]# pwd
/usr/local/php-fpm/etc/php-fpm.d
[root@aminglinux-02 php-fpm.d]# ls
aming.conf www.conf
配置好以后,检查语法并重启
[root@aminglinux-02 ~]# /usr/local/php-fpm/sbin/php-fpm -t
[root@aminglinux-02 ~]# /etc/init.d/php-fpm reload
Reload service php-fpm done
查看新增的pool是否被使用
[root@aminglinux-02 ~]# ps aux |grep php-fpm
root 2723 0.0 0.2 226700 4960 ? Ss 01:17 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 2724 0.0 0.2 226640 4704 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2725 0.0 0.2 226640 4704 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2726 0.0 0.2 226640 4704 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2727 0.0 0.2 226640 4704 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2728 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2729 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2730 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2731 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2732 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2733 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2734 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2735 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2736 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2737 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2738 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2739 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2740 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2741 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2742 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2743 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool www
php-fpm 2744 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2745 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2746 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2747 0.0 0.2 226640 4708 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2748 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2749 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2750 0.0 0.2 226640 4712 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2751 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2752 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2753 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2754 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2755 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2756 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2757 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2758 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2759 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2760 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2761 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2762 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
php-fpm 2763 0.0 0.2 226640 4716 ? S 01:17 0:00 php-fpm: pool aming.com
root 2765 0.0 0.0 112664 976 pts/0 R+ 01:17 0:00 grep --color=auto php-fpm
发现新增了pool 名字为 aming.com
在nginx里启用
配置新的虚拟主机配置文件
[root@aminglinux-02 vhost]# pwd
/usr/local/nginx/conf/vhost
[root@aminglinux-02 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$ //新增解析php 下面这一整段
{
include fastcgi_params;
fastcgi_pass unix:/tmp/aming.sock; //指定新添加的pool里面配置的sock
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
}
}
12.22 php-fpm慢执行日志
做 php 的网站,建议使用lnmp,主要原因就是可以去分析慢执行; 查询办法 1、系统负载,可以通过各种工具查,查出是哪个进程导致 2、PHP网站访问慢,通过慢日志
配置方法:
配置pool文件
[root@aminglinux-02 php-fpm.d]# vim www.conf
[www]
listen = /tmp/php-fcgi.sock
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 //新增;超过一秒钟记录一次;一般用2秒比较合适,因为很多脚本都会超过1秒
slowlog = /usr/local/php-fpm/var/log/www-slow.log //新增;日志存放路径
配置完成,检查语法&&重新加载服务
[root@aminglinux-02 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[17-Aug-2017 01:48:30] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@aminglinux-02 php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm don
查看一下是否生成日志文件,是否有内容
[root@aminglinux-02 php-fpm.d]# ls /usr/local/php-fpm/var/log/www-slow.log
/usr/local/php-fpm/var/log/www-slow.log
[root@aminglinux-02 php-fpm.d]# cat !$
cat /usr/local/php-fpm/var/log/www-slow.log
日志文件并没有内容,因为还没有发生超过1秒的php执行的情况
模拟一个慢执行的php
到www pool的所支持的站点下,创建一个慢执行的php
[root@aminglinux-02 test.com]# pwd
/data/wwwroot/test.com
[root@aminglinux-02 test.com]# vim sleep.php
<?php
echo “test slow log”;
sleep(2);
echo “done”;
?>
检查语法&&重新加载服务
[root@aminglinux-02 test.com]# /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@aminglinux-02 test.com]# /usr/local/nginx/sbin/nginx -s reload
测试
[root@aminglinux-02 test.com]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 500 Internal Server Error
Server: nginx/1.12.1
Date: Wed, 16 Aug 2017 17:56:11 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
提示500 表示有错
打开在浏览器查看错误信息
[root@aminglinux-02 test.com]# vim /usr/local/php-fpm/etc/php.ini
搜索 display_err ,on 这个配置,将能在浏览器上查看错误信息
[root@aminglinux-02 test.com]# curl -x127.0.0.1:80 test.com/sleep.php
<br />
<b>Parse error</b>: syntax error, unexpected ''slow'' (T_STRING), expecting '','' or '';'' in <b>/data/wwwroot/test.com/sleep.php</b> on line <b>2</b><br />
提示:解析错误< / b >:语法错误,意外的“慢”(T_STRING),期望“,”或“;在< b > /数据/ wwwroot /test.com/sleep.php < / b > < b > 2行< / b > 检查sleep.php文件
发现里面的标点用的是中文标点,更改后重启配置
再次测试
[root@aminglinux-02 test.com]# curl -x127.0.0.1:80 test.com/sleep.php
test slow logdone
发现会慢2秒才输出结果
这时候可以去查看是否生成了慢日志
[root@aminglinux-02 test.com]# cat /usr/local/php-fpm/var/log/www-slow.log
[17-Aug-2017 02:07:35] [pool www] pid 3133
script_filename = /data/wwwroot/test.com/sleep.php //提示:是哪个文件慢
[0x00007ff86b542298] sleep() /data/wwwroot/test.com/sleep.php:3 //提示:是文件里的那一行慢
查看相关的文件
[root@aminglinux-02 test.com]# cat sleep.php
<?php
echo "test slow log";
sleep(2); // 这一行因为执行了sleep 2 ,将暂停2秒,就是这个导致慢,所以被日志记录
echo "done";
?>
12.23 open_basedir
知识点
因为如果服务器管理多个网站,在php.ini里定义多个open_basedir就不合适了,所以使用针对pool定义对应的open_basedir
配置open_basedir
对www的pool进行配置,在最末行加多一行配置
[root@aminglinux-02 php-fpm.d]# vim www.conf
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/ 如果路径出错,会导致404页面 curl直接连会提示“No input file specified.”
开启错误日志记录
定义错误日志
;error_log = php_errors.log
; Log errors to syslog (Event Log on Windows).
;error_log = syslog
error_log = /usr/local/php-fpm/var/log/php_errors.log //这一段定义错误日志
定义错误日志的级别
error_reporting = E_ALL //所有
查看刚更改的路径是否存在
[root@aminglinux-02 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@aminglinux-02 php-fpm.d]# ls /usr/local/php-fpm/var/log/
php-fpm.log www-slow.log
为了保证能正常的写入日志,需要进行以下操作 创建好一个错误日志文件
[root@aminglinux-02 php-fpm.d]# touch /usr/local/php-fpm/var/log/php_errors.log
将它的权限设置为777,以便写入
[root@aminglinux-02 php-fpm.d]# chmod 777 !$
chmod 777 /usr/local/php-fpm/var/log/php_errors.log
[root@aminglinux-02 php-fpm.d]# ls -lhtr /usr/local/php-fpm/var/log/
总用量 16K
-rw------- 1 root root 480 8月 17 02:07 www-slow.log
-rw------- 1 root root 9.1K 8月 17 02:07 php-fpm.log
-rwxrwxrwx 1 root root 0 8月 17 02:30 php_errors.log
12.24 php-fpm进程管理
[root@aminglinux-02 php-fpm.d]# cat www.conf
[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic //表示进程以什么形式启动,dynamic就是动态,动态就是一开始为一个数值,根据需求再自动生成,服务器比较闲的时候还会去销毁,销毁到一定程度还有自动生成
pm.max_children = 50 //最大子进程数,ps aux可以查看
pm.start_servers = 20 //启动服务时会启动的进程数
pm.min_spare_servers = 5 //定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。
pm.max_spare_servers = 35 //定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。
pm.max_requests = 500 //定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。
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/
pm = dynamic //表示进程以什么形式启动,dynamic就是动态,动态就是一开始为一个数值,根据需求再自动生成,服务器比较闲的时候还会去销毁,销毁到一定程度还有自动生成;根据下面的设置去进行设定“start_servers ”、“min_spare_servers ”、“max_spare_servers ”、“max_requests ”
==pm 还有一个选择是 static ,一旦选择这个设置,下面的pm的各种设置只会有一个max_children生效==
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>
以上就介绍了5、PHP-将浮点数转为整数,包括了php,浮点数方面的内容,希望对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
今天关于[PHP]include详解_PHP教程和php include的讲解已经结束,谢谢您的阅读,如果想了解更多关于12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理、12.21 php-fpm的pool12.22 php-fpm慢执行日志12.23 open_basedir12.24 php-fpm进程管理、5、PHP-将浮点数转为整数 php 浮点数比较 php 浮点数精度 php 浮点数格式、Brew 安装 php,但“php -v”返回 MacOS 原生 php 的信息的相关知识,请在本站搜索。
本文标签: