1. 程式人生 > >PHP 開啟檔案瀏覽器並傳遞檔案

PHP 開啟檔案瀏覽器並傳遞檔案

PHP 檔案上傳

通過 PHP,可以把檔案上傳到伺服器。

本章節例項在 test 專案下完成,目錄結構為:

test
|-----upload             # 檔案上傳的目錄|-----form.html          # 表單檔案|-----upload_file.php    # php 上傳程式碼

建立一個檔案上傳表單

允許使用者從表單上傳檔案是非常有用的。

請看下面這個供上傳檔案的 HTML 表單:

<html><head><metacharset="utf-8"><title>菜鳥教程(runoob.com)
</title></head><body><formaction="upload_file.php"method="post"enctype="multipart/form-data"><labelfor="file">檔名:</label><inputtype="file"name="file"id="file"><br><inputtype="submit"name="submit"value="提交"></form></body></html>

將以上程式碼儲存到 form.html 檔案中。

有關上面的 HTML 表單的一些注意項列舉如下:

  • <form> 標籤的 enctype 屬性規定了在提交表單時要使用哪種內容型別。在表單需要二進位制資料時,比如檔案內容,請使用 "multipart/form-data"。
  • <input> 標籤的 type="file" 屬性規定了應該把輸入作為檔案來處理。舉例來說,當在瀏覽器中預覽時,會看到輸入框旁邊有一個瀏覽按鈕。

註釋:允許使用者上傳檔案是一個巨大的安全風險。請僅僅允許可信的使用者執行檔案上傳操作。

建立上傳指令碼

"upload_file.php" 檔案含有供上傳檔案的程式碼:

<?php
if($_FILES
["file"]["error"]>0){ echo "錯誤:". $_FILES["file"]["error"]."<br>";}else{ echo "上傳檔名: ". $_FILES["file"]["name"]."<br>"; echo "檔案型別: ". $_FILES["file"]["type"]."<br>"; echo "檔案大小: ".($_FILES["file"]["size"]/1024)." kB<br>"; echo "檔案臨時儲存的位置: ". $_FILES["file"]["tmp_name"];}?>

通過使用 PHP 的全域性陣列 $_FILES,你可以從客戶計算機向遠端伺服器上傳檔案。

第一個引數是表單的 input name,第二個下標可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。如下所示:

  • $_FILES["file"]["name"] - 上傳檔案的名稱
  • $_FILES["file"]["type"] - 上傳檔案的型別
  • $_FILES["file"]["size"] - 上傳檔案的大小,以位元組計
  • $_FILES["file"]["tmp_name"] - 儲存在伺服器的檔案的臨時副本的名稱
  • $_FILES["file"]["error"] - 由檔案上傳導致的錯誤程式碼

這是一種非常簡單檔案上傳方式。基於安全方面的考慮,您應當增加有關允許哪些使用者上傳檔案的限制。

上傳限制

在這個指令碼中,我們增加了對檔案上傳的限制。使用者只能上傳 .gif、.jpeg、.jpg、.png 檔案,檔案大小必須小於 200 kB:

<?php
// 允許上傳的圖片字尾
$allowedExts = array("gif","jpeg","jpg","png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension =end($temp);// 獲取檔案字尾名if((($_FILES["file"]["type"]=="image/gif")||($_FILES["file"]["type"]=="image/jpeg")||($_FILES["file"]["type"]=="image/jpg")||($_FILES["file"]["type"]=="image/pjpeg")||($_FILES["file"]["type"]=="image/x-png")||($_FILES["file"]["type"]=="image/png"))&&($_FILES["file"]["size"]<204800)// 小於 200 kb&& in_array($extension, $allowedExts)){if($_FILES["file"]["error"]>0){
		echo "錯誤:: ". $_FILES["file"]["error"]."<br>";}else{
		echo "上傳檔名: ". $_FILES["file"]["name"]."<br>";
		echo "檔案型別: ". $_FILES["file"]["type"]."<br>";
		echo "檔案大小: ".($_FILES["file"]["size"]/1024)." kB<br>";
		echo "檔案臨時儲存的位置: ". $_FILES["file"]["tmp_name"];}}else{
	echo "非法的檔案格式";}?>

儲存被上傳的檔案

上面的例項在伺服器的 PHP 臨時資料夾中建立了一個被上傳檔案的臨時副本。

這個臨時的副本檔案會在指令碼結束時消失。要儲存被上傳的檔案,我們需要把它拷貝到另外的位置:

<?php
// 允許上傳的圖片字尾
$allowedExts = array("gif","jpeg","jpg","png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension =end($temp);// 獲取檔案字尾名if((($_FILES["file"]["type"]=="image/gif")||($_FILES["file"]["type"]=="image/jpeg")||($_FILES["file"]["type"]=="image/jpg")||($_FILES["file"]["type"]=="image/pjpeg")||($_FILES["file"]["type"]=="image/x-png")||($_FILES["file"]["type"]=="image/png"))&&($_FILES["file"]["size"]<204800)// 小於 200 kb&& in_array($extension, $allowedExts)){if($_FILES["file"]["error"]>0){
		echo "錯誤:: ". $_FILES["file"]["error"]."<br>";}else{
		echo "上傳檔名: ". $_FILES["file"]["name"]."<br>";
		echo "檔案型別: ". $_FILES["file"]["type"]."<br>";
		echo "檔案大小: ".($_FILES["file"]["size"]/1024)." kB<br>";
		echo "檔案臨時儲存的位置: ". $_FILES["file"]["tmp_name"]."<br>";// 判斷當期目錄下的 upload 目錄是否存在該檔案// 如果沒有 upload 目錄,你需要建立它,upload 目錄許可權為 777if(file_exists("upload/". $_FILES["file"]["name"])){
			echo $_FILES["file"]["name"]." 檔案已經存在。 ";}else{// 如果 upload 目錄不存在該檔案則將檔案上傳到 upload 目錄下
			move_uploaded_file($_FILES["file"]["tmp_name"],"upload/". $_FILES["file"]["name"]);
			echo "檔案儲存在: "."upload/". $_FILES["file"]["name"];}}}else{
	echo "非法的檔案格式";}?>

相關推薦

PHP 開啟檔案瀏覽器傳遞檔案

PHP 檔案上傳 通過 PHP,可以把檔案上傳到伺服器。 本章節例項在 test 專案下完成,目錄結構為: test |-----upload # 檔案上傳的目錄|-----form.html # 表單檔案|-----uplo

C#如何在資源管理器中開啟資料夾定位檔案

private void OpenFolderAndSelectFile(String fileFullName) {     System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessSt

PHP 開啟COM元件 讀取word檔案

1.先到PHP.INI中開啟COM選項,com.allow_dcom = true 2.我這裡的環境是PHP5.4.7,PHP 5.4.5後,com/dotnet 模組已經成了單獨的擴充套件,所以需要在PHP.ini中配置extension=php_com_dotnet.d

【筆記】window下 使用c++遍歷資料夾及其子資料夾和檔案列印檔案路徑及各檔案內容

這兩天一直在學習如何使用c++遍歷資料夾、讀取檔案內容和寫入檔案。 話不多說,直接上程式碼 /** 檔案功能:遞迴遍歷資料夾,遍歷資料夾及其子資料夾和檔案.列印資料夾名稱、檔名稱和檔案數目*** 參考:https://www.cnblogs.com/collectionne/p/679230

java連線hdfs檔案系統訪問檔案

package hadoop; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import org.apache.

JAVA-阿里雲OSS檔案下載檔案壓縮為ZIP格式儲存

一,引言 由於公司業務功能需求,需要從阿里雲OSS(Object Storage Service,物件儲存服務)中獲取檔案並打壓縮成ZIP格式,在這次開發中使用了OSS檔案下載相關服務,檔案壓縮功能使用的是commons-compress-x.x.jar中提供的功能。 二

利用boost遍歷路徑下所有檔案判斷檔案是否是資料夾

#include<boost/filesystem.hpp> void GetFileNameFromDir(const char* rootPath) {     boost::filesystem::path dir(rootPath);     if (b

flume實現監控檔案檔案內容傳入kafka的,kafka在控制檯實現消費

在flume的配置裡建一個檔案flume-kafka.conf 生產者產生的資料放在/home/hadoop/c.txt中 topic消費c.txt中的檔案 a1.sources = s1

javaSE (三十)IO流異常處理、圖片加密處理、輸入檔案路徑拷貝檔案內容、在檔案中鍵入內容

1、IO流異常處理: IO流異常處理一般可以寫得如下這麼複雜(面試備用) alt + shift + z 直接try-catch ,不過沒有加finally 因為作用域的問題,需要在外面建立BufferedInputStream物件並且初始化為null(要是不初始化,就

6、使用IO流實現檔案複製修改檔案字尾

程式設計題目: 6.編寫一個程式,將D:\java目錄下的所有.java檔案複製到D:\jad目錄下,並將原來檔案的副檔名從.java改為.jad。 示例程式碼: package program.stream.exercise06; impo

Python 遍歷資料夾中的檔案檔案放到列表中

最經剛開始接觸Python,學習了用Python實現遍歷資料夾裡的檔案(只遍歷檔案不要目錄),並將這些檔案放到一個列表中 廢話不多說,直接上程式碼 def allDir(path): f=[] for root,dirs,files in o

使用pydicom讀取dicom檔案檔案做一些簡單操作

#! /usr/bin/python # -*- coding: utf-8 -*- import dicom import pylab ds=dicom.read_file("/home/s/data/LungCancer/CT/benign/contrast/60282

使用a標籤開啟新頁面傳遞引數

使用js的方式可以實現a標籤傳遞引數 <a href="#" onclick="ulrHtml('引數');"> //開啟一個新的頁面並傳遞引數 function

讀取檔案寫入檔案

Stream stream = File.OpenRead(Server.MapPath("0.jpg")); long len = stream.Length; byte[] buff = new byte[len]; s

c++builder選擇檔案得到檔案路徑!OpenDialog Edit!

首先需要一個Edit控制元件,一個Button和一個OpenDialog Edit命名為urlOpen,Button為btnOpen,OpenDialog為OpenDialog1 那麼在btnOpen

java處理txt檔案生成檔案

@Test public void transfer() throws IOException{ String tx = null; FileInputStream fis = new Fi

java建立檔案檔案中寫入字串,讀取字串到螢幕

public class FileTest01 { public static void writeFileString() { File file = new File("E:\\zkn")

shell 遍歷目錄下字尾名為.html的檔案替換檔案中內容

1、shell查詢 .html檔案,例: find /usr/local/guotom/webapps/ZingMH/nodeJs/tpls/views/ -type f -name '*.html' 2、替換方法 sed -i "s/邀請/呵呵/g"【將邀請替換為呵呵】

python2.7 開啟ie瀏覽器開啟指定網頁

# -*- coding: utf-8 -*-import webbrowser,os,timebase_path = 'F:\webapps'  #重啟日誌資訊檔案的路徑log_file = base_path + '\%s.log' %(time.strftime('%Y

ASP.NET Core WEB API 使用element-ui檔案上傳元件el-upload執行手動檔案檔案檔案上傳後清空檔案

前言:   從開始學習Vue到使用element-ui-admin已經有將近快兩年的時間了,在之前的開發中使用element-ui上傳元件el-upload都是直接使用檔案選取後立即選擇上傳,今天剛好做了一個和之前類似的檔案選擇上傳的需求,不過這次是需要手動點選按鈕把檔案上傳到伺服器中進行資料匯入,而且最多隻