0

ファイルの内容をテキストエリアで開いて編集する方法がわかりません。正直なところ、具体的な質問はありません。私は文字通りゼロの結果で何日もこれに取り組んできました。この時点でアイデアが尽きかけているので、新しい目が必要です。友達、私のコードにおそらく明らかなエラーがあるかどうかを見て、教えてください。

これらはファイル関数です

    function view_files($dir)
{?>
    <table>
        <tr>
            <form method='POST' action='?act=file&dir=<?php echo base64_encode($dir);?>'>
            <td><input type='text' name='dir' size='50' value='<?php echo $dir; ?>'>
            <input type='submit' value='Go'></form></td
        </tr>

        <table border='1'><tr>
            <td width='175'><b>Name</b></td>
            <td><b>Size</b></td>
            <td><b>Permissions</b></td>
            <td><b>Edit</b></td>
            <td><b>Delete</b></td>
            <td><b>Chmod</b></td>
        </tr>
<?php

    if($handle = opendir($dir))
    {
        while(($file = readdir($handle)) !== false)
        {
            if($file != '.' && $file != '..')
            {?>
                <table><td>
                    <?php echo $file; ?>
                    <td width='165'><a href='?act=edit&file=<?php echo base64_encode($file);?>'><b id='me'><u>Edit</u></b></a></td>
                    <td width='225'><a href='?act=del'><b id='me'><u>Delete</u></b></a></td>
                    <td width='190'><a href='?act=chmod'><b id='me'><u>Chmod</u></b></a></td>
                </td></table>
            <?php
            }
        }
    }
}

function edit_files($file)
{
    if(isset($_POST['f']) && isset($_POST['d']))
    {
        $handle = fopen($_POST['f'], 'w');
        if(!$handle)
        {
            echo 'Failed to open selected file.';
        }
        else
        {?>
            <form method='POST' action='?act=edit&file=<?php echo base64_encode($file);?>'><textarea rows='17' cols='70' name='d'><?php
            $data = htmlspecialchars(file_get_contents($_GET['edit']));
            echo $data;
            fwrite($handle, $_POST['d']);
        }
        if(file_exists($file))
        {
            $handle = fopen($file, 'r');
            $contents = fread($handle, filesize($file));
            echo htmlspecialchars($contents);
        }?>
        </textarea><input type='submit' value='Save Changes' /></form><?php
    }  
}

ここから始まります:

    <?php
if(isset($action) && !empty($action))
{  
    if($action == 'file')
    {?>
        <table border='1'><th><b><a id='info' href='?act=file'>[ File Management ]</a></b></th></table><?php

        view_files($dir);
    }
    elseif($action == 'edit')
    {?>
       <table border='1'><th><b>[ Edit Files ]</b></th></table><?php

       edit_files($file);
    }

ところで $action == $_GET['act'] ご存知のとおりです。それがすべての関連コードだと思います。基本的に何が起こるかというと、スクリプトの編集ボタンをクリックすると、[ Edit Files ] テーブル ヘッダーだけがポストされ、それだけです。だから..私は何日もこれに取り組んできましたが、結果はありません。

4

1 に答える 1

0

コードを修正して、実際の例を作成しました。書かれているディレクトリで実行するだけで動作します。

プロセスは次のようになります。

  1. ディレクトリを選択し、
  2. ファイルを選ぶ
  3. フォーム内のファイル テキストを編集する
  4. ファイルを保存する

ただし、権限は表示されないため、それを選択テーブルに追加し、Web ユーザー (私の場合は apache) にファイルへの書き込み権限があることを確認する必要があります。

元のコードは本当に面倒です。多くのものを 1 つのアクションに結合しようとしましたが、同じ形式で POST 変数と GET 変数が混在しています。編集フォームの URL で送信される部分を削除して、すべての POST 変数を使用するようにこれをさらに改良することをお勧めします。

<?php

$dir = isset($_POST['dir'])? $_POST['dir'] : null;
$file_to_edit = isset($_GET['file'])? base64_decode($_GET['file']) : null;

?>
    <table>
        <tr>
            <form method='POST' action='?act=file&dir=<?php echo base64_encode($dir);?>'>
            <td><input type='text' name='dir' size='50' value='<?php echo $dir; ?>'>
            <input type='submit' value='Go'></form></td
        </tr>

        <table border='1'><tr>
            <td width='175'><b>Name</b></td>
            <td><b>Size</b></td>
            <td><b>Permissions</b></td>
            <td><b>Edit</b></td>
            <td><b>Delete</b></td>
            <td><b>Chmod</b></td>
        </tr>
<?php
if(!empty($dir))
    view_files($dir);

function view_files($dir)
{
    if($handle = opendir($dir))
    {
        while(($file = readdir($handle)) !== false)
        {
            if($file != '.' && $file != '..')
            {
            $path_and_file = $dir . $file;
            $encoded_path_and_file = base64_encode($path_and_file);
            ?>
                <tr>
                    <td><?php echo $file; ?></td>
                    <td><?php echo filesize($path_and_file);?></td>
                  <td>perms</td>
                  <td width='165'><a href='?act=edit&file=<?php echo $encoded_path_and_file; ?>'><b id='me'><u>Edit</u></b></a></td>
                  <td width='225'><a href='?act=del'><b id='me'><u>Delete</u></b></a></td>
                  <td width='190'><a href='?act=chmod'><b id='me'><u>Chmod</u></b></a></td>
                </tr>
            <?php
            }
        }
    }
}

if(!empty($file_to_edit)){
    echo "Editing: $file_to_edit<br>";
    edit_files($file_to_edit);
}

function edit_files($file_to_edit)
{
    if(file_exists($file_to_edit))
    {
        $handle = fopen($file_to_edit, 'r');
        $contents = fread($handle, filesize($file_to_edit));
       $data = htmlspecialchars($contents);
       $encoded_path_and_file = base64_encode($file_to_edit);
    ?>
    <form method='POST' 
            action='?f=<?php echo $encoded_path_and_file;?>'>
    <textarea rows='17' cols='70' name='d'><?php echo $data; ?></textarea><br>
    <input type='submit' value='Save Changes' />
    </form>
    <?php
    } 
    else {
        echo "File does not exist.<br>";
    }

}

if(isset($_GET['f']) && isset($_POST['d']))
    save_file();

function save_file(){
    $file_to_overwrite = base64_decode($_GET['f']);
    $handle = fopen($file_to_overwrite, 'w');
    if(!$handle)
    {
        echo 'Failed to open selected file.';
    }
    else
    {
      fwrite($handle, $_POST['d']);
      echo "Wrote d to f";
   }
}
于 2013-05-11T11:33:29.803 に答える