使用PHP编辑文件

Ok here is what I have going on.

I am listing the contest of a directory so I can edit and delete files.

The code I am using to do that is below (Other then editing as it does not work).

<?php
$directory = ("enctlfiles/");
$dir = opendir($directory);
$files = array();

while (($file = readdir($dir)) != false) {
  $files[] = $file;
}

closedir($dir);
sort($files);
print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>
");
print("<TR><TH>File Name</TH><th>Modified Date</th><th>Entries In File</th><th>Delete | Edit</th></TR>
");

foreach ($files as $file)
{
    if (strpos($file, '.jpg',1)||strpos($file, '.ctl',1) ){
      echo "<TR><TD><a href=$directory$file>$file</a></td>";
      echo "<td>";
      echo date("F d Y H:i:s",filemtime($directory. $file));
      echo "<td>";
      echo count(file($directory. $file));
      echo "<td>";
      echo "<a href=enctlfiles/dodelete.php?file=$file>Delete</a> | <a href=enctlfiles/editfile.php?file=$file>Edit</a>";

    }
}
?>

That lists all of the files in order in a nice pretty table. The delete function works. The edit one not so much . It is due to me not knowing what I am doing I am sure of it.

Here is the contents of the editfile.php

<form action="edit.php" method="post">
  <TEXTAREA NAME="save" COLS=150 ROWS=50 wrap="off">
  <?php
  $dir = ".";
  include($dir. '/' .$_GET['file']);
  ?>
  </textarea>
  <P><INPUT TYPE="SUBMIT" VALUE="Update File"><INPUT TYPE="RESET">
</FORM>

That populates the textarea with the file contents when you click on the "Edit" link. I don't know if that is the right way to get the data in there to be able to edit the file.

Here is the contents of the edit.php file:

<?php
//I have tried this but it give me that Unable to open file.
//$org = ($_GET['file']) or exit("Unable to open file!"); 

//This returns me to the prodsh.php page but does not edit the file.
$org = $_POST['save'] or exit("Unable to open file!"); 
$copy = $org . date("-m-d-Y-His");
copy($org,$copy);

$f = fopen($org, 'w');
fwrite($f, $_POST['save']);
fclose($f);

header('Location: http://somesite.com/GroveTuckey/itemsetup/prodsh.php');
?>

I think the editfile.php and the edit.php file are jacked up but don't know where.

I am trying to learn this and this site has been very helpful when I get stumped on something so I thank you in advance for the help given.

Also I know the danger of editing files via a webpage. This is not public or on a server that is accessible by the world. Right now I don't want to deal with a database.

I have edited files using the below code:

<form action="doedit.php" method="post">
  <TEXTAREA NAME="save" COLS=150 ROWS=50 wrap="off">
  <?php
  include('somefile.ctl');
  ?>
  </textarea>
  <P><INPUT TYPE="SUBMIT" VALUE="Update File"><INPUT TYPE="RESET">
</FORM> 

With the contents of doedit.php being:

<?php
$org = 'Somefile.ctl';// This is the name of the file in the form above
$copy = $org . date("-m-d-Y-His");
copy($org,$copy);

$f = fopen('somefile.ctl', 'w');//This is the name of said file also.
fwrite($f, $_POST['save']);
fclose($f);

header('Location: http://somesite.com/GroveTickey/editfile.php');
?>

But since the names of the files can be anything I can't put specific names in the script.

This works great other then having to hardcode file names.

You aren't passing the name of the file back to edit.php. Set the form's action to edit.php?file=<?php echo $_GET['file']; ?>.

El codigo para editar lo hice asi:

---Inicio
<? php

$filename = isset($_GET['file']) ? $_GET['file'] : '';
$directory = ("C:\\Linux\\www\\contenido\\"); // Restrict to this directory...

$fn = $directory . $filename;

if (isset($_POST['content']))
{
    $content = stripslashes($_POST['content']);
    $fp = fopen($fn,"w") or die ("Error opening file in write mode!");
    fputs($fp,$content);
    fclose($fp) or die ("Error closing file!");
}

?>

<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
    <textarea rows="25" cols="100" name="content"><?php readfile($fn); ?></textarea>
    <hr />
    <input type="submit" value="Guardar">
</form>

<a href="####">back to list</a>

And work great