【问题标题】:PHP opendir works fine with relative path and not with absolute one?PHP opendir 适用于相对路径而不是绝对路径?
【发布时间】:2011-10-23 20:19:59
【问题描述】:

问题来了: 在一个地方,我使用相对路径来加载某个文件夹中所有文件的名称:

if ($handle = opendir('images/uploads/form_id_1103/1'))

这工作正常,但如果我将其更改为:

if ($handle = opendir('/images/uploads/form_id_1103/1'))

我收到一个错误:No such file or directory in - 顺便提一下,images 文件夹在根目录中,所以 /images 应该是有效的

与此同时,如果我显示来自该(“不存在”)文件夹的图像

<img src="/images/uploads/form_id_1103/1/test.jpg">

它工作正常并显示图像。

我不能使用相对路径,因为我正在使用 Apache 的 mod_rewrite 将 URL 转换为 SEO 友好的。

【问题讨论】:

  • 只需使用 DIR.'/images/uploads/form_id_1103/1' 就不用担心了。使用 realpath(DIR.'/images/uploads/form_id_1103/1') 查看绝对路径。比较你得到的,看看哪里出了问题。

标签: php relative-path absolute-path opendir


【解决方案1】:

您将 Web URL 与文件系统路径混淆了。 PHP 的基于文件的函数不适用于 URL,除非它们是完整的+绝对的 http://blah/blah/blah/blah)。如果要使用绝对路径,则需要找出服务器上图像的真实路径。应该是这样的

/home/site/example.com/docroot/images/etc...
                               ^---url starts here.

【讨论】:

  • 谢谢马克!我什至没有想过要尝试这个 - 我正在使用 UBUNTU 并在前面添加 /var/www 为我的本地机器解决了这个问题。我希望在真正的主机上它可以与 /images 而不是 /public_html/images ... 例如。
  • 澄清一下,对于访问此页面的其他人,在与 cPanel 共享主机上,我的真实路径是这样的:/home//public_html/images ... where 是我的 cPanel 日志用户名
【解决方案2】:

如果您在 Linux 服务器上以 / 开头的路径。它将被处理,就好像您从 linux 安装的根目录打开目录一样。不相对于当前的 PHP 文件。路径开头的点表示当前目录。

【讨论】:

  • 也感谢 PizzaMartijn!您还指出了我真正的问题 - / 用于 linux 安装的根目录。
猜你喜欢
  • 2011-07-12
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 2012-08-29
  • 2010-12-17
相关资源
最近更新 更多