//圖片上傳處理
$upload_file=$_FILES['upload_file']['tmp_name'];
echo $upload_file;
$upload_file_name=$_FILES['upload_file']['name'];
$type=strstr($upload_file_name, '.');
if($upload_file=="")
{
$newname="0.jpg";
}
else
{
$newname=$newid.$type;
}
//$newname=$newid.$type;
$intonew2="update mms_news_info set col_image='$newname' where col_id='$newid'";
MySQL_query($intonew2,$db);
if($upload_file){
$file_size_max = 1000*1000;// 1M限制文件上傳最大容量(bytes)
$store_dir = "neirongimg/";// 上傳文件的儲存位置
$accept_overwrite = 1;//是否允許覆蓋相同文件
// 檢查文件大小
if ($upload_file_size > $file_size_max) {
echo "對不起,你的文件容量大於規定";
exit;
}
// 檢查讀寫文件
if (file_exists($store_dir . $upload_file_name) && $accept_overwrite) {
Echo "存在相同文件名的文件";
exit;
}
//復制文件到指定目錄
if (!move_uploaded_file($upload_file,$store_dir.$newname)) {
echo "復制文件失敗";
exit;
}
}
Echo "<p>你上傳了文件:";
echo $_FILES['upload_file']['name'];
echo "<br>";
//客戶端機器文件的原名稱。
Echo "文件的 MIME 類型為:";
echo $_FILES['upload_file']['type'];
//文件的 MIME 類型,需要浏覽器提供該信息的支持,例如“image/gif”。
echo "<br>";
Echo "上傳文件大小:";
echo $_FILES['upload_file']['size'];
//已上傳文件的大小,單位為字節。
echo "<br>";
Echo "文件上傳後被臨時儲存為:";
echo $_FILES['upload_file']['tmp_name'];
//文件被上傳後在服務端儲存的臨時文件名。
echo "<br>";
$Erroe=$_FILES['upload_file']['error'];
switch($Erroe){
case 0:
Echo "上傳成功"; break;
case 1:
Echo "上傳的文件超過了 PHP.ini 中 upload_max_filesize 選項限制的值."; break;
case 2:
Echo "上傳文件的大小超過了 Html 表單中 MAX_FILE_SIZE 選項指定的值。"; break;
case 3:
Echo "文件只有部分被上傳";break;
case 4:
Echo "沒有文件被上傳";break;
}
//圖片上傳處理
?>
+++++++++++++++++++++++++++++++++
關於錯誤信息的解釋
從 PHP 4.2.0 開始,PHP 將隨文件信息數組一起返回一個對應的錯誤代碼。該代碼可以在文件上傳時生成的文件數組中的 ['error'] 字段中被找到,也就是 $_FILES['userfile']['error']。
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; 沒有文件被上傳。
注: 這些在 PHP 4.3.0 之後變成了 PHP 常量。
PHP 能夠接受任何來自符合 RFC-1867 標准的浏覽器(包括 Netscape Navigator 3 及更高版本,Microsoft Internet Explorer 3 加微軟補丁,或者更高版本)上傳的文件。PHP 的這種特性使得我們既可以上傳文本文件,也可以上傳二進制文件。利用 PHP 的認證和文件操作函數,您就可以控制誰有上傳的權限,以及在文件上傳後進行哪些處理。
相關的設置: 請參閱 PHP.ini 的 file_uploads、 upload_max_filesize、upload_tmp_dir 以及 post_max_size 設置選項。
請注意 PHP 也支持 PUT 方法的文件上傳,Netscape Composer 和 W3C 的 AMaya 客戶端使用這種方法。請參閱 PUT 方法支持以獲取更多信息。
您可以如下建立一個特殊的表單來支持文件上傳:
例子 18-1. 文件上傳表單
<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
以上范例中的“_URL_”應該替換成指向一個 PHP 文件的真實 URL。MAX_FILE_SIZE 隱藏域(單位為字節)必須先於文件輸入域,其值為接收文件的最大尺寸。同時,要保證您的文件上傳表單中要有 enctype="multipart/form-data",否則文件上傳將不能工作。
警告
MAX_FILE_SIZE 的值只是對浏覽器的一個建議,實際上它可以被簡單的繞過。因此不要把對浏覽器的限制寄希望於該值。實際上,PHP 設置中的上傳文件最大值,是不會失效的。但是最好還是在表單中加上 MAX_FILE_SIZE,因為它可以避免用戶在花時間等待上傳大文件之後才發現該文件太大了的麻煩。
為上傳文件定義的變量會根據 PHP 的版本及設置的不同而不同。自動全局變量 $_FILES 從 PHP 4.1.0 版本開始被支持。在這之前,從 4.0.0 版本開始,PHP 支持 $HTTP_POST_FILES 數組。這些數組將包含所有關於您上傳的文件的信息,其中,我們推薦您使用 $_FILES。如果 PHP 的設置選項 register_globals 為 on,則相關的變量名將也會存在。從 PHP 4.2.0 版本開始,register_globals 的默認值被設為 off。
以上范例中 $_FILES 數組的內容如下所示。我們假設文件上傳字段的名稱如上例所示,為 userfile。名稱可隨意命名。
$_FILES['userfile']['name']
客戶端機器文件的原名稱。
$_FILES['userfile']['type']
文件的 MIME 類型,需要浏覽器提供該信息的支持,例如“image/gif”。
$_FILES['userfile']['size']
已上傳文件的大小,單位為字節。
$_FILES['userfile']['tmp_name']
文件被上傳後在服務端儲存的臨時文件名。
$_FILES['userfile']['error']
和該文件上傳相關的錯誤代碼。['error'] 是在 PHP4.2.0 版本中增加的。
注: 在 PHP 4.1.0 版本以前該數組的名稱為 $HTTP_POST_FILES,它並不像 $_FILES 一樣是自動全局變量。PHP 3 不支持 $HTTP_POST_FILES 數組。
當 php.ini 中的 register_globals 被設置為 on 時,您可以使用更多的變量。例如,$userfile_name 等價於 $_FILES['userfile']['name'],$userfile_type 等價於 $_FILES['userfile']['type'] 等。請記住從 PHP 4.2.0 開始,register_globals 的默認值為 off,因此我們建議您不要依賴於改設置項而使用剛剛提到的那些附加變量。
文件被上傳後,默認地會被儲存到服務端的默認臨時目錄中,除非您將 php.ini 中的 upload_tmp_dir 設置為了其它的路徑。服務端的默認臨時目錄可以通過更改 PHP 運行環境的環境變量 TMPDIR 來重新設置,但是在 PHP 腳本內部通過運行 putenv() 函數來設置是不起作用的。該環境變量也可以用來確認其它的操作也是在上傳的文件上進行的。 例子 18-2. 使文件上傳生效
請查閱函數 is_uploaded_file() 和 move_uploaded_file() 以獲取進一步的信息。以下范例處理由表單提供的文件上傳。
<?PHP
// 在 4.1.0 以前的 PHP 中,需要用 $HTTP_POST_FILES 代替 $_FILES。
// 在 4.0.3 以前的 PHP 中,需要用 copy() 和 is_uploaded_file() 來代替 move_uploaded_file()。
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir. $_FILES['userfile']['name'];
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
print "File is valid, and was successfully uploaded. Here's some more debugging info:\n";
print_r($_FILES);
} else {
print "Possible file upload attack! Here's some debugging info:\n";
print_r($_FILES);
}
print "</pre>";
?>
接受上傳文件的 PHP 腳本必須在文件上傳後進行判斷,來決定接下來要對該文件進行那些操作。例如,您可以通過 $_FILES['userfile']['size'] 變量來忽略尺寸太大或太小的文件,也可以通過 $_FILES['userfile']['type'] 變量來過濾文件類型和某種標准不相符合的文件。在 PHP 4.2.0 以上版本,您還可以通過 $_FILES['userfile']['error'] 變量來根據不同的錯誤代碼來做相關的判斷。不管做何種的判斷,您必須將該文件從臨時目錄中刪除,要麼將其移動到其它的地方。
如果表單中沒有選擇上傳的文件,則 PHP 變量 $_FILES['userfile']['size'] 的值將為 0,$_FILES['userfile']['tmp_name'] 將為 none。
如果該文件沒有被移動到其它地方也沒有被改名,則該文件將在表單請求結束時被刪除