docker 制作一个包含PHP、MySQL、Redis、swoole、swoole_loader的docker镜像 前言 近期需要部署一个PHP项目,但是项目中带有 swoole,不想在服务器安装swoole扩展,想做一个docker镜像,对服务器干净一些,不对当前环境造成影响,所以就有了这个小功能 文件 一共有4个文件和一个目录 目录 1 . ./data/www 说明 PHP文件存放目录 文件 ./data/nginx.conf NGINX 配置文件 ./swoole_loader.so swoole_loader 扩展文件 ./Dockerfile 镜像构建文件 ./docker-compose.yml docker编排文件 ./data/nginx.conf 文件内容 server { listen 80; server_name _; root /var/www/html; index index.php index.html index.htm; # URL重写配置 location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } try_files $uri $uri/ /ind…
PHP wordpress上传文件自动重命名方法一 function custom_rename_uploaded_files($file) { $info = pathinfo($file['name']); $ext = $info['extension']; $newname = uniqid() . '.' . $ext; $file['name'] = $newname; return $file; } add_filter('wp_handle_upload_prefilter', 'custom_rename_uploaded_files');
PHP Server Send Event 类似ChatGPT返回消息接收PHP版 Client Side: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>服务器发送事件</title> </head> <body> <h1>获取服务器更新</h1> <div id="result"></div> </body> <script> if (typeof(EventSource) !== "undefined") { //创建新的EventSource对象,然后发送更新页面的URL. //每接收一次更新,就触发message事件,添加onmessage事件处理程序. //最后将接收到的数据输入到页面.event对象的data属性中保存着更新的数据. var source = new EventSource("1.php&qu…
PHP WordPress插件 wp-rocket 高级用法Nginx配置文件 rocket.conf 文件内容 ################################################################################################### # Rocket-Nginx # # Rocket-Nginx is a NGINX configuration to speedup your WordPress # website with the cache plugin WP-Rocket (http://wp-rocket.me) # # Author: Maxime Jobin # URL: https://github.com/maximejobin/rocket-nginx # # Tested with WP-Rocket version: 2.6.15 # Tested with NGINX: 1.8.0 (stable) # # Version 1.1 # ################################################################…
PHP 一个关于nginx+php 的性能优化小测试(转) 准备工作 一台ECS服务器 手动编译nginx+php 修改index.php ,输出 ‘hello world’ 用ab工具,ab -c 100 -n 50000 ,连续5次,记录压测的qps平均值。 想办法去优化,调整各种参数。每次调整一个参数有发现QPS提高,那就记录下来,并思考qps瓶颈是在哪 Nginx 一些基本配置的描述 user administrator administrators; #配置用户或者组,默认为nobody nobody。 worker_processes 2; #允许生成的进程数,默认为1 pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址 error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg events { accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on multi_accept on; #…
PHP think-async for ThinkPHP 6 异步代码执行/异步延迟执行/异步事件订阅 扩展地址:https://github.com/baiy/think-async 提供 ThinkPHP 项目内部快速实现的异步代码执行/异步延迟执行/异步事件订阅功能 内部由 top-think/think-queue 提供异步队列支持 执行流程: 调用相关方法将需要异步执行的代码插入相应队列中,使用top-think/think-queue提供的常驻监听脚本执行对应的代码,来实现系统的异步化
PHP ThinkPHP省市区(县)街道四级联动扩展 提醒:本文最后更新于2021-05-19 22:44,文中所关联的信息可能已发生改变,请知悉! 扩展包地址:https://github.com/yupoxiong/region 支持 TP5.0. 和 TP5.1. 还有 TP6.0 ,搜索功能支持汉字,支持拼音,首字母搜索。 安装 第一步:安装扩展 Composer 运行扩展安装命令 composer require yupoxiong/region 第二步:创建数据表 复制vendor/yupoxiong/region/database/migrations目录下的数据库迁移文件到TP迁移目录(一般是 /database/migrations/ ),然后运行TP自带迁移命令创建表。 TP5.1 版本可以直接运行以下两个命令完成安装 php think region:publish php think region:migrate TP6.0 版本可以直接运行以下命令完成安装 php think region:migrate
PHP php-fpm.conf中的pm.max_requests 根据说明我们知道这个参数的含义是php-fpm工作进程处理完多少请求后自动重启,主要目的就是为了控制请求处理过程中的内存溢出,使得内存占用在一个可接受的范围内。从这里我们感觉这个数字似乎设置的小一点更加有利于性能提升,但是当这个数字非常小的时候会发生一种情况,由于PHP请求是平均地分配给各个工作进程的,如果这个值太小就会导致所有的工作进程几乎同时达到这个值并且进入需要重启的状态,当所有的工作进程都在同一时刻重启就会发生在数秒内甚至更长的时间PHP将停止响应直到所有的进程均重启完为止。这是不能接受的,所以我一般会把这个值设置为PHP启动后第一批工作进程达到此值需要重启时,第一个进程重启与最后一个进程重启之间的时间相差1分钟以上,一般在压力比较大的晚上这个差值将会扩大到5分钟左右,此时对进程重启对服务器的负面影响就可以忽略了。
golang spiral-roadrunner加持 YII2测试 RoadRunner 是一个高性能PHP应用服务器,支持负载均衡及进程管理,使用go语言开发的 结合 YII2 需要一个扩展 charlesportwoodii/yii2-psr7-bridge 扩展安装命令 composer require charlesportwoodii/yii2-psr7-bridge:dev-master 安装扩展说明文档写即可,安装命令需要调整为上面的写法 测试结果
PHP php使用curl库进行ssl双向认证 提醒:本文最后更新于2021-05-19 22:40,文中所关联的信息可能已发生改变,请知悉! 请求基础方法 private function request($url, $data = [], $method = 'get', $options = [], $returnArray = true) { $curl = curl_init(); // 启动一个CURL会话 // is_array($data) && $data = http_build_query($data); $method = strtoupper($method); if ($method == 'GET') { is_array($data) && $data = http_build_query($data); $url .= stripos($url, '?') !== false ? '&' : '?'; $url .= $data; } else { curl_s…
PHP Yii2 updateAll是写原生SQL use yii\db\Expression; self::updateAll([‘prev_status’ => new Expression(‘status’), ‘status’ => self::PLAN_TASK_STATUS_CLOSE], [‘in’, ‘plan_id’, $planId]); // 生成的语句 UPDATE `pa_plan_task` SET `prev_status`=status, `status`=4 WHERE `plan_id` IN (1, 2)
PHP Yii2 AR获取当前查询sql $query = UserModel::find()->where([‘status’=>1]); echo $query->createCommand()->getRawSql(); // UserModel 为模型
PHP PHP SHA256WithRSA pfx和cer文件方式的加签和验签 提醒:本文最后更新于2021-05-19 22:46,文中所关联的信息可能已发生改变,请知悉! 加签后可以在Java端通过验证 // 全部参数按字母排序 private function dataSortAndKeyVal(array $data) { ksort($data); $strTmp = []; foreach ($data as $key => $val) { $strTmp[] = $key . '=' . $val; } return join('&', $strTmp); } // 加签 private function signData(array $data) { $strKeyVal = $this->dataSortAndKeyVal($data); $sha1 = sha1($strKeyVal); openssl_pkcs12_read(file_get_contents(‘pfx文件路径’), $certs, 'pfx密码'); if (!$certs) return &#…
PHP YII2 ajax post 报400错误 提醒:本文最后更新于2021-05-19 22:47,文中所关联的信息可能已发生改变,请知悉! 处理办法 var csrfToken = $('meta[name=csrf-token]').attr(content); $.ajax({ type: 'POST', url: url, headers:{'X-CSRF-Token':csrfToken}, data: {_csrf:csrfToken}, success: success, dataType: dataType });
PHP yii 2.0.14 报 Headers already sent 提醒:本文最后更新于2021-05-19 22:47,文中所关联的信息可能已发生改变,请知悉! 过程 在控制器里面使用了echo输出文本,最后又用return返回的文本,造成的这个错误 解决 需要echo的文本,全部收集到数组里面,最后一起用return 返回