PHP file_put_contents获取文件扩展名/类型



PHP中可以获取带有file_put_contents的文件扩展名吗?

我想使用 php 和 cycle 从服务器下载文件,但每个文件都有不同的类型,我想知道是否有办法了解每个文件的扩展名?

代码示例:

<?php 
  $url = 'http://www.domain.com/file/123';
  $fopen = fopen($url, 'r');
  file_put_contents("filename", $fopen);
  fclose($fopen);
?>

我怎样才能找出文件类型,因为如果我只用名称放置它就变得不切实际了?

我知道

你的问题是你不知道要为这个文件放什么扩展名。保存文件后,您可以像这样检测MIME类型和扩展名

$fi = new finfo(FILEINFO_MIME,'/path/filename');
$mime_type = $fi->buffer(file_get_contents($file));

找到 MIME 类型后,您可以重命名它。当然请记住,这需要来自HDD的额外IO。

也许可以像这样尝试:

get_headers ( $url )

http://php.net/manual/en/function.get-headers.php

通过HTTP传输的文件可能在Content-Disposition HTTP标头中具有名称。如果没有,应该有一个Content-Type HTTP 标头,它至少告诉您文件的 MIME 类型;您可以将其映射到文件扩展名,并需要自己编造一些文件名。如果两者都不在场,则只能靠自己。

第一步是在下载 HTTP 正文之前读取 HTTP 标头。curl 扩展可以做到这一点,get_headers可以做到这一点(尽管需要额外的往返),或者其他基于套接字的 HTTP 库可以做到这一点(我推荐这个,你想发出一个 HTTP 请求,访问标头,但不将整个文件读入内存)。四处寻找可以为您执行此操作的库,这是一个有点广泛的主题。

最新更新