導航:首頁 > 編程語言 > php上傳圖片函數

php上傳圖片函數

發布時間:2022-05-26 00:35:30

php文件上傳,如何實現獨立的圖片伺服器的,該move_uploaded_file()函數能實現嗎

可以的。圖片也是文件的一種形式,主要上傳的時候注意限制文件的後綴為.jpg,.png等等,並使用move_uploaded_file把圖片轉移到伺服器中一個特定的文件夾中。為了方便集中管理這些圖片,可以建立一個資料庫,用一個數據表記錄該圖片的路徑、名稱、上傳日期、格式等等信息。訪問圖像的時候,就可以根據圖片的路徑獲得了。

❷ php把圖片上傳到資料庫並顯示

blob類型
<?php
/*******************************************************
** 文件名:upload_file.php
** Copyright @ 2009
** 創建人:tabor
** 日期:2009年7月24日 8:00
** 修改人:
** 日期:
** 描述:文件上傳操作以及對圖片文件的處理
** 版本:
********************************************************/
class upload_file {
//保存的文件名
public $file_name;
//系統中上傳文件的臨時存放路徑
public $file_tmp_name;
//文件大小
public $file_size;
//完整的文件類型
public $full_file_type;
//文件類型
public $file_type;
//文件是否覆蓋
public $override = 1;
//文件的保存路徑
public $file_save_path = '';
//上傳文件大小的最大值 單位是位元組 2M
public public $file_max_size = 210000000;
//public public $file_max_size = 102400;

//構造函數
function __construct($file_name = '', $file_tmp_name = '', $full_file_type = '', $file_size = '', $file_save_path = '') {
$this->file_name = $file_name;
$this->file_tmp_name = $file_tmp_name;
$this->full_file_type = $full_file_type;
$this->file_size = $file_size;
$this->file_save_path = $file_save_path;
}
//取得文件的後綴名,即文件類型
function get_file_type() {
$type_array = explode('.', $this->file_name);
return $type_array[count($type_array)-1];
}
//判斷文件的大小
function check_size() {
if($this->file_size > $this->file_max_size) {
return false;
}
return true;
}
//取得文件的大小
function get_size() {
return intval($this->file_size/1024);
}
//上傳圖片 格式 jpg,png,gif,pjpeg
function check_upload_pic() {
$type = $this->get_file_type();
$type_array = array('jpg', 'png', 'gif', 'bmp');
foreach($type_array as $value) {
if($value = $type) {
return true;
}
return false;
}
}
//上傳文件 格式 zip rar
function check_upload_file() {
$type = $this->get_file_type();
$type_array = array('jpg','gif','bmp','png');
foreach($type_array as $value) {
if($value == $type) {
return true;
}
return false;
}

}
//判斷文件是否存在
function check_exist() {
$file = $this->file_save_path.$this->file_name;
return file_exists($file);
}
//上傳文件
function move_upfile() {
if(!$this->check_upload_pic()) {
echo "ok1";
return false;
}
else {
if(!$this->check_size()) {
echo "ok2";
return false;
}
else {
// if($this->check_exist()) {
// echo "該文件已存在";
// return false;
// }
// else {
$path = $this->file_save_path.$this->file_name;
if(move_uploaded_file($this->file_tmp_name, $path)) {
return true;
}
else {
return false;
}

// }
}
}
}
//將上傳的圖片打水印
/**
* $water_pic_name 將要被打水印的目標圖片
* $water_word 水印文字
* $path 將來生成水印圖片的存放路徑
*/
function create_water_pic($water_word) {
$type = $this->get_file_type();
$filename = $this->file_save_path.$this->file_name;
switch($type) {
case 'jpg':
header("content-type:image/jpeg"); //定義輸出圖像的類型
$im = imagecreatefromjpeg($filename); //載入圖片
break;
case 'png':
header("content-type:image/png");
$im = imagecreatefrompng($filename);
break;
case 'gif':
header("content-type:image/gif");
$im = imagecreatefromgif($filename);
break;
case 'bmp':
header("content-type:image/xbm"); //上傳bmp格式存在問題
$im = imagecreatefromxbm($filename); //無法打水印
break;
default: {
echo "文件格式不符";
}
}
$textcolor = imagecolorallocate($im, 56, 73,136); //設定字體的顏色
$font = "simhei.ttf"; //定義字體
$word = $water_word; //水印字元
$x = imagesx($im); //獲取圖片的寬度
$y = imagesy($im); //獲取文件的高度
$position_x = $x-80;
$position_y = $y-10;
$str = iconv('gbk', 'utf-8', $word); //將中文文字顯示出來的編碼過程
imagettftext($im, 20, 0, $position_x, $position_y, $textcolor, $font, $str);
//imagejpeg($im); //顯示圖片
$new = $this->file_save_path.'water'.$this->file_name; //生成新的文件名
switch($type) {
case 'jpg':
imagejpeg($im, $new); //生成jpg圖像
break;
case 'png':
imagepng($im, $new); //生成png圖像
break;
case 'gif':
imagegif($im, $new); //生成gif圖像
break;
case 'bmp':
imagexbm($im, $new); //生成bmp圖像 該格式的文件處理有問題
break;
default: {
echo "文件格式不符";
}
}
imagedestroy($im); //結束圖形,釋放內存空間*/
}
//生成縮略圖
/**
* $pic 圖片名 包括其擴展名,但不包括路徑
* $width 將來生成縮略圖的寬度
* $height 將來生成縮略圖的高度
* $path 生成縮略圖的存放路徑
*/
function create_thumbnail($width, $height) {
$type = $this->get_file_type();
$filename = $this->file_save_path.$this->file_name;
$img = getimagesize($filename);
//print_r($img);
//die();
switch($img[2]) {
case 1:
header("content-type:image/gif"); //定義輸出圖像的類型
$im = imagecreatefromgif($filename); //載入圖片
break;
case 2:
header("content-type:image/jpeg");
$im = imagecreatefromjpeg($filename);
break;
case 3:
header("content-type:image/png");
$im = imagecreatefrompng($filename);
break;
case 6:
header("content-type:image/xbm"); //bmp格式存在問題
$im = imagecreatefromxbm($filename); //無法打水印
break;
default: {
echo "文件格式不符";
}
}
$thumb = imagecreatetruecolor($width, $height); //創建一個新的空白的面板
$color = imagecolorallocate($im, 200, 255, 100); //調色板
/*bool imageresized ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )
imageresized() 將一幅圖像中的一塊正方形區域拷貝到另一個圖像中。dst_image 和 src_image 分別是目標圖像和源圖像的標識符。
*/
imageresized($thumb, $im, 0, 0, 0, 0, $width, $height, $img[0], $img[1]);
//imagejpeg($thumb);
$thumb_path = $this->file_save_path."thumbnail/".$this->file_name;
switch($img[2]) {
case 1:
imagejpeg($thumb, $thumb_path);
break;
case 2:
imagegif($thumb, $thumb_path);
break;
case 3:
imagepng($thumb, $thumb_path);
break;
case 6:
imagexbm($thumb, $thumb_path);
break;
default: {
echo "文件格式不符";
}
}
}
}
?>

前幾天做的一個類,可以正常的使用,但還存在問題,僅供參考!忘對您有所幫助

❸ php 在多個上傳圖片時 怎麼獲取 要上傳的圖片寬高

分兩個部分,一個是「多個圖片」,一個是獲取圖片的寬、高。
第一個用循環做到,也就是用for、foreach之類的東西遍歷你從頁面中得到的圖片數組
下一步用getimagesize()函數獲得圖片的信息。
此函數在php手冊里有解釋:圖像生成與處理→GD→GD and image函數里。
此函數返回的結果如下:
返回一個具有四個單元的數組。索引 0 包含圖像寬度的像素值,索引 1 包含圖像高度的像素值。索引 2 是圖像類型的標記:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。這些標記與 PHP 4.3.0 新加的 IMAGETYPE 常量對應。索引 3 是文本字元串,內容為「height="yyy" width="xxx"」,可直接用於 IMG 標記。

❹ 如何使用php中ftp函數上傳文件以及解決上傳文件失敗的方法

一、 ftp上傳圖片參數說明。
1 $source:本機圖片完整的路徑。(/a/b/c.jpg)
2 $des :上傳目標linux主機完整的路徑。
3 $ftp_server:ftp地址
4 $ftp_user_name:ftp用戶名
5 $ftp_user_pass: ftp密碼
6 $port:埠

二、如何使用php中ftp函數上傳文件的方法
例如:
本地地址為:/a/b/c.jpg
目標地址為:/d/a/b/c.jpg
2.1、linux主機上傳linux主機。
01 function ftpSendFile($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
02 {
03 // 此步驟是在於上傳目錄與本機的目錄不一致轉換使用
04 $des = "/d" . $des;
05 $conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
06 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
07 ftp_pasv($conn_id, TRUE);
08 $ftp_folder = dirname($des);
09 $dir = explode("/", $ftp_folder);
10 $path = "";
11 for ($i = 0; $i < count($dir); $i++) {
12 $path .= "/" . $dir[$i];
13 if (!ftp_chdir($conn_id, $path)) {
14 $result = ftp_mkdir($conn_id, $path);
15 }
16 }
17 if (ftp_put($conn_id, $des, $source, FTP_BINARY)) {
18 return 1;
19 } else {
20 return 0;
21 }
22 ftp_close($conn_id);
23 }

2.2、windows主機上傳linux主機。
01 function sendPic($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
02 {
03 $des = "/d" . $des;
04 $conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
05 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
06 ftp_pasv($conn_id, TRUE);
07 $ftp_folder = dirname(str_ireplace('\\', '/', $des));
08 $dir = explode("/", $ftp_folder);
09 $path = "";
10 for ($i = 0; $i < count($dir); $i++) {
11 $path .= "/" . $dir[$i];
12 if (!ftp_chdir($conn_id, $path)) {
13 $result = ftp_mkdir($conn_id, $path);
14 }
15 }
16 if (ftp_put($conn_id, str_ireplace('\\', '/', $des), $source, FTP_BINARY)) {
17 return 1;
18 } else {
19 return 0;
20 }
21 ftp_close($conn_id);
22 }

上面的兩種使用php中ftp函數上傳文件的方法基本可以滿足正常的使用。

❺ php文件上傳使用了哪些函數

//定義上傳目錄變數
$upath="./upload/";
//獲取上傳文件信息
$fupload=$_FILES['image'];
//定義上傳的文件類型
$imgtype=array("image/jpeg","image/jpg","image/png","image/gif","image/bmp");
//獲取php.ini文件upload_max_filesize的大小
$umfs=ini_get("upload_max_filesize");
//獲取html表單post文件大小
$pms=ini_get("post_max_size");
//獲取上傳文件錯誤信息
if($fupload["error"]>0){
switch($fupload["error"]){
case 1:
$errmsg="上傳的文件的大小超過了".$umfs;
break;
case 2:
$errmsg="上傳的文件的大小超過了HTML表單中".$pms."的限制";
break;
case 3:
$errmsg="文件只有部分被上傳";
break;
case 4:
$errmsg="沒有選擇上傳文件";
break;
case 6:
$errmsg="找不到臨時文件夾";
break;
case 7:
$errmsg="文件寫入失敗";
break;
}
die("上傳錯誤:".$errmsg);
}
//過濾上傳文件的大小
if($fupload["size"]>100000000){
die("上傳文件的大小超出了限制");
}
//過濾上傳的文件類型
if(!in_array($fupload["type"],$imgtype)){
die("不支持上傳的文件類型:".$fupload["type"]);
}
//執行上傳文件
if(is_uploaded_file($fupload["tmp_name"])){
if(move_uploaded_file($fupload["tmp_name"],$upath.$fupload["name"])){
echo "文件上傳成功!";
}
}else{
die("不是一個上傳文件!");
}

❻ php中文件上傳的函數是什麼

php文件上傳看使用from表單提交方式,然後通過$_POST函數獲取到文件信息。

❼ php 編寫 實現上傳圖片至伺服器的函數

<?php
classFileUpload{
private$filepath;//指定上傳文件保存的路徑
private$allowtype=array("gif","jpg","jpeg","png");//允許上傳文件的類型
private$maxsize=1000000;//允許上傳文件的最大值
private$israndname=true;//是否隨機重命名,
private$originName;//源文件名字
private$tmpFileName;//臨時文件名字
private$fileType;//上傳後的文件類型,主要是文件後綴名
private$fileSize;//文件尺寸
private$newFileName;//新文件名字
private$errorName=0;//錯誤號
private$errorMess="";//用來提供錯誤報告
//用於對上傳文件初始化
//指定上傳路徑2·允許的類型3·限制大小4·是否使用隨機文件名稱
//讓用戶可以不用換位置傳參數,後面參數給值不用按照位置或者必須有值
function__construct($options=array()){
foreach($optionsas$key=>$val){
$key=strtolower($key);
//查看用戶參數中的數組下標是否和成員屬性名相同
//get_class_vars(get_class($this))得到類屬性的數組
//如果$key下標不在這個類屬性的數組中,則退出for循環
if(!in_array($key,get_class_vars(get_class($this)))){
continue;
}
$this->setOption($key,$val);
}
}
privatefunctionsetOption($key,$val){
//讓實例化後獲取過來的數組下標=數組下標的值,這里即為構造函數初始化
//構造函數中調用,等於把所有屬性初始化,將來可以直接訪問
$this->$key=$val;
}

privatefunctiongetError(){
$str="上傳文件{$this->originName}時出錯";
switch($this->errorNum){
case4:$str.="沒有文件被上傳";
break;
case3:$str.="文件只有部分上傳";
break;
case2:$str.="上傳文件超過了表單的值";
break;
case1:$str.="上傳文件超過phpini的值";
break;
case-1:$str.="未允許的類型";
break;
case-2:$str.="文件過大上傳文件不能超過{$this->maxsize}位元組";
break;
case-3:$str.="上傳文件失敗";
break;
case-4:$str.="建立存放上傳文件目錄失效,請重新上傳指定目錄";
break;
case-5:$str.="必須指定上傳文件的路徑";
break;
default:$str.="未知錯誤";
}
return$str.'<br>';
}
//用來檢查文件上傳路徑
privatefunctioncheckFilePath(){
if(empty($this->filepath)){
$this->setOption("errorNum",-5);
returnfalse;
}
if(!file_exists($this->filepath)||!is_writable($this->filepath)){
if(!@mkdir($this->filepath,0755)){
$this->setOption("errorNum",-4);
returnfalse;
}
}
returntrue;
}
//用來檢查上傳文件尺寸大小

privatefunctioncheckFileSize(){
if($this->fileSize>$this->maxsize){
$this->setOption("errorNum",-2);
returnfalse;
}else{
returntrue;
}
}

//用來檢查文件上傳類型
privatefunctioncheckFileType(){
if(in_array(strtolower($this->fileType),$this->allowtype)){
returntrue;
}else{
//如果$this->fileType這個類型不在$this->allowtype這個數組中,則把錯誤號變成-1
$this->setOption("errorNum",-1);
returnfalse;
}
}
privatefunctionsetNewFileName(){
if($this->israndname){
$this->setOption("newFileName",$this->preRandName());
}else{
$this->setOption("newFileName",$this->originName);
}
}
//用於檢查文件隨機文件名
privatefunctionpreRandName(){
$fileName=date("Ymdhis").rand(100,999);
return$fileName.".".$this->fileType;
}
//用來上傳一個文件

functionuploadFile($fileField){
//檢查文件路徑
$return=true;
if(!$this->checkFilePath()){
$this->errorMess=$this->getError();
returnfalse;
}//獲取文件信息
$name=$_FILES[$fileField]['name'];
$tmp_name=$_FILES[$fileField]['tmp_name'];
$size=$_FILES[$fileField]['size'];
$error=$_FILES[$fileField]['error'];
if(is_array($name)){//判斷獲取過來的文件名字是否為數組
$errors=array();//如果為數組則設置為一個數組錯誤號
for($i=0;$i<count($name);$i++){
//循環每個文件即每個類屬性賦值或者說初始化屬性值或者初始化構造函數
if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
if(!$this->checkFileSize()||!$this->checkFileType()){
//如果上面尺寸或者類型不對,則調用這個錯誤信息
$errors[$i]=$this->getError();
$return=false;
}
}else{
//這里是
$error[]=$this->getError();
$return=false;
}
if(!$return)
$this->setFiles();
}

if($return){
$fileNames=array();
for($i=0;$i<count($name);$i++){
if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
$this->setNewFileName();
if(!$this->File()){
$errors=$this->getError();
$return=false;
}else{
$fileNames[$i]=$this->newFileName;
}
}

}
$this->newFileName=$fileNames;
}

$this->errorMess=$errors;
return$return;


}else{

//看看$name,$tmp_name,$size,$error這些是否賦值成功否則返回FALSE
if($this->setFiles($name,$tmp_name,$size,$error)){
//看看文件大小尺寸是否匹配,不匹配返回FALSE
if($this->checkFileSize()&&$this->checkFileType()){
//獲取新文件名
$this->setNewFileName();
if($this->File()){
returntrue;
}else{
returnfalse;
}
}else{
$return=false;
}
}else{
$return=false;
}
if(!$return){
$this->errorMess=$this->getError();
return$return;
}
}

}

functionFile(){//將文件從臨時目錄拷貝到目標文件夾
if(!$this->errorNum){
//如果傳遞來的路徑有斜杠,則刪除斜杠再加上斜杠
//./upload+./
$filepath=rtrim($this->filepath,'/').'/';
//./upload+./+加上隨機後的新文件名和後綴
//這里指創建一個新的$filepath.這個文件像佔位符但是為空的
$filepath.=$this->newFileName;
//嘗試著把臨時文件$this->tmpFileName移動到$filepath下哪裡覆蓋原來的這個文件
if(@move_uploaded_file($this->tmpFileName,$filepath)){
returntrue;
}else{
$this->setOption('errorNum',-3);
returnfalse;
}
}else{
returnfalse;
}
}
//這里是為了其他剩餘的屬性進行初始化操作!
privatefunctionsetFiles($name="",$tmp_name="",$size=0,$error=0){
//這里給錯誤號賦值
$this->setOption("errorNum",$error);
//如果這里有錯誤,直接返回錯誤
if($error){
returnfalse;
}
$this->setOption("originName",$name);//復制名字為源文件名
$this->setOption("tmpFileName",$tmp_name);
$arrstr=explode(".",$name);//按點分割文件名,
//取分割後的字元串數組最後一個並轉換為小寫,賦值為文件類型
$this->setOption("fileType",strtolower($arrstr[count($arrstr)-1]));
$this->setOption("fileSize",$size);
returntrue;
}
//用來獲取上傳後的文件名
functiongetNewFileName(){
return$this->newFileName;
}

//上傳失敗,後則返回這個方法,就可以產看報告
functiongetErrorMsg(){
return$this->errorMess;
}
}
?>


============================調用====================================


<?php
require("FileUpload.class.php");
//這里實例化後賦值為數組,數組的下標要對應類中屬性的值,否則不能傳遞值,可以不分先後但是必須一致
$up=newFileUpload(array('israndname'=>'true',"filepath"=>"./upload/",'allowtype'=>array('txt','doc','jpg','gif'),"maxsize"=>1000000));
echo'<pre>';

if($up->uploadFile("pic")){
print_r($up->getNewFileName());
}else{
print_r($up->getErrorMsg());
}
echo'<pre>';
?>


-------------------HTML-------------------------
<html>
<head>
<metahttp-quive="content-type"content="text/html;charset=utf-8"></meta>
</head>
<body>
<formaction="upload.php"method="post"enctype="multipart/form-data">
shoppic:<inputtype="file"name="pic[]"><br>

<inputtype="hidden"name="MAX_FILE_SIZE"value="1000000">
<inputtype="submit"name="sub"value="添加商品">
</form>
</body>

</html>

-------------------或者HTML-------------------------

<html>
<head>
<metahttp-quive="content-type"content="text/html;charset=utf-8"></meta>
</head>
<body>
<formaction="upload.php"method="post"enctype="multipart/form-data">
//區別在這里
shoppic:<inputtype="file"name="pic[]"><br>
shoppic:<inputtype="file"name="pic[]"><br>
shoppic:<inputtype="file"name="pic[]"><br>
<inputtype="hidden"name="MAX_FILE_SIZE"value="1000000">
<inputtype="submit"name="sub"value="添加商品">
</form>
</body>

</html>
=====================================================================



以上是自己總結的 還沒有怎麼精簡加工過,僅供參考

以上不止可以上傳圖片,可以上自定義任何文件

閱讀全文

與php上傳圖片函數相關的資料

熱點內容
qt下編譯生成mqtt庫 瀏覽:541
南京中興招收專科程序員嗎 瀏覽:297
代理商php源碼 瀏覽:983
蘋果手機怎麼解壓軟體app 瀏覽:650
游戲資源被編譯 瀏覽:152
代碼編譯後黑屏 瀏覽:8
程序員情侶寫真 瀏覽:505
python3孿生素數 瀏覽:36
計算楊輝三角Python 瀏覽:404
linux目錄重命名 瀏覽:196
演算法設計的最終形態是代碼 瀏覽:262
程序員社團招新橫幅 瀏覽:238
拖鞋解壓視頻大全 瀏覽:887
租伺服器主機鏈接軟體叫什麼 瀏覽:856
交叉編譯工具的linux版本號 瀏覽:156
python開發應用軟體 瀏覽:32
hdl綜合器與c編譯器的區別 瀏覽:899
編譯原理最左推導代碼 瀏覽:702
加密三 瀏覽:131
通過編譯鏈接後形成的可執行程序 瀏覽:680