3

codeigniter で基本的な CMS を作成しようとしていますが、CMS のバックエンド内、つまり Web ページでビュー ファイルを開くことができるようにしたいと考えています。これの利点は、コード エディター/ftp クライアントからビューを直接アップロードできることですが、このオプションが利用できない場合は、CMS を使用してそれらを変更できることです。データベースを使用して実行できることはわかっていますが、FTP ビューを直接使用できることが必要です。

色々とググってみましたが、キーワードが全く違う結果になるようです。

したがって、基本的にはファイルを開き、その内容をフォーム/テキストエリアボックスに入れ、保存するとファイルに直接保存されますが、例が見つかりません!

前もって感謝します!

C.

4

2 に答える 2

3

ファイルの一覧表示

ディレクトリ反復子を使用すると、フォルダー内のすべてのファイルのリストを作成できます。(あなたの場合、viewsフォルダーへのすべての.phpファイルのリスト)


ファイルの内容を取得/設定する

次に、file_get_contents を使用して、ファイルの内容を取得できます。

file_put_contentsを使用すると、ファイルの内容を設定できます。

確認することもできます

file_get_contents と file_put_contents と同じことを行います...


検証に関しては

ファイルが読み取り可能かどうか、ファイルの内容を取得する前に確認することができます

ファイルが書き込み可能かどうか、コンテンツを設定する前に確認することもできます。


補完物

また、もし私があなたなら、あなたの cms にシンタックス ハイライターを追加します。Apache、Aptana、Mozilla、Yahoo、Wordpress などの大きな魚で使用されているものをチェックしたいかもしれません。

http://alexgorbatchev.com/SyntaxHighlighter/

于 2012-07-31T12:54:32.550 に答える
1

これは (私が信じている) かなり前の有効なソリューションです。以前は有効だったと言えますが、現在のシステムと互換性があることは保証しません。

特徴

  • パスワードログイン (あまり安全ではありませんが、カジュアルなユーザーを遠ざけます)
  • 戻るボタンを押して変更を古いコードで上書きするのを防ぎます (ランダムではなくタイムスタンプを使用するように $rand を更新する可能性があります)。

おそらく、これに対して行うことができる多くの更新があります。

これは主に、何かを機能させるための迅速で汚い解決策でした

ファイルのリストも必要な場合は、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>
于 2012-07-31T13:11:55.340 に答える