2012-07-31 63 views
3

我正在嘗試在codeigniter中創建一個基本的CMS,並且希望能夠打開CMS後端內部的視圖文件,即在網頁上。這樣做的好處是能夠直接從代碼編輯器/ ftp客戶端上傳視圖,但如果此選項不可用,則可以使用CMS對其進行修改。我知道我可以使用數據庫來做到這一點,但能夠直接訪問FTP視圖是必需的。Codeigniter,打開並編輯網頁上的查看文件

我試過谷歌搜索各種各樣的東西,但關鍵詞似乎拉起完全不同的結果。

所以它基本上是打開文件,把它的內容放在一個form/textarea框中,然後保存它直接保存到文件中,但我找不到任何示例!

在此先感謝!

C.

回答

3

列表文件

使用directory iterator你可以做一個文件夾中的所有文件的列表。 (在你的情況下,所有.php文件到views文件夾列表)


獲取/設置然後使用file_get_contents you可以檢索該文件的內容的文件

的內容。

和使用file_put_contents您可以設置文件的內容。

您還可以檢查

它做同樣的file_get_contents和file_put_contents的...


至於驗證

如果文件is_readable

您可能還希望,如果該文件is_writable


設置內容之前檢查你可以得到該文件內容之前檢查

補體

另外,如果我是你,我會爲你的cms添加一個語法熒光筆,你可能想要檢查一些大魚使用的那個:Apache,Aptana,Mozilla,Yahoo,Wordpress,...

http://alexgorbatchev.com/SyntaxHighlighter/

+1

感謝Hipny,非常感謝您的幫助和偉大的想法在使用SyntaxHighlighter的! :-) – 2012-07-31 13:23:09

+0

我的榮幸! ;) – Hipny 2012-07-31 13:34:41

1

繼承人(我認爲是)從一個長時間工作的解決方案前 我可以說,它在過去的工作,但我不作任何保證它仍與當前的系統兼容。

特點

  • 密碼登錄(不是很安全,但會保持距離普通用戶)
  • 避免您點擊返回按鈕,覆蓋舊代碼的更改(很可能更新$蘭特使用時間戳而不是隨機)

有可能有很多更新,你可以做到這一點。

這主要是一個快速和骯髒的解決方案只是要得到的東西的工作

如果你需要它也列出文件,你可以嘗試READDIR或SCANDIR(東西快)的結果輸出到一個div。另外,@Hipny有權想法,如何建立你自己的

代碼:

<? 
$rand = mt_rand(0, 65535); 
setcookie("check", $rand); 
if ($_POST['pass'] != ""){ 
setCookie ("auth", hash("sha512", $_POST['pass'])); 
echo "<meta http-equiv='refresh' content='0;" . $_SERVER["SCRIPT_NAME"] . "'>"; 
} 
if ($_GET['logout'] == "1"){ 
setCookie("auth",""); 
echo "<meta http-equiv='refresh' content='0;" . $_SERVER["SCRIPT_NAME"] . "'>"; 
} 
if ($_COOKIE['auth'] != "!!!! INSERT YOUR OWN SHA512 HASH HERE !!!!"){ 
echo "<center><h1>Authentication required</h1><br /><form action='" . $_SERVER["SCRIPT_NAME"]. "?" . $_SERVER["QUERY_STRING"] . "' method='post'><input type='password' name='pass'><input type='submit' value='Authenticate'></form></center>"; 
die(); 
} 
$rand = mt_rand(0, 65535); 
setcookie("check", $rand); 
?> 
<html> 
    <head> 
     <script language="javascript" type="text/javascript"> 
     function reloadFile(){ 
      var query = window.location.search.substring(1); 
      var vars = query.split("&"); 
      var redir = "?"; 
      for (var i=0;i<vars.length;i++){ 
       if (vars[i].indexOf("file=") == -1 && vars[i].indexOf("save=1") == -1){ 
        if (redir == "") redir = "?" + vars[i]; 
        else redir += "&" + vars[i]; 
       } 
      } 
      while (redir.indexOf("&&") != -1) redir = redir.replace("&&", "&"); 
      document.location.href = document.location.href.substring(0, document.location.href.indexOf("?")) + redir + "&file=" + document.getElementById("newfile").value; 
     } 
     </script> 
<title>Editing file: <? echo $_GET['file']; ?></title> 
    </head> 
    <body> 
<table cellspacing="0" cellpadding="0"> 
<tr> 
<td colspan=2"> 
<input id="newfile" type="text" size="135" onkeydown="if (event.keyCode == 13) document.getElementById('load').click()"><input id="load" type="button" value="Load" onClick="if (confirm('Discard changes?')) reloadFile();"> 
</td> 
</tr> 
<tr> 
<td colspan="2"> 
<?php 
function ex($message){ 
throw new Exception($message); 
} 
function read($file){ 
try{ 
@$handle = fopen($file, "rb") or ex("Read Error!"); 
$contents = stream_get_contents($handle); 
fclose($handle); 
return htmlspecialchars($contents); 
} catch (Exception $e) { 
return "Creating new file."; 
} 
} 
function save(){ 
$data = htmlspecialchars_decode($_POST['data']); 
if($_GET['file'] != "") { 
     $fp=fopen($_GET['file'], "w"); 
     fwrite($fp, $_POST['data']); 
     fclose($fp); 
} 
} 
//echo strlen ($_POST['data']); 
if ($_POST['data'] != "" && $_COOKIE['check'] == $_POST['checksum']) save(); 
else if ($_GET['save'] == 1) echo "<div id='abort'><h1><font color='FF0000'>Save checksum did not match: save aborted!</font> <a href=\"javascript:void(document.getElementById('abort').style.display = 'none')\" style='color: #000000;text-decoration:none;'>X</a></h1></div>"; 
?> 
     <form name="dataform" id="dataform" method="post" action="<? echo $_SERVER["SCRIPT_NAME"] . "?" . $_SERVER['QUERY_STRING']; if (strpos($_SERVER['QUERY_STRING'],"&save=1") === false) echo "&save=1"; ?>" onSubmit="return confirm('Do you want to save?');"> 
     <textarea name="data" wrap="off" id="data"<? if ($_POST['h'] != "") echo " rows='" . $_POST['h'] . "'"; else if ($_GET['h'] != "") echo " rows='" . $_GET['h'] . "'"; 
<? 
    if ($_GET['file'] != "") echo read($_GET['file']); 
?></textarea><br /> 
<input type="hidden" value="<? echo $rand ?>" id="checksum" name="checksum"> 
<script language="javascript" type="text/javascript"> 

</script> 
</td> 
</tr> 
<tr> 
<td> 
<input type="submit" Value="Save"> 
<input type="button" Value="Revert" onClick="if (confirm('Are you sure you want to revert?')) document.location.href = document.location.href;"> 
<input type="button" Value="Logout" onClick="if (confirm('Are you sure you want to logout?')) document.location.href = '<? echo $_SERVER["SCRIPT_NAME"] ?>?logout=1';"> 
</td> 
<td align="right"> 
<input name="h" id="h" onKeyUp='document.getElementById("data").rows = this.value'> x <input name="w" id="w" onKeyUp='document.getElementById("data").cols = this.value'> 
<script language="javascript" type="text/javascript"> 
document.getElementById("data").style.width = document.body.clientWidth * .9; 
document.getElementById("data").style.height = document.body.clientHeight * .8; 
</script> 
</td> 
</tr> 
</table> 
</form> 
</body> 
</html> 
+0

謝謝!欣賞開始的代碼,會給它一個去,並希望得到它:) – 2012-07-31 13:23:59