首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
142 阅读
2
php接口优化 使用curl_multi_init批量请求
132 阅读
3
2024年备考系统架构设计师
102 阅读
4
《从菜鸟到大师之路 ElasticSearch 篇》
102 阅读
5
PHP 文件I/O
89 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
785
篇文章
累计收到
8
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
785
篇与
的结果
2023-12-28
PHP的局限性怎么破?PHP与GO可完美结合
PHP的局限性怎么破?PHP与GO可完美结合PHP语言已经成为进行web开发的主力军,随着对技术的要求越来越高,很多团队在项目运作中,会引入 Golang到开发框架中,这不仅会提升产品性能,还能在原有基础上改变可扩展性,并且运行速度提高将近几十倍。将GO语言与PHP相结合,两者间相互取长补短,为项目的完成带来圆满收官。Go语言微服务的优势: GO语言的微服务将单个应用程序中所有系统的特性之间的关系分离出来,使得每个程序包都保存到独立的、可运行的代码库中。程序的大块代码被分割成多个微服务,成了小模块,解决了系统升级中潜在BUG、集成难度高等问题。值得一提的是,微服务可以进行横向扩展,在扩大服务模块后,给云计算带来极大的帮助。微服务仅仅只是一种概念,所以大部分语言都支持微服务,GO语言的特性直接表明了它是最适合的语言。GO语言具有并发性、运行速度快、支持高并发等优势,拥有强大的标准库,这些都是微服务选择它的理由。Go语言和PHP相辅相成: 当在PHP开发中用到GO语言,不仅完全消除了 502 错误的发生,而且将服务器总数减少了近三分之二,节省了大量工作成本和服务器成本。PHP不再被认为缓慢的语言,通过与Go语言等其他语言配对,创建出的PHP语言成为众多开发者的选择,未来也将继续在其中寻找更高效率的方法。GO语言与PHP的结合渐渐成为一种趋势,在Web应用、API应用、下载应用中都能见到身影。随着两者的发展应用,PHP渐渐在大型项目中崭露头角,在内存数据库和云平台领域都有所涉及。国内很多一线互联网企业,都会使用这个来进行项目开发,如京东商场、百度BFE、小米视频等项目,当然还有其他中小型公司也会利用此功能,进行项目的研发。对于PHP的未来可预见的是,它将会摒弃自身不足,不断创新,真正成为最好的语言,而不仅仅存在一个梗中。
2023年12月28日
6 阅读
0 评论
0 点赞
2023-12-28
PHP设置脚本最大执行时间的三种方法
PHP设置脚本最大执行时间的三种方法php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,如果脚本需要跑很长时间;这种情况就要更改php脚本最大执行时间。1、在php.ini里面设置max_execution_time = 120;2、通过PHP的ini_set函数设置ini_set("max_execution_time", "120");3、通过set_time_limit 函数设置set_time_limit(120);方法一主要适用于网站已经做好了,后期维护人员对代码结构不熟悉,方法二和三适用于写代码时候,不过不推荐使用方法二,因为要注意ini_set函数是否会被禁用。
2023年12月28日
7 阅读
0 评论
0 点赞
2023-12-28
linux小白也能实现nginx日志按天优化!
linux小白也能实现nginx日志按天优化!前言:接着上一篇文章《记一次nginx拦截爬虫》,发现服务器nginx日志非常不好看,时间长了一大堆都在一个文件里边(甚至几年的),对于我这种linux小白就不友好了,所以想把日志分文件,这样至少我们去查看日志的时候会方便很多:按天分文件直接上nginx.conf配置user nginx;worker_processes 2;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events {worker_connections 1024;}http {include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time'; #引入time_iso8601模块 设置时间 日期变量 map $time_iso8601 $logdate { #'~^(?<ymdh>\d{4}-\d{2}-\d{2}T\d{2})' $ymdh; '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd; default 'date-not-found'; } #日志存放目录 access_log /var/log/nginx/access-$logdate.log main; #日志缓存,将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效 open_log_file_cache max=10; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; #隐藏http版本号 server_tokens off;}这样就会按照天生成日志文件;这里边最重要的就是引入$time_iso8601(这个是nginx里边自带的一个时间格式)进行自定义变量,不需要额按编译。日期格式优化nginx自带两种时间格式:$time_iso8601 形如 2023-03-29T16:58:49+08:00$time_local 形如 14/Nov/2022:08:28:14 +0000可以看出$time_local的格式看起来不是很美妙,对于我自己来说肯定按照 ‘年月日时分秒’ 这样看更顺眼一些,所以我们在自定义日志格式的时候,时间格式也是选择的是$time_iso8601。时间怎么和我们本地时间一致时间格式顺眼了,但是发现时间还是UTC时区的时间,怎么处理呢:我这边使用的是docker-compose,可以直接配置环境变量。version: '3'services: d_nginx:container_name: c_nginx environment: TZ: 'Asia/Shanghai'第二种就是Dockerfile中编译,一劳永逸。FROM nginx:1.20.1-alpine定义时区参数ENV TZ=Asia/Shanghai有一些低版本的nginx做了以上两步还是不得行,有可能是因为缺少了tzdata时区数据包。FROM nginx:1.12.1-alpine将alpine的源更换成阿里云的源RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories定义时区参数ENV TZ=Asia/Shanghai安装时区数据包RUN apk add --update tzdata设置时区RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone经过上边的步骤nginx日志里边的格式和时间应该就是我自己想要的了。给大家分享一个nginx日志分析工具goaccess:地址:https://github.com/allinurl/goaccessgoaccess nginx.log -a > nginx.html这个工具能方便快速的分析nginx日志,能可视化的展示很多信息,帮助我们快速定位问题;比如接口的调用量(具体到某一个接口),访问者数量等等。前言:接着上一篇文章《记一次nginx拦截爬虫》,发现服务器nginx日志非常不好看,时间长了一大堆都在一个文件里边(甚至几年的),对于我这种linux小白就不友好了,所以想把日志分文件,这样至少我们去查看日志的时候会方便很多:按天分文件直接上nginx.conf配置user nginx;worker_processes 2;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events {worker_connections 1024;}http {include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time'; #引入time_iso8601模块 设置时间 日期变量 map $time_iso8601 $logdate { #'~^(?<ymdh>\d{4}-\d{2}-\d{2}T\d{2})' $ymdh; '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd; default 'date-not-found'; } #日志存放目录 access_log /var/log/nginx/access-$logdate.log main; #日志缓存,将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效 open_log_file_cache max=10; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; #隐藏http版本号 server_tokens off;}这样就会按照天生成日志文件;这里边最重要的就是引入$time_iso8601(这个是nginx里边自带的一个时间格式)进行自定义变量,不需要额按编译。日期格式优化nginx自带两种时间格式:$time_iso8601 形如 2023-03-29T16:58:49+08:00$time_local 形如 14/Nov/2022:08:28:14 +0000可以看出$time_local的格式看起来不是很美妙,对于我自己来说肯定按照 ‘年月日时分秒’ 这样看更顺眼一些,所以我们在自定义日志格式的时候,时间格式也是选择的是$time_iso8601。时间怎么和我们本地时间一致时间格式顺眼了,但是发现时间还是UTC时区的时间,怎么处理呢:我这边使用的是docker-compose,可以直接配置环境变量。version: '3'services: d_nginx:container_name: c_nginx environment: TZ: 'Asia/Shanghai'第二种就是Dockerfile中编译,一劳永逸。FROM nginx:1.20.1-alpine定义时区参数ENV TZ=Asia/Shanghai有一些低版本的nginx做了以上两步还是不得行,有可能是因为缺少了tzdata时区数据包。FROM nginx:1.12.1-alpine将alpine的源更换成阿里云的源RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories定义时区参数ENV TZ=Asia/Shanghai安装时区数据包RUN apk add --update tzdata设置时区RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone经过上边的步骤nginx日志里边的格式和时间应该就是我自己想要的了。给大家分享一个nginx日志分析工具goaccess:地址:https://github.com/allinurl/goaccessgoaccess nginx.log -a > nginx.html这个工具能方便快速的分析nginx日志,能可视化的展示很多信息,帮助我们快速定位问题;比如接口的调用量(具体到某一个接口),访问者数量等等。
2023年12月28日
13 阅读
0 评论
0 点赞
2023-12-28
内存飙升!记一次Nginx拦截爬虫
内存飙升!记一次Nginx拦截爬虫前言:最近发现服务器在某个时间段,内存疯狂飙升,开始还以为是正常的业务造成的,升级服务器内存,发现还是没有解决问题;(这里自己偷懒了,一开始没有找到问题,默认为就是业务量上来了)马上查看 nginx 日志,发现了一些不同寻常的请求:这是什么玩意,怀揣着好奇心马上去搜索了一下,结果:好家伙,差点没把我服务器送回家;赶紧解决:nginx 层面解决发现虽然是爬虫,但是并没有伪装,每个请求里边都带了 user-agent,而且都是一样的,那就好解决了,直接上代码:(我这里适用的是 docker)1、docker-composeversion: '3'services: d_nginx:container_name: c_nginx env_file: - ./env_files/nginx-web.env image: nginx:1.20.1-alpine ports: - '80:80' - '81:81' - '443:443' links: - d_php volumes: - ./nginx/conf:/etc/nginx/conf.d - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/deny-agent.conf:/etc/nginx/agent-deny.conf - ./nginx/certs:/etc/nginx/certs - ./nginx/logs:/var/log/nginx/ - ./www:/var/www/html2、目录结构nginx-----nginx.conf-----agent-deny.conf-----conf----------xxxx01_server.conf----------xxxx02_server.conf3、agent-deny.confif ($http_user_agent ~* (Scrapy|AhrefsBot)) {return 404;}if ($http_user_agent ~ "Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)|^$" ) {return 403;}4、然后在每个 service 里边 include 这个 agent-deny.confserver {include /etc/nginx/agent-deny.conf; listen 80; server_name localhost; client_max_body_size 100M; root /var/www/html/xxxxx/public; index index.php; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #客户端允许上传文件大小 client_max_body_size 300M; #客户端缓冲区大小,设置过小,nginx就不会在内存里边处理,将生成临时文件,增加IO #默认情况下,该指令,32位系统设置一个8k缓冲区,64位系统设置一个16k缓冲区 #client_body_buffer_size 5M; #发现设置改参数后,服务器内存跳动的幅度比较大,因为你不能控制客户端上传,决定不设置改参数 #此指令禁用NGINX缓冲区并将请求体存储在临时文件中。文件包含纯文本数据。该指令在NGINX配置的http,server和location区块使用 #可选值有: #off:该值将禁用文件写入 #clean:请求body将被写入文件。该文件将在处理请求后删除 #on: 请求正文将被写入文件。处理请求后,将不会删除该文件 client_body_in_file_only clean; #客户端请求超时时间 client_body_timeout 600s; location /locales { break; } location / { #禁止get请求下载.htaccess文件 if ($request_uri = '/.htaccess') { return 404; } #禁止get请求下载.gitignore文件 if ($request_uri = '/storage/.gitignore') { return 404; } #禁止get下载web.config文件 if ($request_uri = '/web.config') { return 404; } try_files $uri $uri/ /index.php?$query_string; } location /oauth/token { #禁止get请求访问 /oauth/token if ($request_method = 'GET') { return 404; } try_files $uri $uri/ /index.php?$query_string; } location /other/de { proxy_pass http://127.0.0.1/oauth/; rewrite ^/other/de(.*)$ https://www.baidu.com permanent; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass d_php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_connect_timeout 300s; fastcgi_send_timeout 300s; fastcgi_read_timeout 300s; include fastcgi_params; #add_header 'Access-Control-Allow-Origin' '*'; #add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; #add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token'; }}这样每个请求里边都会拦截这个 AhrefsBot 了。阿里云安全组拦截分析日志还发现,其实请求的 IP 就那么几个段,那么为了多重保证(阿里云这个是见效最快,效果最好的,付费的就是不一样)ip 段:54.36.0.051.222.0.0195.154.0.0直接外网入方向
2023年12月28日
6 阅读
0 评论
0 点赞
2023-12-28
用PHP自己动手写MVC框架,彻底搞懂MVC结构!
php中文网 php中文网课程 2023-03-30 17:00 发表于安徽高效开发离不开框架的辅助,掌握主流PHP开发框架的使用, 是每一名PHP程序员必备的基本技能,想掌握框架开发,最快的方法,就是知道框架底层的运行原理是什么,编程思想是什么? 而自己动手写一个框架, 则是公认的,最快的框架学习方法!本套课程用最直白的语言,最简单的案例,让你在不知不觉中学会自己写一个小框架(MVC)!(2022年10月份最新录制实战课,共40节)课程内容开发环境准备与搭建PHP框架简介与MVC思想URL-路由-伪静态原理神奇的$_SERVER变量公共函数库模型之数据库静态委托编写配置项与引入方式细说数据库查询类Query关于ORDER排序的补充说明视图类基本功能详解控制器类的基本功能路由类的基本功能与实现入口文件功能与编写方法框架启动类功能详解项目调试开关的打开与关闭项目总结与进阶建议学习地址https://www.php.cn/course/1467.html
2023年12月28日
11 阅读
0 评论
0 点赞
1
...
42
43
44
...
157