[英]PHP realpath function question
我似乎无法让realpath函数与变量一起使用,有没有办法可以解决此问题? 当我在函数中使用变量时,它不返回任何内容,我知道没有realpath函数的路径名也可以使用,但是我想将realpath函数与路径名一起使用。
realpath('./members/' . $userId . '/images/thumbs/' . $image);
编辑真实路线。
http://localhost/Project/members/24/images/thumbs/avatar.png
好吧,它还没有完成,但是非常适合...
看。 您的站点一次处于两个领域:一个真实的和一个虚拟的。
对于站点用户,它是一个虚拟的 Web服务器,您必须了解一个非常重要的事情: Web服务器上没有文件 。 假设您在地址栏中输入http://example.com/index.html
。 它不是文件也不是路径,而是URL,HTTP资源。 虚拟地址,与常规文件完全不同。
当你作为一个网站开发,网络服务器是计算机上运行的程序 。 这台计算机很可能具有硬盘和文件系统。 您的PHP脚本在处理数据或包括其他脚本时,会处理物理磁盘上的文件 。
对于初学者来说,这种差异是一个非常常见的陷阱。
他们中的许多人将文件与超链接混淆,尝试使用HTTP协议调用本地文件,或使用来自Web服务器根目录的虚拟路径包含文件。
此外,有两件事妨碍正确理解:
要谨慎,不要让他们欺骗你。
好吧,毕竟这不是火箭科学。 一个人只需要了解以下三件事:
root
,文件系统根目录和Web服务器根目录有什么区别 第一个很容易区分:
文件属于文件系统。 这是一块存储在硬盘上的数据。 它具有几个属性,例如大小,修改时间,所有者,权限等。 它是显式的文件系统属性,没有HTTP资源。
数据文件和脚本都是文件,应将其视为文件。 如果您执行类似的操作,请include 'http://yoursite.com/file.php';
,您没有按预期包括PHP代码,而只是纯HTML-执行file.php的结果!
如果要从目录读取图像名称,请不要从http://yoursite.com/image/
读取。 它不是目录。
另一方面,HTTP资源是HTTP协议。 您的Web服务器是一个监听请求的守护程序 。 收到对由URI标识的特定资源的请求后,它将查找该资源,并且(如果找到)返回其内容以及几个HTTP标头 。
Web服务器具有自己的目录结构,但是了解此目录结构是虚拟的非常重要。 它只是一个真实的文件系统,而根本不是一个文件系统。 /dir/
/dir/file.ext
/dir/whatever
-尽管所有这些路径看起来都不同,但它们都是相同的。 这是一个棘手的主题,但要理解非常重要。 HTTP中没有文件或目录。 但是只是资源 ,它由标题和正文组成。 如果从服务器请求/dir/
URI,则将获得标头和正文。 如果从服务器请求/dir/file.ext
URI,则将获得标头和正文。 每次您从服务器请求某些内容时,都会获得标头和正文。 唯一可能的例外是包含标头但不包含正文的响应。
虽然某些资源可能类似于文件,但它们不是文件。 它们没有属性,但是有标题。 这确实是一个不同的领域。 当然,大多数时候,Web服务器只是找到与请求的URI相对应的物理文件并将其输出。 但这不再是文件,而只是文件的内容 (在某些标头之前)。 是的-区别在于:将文件区分为文件系统主题及其内容是最重要的。 如果您请求的内容看起来像是目录,则可以实现……HTML代码! 根据文件系统形式的HTML代码(带有一些标头)来区分目录是非常重要的。 (当然,您可以获得的不是HTML,而是一些二进制文件的内容-这只是Content-type标头的问题。另一个不将虚拟世界与虚拟世界混淆的原因)
结论:
如果您希望脚本直接访问文件-将其作为文件寻址。 不要通过HTTP调用它! (请注意,您的php脚本是文件;-)
如果您希望客户端使用HTTP协议访问同一文件,请将该文件作为虚拟资源进行寻址。
好吧,根是根。 一个起点。 一切开始的地方。
文件系统和Web服务器都有自己的根。
在Unix系统上,文件系统根为/
。 请注意,它不仅是目录分隔符! 如果路径从该符号开始,则为特定目录的名称-根目录。 其他所有文件和目录都属于root。 在Windows系统上,它非常混乱(照常)。 没有通用的文件系统根目录,但是具有自己根目录的单独磁盘。 它从磁盘驱动器号和反斜杠开始: C:\\
是驱动器C的根。
Web服务器具有其自己的根目录。 虚拟世界与真实世界相遇的地方。 从服务器的角度来看,Web服务器根目录(通常称为DOCUMENT_ROOT)是一个文件系统目录,Web服务器在该目录中查找表示HTTP资源的文件。 对于客户来说,它是完全合格的根-网站开始的位置。 它看起来像Unix系统的root- /
。 客户端对服务器的文件系统一无所知。 对于客户端,此/
是唯一的根。
结论:
永远知道你的根在哪里。 对于Web服务器,它很简单: 始终为 /
。 对于文件系统,知道虚拟根与现实世界相遇的地方-DOCUMENT_ROOT。 这将帮助您找到自己的文件 。
很简单 实际上,只有绝对路径是真实的。 虽然相对路径是可以想象的,并且每条相对路径在使用前总是转化为算盘。 绝对路径与root
密不可分。 实际上,绝对路径是从根构建的路径:
如您所见,前两个分别是来自UNIX和Windows的文件系统路径,而第三个则不清楚,但很可能是虚拟HTTP资源。
每个不包含根Directoctory的路径都是相对路径。 它从当前位置开始构建:
结论 :
尽可能使用绝对路径。 它是明确的,并且可以在任何地方使用,而与当前目录无关。 它可能包含可变部分,以使其在不同的环境中工作,但最后应始终是绝对的。
如果失败,例如文件不存在,则realpath()返回FALSE。
http://php.net/realpath
检查您的变量,伙计
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.