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

Posted

技术标签:

【中文标题】附加到 PHP 变量,但在 \'.jpg\' / \'.png\' 等之前【英文标题】:Append to PHP variable, but before '.jpg' / '.png' etc附加到 PHP 变量,但在 '.jpg' / '.png' 等之前 【发布时间】:2016-05-03 07:23:06 【问题描述】:

所以我创建了一个上传图片的基本代码。用户上传了 2 张图片,当它们被处理/上传时,我有一些代码来确保文件名在上传到服务器时不一样

if(file_exists($imgpath1))
    $imgpath1 = $imgpath1 . $random;

if(file_exists($imgpath2))
    $imgpath2 = $imgpath2 . $random;

假设以 $imgpath1 = "images/user/1.jpg" 开头(在运行上述 php 之前)

$random 是在脚本开始时生成的随机数,比如 $random = '255'。 p>

代码完美运行,图像仍然正确显示,但它直接将 '255' ($random) 添加到文件路径的末尾,所以 $imgpath1 = "images/user /1.jpg255" 在上面的代码运行之后。

文件扩展名显然不会总是.jpg,它可能是.png、.bmp等等......

如何使 $random(在本例中为 255)在文件路径中的“.jpg”之前出现?我曾尝试在谷歌上进行研究,但我似乎无法正确地用词来找到任何有用的答案。

谢谢

【问题讨论】:

. 上分解,获取分解数组的最后一个元素并取消设置数组中的最后一个元素(array_pop 做得很好),用. 内爆所有剩余元素,然后将所有三个部分一起。 :-) php.net/manual/en/function.pathinfo.php 【参考方案1】:

您可以使用pathinfo 函数获取所需的aprts,并使用添加的随机部分进行重建:

if(file_exists($imgpath1))
    $pathinfo = pathinfo($imgpath1);
    $imgpath1 = $pathinfo['dirname'] .'/' . $pathinfo['filename'] . $random . '.' . $pathinfo['extension'];

尽管您的 $random 变量需要是唯一的 id,否则您仍然会发生冲突。

您还需要过滤掉坏字符(不同文件系统上的人到您的服务器等)。通常用uniqid() . '.' . $pathinfo['extension']; 替换整个名称更容易

【讨论】:

【参考方案2】:

你可以试试这个代码:

$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 测试)

【讨论】:

完美,谢谢!这就是我今天完成的工作 lmao ?【参考方案3】:

你可以这样做:

这将提取 last 句点 ($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) «$»

【讨论】:

以上是关于附加到 PHP 变量,但在 '.jpg' / '.png' 等之前的主要内容,如果未能解决你的问题,请参考以下文章

PHP将变量附加到地址栏中的url

php 将数据数组或变量附加到文件

您可以将字符串附加到 PHP 中的变量吗? [复制]

Ajax - 通过 ajax 将输入文件和附加变量发送到 php 文件

如何使用php邮件附加图像文件

附加到 JPG 的随机数据会使其无法使用吗?