PHP文件编辑

时间:2013-05-10 21:27:03

标签: php file editing

我无法弄清楚如何在textarea中打开文件的内容然后编辑该文件。说实话,不是真的有一个具体的问题。我已经在这方面工作了几天,结果几乎为零。在这一点上,我已经没有想法,我需要一双新鲜的眼睛。所以朋友们,看一看,告诉我你是否在我的代码中看到了可能明显的错误:

这些是文件功能

    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]表头,就是这样。所以.. Idk我一直在研究这个问题几天没有结果。

1 个答案:

答案 0 :(得分:0)

我修改了你的代码以制作一个有效的例子。如果我只是在写入的目录中运行它,它就可以了。

流程就像:

  1. 选择目录,
  2. 选择文件
  3. 格式编辑文件文本
  4. 保存文件
  5. 虽然没有显示权限,因此您应该将其添加到选择表中,并确保您的Web用户(在我的情况下为apache)具有对文件的写入权限。

    您的原始代码非常混乱。您尝试将许多内容组合到一个操作中,并且在同一表单中混合使用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";
       }
    }