【问题标题】:Basic PHP Upload Form Issue基本 PHP 上传表单问题
【发布时间】: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


【解决方案1】:

有几种方法可以做到这一点。

最简单的方法是在. 上拆分您的文件名,删除最后一个并重新粘贴。

$filename = explode('.', $_FILES["fileToUpload"]["name"]);
array_pop($filename);
$filemame = implode('.', $filename);

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 2014-10-19
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多