【发布时间】:2021-12-23 20:06:47
【问题描述】:
我是新来的,很高兴认识你。
我正在尝试创建用户在安全检查后上传的图片的干净副本,并将此副本保存在指定文件夹和我的数据库中。我正在 Windows 10 上使用 XAMPP,并且我为所述文件夹授予了正确的权限。我的代码如下:
/*bit of code for picture addition, in a function for album publication*/
if($_FILES['albumCover']['error'] === 0) {
$covType;
$createCover;
$covName = guidv4();
$imgRegex = '/^[a-z\d][^.]*\.(jpe?g$)|\.(png$)/i';
$covInfo = finfo_open(FILEINFO_MIME_TYPE);
$covMime = finfo_file($covInfo, $_FILES['albumCover']['tmp_name']);
finfo_close($covInfo);
if(!preg_match($imgRegex, $_FILES['albumCover']['name']) ||
str_contains($_FILES['albumCover']['name'], ' ') ||
in_array($_FILES['albumCover']['type'], ['image/jpeg','image/png'])||
strpos($covMime, 'image/') !== 0)
{
$addMessages['errors'][] = 'Caractère autorisé pour le nom d\'image : lettres sans
accent / sans trémas / sans cédille, chiffres, tirets et underscores. Fichiers
autorisés : images .jpg, .jpeg ou .png.';
}
if(empty($addMessages['errors'])) {
if(preg_match($imgRegex, $_FILES['albumCover']['name'])
&& $_FILES['albumCover']['type'] == 'image/jpeg'
&& strpos($covMime, 'image/') !== 0)
{
$covType = 'jpeg';
$createCover = imagecreatefromjpeg($_FILES['albumCover']['tmp_name']);
imagejpeg($createCover,
self::COV_SECURE_PATH.$covName.'.'.pathinfo($_FILES['albumCover']['name'],
PATHINFO_EXTENSION)
);
move_uploaded_file($_FILES['albumCover']['tmp_name'],
self::COV_SECURE_PATH.'/'.$_FILES['albumCover']['name']);
} elseif(preg_match($imgRegex, $_FILES['albumCover']['name'])
&& $_FILES['albumCover']['type'] == 'image/png'
&& strpos($covMime, 'image/') !== 0)
{
$covType = 'png';
$createCover = imagecreatefrompng($_FILES['albumCover']['tmp_name']);
imagepng($createCover,
self::COV_SECURE_PATH.$covName.'.'.pathinfo($_FILES['albumCover']['name'],
PATHINFO_EXTENSION));
move_uploaded_file($_FILES['albumCover']['tmp_name'],
self::COV_SECURE_PATH.'/'.$_FILES['albumCover']['name']);
}
}
}
更多细节:上面的代码是类方法的一部分。常量 COV_SECURE_PATH 在类中声明,在方法之前。并且图片名称的guidv4()函数在同一个文件中,在类的声明之前。
我没有 PHP 错误消息,我的打印显示每个文件的正确名称和扩展名,并且我在 HTML 表单中声明了属性 enctype="multipart/form-data"。图片保存在我的数据库中(如果需要,我将添加有关数据库的代码),但它们不会保存在我的文件夹中,我不知道我缺少什么。到目前为止,我在任何网站上搜索时都没有找到答案,非常感谢任何帮助。
【问题讨论】:
-
我授予了上述文件夹的正确权限 在 Windows 上,您通常无需执行任何操作。你能证明你做了什么吗?
-
如何将
else添加到if - elseif,这样当代码没有进入 if 或 elseif 时,您会收到错误或某种通知 -
imagepng() / imagejpeg()创建一个文件,move_uploaded_file()复制该文件,你真的想要每个文件 2 个吗? -
您在
imagejpeg中有路径self::COV_SECURE_PATH.$covName,在move_uploaded_file中有self::COV_SECURE_PATH.'/'。函数guidv4()是否在$covName中添加斜线? -
您好,感谢您的回答。我不确定 move_uploaded_file() 是否必要,但我想尝试一下,因为 imagepng() / imagejpeg() 不起作用。所以我将删除 move_uploaded_file()。我只是为文件夹和父文件夹中的权限做了一个 chmod 777 。并且 guidv4() 函数不会在 $covName 中添加斜杠。
标签: php file-upload saving-data