使用PHP列出图像文件 - 并区分大小写

时间:2010-08-23 22:07:14

标签: php codeigniter filenames case-sensitive

图像文件的下拉框目录已按字母大小写收集变体,例如:

Bonsai.jpg, BONSAI.jpg, Bonsai.JPG, bonsai.jpg  

我正在使用CodeIgniter创建一个Web应用程序来管理远程服务器上的这些文档。这意味着使用

  1. file_exists() is_file()进行验证 文件的存在
  2. HTML img标记以图形方式显示文件
  3. 但是无论如何,这两个工具都会使用他们找到的第一个匹配项。我怎么处理这个?

    (我注意到了这个similar question as this,但对于Delphi而不是PHP。)

2 个答案:

答案 0 :(得分:1)

  

但这两种工具都使用了他们找到的第一个匹配,无论大小写

他们绝对不应该 - 至少不是在区分大小写的文件系统上,比如Linux的默认文件系统(它仍称为ext2?)。虽然将这四个文件放在同一目录IMO中是有问题的做法,但file_exists()和Web资源的提供都不应显示您描述的行为。

在Windows上有所不同:FAT和NTFS不区分大小写。在您的示例中,您提到的四个文件中只有一个可以存在于同一目录中。

答案 1 :(得分:1)

接受图像时,我总是将它们重命名,例如使用文件上传类的CI的加密文件名选项来避免这些问题。否则它会变得很头疼。

编辑:在下面的OP中添加我的评论

您可以轻松编写一个脚本,将所有文件名放入数组中,识别重复项并将_1附加到其名称中。现在你只有独特的文件名。然后将全部转换为小写。对于所有现有文件和新文件,您将文件名加密为32个字符的字符串。这样的文件名的批处理实际上非常简单。只是保留所有文件的备份以防万一,并且很少会出错。

Codeigniter有一些有用的功能,比如文件助手的get_filenames()将所有文件放在指定的目录中,而安全助手的dohash()会加密文件名。对于将来的上传,请将encrypt_name首选项设置为TRUE