2012-07-31 4 views
3

codeigniter에서 기본 CMS를 만들려고하고 있으며 CMS의 백엔드, 즉 웹 페이지에서보기 파일을 열 수 있기를 원합니다. 이 방법의 장점은 코드 편집기/ftp 클라이언트에서 직접보기를 업로드 할 수 있지만이 옵션을 사용할 수없는 경우 CMS를 사용하여보기를 수정할 수 있다는 것입니다. 데이터베이스를 사용하여 작업을 수행 할 수 있지만 FTP보기를 직접 수행 할 수 있어야한다는 것을 알고 있습니다.Codeigniter, 웹 페이지에서보기 파일 열기 및 편집

여러 가지 검색을 시도했지만 키워드가 완전히 다른 결과를 얻는 것 같습니다.

기본적으로 파일을 열어 양식/텍스트 영역 상자에 내용을 넣은 다음 저장하면 파일에 직접 저장되지만 예제는 찾을 수 없습니다!

미리 감사드립니다. directory iterator 당신이 폴더의 모든 파일의 목록을 만들 수 있습니다 사용

C.

답변

3

목록 파일

. (뷰 폴더에 모든 .PHP 파일의 귀하의 경우 목록)


는/그런 다음 파일의 내용을 검색 할 수 있습니다 file_get_contents you을 사용하여 파일

의 내용을 설정하기.

을 사용하고 file_put_contents을 사용하면 파일의 내용을 설정할 수 있습니다.

또한 확인할 수 있습니다

...

검증에 관해서는

파일 is_readable

또한 파일 is_writable


경우 내용을 설정하기 전에 확인 할 수 있습니다 경우이 파일 내용을 얻기 전에 체크 할 수있다

보조

만약 내가 너라면, 당신의 CMS를위한 구문 형광펜을 추가 할 것이다. 아파치, 앱 타나, 모질라, 야후, 워드 프레스 같은 큰 물고기가 사용하는 것을 확인하고 싶을 것이다.

http://alexgorbatchev.com/SyntaxHighlighter/

+1

감사 Hipny는 정말 SyntaxHighlighter 사용에 대한 여러분의 도움과 좋은 생각을 주셔서 감사합니다! :-) –

+0

나의 기쁨! ;) – Hipny

1

Heres는 오래 전에에서 (내가 생각하는 것) 작업 솔루션 내가 과거에 일을 말할 수 있습니다하지만 난 여전히 현재의 시스템과 호환된다는 보장도하지 않습니다.

특징

  • 비밀번호 로그인 (매우 안전하지하지만 멀리 유지합니다 일반 사용자)
  • 백 버튼을 눌렀을 오래된 코드 변경 사항을 덮어 쓰는 것을 방지 (아마도 타임 스탬프를 사용하는 $ 랜드를 업데이트 할 수 무작위 대신에)

아마도 많은 업데이트가있을 수 있습니다.

은 사업부로 readdir은 나 (빠른 뭔가를) 위해 scandir의 결과를 출력 시도해 볼 수도 있습니다, 당신은 또한 파일을 나열하는 데 필요한 경우 단지

작업 뭔가를 얻기 위해 주로 신속하고 더러운 솔루션이었습니다. 또한, @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

고마워요! 시작 코드를 이해하고, 그것을 줄 것이며 잘하면 그것을 알아낼 :) –