【发布时间】:2021-09-26 13:39:54
【问题描述】:
我希望我的表单检查文件名是否等于用户名,原则上我测试它的方式一切正常,但我遇到的问题是拼写检查包括图像的格式字母,因此给出不匹配。
例子:
Username 尝试上传正确命名为Username.png 的图片
系统可以正常工作,但它也考虑了.png,因此给出了不匹配的结果。有没有办法可以尝试从 if 语句中排除图像格式名称?因为这几乎是我在函数中遇到的唯一问题,所以我尝试将自己重命名为Username.png,然后表单效果很好,但实际上没有人会使用这么奇怪的用户名哈哈。如果我的问题有点混乱或太长,我很抱歉,希望它和我想的一样清楚。我将在此处包含我的小sn-p代码:
if ( ($_FILES["fileToUpload"]["name"]) != $ir['username'] )
{
echo "Sorry, your file is not correctly named.";
$uploadOk = 0;
}
我尝试在 $ir['username'] 之后添加一个 .png ,如下所示: $ir['username'].png 但随后表单只是给出了一个严重错误,所以我认为这是一个不好的地方把它写进去。有没有更好的方法可以做到这一点,有没有办法?例如,也许我可以让表单不显示 .png?我不确定此时我该如何处理,任何输入都是无价的。感谢您的宝贵时间,祝您有美好的一天!
编辑:我也将包含表单本身:
<form action='upload.php' method='post' enctype='multipart/form-data'>
Select image to upload:
<input type='file' name='fileToUpload' id='fileToUpload'><br>
<input type='submit' value='Upload Picture' name='submit'>
</form>
【问题讨论】:
-
也许
explode你的字符串在.上,然后使用第一部分?如果您的文件名包含多个.,那么您就会遇到问题。 -
您可以使用正则表达式,或者可能使用一些
strpos。像'/^' . preg_quote($ir['username']) . '[.]/'这样的正则表达式,但前提是你真的不在乎.之后的内容。如果这是出于安全考虑,您不应该这样做。 -
对于 PHP,你可以使用 pathinfo 然后 path_parts['filename'] 来做你想做的事:
$path_parts = pathinfo('username.png'); echo $path_parts['filename']; -
顺便说一句,为什么你需要上传的文件有一些特定的文件名?你不能重命名它吗?
-
$filename = explode(".", $_FILES["fileToUpload"]["name"]);然后$filename[0](数组的第一项)包含第一个点(.)之前的所有内容。
标签: php forms validation file-upload