『壹』 php版本的ueditor如何將上傳的文件以文件自身的md5值命名
1 if(isset($_FILES['multimedia']) && $_FILES['multimedia']['error']==0)
2 {
3 $file_name = $_FILES['multimedia']['name'];
4 $size = getimagesize($_FILES['multimedia']['tmp_name']);
5 $type = $_FILES['multimedia']['type'];
6 $original = $_FILES['multimedia']['tmp_name'];
7 $md5 = md5_file($original);
8 echo $md5;
9 }
md5_file()
md5_file() 函數計算文件的 MD5 散列。md5() 函數使用 RSA 數據安全,包括 MD5 報文摘譯演算法。如果成功,則返回所計算的 MD5 散列,如果失敗,則返回 false。
語法:md5(string,raw)
參數string,必需。規定要計算的文件。
參數charlist,可選。規定十六進制或二進制輸出格式:TRUE - 原始 16 字元二進制格式;FALSE - 默認。32 字元十六進制數。
1 <?php
2 $filename = "test.txt";
3 $md5file = md5_file($filename);
4 echo $md5file;
5 ?>
存儲 "test.txt" 文件的 MD5 散列:
1 <?php
2 $md5file = md5_file("test.txt");
3 file_put_contents("md5file.txt",$md5file);
4 ?>
在本例中,我們將檢測 "test.txt" 是否已被更改(即是否 MD5 散列已被更改):
01 <?php
02 $md5file = file_get_contents("md5file.txt");
03 if (md5_file("test.txt") == $md5file)
04 {
05 echo "The file is ok.";
06 }
07 else
08 {
09 echo "The file has been changed.";
10 }
11 ?>
輸出:
view sourceprint?
1 The file is ok.
『貳』 PHP上傳文件 如何重命名
新生成一個名字,然後把上傳的文件復制到新的位置上就可以了
move_uploaded_file(上傳的暫時文件名, 新的文件名)
『叄』 PHP 為什麼要使用命名空間,命名空間的作用
命名空間一個最明確的目的就是解決重名問題,PHP中不允許兩個函數或者類出現相同的名字,否則會產生一個致命的錯誤。這種情況下只要避免命名重復就可以解決,最常見的一種做法是約定一個前綴。
舉個栗子:項目中有兩個模塊:article和message board,它們各自有一個處理用戶留言的類Comment。之後我可能想要增加對所有用戶留言的一些信息統計功能,比如說我想得到所有留言的數量。這時候調用它們Comment提供的方法是很好的做法,但是同時引入各自的Comment類顯然是不行的,代碼會出錯,在另一個地方重寫任何一個Comment也會降低維護性。那這時只能重構類名,我約定了一個命名規則,在類名前面加上模塊名,像這樣:Article_Comment、MessageBoard_Comment
可以看到,名字變得很長,那意味著以後使用Comment的時候會寫上更多的代碼(至少字元多了)。並且,以後如果要對各個模塊增加更多的一些整合功能,或者是互相調用,發生重名的時候就需要重構名字。當然在項目開始的時候就注意到這個問題,並規定命名規則就能很好的避免這個問題。另一個解決方法可以考慮使用命名空間。
基礎
命名空間將代碼劃分出不同的空間(區域),每個空間的常量、函數、類(為了偷懶,我下邊都將它們稱為元素)的名字互不影響, 這個有點類似我們常常提到的『封裝'的概念。
創建一個命名空間需要使用namespace關鍵字,這樣:
復制代碼代碼如下:
<?php
//創建一個名為'Article'的命名空間
namespace Article;
?>
要注意的是,當前腳本文件的第一個命名空間前面不能有任何代碼,下面的寫法都是錯誤的:
復制代碼代碼如下:
//例一
//在腳本前面寫了一些邏輯代碼
<?php
$path = "/";
class Comment { }
namespace Article;
?>
//例二
//在腳本前面輸出了一些字元
<html></html>
<?php
namespace Article;
?>
為什麼要說第一個命名空間呢?因為同一腳本文件中可以創建多個命名空間。
下面我創建了兩個命名空間,順便為這兩個空間各自添加了一個Comment類元素:
復制代碼代碼如下:
<?php
//創建一個名為'Article'的命名空間
namespace Article;
//此Comment屬於Article空間的元素
class Comment { }
//創建一個名為'MessageBoard'的命名空間
namespace MessageBoard;
//此Comment屬於MessageBoard空間的元素
class Comment { }
?>
在不同空間之間不可以直接調用其它元素,需要使用命名空間的語法:
復制代碼代碼如下:
<?php
namespace Article;
class Comment { }
namespace MessageBoard;
class Comment { }
//調用當前空間(MessageBoard)的Comment類
$comment = new Comment();
//調用Article空間的Comment類
$article_comment = new \Article\Comment();
?>
可以看到,在MessageBoard空間中調用article空間里的Comment類時,使用了一種像文件路徑的語法: \空間名\元素名
除了類之外,對函數和常量的用法是一樣的,下面我為兩個空間創建了新的元素,並在MessageBoard空間中輸出了它們的值。
復制代碼代碼如下:
<?php
namespace Article;
const PATH = '/article';
function getCommentTotal() {
return 100;
}
class Comment { }
namespace MessageBoard;
const PATH = '/message_board';
function getCommentTotal() {
return 300;
}
class Comment { }
//調用當前空間的常量、函數和類
echo PATH; ///message_board
echo getCommentTotal(); //300
$comment = new Comment();
//調用Article空間的常量、函數和類
echo \Article\PATH; ///article
echo \Article\getCommentTotal(); //100
$article_comment = new \Article\Comment();
?>
然後我的確得到了Article空間的元素數據。
子空間
命名空間的調用語法像文件路徑一樣是有道理的,它允許我們自定義子空間來描述各個空間之間的關系。