如何在PHP中重命名上传的图像

yizd12fk  于 2023-10-15  发布在  PHP
关注(0)|答案(9)|浏览(112)

我从w3schools得到了这段代码,并根据这段代码进行了调整:Rename an uploaded file with PHP but keep the extension
请帮助,我该怎么做,使文件扩展名不会.tmp当我上传到服务器上的文件夹。

<?php
    $filename=$_FILES["file"]["tmp_name"];
    $extension=end(explode(".", $filename));
    $newfilename=$prod .".".$extension;
    
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 100000))
      {
      if ($_FILES["file"]["error"] > 0)
        {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
        }
      else
        {
        echo "Upload: " . $_FILES["file"]["name"] . "<br />";
        echo "Type: " . $_FILES["file"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
    
        if (file_exists("../img/user_uploaded/" . $_FILES["file"]["name"]))
          {
          echo $_FILES["file"]["name"] . " already exists. ";
          }
        else
          {
          move_uploaded_file($filename,
          "../img/user_uploaded/" . $newfilename. $extension);
          echo "Stored in: " . "../img/user_uploaded/" .$newfilename. $extension;
          }
        }
      }
    else
      {
      echo "Invalid file, File must be less than 100Kb in size with .jpg, .jpeg, or .gif file extension";
      }
    ?>
hmmo2u0o

hmmo2u0o1#

$filename=$_FILES["file"]["tmp_name"];
$extension=end(explode(".", $filename));
$newfilename=$prod .".".$extension;

在上面的代码中,您试图获取临时文件的扩展名。相反,您可以使用用户上传的原始文件名的扩展名。

$filename=$_FILES["file"]["name"];
$extension=end(explode(".", $filename));
$newfilename=$prod .".".$extension;

这将上传您的文件与实际的文件扩展名。

ubbxdtey

ubbxdtey2#

rename('path/to/file/file.ext', 'path/to/file/newname.ext');

这个函数是复制和取消链接的连接。

niwlg2el

niwlg2el3#

尝试使用此库进行图像处理.也许是题外话,但对于处理图像来说是非常有用的。
宽图像:http://wideimage.sourceforge.net/
举例来说:

include('path to WideImage.php');

$filename = $_FILES["file"]["name"];
$ext = strtolower(substr(strrchr($filename, '.'), 1)); //Get extension
$image_name = $name . '.' . $ext; //New image name

$image = WideImage::load($_FILES['file']['tmp_name']); //Get image
$image->saveToFile('path/to/image/' . $image_name); //Save image
n3schb8v

n3schb8v4#

我不同意@ Alexander. Plutov的回答。您不必保存文件,然后复制它,然后取消链接
由于您在代码中指定了目标文件名:

move_uploaded_file($filename, "../img/user_uploaded/" . $newfilename);
echo "Stored in: " . "../img/user_uploaded/" .$newfilename;

你所要做的就是指定另一个名字而不是$newfilename。如果您的目标是用其他扩展名替换.tmp,您可以删除最后四个字符(始终是.tmp,由PHP设置),然后添加您自己的扩展名。
如果你只是想保留用户给的分机号,用途:

$friendlyName = $_FILES["file"]["name"];
$extension = substr($friendlyName, strrpos($friendlyName, '.') + 1);

当然,你必须意识到使用用户发布的东西的风险。如果根本没有扩展名,或者扩展名太长,或者与真实的文件类型不匹配(deadly-virus.exe重命名为pretty-image.jpg),该怎么办?

zf9nrax1

zf9nrax15#

小例子可以用**兰德()**函数来创建随机文件名。

$min_rand=rand(0,1000);
$max_rand=rand(100000000000,10000000000000000);
$name_file=rand($min_rand,$max_rand);//this part is for creating random name for image

$ext=end(explode(".", $_FILES["file"]["name"]));//gets extension

move_uploaded_file($_FILES["file"]["tmp_name"],"/new folder/" . $name_file.".".$ext);//actually reponsible for copying file in new folder

$filenameimage="../upload_image/" . $name_file.".".$ext;
$actualimageurl="../upload_image/" . $_FILES["file"]["name"];
x9ybnkn6

x9ybnkn66#

最好的方法是使用pathinfo()

$filename=$_FILES["file"]["name"];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$image_name = $yours_new_name.'.'.$ext;
vom3gejh

vom3gejh7#

这部分会重命名文件。
move_uploaded_file($filename,"../img/user_uploaded/”.$new name);
所以问题是如何设置$newfilename的值。如果你有一个方法来生产这个,那么这个问题就解决了。

c3frrgcw

c3frrgcw8#

未初始化的变量$prod!这是一个重大的安全漏洞。在使用变量之前总是初始化它们。

cxfofazt

cxfofazt9#

您可以添加日期时间到目录中,您上传它更容易。范例:

$date = date("Y-m-d H:i:s");

../img/user_uploaded/$date

但是不要因为/改变了目录而放弃它

相关问题