【问题标题】:php uploads $_FILES[FileName]["tmp_name"] uniquenessphp 上传 $_FILES[FileName]["tmp_name"] 唯一性
【发布时间】:2015-03-25 08:17:08
【问题描述】:

我找不到关于 $_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 file upload location temporary


    【解决方案1】:

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

    GetTempFileName() 生成 XXXX 格式的文件名。 (这就是你在 XAMPP 中看到的)

    mkstemp()mktemp() 生成格式为 XXXXXX 的文件名。 (这是文档中的内容)

    这些是不可配置的,它们是由系统的标准 C 库设置的。系统保证生成的文件名是唯一的。如果系统无法创建唯一的文件名,函数调用会向 PHP 返回错误状态,进而引发E_WARNING:“文件上传错误 - 无法创建临时文件”。

    参考资料:

    【讨论】:

    • 感谢mixedreturns 的清晰解释。如果发生临时名称冲突,我会通过 E_WARNING 的回退再次向我保证。从哲学上讲,我觉得 Windows 中 1:65,535 发生冲突的几率太高了,但至少我的应用程序最终不会将文件放在错误的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2017-09-30
    相关资源
    最近更新 更多