首页
壁纸
友情链接
留言板
读者墙
关于博客
网站统计
更多
免责声明
推荐
工具箱
在线音乐
小霸王
小黑屋
栅格之地
WIKI
Search
1
Typecho博客主题Joe7.7.1美化优化记录【持续更新】
1,528 阅读
2
给你网站博客的评论添加一键打卡功能
1,349 阅读
3
博客美化和优化过程记录及实用技巧【停止更新】
1,232 阅读
4
php报错open_basedir restriction in effect问题和TP5的think-log-viewer
1,229 阅读
5
聊聊rel=external nofollow和rel=noopener noreferrer
1,030 阅读
编程相关
WEB前端
网站建设
生活随笔
经验分享
登录
Search
标签搜索
博客美化
经验分享
网站优化
Joe主题
php
css
typecho
javascript
html
external
nofollow
noopener
ajax
session
跨域
thinkphp
animation
cdn
七牛云
宝塔
小天
累计撰写
21
篇文章
累计收到
227
条评论
首页
栏目
编程相关
WEB前端
网站建设
生活随笔
经验分享
页面
壁纸
友情链接
留言板
读者墙
关于博客
网站统计
免责声明
推荐
工具箱
在线音乐
小霸王
小黑屋
栅格之地
WIKI
搜索到
3
篇与
php
的结果
2024-02-27
什么是跨域?session如何共享?PHP和Ajax跨域问题的解决方法
{message type="warning" content="什么是跨域?"/}跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。http://www.xtboke.com/index.html 调用 http://www.xtboke.com/api.php (非跨域)http://www.xtboke.com/index.html 调用 http://www.xtboke2.com/api.php (主域名不同:xtboke/xtboke2,跨域)http://tool.xtboke.com/index.html 调用 http://music.xtboke.com/api.php (子域名不同:tool/music,跨域)http://www.xtboke.com:8080/index.html 调用 http://www.xtboke.com:8081/api.php (端口不同:8080/8081,跨域)http://www.xtboke.com/index.html 调用 https://www.xtboke.com/api.php (协议不同:http/https,跨域){message type="info" content="localhost和127.0.0.1虽然都指向本机,但也属于跨域。"/}{message type="warning" content="解决办法"/}跨域的解决办法有很多,本文主要分享一下通过设置Access-Control-Allow-Origin来实现跨域。例如:客户端的域名是client.xtboke.com,而请求的域名是server.xtboke.com。如果直接使用ajax访问,会有以下错误:XMLHttpRequest cannot load http://server.xtboke.com/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://client.xtboke.com' is therefore not allowed access.{message type="info" content="1.允许单个域名访问"/}指定某域名(http://client.xtboke.com)跨域访问,则只需http://server.xtboke.com/api.php文件头部添加如下代码: header('Access-Control-Allow-Origin:http://client.xtboke.com');{message type="info" content="2.允许多个域名访问"/}指定多个域名(http://client1.xtboke.com、http://client2.xtboke.com等)跨域访问,则只需在http://server.xtboke.com/api.php文件头部添加如下代码:$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array('http://client1.xtboke.com', 'http://client2.xtboke.com' ); if(in_array($origin, $allow_origin)){header('Access-Control-Allow-Origin:'.$origin);}{message type="info" content="3.允许所有域名访问"/}允许所有域名访问则只需在http://server.xtboke.com/api.php文件头部添加如下代码:header('Access-Control-Allow-Origin:*');{message type="warning" content="SESSION共享问题:"/}下面是我整理的一份PHP session跨域共享的代码示例,记录一下。client.php tool.xtboke.com<?php header("Content-Type:text/html;charset=utf-8"); *session_start(); $token = md5(uniqid(rand(), TRUE)); $_*SESSION["token"]=$token; ?> <script src="//www.xtboke.com/jquery/jquery-1.9.1.js"></script> <script type="text/javascript"> $.ajax({ type:'get', url: "https://www.xtboke.com/server.php", dataType: "jsonp", jsonp:'callback', data:{ 'cToken':"<?php echo $_*SESSION['token'];?>" }, xhrFields: {withCredentials: true}, crossDomain: true, success: function(data) { $(".info").html("客户端token:" + data.cToken + "<br/>服务端token:" + data.sToken+"<br/>是否相等:" + data.ifEq); } }); </script> <div class="info"></div>server.php music.xtboke.com<?php session_*start(); $origin = isset($_SER*VER['HTTP_*ORIGIN'])? $_SER*VER['HTTP_*ORIGIN'] : ''; $allow_origin = array( 'https://tool.xtboke.com', 'https://tool2.xtboke.com' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); //跨域且使用session时不能使用 * header("Access-Control-Allow-Credentials: true" );//是否携带cookie } $arr = array( 'cToken'=>$_*GET['cToken'], 'sToken'=>$_*SESSION['token'], 'ifEq'=>$_*SESSION['token']==$_*GET['cToken']?'yes':'no' ); $callback = !empty($_*GET['callback']) ? trim($_*GET['callback']) : ''; if(!empty($callback)) { echo $callback."(".*json_encode($arr).")"; }else{ echo *json_encode($arr); }
2024年02月27日
794 阅读
2 评论
14 点赞
2023-11-01
Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation
{callout color="#1dc0f7"}最近一位朋友说打不开我的留言板页面,一直报错500【Database QueryError】,于是我查找了错误日志,找到了如下错误信息:{/callout}2022/01/01 15:01:34 [error] 27751#0: *92883 FastCGI sent in stderr: "PHP message: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='" while reading response header from upstream, client: ***.9.208.203, server: www.xtboke.com, request: "GET /message.html HTTP/2.0", upstream: "fastcgi://unix:/tmp/php-cgi-72.sock:", host: "www.xtboke.com"{callout color="#f0ad4e"}于是查找资料,貌似是编码不一致的问题,也试过了网上的一些方法,基本都不管用;下面说一下我通过资料总结的方法:仅供参考,至少我的问题是解决了。{/callout}第一步:如下第二步:找到数据库配置文件database.php,做如下修改:'charset' => 'utf8mb4'
2023年11月01日
958 阅读
0 评论
7 点赞
2021-08-25
php报错open_basedir restriction in effect问题和TP5的think-log-viewer
首先说一下think-log-viewer:基于 Thinkphp5 开发的日志浏览组件,该组件提供了一键浏览当前项目日志的功能;然后在使用的时候发现一个问题,本地windows部署系统没有问题,线上linux系统部署报错如下:[2] ErrorException in Log.php line 40 fopen(): open_basedir restriction in effect. File(/opt/rasp_php72/logs/alarm/alarm.log.2020-08-14) is not within the allowed path(s): (/www/wwwroot/www.xtboke.com/:/tmp/:/proc/)经过研究,发现是.user.ini文件的问题,一般在根目录,我在用宝塔建站时候,勾选了防跨站攻击(open_basedir)。解决办法:在.user.ini文件后面追加 :/opt/rasp_php72/logs/,然后重启PHP即可。扩展:1.FTP里可能看不到这个文件,需要在SSH远程登陆里修改。2.ssh方式修改.user.ini权限问题,可用chattr -i .user.ini解除权限。3.检查logs目录权限,如果没有权限的话,执行 chmod 777 /opt/rasp_php72/logs 增加权限。
2021年08月25日
1,229 阅读
0 评论
9 点赞