所以我创建了一个上传图像的基本代码。用户上传2张图片,当他们正在处理/上传时,我会有一小段代码,以确保文件名在上传到服务器时不相同
if(file_exists($imgpath1)){
$imgpath1 = $imgpath1 . $random;
}
if(file_exists($imgpath2)){
$imgpath2 = $imgpath2 . $random;
}
让我们说 $ imgpath1 =" images / user / 1.jpg "开始(在运行上面的PHP之前)
和 $ random 是在脚本开头生成的随机数,例如 $ random =' 255 & #39;
代码工作正常,图像仍能正确显示,但它正在添加' 255' ($ random)直接到文件路径的末尾,所以 $ imgpath1 =" images / user / 1.jpg 255 "在上面的代码运行之后。
文件扩展名不一定总是.jpg,可能是.png,.bmp等等......
如何让 $ random (本例中为255)在" .jpg"之前。在文件路径?我曾尝试过在谷歌上进行研究,但我似乎无法正确地说出来找到任何有用的答案。
由于
答案 0 :(得分:1)
您可以使用pathinfo
函数获取所需的aprts,并使用添加的随机部分进行重建:
if(file_exists($imgpath1)){
$pathinfo = pathinfo($imgpath1);
$imgpath1 = $pathinfo['dirname'] .'/' . $pathinfo['filename'] . $random . '.' . $pathinfo['extension'];
}
虽然您的$random
变量需要是唯一ID,否则您仍然可能会发生冲突。
您还需要过滤掉不良字符(不同文件系统上的人员到您的服务器等)。通常用uniqid() . '.' . $pathinfo['extension'];
答案 1 :(得分:1)
您可以尝试以下代码:
$filename = "file.jpg";
$append = "001";
function append_filename($filename, $append) {
preg_match ("#^(.*)\.(.+?)$#", $filename , $matches);
return $matches[1].$append.'.'.$matches[2];
}
echo append_filename($filename, $append);
它给出: file001.jpg
http://www.tehplayground.com/#JFiiRpjBX(按Ctrl + ENTER进行测试)
答案 2 :(得分:1)
你可以这样做:
这将在最后期间($ regs [1])之前提取路径和文件名,其余的直到字符串结尾($ regs [2])。
if (preg_match('/^(.*)\.([^.].*)$/i', $imgpath1, $regs)) {
$myfilename = $regs[1] . $random . $regs[2];
} else
$myfilename = $imgpath1;
}
使用文件文件名,如 /path/subpath/filename.jpg 或 /path/subpath/filename.saved.jpg 等。
正则表达式意味着什么:
# ^(.*)\.([^.].*)$
#
# Assert position at the beginning of the string «^»
# Match the regular expression below and capture its match into backreference number 1 «(.*)»
# Match any single character that is not a line break character «.*»
# Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
# Match the character “.” literally «\.»
# Match the regular expression below and capture its match into backreference number 2 «([^.].*)»
# Match any character that is NOT a “.” «[^.]»
# Match any single character that is not a line break character «.*»
# Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
# Assert position at the end of the string (or before the line break at the end of the string, if any) «$»