在php中更改图像名称

在php中更改图像名称,php,Php,嗨,我想上传服务器上的图像,我已经这样做了,但问题是,当我上传图像与相同的名称它给我错误我想做什么,以附加一些东西到图像名称的结尾,使每个图像都有自己独特的 名字 $TARGET\u PATH=$TARGET\u PATH。basename($_文件['photo']['name']); 如果(文件_存在($TARGET_PATH)) { //下面是附加的术语 } 您应该这样做: $TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['n

嗨,我想上传服务器上的图像,我已经这样做了,但问题是,当我上传图像与相同的名称它给我错误我想做什么,以附加一些东西到图像名称的结尾,使每个图像都有自己独特的 名字

$TARGET\u PATH=$TARGET\u PATH。basename($_文件['photo']['name']); 如果(文件_存在($TARGET_PATH)) { //下面是附加的术语 } 您应该这样做:

$TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name']);
while (file_exists($TARGET_PATH))
{
    $TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name'],'.jpg') . uniqid() . '.jpg';
}
这样,它将始终生成唯一的文件名。注意,这将适用于扩展名为jpg的文件。如果您想将其用于其他文件,我建议您:

  $TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name']);
$ext = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);

    while (file_exists($TARGET_PATH))
    {
        $TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name'],'.' .$ext) . uniqid() . '.'.$ext;
    }
向basename提供扩展名将从名称中删除该扩展名。 添加uniqid()将在文件名末尾添加一些唯一的熵。如果这对你来说太长了,你可以用rand(0,10)代替它

此方法还有一个优点,即仅当发现文件确实存在时才执行,否则根本不会运行。

您应该执行以下操作:

$TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name']);
while (file_exists($TARGET_PATH))
{
    $TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name'],'.jpg') . uniqid() . '.jpg';
}
这样,它将始终生成唯一的文件名。注意,这将适用于扩展名为jpg的文件。如果您想将其用于其他文件,我建议您:

  $TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name']);
$ext = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);

    while (file_exists($TARGET_PATH))
    {
        $TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name'],'.' .$ext) . uniqid() . '.'.$ext;
    }
向basename提供扩展名将从名称中删除该扩展名。 添加uniqid()将在文件名末尾添加一些唯一的熵。如果这对你来说太长了,你可以用rand(0,10)代替它


此方法还有一个优点,即仅当发现文件确实存在时才执行,否则它根本不会运行。

考虑一个返回唯一名称的函数,如(未测试且非常可改进):



正如一个想法;-)

考虑一个返回唯一名称的函数,例如(未经测试且非常可改进):



正如一个想法;-)

如果已经存在同名文件,则不应出现错误。 我认为你的问题应该是别的

但是,如果更改名称就可以解决您的问题,您也可以使用时间戳并将其添加到文件名中以使其唯一

function uniqueName($filename){
    $f = explode('.', $filename);
    $ext = $f[count($f)-1];
    return implode('.', $f).time().'.'.$ext;
}

此函数适用于所有扩展名。

当文件已存在且具有相同名称时,不应出现错误。 我认为你的问题应该是别的

但是,如果更改名称就可以解决您的问题,您也可以使用时间戳并将其添加到文件名中以使其唯一

function uniqueName($filename){
    $f = explode('.', $filename);
    $ext = $f[count($f)-1];
    return implode('.', $f).time().'.'.$ext;
}

此函数适用于所有扩展。

到底是什么问题?到底是什么问题?是的,但是,对于这样一个简单的任务,这似乎相当占用cpu,你不这么认为吗?我不这么认为。。。通常它只是生成一个随机文件名,检查文件是否存在,并在大多数情况下返回文件名,因为文件不存在。但是,你可能是对的。我没有测试它。是的,但是,对于这样一个简单的任务来说,它似乎相当cpu密集,你不这样认为吗?我不这样认为。。。通常它只是生成一个随机文件名,检查文件是否存在,并在大多数情况下返回文件名,因为文件不存在。但是,你可能是对的。我没有测试它。同样,这样你也不需要条件。只需将时间附加到您上载的任何图像。此外,您不需要在数据库中保存文件的上载时间。此外,这样您也不需要条件。只需将时间附加到您上传的任何图像上即可。此外,您不需要在数据库中保存文件的上传时间。谢谢回复,但请您解释一下uniqid()和rand(0,10)的用法;rand方法只需要在0和10的限制范围内取值…?这取决于您想要文件名的长度。Uniqid()生成一个唯一标识符,并且将非常长。Rand(0,10)将产生一个介于0和10之间的数字。在这两种方法中,uniqid文件不存在的概率要高得多。rand(0,10)可能会导致堆栈溢出,从而导致应用程序崩溃,因为如果已经有10个文件具有完全相同的名称,循环将永远不会结束。这实际上取决于你如何怀疑你的应用程序会被使用。您也可以用“time()”函数替换它。谢谢您的回复,但您能否解释一下uniqid()和rand(0,10)的用法;rand方法只需要在0和10的限制范围内取值…?这取决于您想要文件名的长度。Uniqid()生成一个唯一标识符,并且将非常长。Rand(0,10)将产生一个介于0和10之间的数字。在这两种方法中,uniqid文件不存在的概率要高得多。rand(0,10)可能会导致堆栈溢出,从而导致应用程序崩溃,因为如果已经有10个文件具有完全相同的名称,循环将永远不会结束。这实际上取决于你如何怀疑你的应用程序会被使用。您也可以将其替换为“time()”函数。