茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1672727 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
HoneyMoon_Day3_00088.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

PHP特區 : [轉貼]PHP上傳實例

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]PHP上傳實例
PHP上傳實例

--------------------------------------------------------------------------------

上傳檔案的網頁
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>


接收參數陣列
檔案名稱:
$_FILES['userfile']['name']


檔案格式:
$_FILES['userfile']['type']


檔案大小:
$_FILES['userfile']['size']


檔案暫存的位置(伺服器上暫存的位置,必須要移動到正確的位置):
$_FILES['userfile']['tmp_name']


錯誤訊息:
$_FILES['userfile']['error']


語法例:
<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
   echo "File is valid, and was successfully uploaded.\\\\n";
} else {
   echo "Possible file upload attack!\\\\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>


多檔同時傳送陣列實例:
<form action="" method="post" enctype="multipart/form-data">
<p>Pictures:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
   if ($error == UPLOAD_ERR_OK) {
       $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
       $name = $_FILES["pictures"]["name"][$key];
       move_uploaded_file($tmp_name, "data/$name");
   }
}
?>


來源出處:PHP5網管實驗室 - PHP上傳實例
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]使用 PHP 上傳檔案

使用 PHP 上傳檔案


建文 HTML 表單

要製作用作上傳檔案的表單與傳統的表單差不多,但必須將表單中的 enctype 屬性設成 multipart/form-data。enctype 屬性是指定瀏覽器對表單中的參數進行編碼的方法,預設值為 application/x-www-form-urlencoded。
以下是建立表單的例子:
upload.html
01 <html>
02 <head>
03 <title>A simple upload form</title>
04 </head>
05 <body>
06 <h2>A simple upload form</h2>
07
08 <form method="post" action="upload.php" enctype="multipart/form-data">
09 Enter file name: <input type="file" name="userfile"><br>
10 <input type="submit" value="Upload">
11 </form>
12
13 </body>
14 </html>

處理上傳檔案

建立了以上的 HTMl 表單後,下一步要做的就是後端的處理。在 PHP 中可以透過二維陣列 $HTTP_POST_FILES 或 $_FILES 來存取所上傳的檔案詳細內容。就以以上表單為例,輸入元素名為 userfile,各陣列元素為:
$_FILES['userfile']['name'] -- 檔案在客戶端電腦上的檔案名稱
$_FILES['userfile']['type'] -- 檔案的 MIME 類型,例如 "image/gif"
$_FILES['userfile']['size'] -- 上傳檔案的檔案大小,單為為 bytes
$_FILES['userfile']['tmp_name'] -- 上傳檔案儲存在伺服器端的暫存檔案名
$_FILES['userfile']['error'] -- 在 PHP 4.2.0 或更新的片本才有的這個陣列元素,上傳檔案的錯誤號碼

上傳檔案的 PHP 程式

以上介紹了建立上傳檔案用的表單及存取陣列,以下便建立上傳檔案的程式。首先需要建立一個目錄作儲存檔案,並需要確定 web server 有寫入的權限,一般設成 777 就可以,假設使用以上的上傳表單,以及上傳目錄是 "/var/www/uploads/",以下是程式碼範例會顯示上傳檔案資訊以及上傳檔案:
upload.php
01 <html>
02 <head>
03 <title>A simple upload form</title>
04 </head>
05 <body>
06 <h2>Uploaded File Details</h2>
07
08 <?php
09 // display file details
10 echo "Filename: " . $_FILES['userfile']['name'] . "<br>";
11 echo "Temporary Name: " . $_FILES['userfile']['tmp_name'] . "<br>";
12 echo "Size: ". $_FILES['userfile']['size'] . "<br>";
13 echo "Type: ". $_FILES['userfile']['type'] . "<br>";
14
15 // copy file here
16 if(@copy($_FILES['userfile']['tmp_name'], "/var/www/uploads/" . $_FILES['userfile']['name'])){
17 echo "<b>File successfully upload</b>";
18 }else{
19 echo "<b>Error: failed to upload file</b>";
20 }
21 ?>
22
23 </body>
24 </html>

以上傳子使用了 copy 函式上傳檔案,其實 PHP 對上傳檔案已提供了兩個專用函式,它們是 move_uploaded_file() 及 is_uploaded_file(),有興趣的朋友可參考 PHP 使用手冊關於這兩個函式的簡介及用法。

程式的改進

以上的上傳程式只做了最基本的上傳動作,在實際應用中還是會有問題,例如不能容納相同的檔案名稱、同一目錄檔案過多時存取效率減低等問題。但本文只作一個入門的介紹,希望日後可以寫一篇更深入的文章作介紹。
====================================================
歡迎轉載,但轉載時請保留此宣告,不得作為商業用途
作者: Sam Tang

來源網站:
http://www.phpdc.com/
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]PHP $_FILES詳解
$_FILES數組內容如下:

$_FILES[''myFile''][''name''] 客戶端文件的原名稱。
$_FILES[''myFile''][''type''] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如"image/gif"。
$_FILES[''myFile''][''size''] 已上傳文件的大小,單位為字節。
$_FILES[''myFile''][''tmp_name''] 文件被上傳後在服務端儲存的臨時文件名,一般是系統默認。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函數設置是不起作用的。
$_FILES[''myFile''][''error''] 和該文件上傳相關的錯誤代碼。[''error''] 是在 PHP 4.2.0 版本中增加的。下面是它的說明:(它們在PHP3.0以後成了常量)
UPLOAD_ERR_OK
值:0; 沒有錯誤發生,文件上傳成功。
UPLOAD_ERR_INI_SIZE
值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上傳。
UPLOAD_ERR_NO_FILE
值:4; 沒有文件被上傳。
值:5; 上傳文件大小為0.


文件被上傳結束後,默認地被存儲在了臨時目錄中,這時您必須將它從臨時目錄中刪除或移動到其它地方,如果沒有,則會被刪除。也就是不管是否上傳成功,腳本執行完後臨時目錄裡的文件肯定會被刪除。所以在刪除之前要用PHP的 copy() 函數將它複製到其它位置,此時,才算完成了上傳文件過程。
文章出处:PHP $_FILES詳解
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]如何使用jQuery File Upload‧將一堆檔案一次性上傳(upload)到網站內

如何使用jQuery File Upload‧將一堆檔案一次性上傳(upload)到網站內

之前一直尋找方法,不使用FTP的方式把檔案上傳到伺服器上。之前使用Java,以為是唯一的方法,直到今天找到這一個JQuery模組。

01. 在 AQUANTUM Demo Site下載jQuery File Upload Demo。

02. 解壓檔案至伺服器資料夾內。今次使用的是XAMPP伺服器(xampp\htdocs\)。

03. 為方便瀏覽,可把資料夾名稱(blueimp-jQuery-File-Upload-fa25106)更改為簡單的名稱(jQuery-File-Upload)。

04. 打開瀏覽器( http://localhost/jQuery-File-Upload/example/),會出現以下畫面。

05. 上傳檔案,測試程式是否正常。

06. 上傳檔案後,可在xampp\htdocs\jQuery-File-Upload\example\files資料夾內,找到上傳的檔案。

07. 如果只是上傳檔案到特定位置,來到這裡已經完成所有的工作。但今次的目的,是需要把不同的檔案,存放到不同的資料夾內。

08. 首先,假設其他不同的資料夾位置,與jQuery-File-Upload資料夾在同一層位置(xampp\htdocs\jQuery-File-Upload\example\other_folder)。

09. 將xampp\htdocs\jQuery-File-Upload\example資料夾下index.html檔案,更改為index.php檔案。

10. 編輯xampp\htdocs\jQuery-File-Upload\example資料夾index.php檔案。

在檔案最頭位置,新增以下內容:


<?php
if (isset($_POST["folder_name"]) && $_POST["folder_name"]!="") {
$folder=$_POST["folder_name"];
if (!file_exists(str_replace(basename(dirname(__FILE__)), 'other_folder', dirname(__FILE__)).'/'.$folder)) {
mkdir(str_replace(basename(dirname(__FILE__)), 'other_folder', dirname(__FILE__)).'/'.$folder, 0777);
}
$fp = fopen('folder_name.log','w');
fputs ($fp, $folder);
fclose ($fp);
echo '<p>Absoulte path: '.str_replace(basename(dirname(__FILE__)), 'other_folder', dirname(__FILE__)).'/'.$folder.'/</p>';
echo '<p>Relative apth: '.str_replace(basename(dirname(__FILE__)), 'other_folder', dirname($_SERVER['PHP_SELF'])).'/'.$folder.'/</p>';
?>

在以下位置:
<button type="button" class="delete">Delete files</button>
新增:
<a class="change" href="reset.php">Change folder</a>


在檔案最尾位置,新增以下內容:
<?php
} else {
echo '<html>';
echo '<head>';
echo '<title>Folder</title>';
echo '<style type="text/css">';
echo 'input {';
echo 'font-family: Arial;';
echo '}';
echo '.content_text {';
echo 'font-size: 10pt;';
echo 'color: #333;';
echo '}';
echo '</style>';
echo '</head>';
echo '<body>';
echo '<form name="titleform" method="post" action="'.$_SERVER['PHP_SELF'].'">';
echo '<p>Folder name: <input class="content_text" id="folder_name" name="folder_name" type="text" MAXLENGTH=50 size="30" /></p>';
echo '<input type="submit" value="Submit" />';
echo '<input type="reset" value="Reset" />';
echo '</body>';
echo '</html>';
}
?>

11. 編輯xampp\htdocs\jQuery-File-Upload\example資料夾style.css檔案。


新增以下內容:
.change {
float: right;
padding: 10px 0 0 0;
}

11. 編輯xampp\htdocs\jQuery-File-Upload\example資料夾upload.php檔案。

在以下位置:
function __construct($options=null) {
新增:
$fp = fopen('folder_name.log','r');
if ($fp) {
$folder = fgets($fp,4096);
}
fclose ($fp);

將:
'upload_dir' => dirname(__FILE__).'/files/',
'upload_url' => dirname($_SERVER['PHP_SELF']).'/files/',
更改為:
'upload_dir' => str_replace(basename(dirname(__FILE__)), 'other_folder', dirname(__FILE__)).'/'.$folder.'/',
'upload_url' => str_replace(basename(dirname(__FILE__)), 'other_folder', dirname($_SERVER['PHP_SELF'])).'/'.$folder.'/',

為避免上傳惡意程式,將:
'accept_file_types' => '/.+$/i',
更改為只限制上傳圖檔:
'accept_file_types' => '/(jpg)|(gif)|(png)$/i',


因應不需要存放縮圖圖檔,將:
'thumbnail' => array(
'upload_dir' => dirname(__FILE__).'/thumbnails/',
'upload_url' => dirname($_SERVER['PHP_SELF']).'/thumbnails/',
'max_width' => 80,
'max_height' => 80
)
更改為:
/*
'thumbnail' => array(
'upload_dir' => dirname(__FILE__).'/thumbnails/',
'upload_url' => dirname($_SERVER['PHP_SELF']).'/thumbnails/',
'max_width' => 80,
'max_height' => 80
)
*/

12. 在xampp\htdocs\jQuery-File-Upload\example資料夾下,新增reset.php檔案。

<?php
unset($_POST["updateverifycode"]);
unset($_POST["folder_name"]);
header("location: index.php");
?>

13. 打開瀏覽器( http://localhost/jQuery-File-Upload/example/index.php),會要求輸入資料夾名稱。

14. 上傳檔案,再到相關資料夾,檢查檔案是否已成功上傳。

附加檔案大小
blueimp-jQuery-File-Upload-fa25106.zip33.99 KB

原文出處: 如何使用jQuery File Upload‧將一堆檔案一次性上傳(upload)到網站內 | Knowledge base
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|