php 上传 $_FILES[FileName]["tmp_name"] 唯一性

php uploads $_FILES[FileName]["tmp_name"] uniqueness

我找不到关于 $_FILES["FileName"]["tmp_name"] 唯一性的具体信息。

发件人:http://php.net/manual/en/reserved.variables.files.php 我看到 6 个十六进制字符使文件名独一无二。 例如/tmp/php/php6hst32

从本地测试 (XAMPP | WIN 7) 我只看到 4 个十六进制字符 例如\tmp\phpCC07.tmp

这表明 165536 中的最小独特性,这对我来说似乎并不独特。

这个集合在 PHP 中的什么地方? (它不在 php.ini 中)。它是硬编码还是可以配置?

我意识到冲突只会在很短的时间内发生,因为文件应该只持续脚本的持续时间,但这些可能性并没有提供我所期望的安慰。

文件保证是唯一的。 PHP 在 Windows 上使用 GetTempFileName(),在 Linux 上使用 mkstemp()mktemp()

GetTempFileName() 生成格式为

XXXX 的文件名。 (这是你用 XAMPP 看到的)

mkstemp()mktemp() 生成格式为

XXXXXX 的文件名。 (这是文档中的内容)

这些是不可配置的,它们是由系统的标准C库设置的。系统保证生成的文件名是唯一的。如果系统无法创建唯一的文件名,函数调用 returns 错误状态到 PHP 进而引发 E_WARNING: "File upload error - unable to create a temporary file".

参考文献: