繁体   English   中英

如何打开服务器上另一个目录中的imgs文件?

[英]How do I open imgs file located in another directory on my server?

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

我尝试将PHP函数opendir()scandir()glob() scandir()一起使用,并且如果该目录位于主题目录的同一目录中,则它可以正常工作,但是我的客户端应该使用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()读取其内容glob()我要放入的数组-我猜想-尝试打印内容时结果为空。 我以为问题来自于同时使用\\/的字符串格式,所以我将所有反斜杠都变成了正斜杠,但还是一无所获,我无法检索目录中的图像(现在可以正确访问该图像了)。 如何获得图像?

我个人从未使用过媒体库+,但据我了解,它仅增强了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 ...)提供资源(html,css,js,img ...)。

一个路径表示你的计算机上的当前位置(C:\\用户\\你\\图片/ Home /图片...)

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

现在您可能想从插件为您创建的文件夹中检索图像(堆栈溢出答案: 如何在Wordpress Uploads目录中获取所有图像,然后显示所有图像?

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

您可以像这样使用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';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM