基於web的文件管理/目錄結構展現(ufinder、elfinder)……的心路歷程

    要在網頁作一個相似windows「個人電腦」那種文件夾文件的展現,而且能上傳下載刪除重命名等功能。php

(一)找JS插件,讀取文件夾內容,利用插件展現linux

1.看到幾個「推薦n款xxx的好用插件」,看了兩個,一個treeview,一個叫ztreeajax

讀取文件內容的php代碼是在百度知道看到的,改了一下。
json

function my_dir($directory)
{
	echo "<ul id='browser' class='filetree'>
			<li><span class=\"folder\">$directory</span>
				<ul>";
	$directory = iconv("utf-8","gb18030" , $directory);
	tree($directory);

	echo '</ul>
		</li>
		</ul>';


}
function tree($directory) 
{ 
	$mydir=dir($directory); 
	while($file=$mydir->read())
	{
		$filename = iconv("gb18030", "utf-8", $file);
		//目錄下的文件是文件夾 
		if((is_dir("$directory/$file")) AND ($file!=".") AND ($file!=".."))
		{ 
			echo "<li><span class=\"folder\">$filename</span>
						<ul>"; 
			tree("$directory/$file"); 
			echo '</ul>
				</li>';
		}
		//文件
		elseif (($file!=".") AND ($file!=".."))
		{ 
			echo "<li><span class=\"file\">$filename</span></li>"; 
			/*echo($file);
			echo($filename);*/
		} 
	} 
	$mydir->close(); 
}

效果大概是這樣:windows

可是隻能展現,功能不足,雖然有幾種樣式,但不夠美觀。異步

2. zTree自帶編輯、異步等功能,可是沒有後臺程序,放棄。函數

(二)在線文檔編輯插件/工具/控件。工具

悲劇就是從這裏開始的。編碼

找了不少,url

  1. ajaxexplorer(好像叫這個名字)(後來更名叫pydio)、KODExplorer什麼的,都是作好的整個系統樣,不是我要找的只是插件,放棄

2.最開始的ufinder,後來兜兜轉轉找的elfinder,外觀都是我須要的,大概是這樣:

   這兩個基本都差很少,感受elfinder比ufinder好看一點點,功能多一點,只須要修改語言引入的<script>和lang的值就支持中文(和各類語言)了,固然,代碼也更復雜更難理解。

    把特!遇到中文的文件卻讀不出來。

    後來發現緣由是個人文件是在windows系統下,它們的編碼都是GBK,而代碼的編碼都是UTF-8,代碼中的json_encode函數也只支持utf8編碼。解決思路有兩種,一是把全部函數參數接收參數後、返回值以前用iconv進行轉碼,在函數內部使用代碼自己的utf8,將ufinder的init和ls函數(感受是初始化和顯示的函數)改過以後能顯示中文文件夾了,想了一下,重命名、刪除、新建,函數太多,改起來太累,有沒有其餘方法。第二種,把代碼中的數據GBK編碼,覺得這樣就跟windows統一了。可是失敗了,由於json_encode只支持utf8。

因而在網上找到一個能把GBK編碼成json的函數:

function ch_json_encode($data) {
   
   function ch_urlencode($data) {
       if (is_array($data) || is_object($data)) {
           foreach ($data as $k => $v) {
               if (is_scalar($v)) {
                   if (is_array($data)) {
                       $data[$k] = urlencode($v);
                   } else if (is_object($data)) {
                       $data->$k = urlencode($v);
                   }
               } else if (is_array($data)) {
                   $data[$k] = ch_urlencode($v); //µÝ¹éµ÷Óøú¯Êý
               } else if (is_object($data)) {
                   $data->$k = ch_urlencode($v);
               }
           }
       }
       return $data;
   }
   
   $ret = ch_urlencode($data);
   $ret = json_encode($ret);
   return urldecode($ret);
}

    再後來,看到哪一個網頁說json都不支持gbk我就哭了。

    無可奈何,第三種思路,想有沒有其餘直接支持windows下文件的插件,因而找到了elfinder。後來發現雖然它支持中文,可是windows下的GBK仍是讀不出文件。不過有一點比ufinder好,ufinder遇到中文文件,整個所在文件夾內全部文件都會顯示不出,而elfinder只是單個文件出錯。

    目前,準備修改按第一種想法,改……

    因此,有沒有人有現成的、或者簡單的解決方法啊 TT……


    後續

    因爲這個功能是要在linux下使用的,gbk編碼的文件沒法讀取的問題直接就忽略掉了,因此也沒找到解決的方法。==

    若是是在linux下使用的話,只須要修改JS的引入就能夠支持中文了。再可能就是須要修改一下文件夾的權限;再而後就是對中文文件名的檢查。在 http://www.oschina.net/question/921067_83470  中3樓「ywh1981」的方法有效:

    elFinderVolumeDriver.class.php文件中有一句 

            'acceptedName'    => '/^\w[\w\s\.\%\-\(\)\[\]]*$/u',

    這一項是用於檢查文件和目錄名稱的正則的,把它設置爲'',對新建或者上傳的文件目錄名就不檢查了。

    這樣,就結束了,linux下基本能用了。

相關文章
相關標籤/搜索