PHP開發之簡單檔案上傳到My...LOGIN

PHP開發之簡單檔案上傳到MySql資料庫(三)

這一節,我們將設定幾個自訂函數來實現生成新檔案地址保存到資料庫中。

首先我們上傳的圖片都有一個位址,例如123.jpg, abc.png等等

我們需要保留後面的.jpg,  .png的字尾

#使用兩個函數來截取原始檔案路徑的後綴名稱

strrchr() 函數尋找字串在另一個字串中最後一次出現的位置,並傳回從該位置到字串結尾的所有字元。

substr() 函數傳回字串的一部分。

<?php
function fileext($filename)
{  
  return substr(strrchr($filename, '.'), 1);
}
?>

fileext是我們設定的函數名稱,filename是原始檔案名稱。

下面我們就要產生一個新的路徑名來儲存到資料庫中

這裡也需要自訂一個函數random

設定一個前綴CR- , 從字母A-Z,a-z,0-9隨機抽選幾個來混搭來產生新的路徑名前綴

使用函數:strlen() 函數傳回字串的長度。

<?php
function random($length)
{
  $hash = 'CR-';
  $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
  $max = strlen($chars) - 1;
  mt_srand((double)microtime() * 1000000);
  for($i = 0; $i < $length; $i++)
  {
    $hash .= $chars[mt_rand(0, $max)];
  }
  return $hash;
}
?>

產生目標檔名

<?php
$filename=explode(".",$_FILES['file']['name']);
  do{
    $filename[0]=random(10); //设置随机数长度
    $name=implode(".",$filename);
      $uploadfile = $uploaddir.$name;
  }
  while(file_exists($uploadfile));
?>

explode() 函數把字串打散為陣列。

implode() 函數傳回由陣列元素組合成的字串。

最後把所有的檔案打包成一個PHP檔案upload.php(名字可以依照需求和功能建立)

<?php
$uploaddir = "upfiles/";//设置文件保存目录 注意包含/
$type=array("jpg","gif","bmp","jpeg","png");//设置允许上传文件的类型
//获取文件后缀名函数
function fileext($filename)
{
  return substr(strrchr($filename, '.'), 1);
}
//生成随机文件名函数
function random($length)
{
  $hash = 'CR-';
  $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
  $max = strlen($chars) - 1;
  mt_srand((double)microtime() * 1000000);
  for($i = 0; $i < $length; $i++)
  {
    $hash .= $chars[mt_rand(0, $max)];
  }
  return $hash;
}
$a = strtolower(fileext($_FILES['file']['name']));
//判断文件类型
if(!in_array(strtolower(fileext($_FILES['file']['name'])),$type))
{
  $text=implode(",",$type);
  echo "您只能上传以下类型文件: ",$text,"<br>";
}
//生成目标文件的文件名
else{
  $filename=explode(".",$_FILES['file']['name']);
  do{
    $filename[0]=random(10); //设置随机数长度
    $name=implode(".",$filename);
    $uploadfile = $uploaddir.$name;
  }
  while(file_exists($uploadfile));
  
  if (move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile))
  {
    if(is_uploaded_file($_FILES['file']['tmp_name']))
    {
      echo "上传失败!";
    }
    else
    {//输出图片预览
      echo "<tr><td>您的文件已经上传完毕 上传图片预览: <br><img src='$uploadfile'></td></tr>";
      echo "<tr><td><a href='tu2.php'style='margin-left: 3%;'>继续上传</a></td></tr>";
    }  //可以在前端HTML页面显示上传的文件预览
  }
}
?>


下一節
<?php $uploaddir = "upfiles/";//设置文件保存目录 注意包含/ $type=array("jpg","gif","bmp","jpeg","png");//设置允许上传文件的类型 //获取文件后缀名函数 function fileext($filename) { return substr(strrchr($filename, '.'), 1); } //生成随机文件名函数 function random($length) { $hash = 'CR-'; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $max = strlen($chars) - 1; mt_srand((double)microtime() * 1000000); for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; } $a = strtolower(fileext($_FILES['file']['name'])); //判断文件类型 if(!in_array(strtolower(fileext($_FILES['file']['name'])),$type)) { $text=implode(",",$type); echo "您只能上传以下类型文件: ",$text,"<br>"; } //生成目标文件的文件名 else{ $filename=explode(".",$_FILES['file']['name']); do{ $filename[0]=random(10); //设置随机数长度 $name=implode(".",$filename); $uploadfile = $uploaddir.$name; } while(file_exists($uploadfile)); if (move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile)) { if(is_uploaded_file($_FILES['file']['tmp_name'])) { echo "上传失败!"; } else {//输出图片预览 echo "<tr><td>您的文件已经上传完毕 上传图片预览: <br><img src='$uploadfile'></td></tr>"; echo "<tr><td><a href='tu2.php'style='margin-left: 3%;'>继续上传</a></td></tr>"; } //可以在前端HTML页面显示上传的文件预览 } } ?>
章節課件