附加到PHP变量,但在' .jpg'之前/' .png'等等

时间:2016-01-26 16:27:21

标签: php append

所以我创建了一个上传图像的基本代码。用户上传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"之前。在文件路径?我曾尝试过在谷歌上进行研究,但我似乎无法正确地说出来找到任何有用的答案。

由于

3 个答案:

答案 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) «$»