【php】相对路径/绝对路径报错?【你所不知道的路径用法】

相对路径报错原因:文件夹名称或路径含中文。

>>>>>>>>>>>>>>>>>>>温馨提示:内容略长,点击此处直达重点



准备工作:将同名不同内容文件分别放置demo目录和环境目录

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第1张图片
【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第2张图片



文章目录

  • 一、先来看看几种用来操作文件的函数的情况(同级目录,即相对路径下)
    • 1.require 调用同级文件,毫无压力
    • 2.file() 只要父级文件夹是中文就会获取到环境目录下的同名文件,而非同级的。
    • 3.file_get_contents() 跟 file() 是一样的情况
    • 4.file_exists() ,我先把环境目录下的同名文件删了,这样它获取到的就是0个了,不信请看
  • 二、再说个我昨天的新鲜例子(文件上传功能)
    • 1.首先测试当父级英文名时,通过相对路径保存到当前目录(真香)
      • a)当前目录的相对路径为: ./
      • b)上传一张图片,不用说,成功保存
    • 2.不改变代码,修改父级文件夹名称为中文,会出现什么情况
      • a)首先,到环境目录下搜索关键词,以证明开始并不存在该图
      • b)再到编辑器,将父文件夹名称修改为中文,操作上传图片,发现成功保存,但目录下并不存在
      • c)来到环境目录,重新搜索,发现,被保存在这里
    • 3. 无论是 '文件名.后缀' 还是 './' ,都是指代当前目录(路径或文件),如果父级中文名,它并不会报错,而是指向环境目录。但如果脱离了当前目录,它就直接各种报错了
    • 4.换成绝对路径,成功访问
    • 5.没错,绝对路径确实可以解决上面的问题,但是,img的src,并不支持绝对路径!
      • a)使用绝对路径来一次,报错
      • b)换成相对路径再来一次
    • 6.那问题就来了呀!路径不想修改成英文名,保存无法用相对路径,只能用绝对路径;图片读取不能用绝对路径,只能用相对路径,这么矛盾,到底怎么解决,难道只能用英文了?
  • 三、你所不知道的路径用法,绝对中的相对路径
    • 1.首先定义一个指向当前脚本的【绝对路径】
    • 2.然后再定义一个从当前脚本到目标文件的【相对路径】
    • 3.需要谁就用谁,还可以互相搭配
    • PS:保存到数据库的路径,是需要包含图片名的

一、先来看看几种用来操作文件的函数的情况(同级目录,即相对路径下)

1.require 调用同级文件,毫无压力

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第3张图片

2.file() 只要父级文件夹是中文就会获取到环境目录下的同名文件,而非同级的。

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第4张图片
【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第5张图片

3.file_get_contents() 跟 file() 是一样的情况

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第6张图片
【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第7张图片

4.file_exists() ,我先把环境目录下的同名文件删了,这样它获取到的就是0个了,不信请看

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第8张图片
【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第9张图片
【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第10张图片

还有 move_uploaded_file() 等也是如此,只要你外部磁盘直到到你的php脚本的路径有中文,那你用相对路径去移动文件,就会把文件移动到php环境目录下,目标目录,却空空如也。

Q:那,难道就没有解决的办法了么?
A:有,文件夹用英文命名,路径用起来就不会各种报错了。
Q:可,有些文件下安装好软件了,改名会影响运行;而且,英文看起来麻烦,中文就很清晰,能有让中文路径也能访问的方法吗?
A:有,使用绝对路径。
Q:绝对路径好是好,访问中文路径没阻碍,可是,有些地方用绝对路径也会提示错误,而且,中文更可读,一堆鸡肠不习惯,还有更好的办法么?
A:有的,经本人测试,发现了一种更可行解决方法。你所不知道的路径方法,解决 move_uploaded_file() 等各种路径访问操作。



二、再说个我昨天的新鲜例子(文件上传功能)

1.首先测试当父级英文名时,通过相对路径保存到当前目录(真香)

a)当前目录的相对路径为: ./

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第11张图片

b)上传一张图片,不用说,成功保存

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第12张图片

2.不改变代码,修改父级文件夹名称为中文,会出现什么情况

a)首先,到环境目录下搜索关键词,以证明开始并不存在该图

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第13张图片

b)再到编辑器,将父文件夹名称修改为中文,操作上传图片,发现成功保存,但目录下并不存在

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第14张图片

c)来到环境目录,重新搜索,发现,被保存在这里

3. 无论是 ‘文件名.后缀’ 还是 ‘./’ ,都是指代当前目录(路径或文件),如果父级中文名,它并不会报错,而是指向环境目录。但如果脱离了当前目录,它就直接各种报错了

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第15张图片

4.换成绝对路径,成功访问

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第16张图片

5.没错,绝对路径确实可以解决上面的问题,但是,img的src,并不支持绝对路径!

a)使用绝对路径来一次,报错

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第17张图片

b)换成相对路径再来一次

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第18张图片

6.那问题就来了呀!路径不想修改成英文名,保存无法用相对路径,只能用绝对路径;图片读取不能用绝对路径,只能用相对路径,这么矛盾,到底怎么解决,难道只能用英文了?



三、你所不知道的路径用法,绝对中的相对路径

【当初在慕课看过张旭鑫大佬讲解position定位之绝对定位中的相对定位的方法(思维),然后就想在这里尝试这种方法,发现居然可行且好用】

1.首先定义一个指向当前脚本的【绝对路径】

$abUrl = '从磁盘卷标出发,指向当前脚本的绝对路径';

2.然后再定义一个从当前脚本到目标文件的【相对路径】

$reUrl = '从当前脚本出发,指向目标文件的相对路径';

3.需要谁就用谁,还可以互相搭配

  • 检测当前目录文件是否存在,绝对相对一起用
  • 移动文件保存到目录,绝对相对一起用
  • 存储进数据库的url,就用相对路径(只要你的读取图片脚本跟当前脚本同在一个目录下,就没问题的)
  • 显示文件保存到哪里,随意,爱用谁用谁,两个一起也没啥
    【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第19张图片

PS:保存到数据库的路径,是需要包含图片名的

【php】相对路径/绝对路径报错?【你所不知道的路径用法】_第20张图片
返回顶部,再来一遍

你可能感兴趣的:(PHP学习)