【问题标题】:How do I open imgs file located in another directory on my server?如何打开位于服务器上另一个目录中的 imgs 文件?
【发布时间】:2019-07-31 11:29:12
【问题描述】:

我是 Stackoverflow、PHP 和 WP 主题制作的新手,我面临以下问题:我正在博客主页上开发图像轮播(位于主题目录中的 home.php)但我需要在不同的目录 (/wordpress/wp-content/uploads/HP/carousel) 上检索图像,因为为了最终用户,我使用 Max Foundry 的 Wordpress 媒体库文件夹 (https://it.wordpress.org/plugins/media-library-plus/) 为轮播创建一个特定文件夹以简化为最终用户上传轮播的过程。

我尝试了 PHP 函数 opendir()scandir() 以及 glob(),如果该目录位于同一主题目录中,则它可以工作,但我的客户端应该使用 FTP 和 Filezilla 之类的东西,我不不希望他让他玩可能会破坏我的工作的工具。所以我在网上寻找了另一种解决方案:我发现我应该使用ABSPATH 或 idk 之类的东西,根本不起作用,它无法将字符串识别为路径。我还尝试使用 WP 函数 get_site_url() 在页面的另一部分中用于类似目的,但在这里它不起作用。

$dir = get_site_url().'/wp-content/uploads/HP/carousel/';

if (is_dir($dir)) //testing if it's a directory
  printf($dir);
else {
  echo 'not a directory';
}

使用ABSPATH 的结果相同。然后很明显,如果我尝试使用 opendir 打开目录,它会返回错误。

我仍在学习,我找不到一个很好的参考来解释这个函数和全局变量是如何工作的,所以我想我缺少一些东西。 我希望我的代码打开另一个目录,这是本地的,因为它在同一台服务器上,来自另一个,特别是我正在构建我的主题的目录。 非常感谢您的时间和最终的帮助。

编辑:谢谢@cptnk 和@Uri Chachick,我不知道函数wp_upload_dir() 现在路径被识别为目录,但是如果我尝试读取它的内容使用opendir()scandir()glob() 我要放入的数组 - 我猜 - 尝试打印时内容结果为空。我认为问题出在字符串的格式上,其中包含\/,所以我将所有反斜杠都变成了正斜杠,但仍然没有,我无法检索目录中的图像(现在是正确到达)。我如何才能访问图像?

【问题讨论】:

  • get_site_url 不是你应该开始使用的 - 因为那是 URLs,而不是 file system 路径。如果您不知道这种差异,请先阅读/弄清楚这一点。
  • 其次,给我们一个恰当的问题描述——不仅仅是“不工作”。 How to Ask。做一个 $dir 的调试输出,看看它是否包含你所期望的 - 或者还有什么,如果没有。
  • @misorude 让您发表评论,我认为“不起作用”的事情很清楚,因为其他用户没有理解它,但我要编辑我的问题以使其更清楚。 “不起作用”是指我无法到达我正在寻找的目录(第 2 段第 5 行)。我也知道 get_site_url() 用于 URL,正如函数名称所说,我的意思是我尝试使用 URL 和文件系统路径来打开目录,但我不知道如何正确执行,因为我的意思是做没用。

标签: php wordpress redirect directory wordpress-theming


【解决方案1】:

你可以像这样使用 wp_upload_dir():

$upload_dir = wp_upload_dir();
$dir = $upload_dir['basedir'].'/HP/carousel/';

if(is_dir($dir))  //testing if it's a directory
    printf($dir);
else {
    echo 'not a directory';
}

【讨论】:

  • 谢谢,我更新了问题解决了一半,请看一下。
  • 我尝试使用“scandir”列出目录中的文件没有问题。您可以粘贴整个代码,包括 scandir 部分吗?
  • 抱歉迟到了,我终于按照建议使用自定义帖子解决了这个问题。非常感谢您,感谢您尝试帮助我
【解决方案2】:

我个人从未使用过媒体库+,但据我了解,它只会增强 wordpress 后端功能,并且您仍然可以像往常一样与附件进行交互。

意味着您仍然可以使用https://codex.wordpress.org/Function_Reference/wp_get_attachment_url等函数并在查询后检索附件url。

如果您的代码要求您找到实际路径,您也可以使用https://developer.wordpress.org/reference/functions/wp_upload_dir/

编辑:我想我现在明白了你真正想要实现的目标或问题所在。我认为您对 URL 和 PATH 是什么有误解。

URL(统一资源定位器)并不代表您的文件系统,它用于通过 Web 服务器(nginx、apache.. .).

PATH 代表您的机器上的当前位置(C:\Users\you\pictures、/home/pictures...)

服务器通常只知道路径以及如何将它们“映射”在一起。作为客户,您永远不能看到文件路径,只能看到 URL。这就是存在 wp_upload_dir 和 wp_get_attachment_url 等 wordpress 方法的原因,因此您不必在呈现 HTML 之前手动将 PATH 转换为 URL。

现在您可能想从插件为您创建的文件夹中检索图像(堆栈溢出答案:How do I get all images within Wordpress Uploads directory, then display all?

我个人不喜欢这种方法有几个原因,大多数人可能会创建自定义帖子类型或使用带有选项页面功能 (https://www.advancedcustomfields.com/add-ons/options-page/) 的 ACF 等插件来保存信息。

【讨论】:

  • 谢谢,我更新了问题解决了一半,请看一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2023-03-18
  • 2010-10-10
相关资源
最近更新 更多