小多 发布的文章

下载php8.2.3

cd /usr/localwget https://www.php.net/distributions/php-8.2.3.tar.gz

解压

tar -zxvf php-8.2..tar.gz

安装必要依赖

yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel
yum -y install gcc gcc-c++ libxslt-devel* mod_ssl libtool-ltdl* sqlite-devel oniguruma-devel perl* libzip autoconf

进入解压的目录

cd /usr/local/php-8.2./

配置(此步骤可能遇到模块未安装问题,需要逐个安装)

./configure --prefix=/usr/local/php8 --with-curl --with-freetype --enable-gd --with-gettext  --with-kerberos --with-libdir=lib64 --with-mysqli --with-openssl   --with-external-pcre --with-jpeg  --with-pdo-mysql --with-pear   --with-xsl --with-zlib --enable-fpm --enable-bcmath  --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --with-zip --enable-pcntl --enable-ftp --enable-session --enable-xml --without-pear --disable-phar

编译

make

安装

make install

添加环境变量

vim /etc/profile

在最后一行下面加入

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

立即生效

source /etc/profile

查看PHP版本

php -v

生成必要文件

cp /usr/local/php-8.2./php.ini-production /usr/local/php8/etc/php.ini
cp /usr/local/php-8.2./sapi/fpm/php-fpm /usr/local/php8/etc/php-fpm
cp /usr/local/php8/etc/php-fpm.conf.default /usr/local/php8/etc/php-fpm.conf
cp /usr/local/php8/etc/php-fpm.d/www.conf.default /usr/local/php8/etc/php-fpm.d/www.conf

编辑php.ini

vim /usr/local/php8/etc/php.ini

以下参数仅供参考

date.timezone = PRC    //设置时区
file_uploads = On    //是否允许上传
upload_tmp_dir = /tmp    //上传临时目录
max_file_uploads =     //单个请求最多上传数量
upload_max_filesize = 10M    //允许上传文件大小
post_max_size = 20M    //允许post传输最大值(这个必须比upload_max_filezise大)
memory_limit = 128M    //设置脚本最大使用内存
error_reporting=E_ALL    //输出错误信息
error_log = /var/log/php.log    //错误日志路径

创建日志文件

touch /var/log/php.log
chmod  /var/log/php.log

启动php-fpm,载入php.ini

/usr/local/php8/sbin/php-fpm -c /usr/local/php8/etc/php.ini

如果修改了php.ini则每次需要杀掉php-fpm进程再重新启动php-fpm

ps -ef | grep php-fpm
kill - 上一条命令查到的PID

方法1:

let array = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c},{id:4,name:'d'}]
let id= 3;
var newArray = array.filter(function (item) {
  if(id != item.id ){
      return item
  }
})
console.log(newArray )

方法2:

let array = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c},{id:4,name:'d'}]
let id = 3;
array.forEach((item,index)=>{
  if(id == item.id){
    array.splice(index,1)
  }
})
console.log(array)

由于微信公众号昵称头像授权政策调整,导致微擎打开应用页面跳转授权快照,获取不到用户真实的openid,造成无法支付,提示支付提示下单用户不一致。只需要把微擎默认的自动授权方式,改为引导用户手动点击授权就可以了。下面是修改的方式,需要修改到微擎源码。

1、新建一个手动授权的模板html文件,命名为auth.html,文件里的代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
  <title>授权登录-{$_W['account']['name']}</title>
  <meta name="keywords" content="{$_W['account']['name']}">
  <meta name="description" content="{$_W['account']['name']}">
  <style>
    .container {
      padding: 50px 15px;
      text-align: center;
    }
    .logo {
      width: 140px;
      margin: 0 auto 42px;
      text-align: center;
    }
    .logo img {
      max-width: 100%;
      vertical-align: middle;
    }
    .container h2 {
      margin: 0;
      padding: 0;
      line-height: 44px;
      font-size: 24px;
      font-weight: 500;
    }
    .container p {
      margin: 0;
      padding: 0;
      line-height: 34px;
      font-size: 16px;
    }
    .auth-btn {
      width: 98%;
      display: block;
      line-height: 50px;
      background: #0bb20c;
      color: #FFFFFF;
      text-align: center;
      font-size: 20px;
      border-radius: 24px;
      text-decoration: none;
      margin-top: 44px;
    }
    .is-snapshoot {
      display: none;
      width: 100%;
      height: 100%;
      position: absolute;
      top: 0;
      left: 0;
      background-position: center;
      background-size: 100% 100%;
      z-index: 1;
      text-align: center;
    }
  </style>
</head>
<body>
<div class="container">
<!--  <div class="logo">-->
<!--    <img src="{$_W['account']['logo']}" alt="{$_W['account']['name']}">-->
<!--  </div>-->
  <h2>授权登录</h2>
  <p>为了提供更完善的服务,请先授权登录!</p>
  <div class="login-btn">
    <a class="auth-btn" href="{$forward}">点击授权登录</a>
  </div>
</div>
<div class="is-snapshoot" {if isset($_GPC['is_snapshotuser']) && $_GPC['is_snapshotuser']=='1' }style="display:block;" {/if}>请点击右下角【使用完整服务】</div>
</body>
</html>

创建文件后,把它放在目录/app/themes/default/auth/auth.html

2、修改 /app/common/bootstrap.app.inc.php文件,在这块代码大概171行下

if ($oauth_type == 'snsapi_base') {
        $forward = $oauth_account->getOauthCodeUrl($callback, $state);
} else {
    $forward = $oauth_account->getOauthUserInfoUrl($callback, $state);
}

新增如下代码:

template('auth/auth');
exit();

3、修改用户授权SESSION有效期。
/app/common/bootstrap.app.inc.php 文件里的
这段代码
WeSession::start($_W['uniacid'], CLIENT_IP);
替换成:
WeSession::start($_W['uniacid'], CLIENT_IP, (15 * 86400)); //15天有效期

4、在用户不授权的情况,再次进入系统,也会变成虚拟用户;修改文件:/app/source/auth/oauth.ctrl.php
在文件这段代码:

$oauth = $oauth_account->getOauthInfo($code);

下面大概30行新增如下代码:

if( isset($oauth['is_snapshotuser']) &&  intval($oauth['is_snapshotuser']) === 1){
    $_SESSION['oauth_openid'] = '';
    $backUrl = urldecode($_SESSION['dest_url']).'&is_snapshotuser=1'; //设置当前为快照模式,可以在授权页加个箭头引导右下角微信官方授权页面
    header('Location: ' . $backUrl);
    exit();
}

修改结束,最终效果是当用户访问应用的时候,就会先跳转到手动授权登录页面,点击授权按钮后,跳转到应用页面。

<bank_type><![CDATA[OTHERS]]></bank_type>
<cash_fee><![CDATA[1]]></cash_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[N]]></is_subscribe>
<mch_id><![CDATA[1483469312]]></mch_id>
<nonce_str><![CDATA[8EYuWgYiwjnEhvOg]]></nonce_str>
<openid><![CDATA[oTgZpwaXTs2GzvkwMNDzbWIcrqjA]]></openid>
<out_trade_no><![CDATA[117120221215155347]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[18EE3825D2A3FD9A9DCBC60CAC131973]]></sign>
<time_end><![CDATA[20220514185750]]></time_end>
<total_fee>1</total_fee>
<trade_type><![CDATA[NATIVE]]></trade_type>
<transaction_id><![CDATA[4200001503202205144756789400]]></transaction_id>
</xml>