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

发布于 2024-09-16 07:48:07 字数 504 浏览 4 评论 0原文

图像文件的保管箱目录已按字母大小写收集变体,例如:

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

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

  1. file_exists()is_file() 来验证 文件的存在
  2. HTML img 标签以图形方式显示文件

但这两个工具都使用它们找到的第一个匹配项,无论大小写。我该如何处理这个问题?

(我注意到这个与此类似的问题 ,但适用于 Delphi 而不是 PHP。)

A drop-box directory for image files has collected variants by letter-case, for example:

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

I am making a web app using CodeIgniter to manage these documents on a remote server. This means using

  1. file_exists() or is_file() to verify
    a file's presence
  2. HTML img tag to display the file graphically

But both these tools use the first match they find, regardless of case. How can I deal with this?

(I noticed this similar question as this, but for Delphi instead of PHP.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哀由 2024-09-23 07:48:07

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

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

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

But both these tools use the first match they find, regardless of case

They definitely shouldn't - at least not on a file system that is case sensitive, like Linux's default file system (is it still called ext2?). While it's questionable practice to have those four file in the same directory IMO, neither file_exists() nor the serving of web resources should show the behaviour you describe.

It's different on Windows: FAT and NTFS are not case sensitive. In your example, only one of the four files you mention can exist in the same directory.

宛菡 2024-09-23 07:48:07

当接受图像时,我总是重命名它们,例如使用文件上传类的 CI 加密文件名选项来避免此类问题。否则它可能会变得非常令人头痛。

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

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

Codeigniter 有一些有用的函数,例如文件助手的 get_filenames() ,它将指定目录中的所有文件放入数组中,以及安全助手的 dohash() ,它将加密文件文件名。对于将来的上传,请将 encrypt_name 首选项设置为 TRUE

When accepting images I always rename them, for example using CI's encrypt filenames option of the File Upload class to avoid these kind of problems. Otherwise it can turn in to a big headache.

EDIT: added my comment on the OP below

You can easily write a script that puts all filenames in to an array, identify duplicates and append _1 to their name. Now you have just unique filenames. Then you convert all to lowercase. For all existing files and new ones you encrypt the filenames to a 32 character string. Batch processing of filenames like this is actually quite easy. Just keep a back up of all files just in case, and very little can go wrong.

Codeigniter has some useful functions like the file helper's get_filenames() which puts all files in a specified directory in to an array, and the security helper's dohash() which would encrypt the filenames. For future uploads set encrypt_name preference to TRUE

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文