我不知道如何在文本区打开文件的内容,然后编辑文件。说实话,我真的没有一个具体的问题。我已经为此工作了好几天,但毫无结果。在这一点上,我已经没有主意了,我需要一双新的眼睛。所以,朋友们,看看我的代码,如果你看到了明显的错误,请告诉我:
这些是文件函数
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']只是让你知道。我想这就是所有相关的代码。基本上发生的是,当我点击编辑按钮在我的脚本,它只张贴[编辑文件]表头,就是这样。所以. .我想我已经做了好几天了,还没有结果。
我修改了你的代码,使一个工作的例子。如果我只是在它被写入的目录中运行它,它可以工作。
进程如下:
- 选择目录, <
- 选择文件/gh>
- 以 的形式编辑文件文本
- 保存文件
没有显示权限,所以你应该把它添加到选择表中,并确保你的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";
}
}