1. 程式人生 > >【ThinkPHP學習】ThinkPHP結合KindEditor SAE storage上傳檔案圖片

【ThinkPHP學習】ThinkPHP結合KindEditor SAE storage上傳檔案圖片

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;
}
?>