php5.5 session,(五)ThinkPHP实践之Session驱动-TTLSA

Session驱动是指Session在thinkphp中的存储驱动,通过不同的方式,可以将Session存储在不同的“容器”中

对Session有兴趣的的朋友可以查阅相关资料,本篇仅针对thinkphp的session驱动进行讲解

一、DB驱动

知识点:

1、thinkphp框架默认DB驱动调用

2、SessionDB驱动库调用详解

3、创建DB驱动数据表tb_session

4、验证session自动生成

1、thinkphp框架默认DB驱动调用

如果在不设置任何驱动的情况下,windows会存储在wamp/tmp/目录下,linux会存储在/tmp/目录下,文件名都以"sess_"为前缀

其实说调用只是让DB类生效,作为Session的默认存储方式

配置方法是在message/admin/Conf/config.php文件中加入

'SESSION_TYPE' => 'Db',

1

'SESSION_TYPE'=>'Db',

即可,这样DB驱动就配置完成了

2、SessionDB驱动库调用详解

很多朋友估计跟我一样,配置完了发现自己好像什么都没明白,于是就要挖根究底,找到了调用DB驱动类的方法

首先找到框架默认函数文件在ThinkPHP框架目录下Common/functions.php

找到session管理函数段

重点代码如下:

//以下内容就是查找驱动类的判断

if(C('SESSION_TYPE')) { // 读取session驱动

//我们设置的是Db类型

$class = 'Session'. ucwords(strtolower(C('SESSION_TYPE')));

//$class在这里经过处理最终为SessionDb

// 检查驱动类

if(require_cache(EXTEND_PATH.'Driver/Session/'.$class.'.class.php')) {

//这个判断会找到Extend/Driver/Session/SessionDb.class.php

$hander = new $class();

$hander->execute();

}else {

// 类没有定义

throw_exception(L('_CLASS_NOT_EXIST_').': ' . $class);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//以下内容就是查找驱动类的判断

if(C('SESSION_TYPE')){// 读取session驱动

//我们设置的是Db类型

$class='Session'.ucwords(strtolower(C('SESSION_TYPE')));

//$class在这里经过处理最终为SessionDb

// 检查驱动类

if(require_cache(EXTEND_PATH.'Driver/Session/'.$class.'.class.php')){

//这个判断会找到Extend/Driver/Session/SessionDb.class.php

$hander=new$class();

$hander->execute();

}else{

// 类没有定义

throw_exception(L('_CLASS_NOT_EXIST_').': '.$class);

}

}

文件位置在ThinkPHP框架目录下Extend/Driver/Session/SessionDb.class.php

Session相关操作具体内容就不在这里讲解了

3、创建DB驱动数据表tb_session

创建这个表无需我们手动去建表,在SessionDb.class.php的开始部分,就有一段已经编写好的sql

复制那段sql,并且修改为如下:

; html-script: false ]CREATE TABLE tb_session (

session_id varchar(255) NOT NULL,

session_expire int(11) NOT NULL,

session_data blob,

UNIQUE KEY `session_id` (`session_id`)

);

1

2

3

4

5

6

;html-script:false]CREATETABLEtb_session(

session_idvarchar(255)NOTNULL,

session_expireint(11)NOTNULL,

session_datablob,

UNIQUEKEY`session_id`(`session_id`)

);

在数据库中执行即可创建成功

4、验证session自动生成

经过以上步骤,Session驱动已经全部设置完毕

接下来我们要验证Session是否正确生成了

验证方法其实很简单,就是登录以后,查看tb_session数据表中是否生成了对应的session记录即可

另:由于session_data为二进制数据,所以无法直接在数据库中查看,可通过程序查出,并通过print_r即可全部显示

简易验证方法在IndexAction.class.php中加入如下代码:

; html-script: false ]$session=M('session')->find();

print_r($session);

1

2

;html-script:false]$session=M('session')->find();

print_r($session);

二、Redis驱动

知识点:

1、初识Redis及Redis在Windows下的安装和使用

2、Redis驱动配置

3、Redis驱动使用

4、Redis驱动验证

1、初识Redis及Redis在Windows下的安装和使用

http://www.newasp.net/soft/67186.html#downloads

下载解压,根据自己的操作系统打开相应的目录

双击redis-server.exe

即可开启redis服务

2、Redis驱动配置

在massage/admin/Conf/config.php中添加如下配置:

//Session相关配置

; html-script: false ]'SESSION_PREFIX' => 'Sess_',

'SESSION_TYPE' => 'Redis',

//Redis相关配置

'REDIS_HOST' => '127.0.0.1',

'REDIS_PORT' => '6379',

1

2

3

4

5

;html-script:false]'SESSION_PREFIX'=>'Sess_',

'SESSION_TYPE'=>'Redis',

//Redis相关配置

'REDIS_HOST'=>'127.0.0.1',

'REDIS_PORT'=>'6379',

以上配置中,除了SESSION_PREFIX以外,其他配置都是必须要设置的

这里要特别说明下,本地化支持

如果在初始化session设置的时候传入prefix参数或者单独设置了SESSION_PREFIX参数的话,就可以启用本地化session管理支持。启动本地化session后,所有的赋值、取值、删除以及判断操作都会自动支持本地化session。

本地化session支持开启后,生成的session数据格式由原来的

$_SESSION['name'] 变成 $_SESSION['前缀']['name']

假设前缀设置为think,则赋值操作:

session('name','value'); //设置session

相当于:

$_SESSION['think']['name'] = 'value';

取值操作:

$value = session('name');

相当于使用:

$value = $_SESSION['think']['name'];

删除操作:

session('name',null);

相当于:

unset($_SESSION['think']['name']);

清空操作:

session(null);

相当于:

unset($_SESSION['think']);

判断操作:

session('?name');

相当于:

isset($_SESSION['think']['name']);

参考:http://www.thinkphp.cn/simple/functions_session.html

3、Redis驱动使用

基于SessionDb.class.php,在ThinkPHP框架目录(message/ThinkPHP/Extend/Driver/Session/)中,新建SessionRedis.class.php

代码如下:

; html-script: false ]<?php

//自定义redis处理 驱动

Class SessionRedis {

//REDIS连接对象

Private $redis;

//SESSION有效时间

Private $expire;

//functions.php有定义默认执行方法为execute

//具体代码可参考Common/functions.php中,搜索session,可查询到相关session自动执行的方法

Public function execute () {

session_set_save_handler(

array(&$this,"open"),

array(&$this,"close"),

array(&$this,"read"),

array(&$this,"write"),

array(&$this,"destroy"),

array(&$this,"gc"));

}

//打开Session

Public function open ($path, $name) {

$this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');

$this->redis = new Redis();

return $this->redis->connect(C('REDIS_HOST'),C('REDIS_PORT'));

}

Public function close () {

return $this->redis->close();

}

Public function read ($id) {

$id = C('SESSION_PREFIX') . $id;

$data = $this->redis->get($id);

return $data ? $data : '';

}

//写入session

Public function write ($id, $data) {

$id = C('SESSION_PREFIX') . $id;

return $this->redis->set($id, $data, $this->expire);

}

//销毁SESSION

Public function destroy ($id) {

$id = C('SESSION_PREFIX') . $id;

return $this->redis->delete($id);

}

Public function gc ($maxLifeTime) {

return true;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

;html-script:false]<?php

//自定义redis处理 驱动

ClassSessionRedis{

//REDIS连接对象

Private$redis;

//SESSION有效时间

Private$expire;

//functions.php有定义默认执行方法为execute

//具体代码可参考Common/functions.php中,搜索session,可查询到相关session自动执行的方法

Publicfunctionexecute(){

session_set_save_handler(

array(&$this,"open"),

array(&$this,"close"),

array(&$this,"read"),

array(&$this,"write"),

array(&$this,"destroy"),

array(&$this,"gc"));

}

//打开Session

Publicfunctionopen($path,$name){

$this->expire=C('SESSION_EXPIRE')?C('SESSION_EXPIRE'):ini_get('session.gc_maxlifetime');

$this->redis=newRedis();

return$this->redis->connect(C('REDIS_HOST'),C('REDIS_PORT'));

}

Publicfunctionclose(){

return$this->redis->close();

}

Publicfunctionread($id){

$id=C('SESSION_PREFIX').$id;

$data=$this->redis->get($id);

return$data?$data:'';

}

//写入session

Publicfunctionwrite($id,$data){

$id=C('SESSION_PREFIX').$id;

return$this->redis->set($id,$data,$this->expire);

}

//销毁SESSION

Publicfunctiondestroy($id){

$id=C('SESSION_PREFIX').$id;

return$this->redis->delete($id);

}

Publicfunctiongc($maxLifeTime){

returntrue;

}

}

接下来只要任何的Session操作,都会在Redis中记录相关记录

PS:在开始使用Redis之前,先要找到php_redis.dll扩展,否则会出现

Class 'Redis' not found

这样的提示

Win7下64位系统可能还需要手动编译下才能加载成功

具体方法可参考:http://hi.baidu.com/rendong/item/c9cbacc289a4a4340831c60b

4、Redis驱动验证

先来写入一些Session吧,由于之前的登录操作都有用到Session相关操作,那么我们就直接查看存入和读取的内容即可

打开redis-cli.exe

输入keys *

默认是为空的

这时候我们进入http://localhost/message/admin.php

完成一次登录操作

这时候再输入keys *

即可看到最新产生的Session

; html-script: false ]Sess_vf1egakhgkv9s6tq7uo480eo02

1

;html-script:false]Sess_vf1egakhgkv9s6tq7uo480eo02

输入get Sess_vf1egakhgkv9s6tq7uo480eo02

即可看到相关的session信息

; html-script: false ]redis 127.0.0.1:6379> get Sess_vf1egakhgkv9s6tq7uo480eo02

"Sess_|a:5:{s:6:\"verify\";s:32:\"6a182a16e66268d7ce85fcfe945df787\";s:3:\"uid\"

;s:1:\"1\";s:8:\"username\";s:5:\"admin\";s:9:\"logintime\";s:19:\"2014-03-09 23

:37:43\";s:7:\"loginip\";s:9:\"127.0.0.1\";}"

1

2

3

4

;html-script:false]redis127.0.0.1:6379>getSess_vf1egakhgkv9s6tq7uo480eo02

"Sess_|a:5:{s:6:\"verify\";s:32:\"6a182a16e66268d7ce85fcfe945df787\";s:3:\"uid\"

;s:1:\"1\";s:8:\"username\";s:5:\"admin\";s:9:\"logintime\";s:19:\"2014-03-09 23

:37:43\";s:7:\"loginip\";s:9:\"127.0.0.1\";}"

PS:由于启用了SESSION_PREFIX

这时候要查看相关的SESSION信息

要用如下方式来查看$_SESSION[C('SESSION_PREFIX')]['uid']

三、Memcache驱动

知识点:

1、初识Memcache及Memcache在Windows下的安装和使用

2、Memcache驱动配置

3、Memcache驱动使用

4、Memcache驱动验证

1、初识Memcached及Memcache在Windows下的安装和使用

Memcached和Redis一样,是个key-value的nosql容器

还需要注意Memcached是memcache的服务端,而memcache,一般是指memcache的客户端

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

关于Memcached的介绍请参考:Memcached深度分析

下载Windows的Server端

安装Memcache Server(也可以不安装直接启动)

1. 下载memcached的windows稳定版,解压放某个盘下面,比如在c:\memcached

2. 在CMD下输入 "c:\memcached\memcached.exe -d install" 安装.

3. 再输入:"c:\memcached\memcached.exe -d start" 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。

如果下载的是二进制的版本,直接运行就可以了,可以加上参数来加以设置。

常用设置:

-p 监听的端口

-l 连接的IP地址, 默认是本机

-d start 启动memcached服务

-d restart 重起memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-d install 安装memcached服务

-d uninstall 卸载memcached服务

-u 以的身份运行 (仅在以root运行的时候有效)

-m 最大内存使用,单位MB。默认64MB

-M 内存耗尽时返回错误,而不是删除项

-c 最大同时连接数,默认是1024

-f 块大小增长因子,默认是1.25

-n 最小分配空间,key+value+flags默认是48

-h 显示帮助

要在windows下让php支持memcache是需要下载对应的dll

http://www.com133.com/11

这里有对应版本的下载,大家可以根据版本自行下载

2、Memcache驱动配置

修改掉之前的Redis配置

在Conf/config.php中添加

; html-script: false ]//Memcache

'SESSION_TYPE' => 'Memcache',

//Memcache服务器

'MEMCACHE_HOST' => '127.0.0.1',

//Memcache端口

'MEMCACHE_PORT' => '11211',

1

2

3

4

5

6

;html-script:false]//Memcache

'SESSION_TYPE'=>'Memcache',

//Memcache服务器

'MEMCACHE_HOST'=>'127.0.0.1',

//Memcache端口

'MEMCACHE_PORT'=>'11211',

3、Memcache驱动使用

将原来Redis驱动复制为SessionMemcache.class.php

位置依然在message/ThinkPHP/Extend/Driver/Session/SessionMemcache.class.php

代码如下:

; html-script: false ]<?php

//自定义memcache处理 驱动

Class SessionMemcache {

//memcache连接对象

Private $memcache;

//SESSION有效时间

Private $expire;

Public function execute () {

session_set_save_handler(

array(&$this,"open"),

array(&$this,"close"),

array(&$this,"read"),

array(&$this,"write"),

array(&$this,"destroy"),

array(&$this,"gc"));

}

//打开Session

Public function open ($path, $name) {

$this->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');

$this->memcache = new Memcache();

return $this->memcache->connect(C('memcache_HOST'),C('memcache_PORT'));

}

Public function close () {

return $this->memcache->close();

}

Public function read ($id) {

$id = C('SESSION_PREFIX') . $id;

$data = $this->memcache->get($id);

return $data ? $data : '';

}

//写入session

Public function write ($id, $data) {

$id = C('SESSION_PREFIX') . $id;

return $this->memcache->set($id, $data, $this->expire);

}

//销毁SESSION

Public function destroy ($id) {

$id = C('SESSION_PREFIX') . $id;

return $this->memcache->delete($id);

}

Public function gc ($maxLifeTime) {

return true;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

;html-script:false]<?php

//自定义memcache处理 驱动

ClassSessionMemcache{

//memcache连接对象

Private$memcache;

//SESSION有效时间

Private$expire;

Publicfunctionexecute(){

session_set_save_handler(

array(&$this,"open"),

array(&$this,"close"),

array(&$this,"read"),

array(&$this,"write"),

array(&$this,"destroy"),

array(&$this,"gc"));

}

//打开Session

Publicfunctionopen($path,$name){

$this->expire=C('SESSION_EXPIRE')?C('SESSION_EXPIRE'):ini_get('session.gc_maxlifetime');

$this->memcache=newMemcache();

return$this->memcache->connect(C('memcache_HOST'),C('memcache_PORT'));

}

Publicfunctionclose(){

return$this->memcache->close();

}

Publicfunctionread($id){

$id=C('SESSION_PREFIX').$id;

$data=$this->memcache->get($id);

return$data?$data:'';

}

//写入session

Publicfunctionwrite($id,$data){

$id=C('SESSION_PREFIX').$id;

return$this->memcache->set($id,$data,$this->expire);

}

//销毁SESSION

Publicfunctiondestroy($id){

$id=C('SESSION_PREFIX').$id;

return$this->memcache->delete($id);

}

Publicfunctiongc($maxLifeTime){

returntrue;

}

}

添加如上代码后,即配置驱动完成,其他程序代码无需修改

接下来就是验证了

4、Memcache驱动验证

Memcache测试方法比Redis相对要复杂一些,需要掌握一些Memcache内置的命令

由于这个例子我觉得有其他用途,所以专门写了篇文章,有需要的朋友可以自行查看

具体操作参见

http://www.ttlsa.com/memcache/memcache-list-all-keys/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8备忘单中的可选

Java 8 java.util.Optional<T>是scala.Option[T]和Data.Maybe在Haskell中的较差表亲。 但这并不意味着它没有用。 如果您不熟悉此概念&#xff0c;请将Optional想象为可能包含或不包含某些值的容器。 就像Java中的所有引用都可以指向某个对象或为null &#xff0c; Optio…

SQL Server2012 安装方法

请看 https://blog.csdn.net/monkeybrothers/article/details/78021848转载于:https://www.cnblogs.com/nanqiang/p/9596528.html

卡方线性趋势检验_SPSS:趋势卡方检验

SPSS&#xff1a;趋势卡方检验毕业季接近尾声&#xff0c;通过答辩的各位同学们即将开始新的旅程。回顾论文点滴&#xff0c;想必既有心酸又充满欣慰。回顾毕业生咨询论文写作得到一个启示与各位分享&#xff1a;论文完成的过程也是还原临床研究的过程&#xff0c;论文收集资料…

让 Chrome 崩溃的一行 CSS 代码

一般的 CSS 代码只会出现 UI 版式或者兼容性方面的小问题。但这里我们要分享一行有趣的 CSS&#xff0c;它可以直接让你的 Chrome 页面挂掉 :) 复现 在 Chrome 里打开一个稍复杂的页面&#xff0c;比如知乎或者掘金打开开发者工具&#xff0c;为页面 <body> 增加样式 s…

oracle块空间的使用,Oracle管理存储架构(二)--Oracle管理数据块空间

1、数据块的概念数据块是数据库中最小的分配单元&#xff0c;块是数据库使用的最小的I/O单元&#xff0c;由一个或多个操作系统block组成。数据块由block header 、free space 、data 组成&#xff0c;oracle 10g 标准块是8k&#xff0c;支持2~32k。块头&#xff1a;包含块地址…

在JBoss 7中使用HA Singleton

不久前&#xff0c;我不得不更改Quartz Scheduler的标准集群行为&#xff0c;并使其能够在不同步数据库的情况下工作。 当然&#xff0c;有很多选择可以做到这一点&#xff0c;但是由于我是简单性的忠实拥护者&#xff0c;因此我决定使用标准的Spring Scheduled配置&#xff0c…

软件目录结构规范

软件目录结构规范 为什么要设计好目录结构? "设计项目目录结构"&#xff0c;就和"代码编码风格"一样&#xff0c;属于个人风格问题。对于这种风格上的规范&#xff0c;一直都存在两种态度: 一类同学认为&#xff0c;这种个人风格问题"无关紧要"…

软件工程的基本步骤

&#xff11;问题定义 问题定义阶段必须回答的关键问题&#xff1a;“要解决的问题是什么&#xff1f;”如果不知道问题是什么就试图解决这个问题&#xff0c;显然是盲目的&#xff0c;只会白白浪费时间和金钱&#xff0c;最终得出 的结果很可能是毫无意义的。尽管确切地定义问…

matlab norm函数使用_matlab norm(a-b)

(示例: X(1:10,1:10)zeros(10,10),LX[X,X;X,X]) Matlab 中冒号(: )的使用方法小结: (1)用于生成向量,a:b,一般要求 a一、matlab 基本操作 Matlab 概率论与数理统计 1. ...概率密度函数 1 (1) 均匀分布:unifpdf(x,a,b)...{X 3}, p1normcdf(5,3,2)- normcdf(2,3,......[A B];rank…

解决MyEclipse JAVA EE无法识别Base64问题

第一步&#xff1a;右击项目选择Build Path,选择Configure Build Path第二步:点击JRE System Library选择右边的Edit第三步&#xff1a;选择Alternate JRE,点击Install JREs第四步&#xff1a;移出原有的MyEclipse自带的 JRE&#xff0c;&#xff08;选中后点击remove&#xff…

JavaFX的响应式设计

使用CSS技术&#xff0c;为您的网站创建响应式设计相对容易。 根据屏幕的大小&#xff0c;您可以使用其他CSS文件和布局。 在JavaFX中&#xff0c;乍一看这似乎有点困难&#xff0c;因为CSS仅负责样式&#xff0c;而不负责布局。 但是&#xff0c;为各个屏幕尺寸使用不同的FXML…

用Vue Node从零开始实现拼多多前后端商城项目 — 记录踩坑之旅(上篇)

前言 本人移动端开发妹子工程师一枚 &#xff0c;因为公司项目需要用到前端的技术(主要是vue)&#xff0c;自己自学了一段时间&#xff0c;最近花了半个月在工作之余的时间终于自己完完整整写下来一整个前后端商城项目(当然是跟了一个线上项目直播班&#xff0c;不要嘲笑我)&am…

python自动补全库_这个库厉害了,自动补全Python代码,节省50%敲码时间

近日&#xff0c;Reddit 上的一篇帖子引起了网友的热议。帖子作者「mlvpj」称&#xff1a;「我们使用深度学习完成了一个简单的项目&#xff0c;可以自动进行 Python 代码补全。」根据介绍&#xff0c;该项目基于 LSTM 模型&#xff0c;训练后&#xff0c;负责对代码的缺失部分…

matlab 小波 cdd,[Matlab] 单导联心电数据的小波(包)消噪及压缩

% 用小波(包)对MitbihCmprTstExample_08730_01(软硬阈值)进行消噪与压缩clear all;clc;close all;disp(用小波(包)对MitbihCmprTstExample_08730_01(软硬阈值)进行消噪和压缩);load MitbihCmprTstExample_08730_01.mat;countlength(sig);xsig(:,1); ysig(:,2); zsig(:,3);TSx(2…

系统重装助手教你如何在Microsoft Edge中恢复“关闭所有选项卡”警告

在Microsoft Edge中&#xff0c;当您打开多个选项卡时&#xff0c;浏览器将显示“您要关闭所有选项卡吗&#xff1f;” 警告&#xff0c;以防止您意外关闭重要标签。 通常&#xff0c;在没有第二个想法的情况下&#xff0c;您会立即禁用此功能&#xff0c;检查提示中的“始终关…

受JAAS保护的JAX-RS端点

随着RESTFUL&#xff08;JAX-RS&#xff09;作为创建Web服务端点的“首选”方式的问世&#xff0c;很长一段时间以来&#xff0c;我一直想知道人们如何围绕它实现安全机制。 归根结底&#xff0c;我假设JAX-RS的基础实现是servlet&#xff0c;因此其安全性也可能围绕容器&…

es springboot 不设置id_springboot整合ES_文档ID删除

1.本课程涵盖**SpringBoot2.x版本10个常用技术点适应企业开发要求&#xff0c;学习IDEA开发工具下的SpringBoot2.x开发学习SpringBoot2.x - 基于Restful接口开发规范学习SpringBoot2.x - 官方推荐模版引擎 - Thymeleaf开发学习SpringBoot2.x - MockMVC测试学习SpringBoot2.x - …

前端必须懂的计算机网络知识—(跨域、代理、本地存储)

前端必须懂的计算机网络知识系列文章&#xff1a; DNS服务器和跨域问题计算机网络的分层模型IP地址和MAC地址前端必须懂的计算机网络知识—(跨域、代理、本地存储)前端必须懂的计算机网络知识—(TCP)前端必须懂的计算机网络知识—(HTTP)前端必须懂的计算机网络知识—(XSS、CSR…

axios请求报Uncaught (in promise) Error: Request failed with status code 404

使用axios处理请求时&#xff0c;出现的问题解决 当url是远程接口链接时&#xff0c;会报404的错误&#xff1a; Uncaught (in promise) Error: Request failed with status code 404 解决方法&#xff1a; var instance axios.create({ headers: {content-type: application/…

php canvas 前端JS压缩,获取图片二进制流数据并上传

<?php if(isset($_GET[upload]) && $_GET[upload] img){//二进制数据流$data file_get_contents ( php://input ); // 不需要php.ini设置&#xff0c;内存压力小if(empty($data)){$data gzuncompress ( $GLOBALS [HTTP_RAW_POST_DATA] ); // 需要php.ini设…