分类目录归档:PHP

Nginx + PHP-FPM 边运行边输出

<?php
//apache方法,需要关闭apache缓冲区
for($i=0;$i<1000;$i++){
    echo $i;
 
    ob_flush();//刷新PHP自身缓冲区
 
    flush();//刷新(特指apache)web服务器的缓冲区,输出数据
 
    sleep(1);
}
 
//nginx缓冲区
ob_end_clean(); // 关闭默认的缓冲区 ob_end_flush() 也可以
ob_implicit_flush(); // 打开绝对刷送
header('X-Accel-Buffering: no'); // 告诉nginx直接输出
# 以上3个一起组合即可实现直接输出
for($i=0;$i<1000;$i++){
    echo $i;
    sleep(1);
}

nginx超时配置参见:

感谢仙士可 http://www.php20.cn/article/159

  1. X-Accel_Redirect : 由上游服务指定nginx内部重定向 控制请求的执行
  2. X-Accel-Limit-Rate: 由上游设置发往客户端速度限制 等同于limit_rate指令
  3. X-Accel-Buffering:由上游控制是否缓存上游的响应
    Sets the proxy buffering for this connection. Setting this to “no” will allow unbuffered responses suitable for Comet and HTTP streaming applications. Setting this to “yes” will allow the response to be cached.
  4. X-Accel-Charset:由上游控制 Content-Type中的Charset

来源 https://www.cnblogs.com/jackey2015/p/10438123.html

iOS凭据(小票)验证库(PHP版)

ios-iap-php

iOS支付验证

install

composer require sn01615/apple-iap-php

use

use sn01615\iap\ios\Verify;

include "../vendor/autoload.php";

$cc = new Verify();

$receipt = ".."; // 凭据

$cc->endpoint(true);// 可选切,换到沙盒环境

$cc->setPassword('123');// 可选,如果是连续订阅需要密码

$vv = $cc->query($receipt);

// 打印结果
var_dump($vv);

GITHUB: https://github.com/sn01615/apple-iap-php

ERROR: failed to open error_log (/usr/local/var/log/php-fpm.log): Read-only file system (30)

Mar 07 17:22:59 wm php-fpm[230837]: [07-Mar-2022 17:22:59] ERROR: failed to open error_log (/usr/local/var/log/php-fpm.log): Read-only file system (30)

PHP7报错Read-only file system (30)

当你照着 此文 安装好PHP,并做好systemd服务管理文件,你会发现用systemctl start php-fpm 无法正常启动php-fpm 报了一个很奇怪的错。
ERROR: failed to open error_log (/usr/local/php/var/log/php-fpm.log): Read-only file system (30)
此时,selinux是关闭状态,普通用户对这个文件也可写,问题就迷离了。
解决方法:
打开 /usr/lib/systemd/system/php-fpm.service 把
ProtectSystem=true
改成
ProtectSystem=false

当这个值为true的时候,php-fpm进程将以只读的方式挂载 /usr 目录,这就是问题所在。具体可参考
https://www.freedesktop.org/software/systemd/man/systemd.exec.html#ProtectSystem=

https://hqidi.com/154.html

或者修改日志文件路径也可以解决这个问题

centos8 安装 oniguruma-devel

Package 'oniguruma', required by 'virtual:world', not found

configure: error: Package requirements (oniguruma) were not met:

需要使用这个命令安装

dnf --enablerepo=PowerTools install oniguruma-devel

或(如果报错)

dnf --enablerepo=powertools install oniguruma-devel

如果是 rockylinux:

dnf install --enablerepo=devel -y oniguruma-devel 

在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x1f)

https://blog.csdn.net/dufufd/article/details/53895764

在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x1f)

String could not be parsed as XML

解析XML文件时,会碰到程序发生以下一些异常信息: 

在 CDATA 节中找到无效的 XML 字符 (Unicode: 0x1f)。

或者:

An invalid XML character (Unicode: 0x1f) was found in the CDATA section.

这些错误的发生是由于一些不可见的特殊字符的存在,而这些字符对于XML文件来说又是非法的,所以XML解析器在解析时会发生异常,官方定义了XML的无效字符分为三段: 

0x00 – 0x08

0x0b – 0x0c

0x0e – 0x1f

解决方法是:在解析之前先把字符串中的这些非法字符过滤掉即可, 不会影响原来文本的内容。

即:string.replaceAll(“[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]”, “”) ;

# php 版过滤方法
$content2 = preg_replace(‘/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/mu’, ”, $content);

另外:这些字符即使放在CDATA中仍然解析不了,所以最好的办法是过滤掉。

正则零宽断言

https://blog.csdn.net/u010801439/article/details/77921037

零宽断言表示匹配字符的时候再添加一些定位条件,使匹配更精准。

  • \w+(?=ing) 匹配以ing结尾的多个字符(不包括ing)
  • \w+(?!ing) 匹配不是ing结尾的多个字符
  • (?<=re)\w+ 匹配以re开头的多个字符(不包括re)
  • (?<!re)\w+ 匹配不是re开头的多个字符
  • (?<=\s)\d+(?=\s) 匹配两边是空白符的数字,不包括空白符

本文参考:https://www.w3cschool.cn/rxoyts/l17fcozt.html

正则表达式30分钟入门教程:

https://deerchao.cn/tutorials/regex/regex.htm