如何使用PHP读取文件属性?

5
我想知道是否有一种方法可以像在Windows中右键单击文件并设置其属性一样,将作者等数据存储在文件中?我能否在PHP中读取这些属性?
我真正想做的是将图像上传到目录中,并在PHP页面中显示图像时,直接从jpg(或png)文件的“属性”中获取alt属性。
我尝试了PHP的finfo_file()函数,但没有成功。
感谢任何帮助。

finfo只处理文件的MIME类型(例如image/jpeg),它不会从文件中读取任意元数据。Windows资源管理器实际上是打开文件并告诉某些插件去提取元数据。 - Marc B
我认为数据库是解决这个问题的最佳方案... 它甚至不需要是SQL数据库,CouchDB也可以很好地工作。 - isaacparrot
@Fallen 是的,但我希望网站所有者能够编辑文件,而不需要了解MySQL或HTML。 - jeff
3个回答

3
我想知道是否有一种方法可以像在Windows中右键单击文件并设置其属性一样,将数据(如作者)存储在文件中?
Windows显示文件属性的两种方法。第一种方式是如果它了解文件格式并且文件格式可以包含元数据。其中的例子是JPEG和Word文档。在这两种格式中,文件的元数据(作者等)都包含在文件中,并且Windows知道如何显示它。第二种存储元数据的方式是使用NTFS文件系统中的备用数据流(ADS)。有关使用ADS的良好指南可以在http://www.irongeek.com/i.php?page=security/altds找到。
我能在PHP中读取这些属性吗?
对于文件内元数据,这取决于文件格式。JPEG EXIF数据可以通过exif-read-data函数(http://php.net/manual/en/function.exif-read-data.php)读取。
我没有方便的NTFS分区来测试这个问题,但我相信如果在Windows中运行它并访问NTFS文件系统,您可能可以在PHP中访问备用数据流。
我真正想做的是,我想将图像上传到目录中,并且当我在PHP页面中显示图像时,我想直接从jpg(或png)文件的“属性”中获取alt属性。
像上面提到的那样,包含所需元数据的JPEG可以通过exif-read-data函数读取。PNG不包含EXIF数据,因此没有相应的函数(PNG可以包含元数据,但似乎没有标准)。
如果让用户在上传文件时包括名称和其他数据,则可以存储该数据并在显示图像时检索它。数据可以存储在任何地方,例如数据库(可能将文件名链接到数据),或者在文件系统中(对于名为image1.png的图像,您可以将作者的名称存储在名为image1.png.txt的文件中)。

1

stat() 可能是你想要的最接近数据的函数。但它只提供类似于 uid 的系统级元数据。

如果需要更详细的元数据,你需要自己跟踪。


1

是的!我想这就是我想要的。但是我也可以用它来处理.png文件吗? - jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接