【发布时间】:2014-03-07 12:13:43
【问题描述】:
我做了 2 次文件名有效性检查(用于上传):
- 还有其他同名文件吗?
- 是否可以创建具有此名称的文件?
对于 (1) 我使用 file_exists,对于 (2) — fopen 用于创建。
$dir = '../../images/';
if (file_exists($dir.$name))
{
ok('alreadyexists', 'true');
}
else
{
$file = fopen($dir.$name, 'x');
if (FALSE == $file)
{
ok('invalid', 'true');
}
else
{
fclose($file);
ok();
}
}
测试上面的代码,我尝试了名称“con”(AFAIK,在 Windows 下你不能创建这样的文件)。我想它会在第二次测试中失败,但file_exists 为 '../../images/con' 返回 true!为什么?
【问题讨论】:
-
我建议在文件被触摸/创建后使用
is_writable($dir.$name)(文件在关闭后保存)。touch也是初始创建文件并测试是否可以写入的好方法 -
-
哈哈。现在“con”通过
is_writable,但fopen在输出中生成警告,而不是返回FALSE。它也必须更换,我正在寻找什么) -
file_exists应替换为is_writable,fopen应替换为@fopen,仅此而已。
标签: php filenames ntfs file-exists