标签 PHP 下的文章 - 空痕博客 - 编程技术分享
首页
小记
php
python
uniapp
前端
其他
机器人
QQ机器人
项目
功能库
应用
其他页面
友情链接
用户留言
联系空痕
热门文章
PHP搭建QQ机器人(QQ官方)
下载文件到指定文件夹
UTS引用原生jar包进行原生插件开发
欢迎回来 Typecho !
上传文件到夸克网盘python代码
标签搜索
uniapp
python
PHP
VUE
UTS
uniapp-x
模板
夸克网盘
html
APP
KongHen
机器人
QQ
ID3
pyinstaller
redis
Echarts
邮箱
js
lyear
发布
登录
注册
找到
4
篇与
PHP
相关的结果
2025-10-13
完美解决请求跨域问题
问题说明 1. 什么是跨域问题? 跨域问题是由浏览器的同源策略(Same-Origin Policy)引起的一种安全限制。当网页尝试访问不同源(协议、域名、端口任一不同)的资源时,浏览器会阻止这种请求。 2. 同源策略定义 两个URL在以下三个方面完全相同时才属于同源: 协议(Protocol):http、https等 域名(Domain):www.example.com 端口(Port):80、443等 3. 常见的跨域场景 // 同源示例 http://example.com/app1 --> http://example.com/app2 // 同源 // 跨域示例 http://example.com --> https://example.com // 协议不同 http://test.example.com --> http://api.example.com // 域名不同 http://example.com:80 --> http://example.com:8080 // 端口不同4. 浏览器端表现 // 预检请求 Access to XMLHttpRequest at 'http://api.example.com' from origin 'http://test.example.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. // 正式请求 Access to XMLHttpRequest at 'http://api.example.com' from origin 'http://test.example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.跨域问题.png图片 跨域检测 跨域检测工具:跨域测试工具 解决方法 1. 服务端配置允许跨域(后端属于自己) 基于宝塔面板配置 最新版宝塔面板(11.0.0+) 最新版宝塔配置非常简单,直接在站点设置里开启允许跨域即可。 配置步骤: 打开宝塔面板“网站”,点击对应的站点 点击“其他设置” - “跨域访问CORS配置” - “状态” - 开启 - “保存” 即可 步骤演示图片 低版本宝塔面板(< 11.0.0) 低版本需要修改站点的配置文件,略微麻烦。 配置步骤: 打开宝塔面板“网站”,点击对应的站点 点击“配置文件”,添加以下内容即可 # 解决跨域问题--START add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,PUT,DELETE; add_header Access-Control-Allow-Headers DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization; add_header Access-Control-Expose-Headers Content-Length,Content-Range; location / { # 处理 OPTIONS 预检请求 if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,PUT,DELETE; add_header Access-Control-Allow-Headers DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization; add_header Access-Control-Expose-Headers Content-Length,Content-Range; add_header Access-Control-Max-Age 1728000; add_header Content-Type text/plain; add_header Content-Length 0; return 204; } } # 解决跨域问题--END步骤演示图片 存在的问题 需要删除自己代码里的允许跨域配置,否则会出现跨域冲突,出现错误。 // 配置冲突 Access to XMLHttpRequest at 'https://test.khkj6.com/' from origin 'https://tool.khkj.xyz' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.配置冲突图片 2. 使用代理(服务端不属于自己) 跨域是浏览器端检测请求不同源,对请求进行拦截,所以,只要不使用浏览器发送请求就可以解决。 使用自己同源的域名或配置了允许跨域的域名进行代理 以下提供最基础的php演示 $ch = curl_init(); // POST 数据 $postData = [ 'name' => '张三', 'email' => 'zhangsan@example.com', 'age' => 25 ]; curl_setopt_array($ch, [ CURLOPT_URL => "https://api.example.com/users", CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($postData), // 表单格式 CURLOPT_HTTPHEADER => [ 'Content-Type: application/x-www-form-urlencoded', ] ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo "状态码: " . $httpCode . "\n"; echo "响应: " . $response;使用非浏览器发送请求 在app、小程序等环境中,不会出现跨域问题。 3. 浏览器禁用安全策略(仅开发环境) --disable-web-security --user-data-dir=文件夹路径配置步骤: 以chrome浏览器为例 在任意位置创建一个文件夹(用于存储禁用安全策略的浏览器数据) 示例路径:C:\MyChromeDevUserData 完整代码:--disable-web-security --user-data-dir=C:\MyChromeDevUserData 复制文件夹路径 找到chrome的安装目录 为chrome.exe创建快捷方式 打开创建的快捷方式的属性 打开属性图片 在属性 - 目标后方添加代码 f0ad4e 修改目标路径图片 使用新建的快捷方式进入,不会触发跨域问题
其他
# PHP
# 跨域
# 浏览器
KongHen02
10月13日
0
43
0
2025-10-09
全新任务管理平台(流量主变现系统)开源
项目简介 项目结构 接口管理:PHP + Mysql 后台管理系统:Vue3 + ts + TDesign 任务单页:Vue3 小程序:uniapp + Vue2 变现说明 基础流程: 后台创建任务 复制任务链接 分享到社群或私域 用户打开任务页面 跳转到小程序观看广告 观看广告 下发奖励 收入说明 微信小程序官方广告收入 其他推广/广告收入 系统演示 演示站点 空痕任务管理系统 后台数据为静态演示数据,无法更改 演示图片 管理后台 控制台图片 任务单页 任务单页图片 小程序 小程序图片 安装教程 管理后台 安装依赖 npm install 构建项目 npm run build 新建站网站及数据库 推荐:PHP 8.0 推荐:Mysql 5.7 开启SSL(必须) 配置伪静态 location / { try_files $uri $uri/ /index.html; } location /api/ { if (!-e $request_filename) { rewrite ^/(.*)$ /$1.php last; } } 配置跨域 配置跨域教程 请参考第1种解决方法 导入数据库 导入/后台/数据库/task_dev_xma_run.sql到Mysql数据库 修改/后台/api/config.php 管理账户密码 JWT配置(密钥、过期时间) 数据库配置 上传后台代码 上传/后台/dist目录中的全部文件到网站根目录 上传/后台/api目录到网站根目录 任务单页 安装依赖 npm install 修改/任务单页/src/App.vue中的接口信息 修改后台地址 修改视频教程地址 构建项目 npm run build 新建网站 静态网站 开启SSL(必须) 上传任务单页代码 上传/任务单页/dist目录中的全部文件到网站根目录 小程序 使用HbuildX打开小程序 在manifest.json中获取新AppID 修改/pages/user/view中的后台地址 修改/pages/user/work中的二维码 发行到微信小程序 在微信开发者工具中上传代码 登录微信小程序后台配置 配置request合法域名 https://task.dev.xma.run(更改为自己的后台地址) https://www.duitang.com 配置downloadFile合法域名 https://c-ssl.duitang.com 配置明文scheme拉起此小程序 pages/user/view;pages/user/work 代搭建/教学 请联系微信:KongHen02 项目地址 GitHub
应用
# PHP
# uniapp
# VUE
# 小程序
# 开源
KongHen02
10月9日
8
196
2
2025-10-01
极简在线剪切板源码(html+php)
开发原因 要在多个设备之间复制长文本,但是设备上没有安装微信、QQ等聊天软件,所以很难复制,逐字输入太慢,且如果文本时长链接、脚本命令或代码就容易输入错误,所以需要一个在线剪切板工具。 网上搜索,没有找到想要的,就使用AI开发了一个很简单的在线剪切板。 功能列表 创建剪切板 获取剪切板 剪切板列表 生成剪切板链接 添加查看密码 删除剪切板 使用说明 直接上传到服务器即可使用 剪切板内容存储使用json文件存储 演示站点 演示站点 在线剪切板 演示截图 在线剪切板演示图片图片 代码下载 在线剪切板.zip 下载地址:https://cdn.x7x.fun/uploads/20251001/fc08409ece526fdb.zip 提取码:
PHP
# PHP
# html
# 小工具
KongHen02
10月1日
0
82
0
2025-02-20
php利用redis实现接口数据缓存
php利用redis实现服务端数据缓存。 要求php版本大于8.0 缓存类 文件RedisCache.php <?php /** * 请求缓存类 * 利用redis实现数据缓存 * * 作者:KongHen02 * */ class RedisCache { private string $key; private Redis $redis; public function __construct(int $db = 0, bool $device = false) { $config = [ 'host' => '127.0.0.1', 'port' => 6379, 'timeout' => 2, 'database' => $db ]; try { $this->redis = new Redis(); $this->redis->connect( $config['host'], $config['port'], $config['timeout'] ); $this->redis->select($config['database']); } catch (RedisException $e) { error_log("Redis连接失败: " . $e->getMessage()); throw new RuntimeException("缓存服务不可用"); } $this->key = $this->generateKey($device); } public function getCache(): mixed { try { header('X-Cache: ' . ($this->redis->exists($this->key) ? 'HIT' : 'MISS')); $data = $this->redis->get($this->key); return $data !== false ? unserialize($data) : null; } catch (RedisException $e) { error_log("读取缓存数据失败: " . $e->getMessage()); return null; } } public function setCache(mixed $data, int $ttl = 7200): bool { try { return $this->redis->setex( $this->key, $ttl, serialize($data) ); } catch (RedisException $e) { error_log("写入缓存数据失败: " . $e->getMessage()); return false; } } public function __destruct() { try { $this->redis?->close(); } catch (RedisException $e) { error_log("关闭Redis连接失败: " . $e->getMessage()); } } private function generateKey(bool $device): string { $url = $_SERVER['HTTP_HOST']; $urlArray = explode("?", $_SERVER['REQUEST_URI']); $url .= $urlArray[0]; $params = $_POST; ksort($params); $keyParts = [ $_SERVER['REQUEST_METHOD'], $device ? $this->detectDevice() : null, $url, substr(md5($urlArray[1]), 0, 8), substr(md5(http_build_query($params)), 0, 8) ]; return implode(':', array_filter($keyParts)); } private function detectDevice(): string { $ua = strtolower($_SERVER['HTTP_USER_AGENT'] ?? ''); return match(true) { (bool)preg_match('/mobile|android|iphone|ipod|windows phone/', $ua) => 'mobile', (bool)preg_match('/tablet|ipad|kindle/', $ua) => 'tablet', default => 'desktop' }; } } ?>使用说明 <?php // 导入缓存类 require_once($_SERVER['DOCUMENT_ROOT'] . "/RedisCache.php"); try { // 0:redis表序;0-15;必填 // true:是否区分客户端类型(手机/平板/电脑);true/false(默认);可空 $RedisCache = new RedisCache(0, true); if (($result = $RedisCache->getCache()) !== null) { exit($result); } } catch (RuntimeException $e) { // 缓存服务不可用时继续执行 header('X-Cache-Status: Down'); } // 业务逻辑处理 $result = "数据内容,不限制类型"; // 缓存成功结果 if (isset($result)) { // $result:需要缓存的数据;mixed;必填 // 7200:数据有效期;int(默认7200);可空 $RedisCache?->setCache($result, 7200); } echo($result); ?>
PHP
# PHP
# redis
KongHen02
2月20日
6
35
0
易航博客