【ThinkPHP學習】ThinkPHP結合KindEditor SAE storage上傳檔案圖片
阿新 • • 發佈:2019-02-01
RT.
最近將我的使用thinkphp開發的專案移植到SAE上,遇到最大的問題就是,檔案的上傳問題。因為SAE關閉了網站目錄的寫許可權。所以不能夠往網站目錄中上傳檔案。
這篇文章介紹了PHP中kindeditor針對SAE storage的修改:
首先,在應用的srotage中,增加一個domain,如果有需要,可以在該domain下新建一個資料夾,之後要儲存檔案到該資料夾目錄下,可以通過第二個引數$file_name中在檔名前面新增資料夾名稱來控制,如果沒有該資料夾,storage會自動建立該資料夾。
接下來,將kindeditor/php/upload_json.php中的內容替換為下面的內容,可以相容普通的虛擬主機或者是SAE環境
<?php /** * KindEditor PHP * Giant Chan 2014-9-2 * */ require_once 'JSON.php'; if(isset($_SERVER['HTTP_APPNAME'])) $issae = true; //是否新浪雲平臺 else $issae = false; $domain = 'public'; //圖片domain名稱,這裡要替換成你用來儲存kindeditor上傳檔案domain名稱 //檔案儲存目錄路徑 $save_path = '../attached/'; //檔案儲存目錄URL $save_url = '../attached/'; //定義允許上傳的副檔名 $ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp'); //最大檔案大小 $max_size = 1000000; //有上傳檔案時 if (empty($_FILES) === false) { //原檔名 $file_name = $_FILES['imgFile']['name']; //檔案型別 $file_type = $_FILES['imgFile']['type']; //伺服器上臨時檔名 $tmp_name = $_FILES['imgFile']['tmp_name']; //檔案大小 $file_size = $_FILES['imgFile']['size']; //檢查檔名 if (!$file_name) { alert("請選擇檔案。"); } //檢查目錄 if(!$issae) { if (@is_dir($save_path) === false) { alert("上傳目錄不存在。"); } //檢查目錄寫許可權 if (@is_writable($save_path) === false) { alert("上傳目錄沒有寫許可權。"); } } //檢查是否已上傳 if (@is_uploaded_file($tmp_name) === false) { alert("臨時檔案可能不是上傳檔案。"); } //檢查檔案大小 if ($file_size > $max_size) { alert("上傳檔案大小超過限制。"); } //獲得副檔名 $temp_arr = explode(".", $file_name); $file_ext = array_pop($temp_arr); $file_ext = trim($file_ext); $file_ext = strtolower($file_ext); //檢查副檔名 if (in_array($file_ext, $ext_arr) === false) { alert("上傳副檔名是不允許的副檔名。"); } //下面用來限制上傳的檔案型別,如果你沒有需要可以註釋掉 //if($file_type!='image/gif'&&$file_type!='image/pjpeg'&&$file_type!='image/x-png'&&$file_type!='image/jpg'){ // alert("只允許上傳gif | jpg | png 格式的圖片。"); // } //新檔名 $new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext; //移動檔案 $file_path = $save_path . $new_file_name; if(!$issae) { //這裡是在非SAE環境下執行的儲存檔案程式碼 if (move_uploaded_file($tmp_name, $file_path) === false) { alert("上傳檔案失敗。"); } @chmod($file_path, 0644); $file_url = $save_url . $new_file_name; } else {//這裡是在SAE環境下執行的儲存檔案程式碼 $s = new SaeStorage(); $r = $s->upload( $domain , './Editor/'.$new_file_name , $tmp_name); //其中,第二個引數的Editor是在domain下新建一個Editor的資料夾,並將內容儲存到該資料夾下 if(!$r) alert("新浪雲平臺上傳檔案失敗,請檢查domain設定是否正確。"); $file_url = $s->getUrl( $domain , './Editor/'.$new_file_name); //同理,如果你設定了Editor資料夾,必須要在儲存url的時候加上Editor,如果沒有,可以去掉Editor } header('Content-type: text/html; charset=UTF-8'); $json = new Services_JSON(); echo $json->encode(array('error' => 0, 'url' => $file_url)); exit; } function alert($msg) { header('Content-type: text/html; charset=UTF-8'); $json = new Services_JSON(); echo $json->encode(array('error' => 1, 'message' => $msg)); exit; } ?>