2012-07-31 62 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