簡體   English   中英

如何在php中重命名上傳的圖像

[英]how to rename uploaded image in php

我從w3schools獲得了這個代碼,並根據這個來調整它: 用PHP重命名上傳的文件,但保留擴展名

請幫忙,我該怎么辦,以便文件擴展名不會是.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);
          echo "Stored in: " . "../img/user_uploaded/" .$newfilename;
          }
        }
      }
    else
      {
      echo "Invalid file, File must be less than 100Kb in size with .jpg, .jpeg, or .gif file extension";
      }
    ?>
$filename=$_FILES["file"]["tmp_name"];
$extension=end(explode(".", $filename));
$newfilename=$prod .".".$extension;

在上面的代碼中,您試圖獲取臨時文件的擴展名。 相反,您可以使用用戶上傳的原始文件名的擴展名。

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

這將使用實際的文件擴展名上傳您的文件。

嘗試使用這個庫進行圖像處理......可能是offtopic,但對處理圖像非常有用。

WideImage: 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
rename('path/to/file/file.ext', 'path/to/file/newname.ext');

此功能是復制和取消鏈接的連接。

這部分重命名該文件。

move_uploaded_file($ filename,“.. / img / user_uploaded /”。$ newfilename);

所以問題是如何設置$ newfilename的值。 如果你有一個方法來產生這個,那么問題就解決了。

我不同意@ 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)怎么辦?

您可以使用rand()函數創建隨機文件名的小示例。

$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"];

您可以將日期時間添加到上載目錄的目錄更容易。 例:

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

../img/user_uploaded/$date

但不要/但最終因為它更改目錄

最好的方法是使用pathinfo()

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

未初始化的變量$ prod! 這是一個重大的安全漏洞。 始終在使用變量之前初始化變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM