【问题标题】:Using fopen() method in PHP在 PHP 中使用 fopen() 方法
【发布时间】:2013-02-19 13:49:16
【问题描述】:

我需要获取给定 url 位置中的所有文件。

示例:考虑这个网址 - http://www.test.com/test/ 我在给定 url 的测试文件夹中有三个文件(file1.txt、file2.csv、file3.xls)。如何在 PHP 中使用 fopen() 方法读取文件名?

【问题讨论】:

  • 您不能像从文件系统文件夹中一样从 URL 中列出文件。您必须解析 Web 服务器显示的目录索引(如果有的话);它将是 HTML 格式
  • 执行您想要的操作的可能性取决于提供 URL 的 HTTP 服务器是否配置为返回目录索引。

标签: php


【解决方案1】:

这取决于处理 URL 的 HTTP 服务器返回目录索引的能力。即使它能够返回索引,这种索引的格式也不是标准化的。如果你知道 HTTP 服务器返回目录索引并且你知道格式,你可以得到这样的文件列表:

$index = fopen ('http://ftp.gnu.org/', 'r');
$data = "";
while ($d = fread ($index, 65536))
  $data = $data . $d;

$matches = array ();
preg_match_all ('/href="([^"]+)"/', $data, $matches);

print_r ($matches [1]);

【讨论】:

  • 这不也匹配页面上的任何类型href 吗? (以及顶部的链接)
  • @h2ooooooo 当然可以,但是自动生成的目录索引通常不会包含太多不相关的链接。如果是这样,您需要以某种方式将它们过滤掉。这再次取决于特定服务器的目录索引格式,该格式未标准化。
  • 嗨,米哈伊尔...谢谢您的回复。我从你的代码 sn-p 中得到了一个很好的结果。以下是我收到的输出。数组 ( [0] => ?C=N;O=D [1] => ?C=M;O=A [2] => ?C=S;O=A [3] => ?C=D ;O=A [4] => /test1/test2/data/ [5] => 出勤%20(another%20copy).txt [6] => 出勤%20(copy).txt [7] => 出勤.csv )实际上我在数据文件夹中有三个文件。我可以从上面数组中的元素 5,6 和 7 中看到这三个文件。但我想知道为什么这个数组有一些额外的元素(0、1、2、3 和 4)。你能解释一下这个原因吗?
  • 只需在浏览器中打开http://ftp.gnu.org/,您就会看到答案。你需要想办法过滤掉不相关的链接,这个方法取决于你连接的服务器。
【解决方案2】:

如果您想要的只是某个目录中的文件列表,那么请尝试 fopen() 而不是 scandir

$dir = "http://www.test.com/test/"

$files = scandir($dir);

print_r($files);

如果主机服务器权限允许,您应该得到以下结果:

Array(
[0] => .,
[1] => ..,
[2] => file1.txt,
[3] => file2.csv,
[4] => file3.xsl
)

然后您可以随时循环遍历数组以生成结果的<ul>,或者您希望显示的内容。

【讨论】:

  • 感谢您的回复马特。但是你的方法对我不起作用。这是我在 localhost 中测试的。
  • 您是否也尝试过使用相对路径?例如:$dir = "/test/"; 与以下代码相同?相对路径适用于我的本地主机
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
相关资源
最近更新 更多