如何通过php编辑文件的某个部分?

时间:2014-11-25 23:59:53

标签: php html file editing

我想在下载之前编辑文件的某些部分。我想通过php来做,但我可以使用javascript或flash。我怎么做的?

这是我尝试的方式,但它取代了整条线,也没有恢复到原来的

<?php
$file = 'folder/file.ext';

if($_POST['filename'] != null)
{
$exclude = "text"; 
 $lines = file($file); 
 $out = $_POST['filename']; 
 foreach ($lines as $line) { 
  if (strstr($line, $exclude) == "") { 
   $out .= $line; 
  } 
 } 
 $f = fopen($file, "w"); 
 fwrite($f, $out); 
 fclose($f); 
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="text.php"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
    $exclude = $_POST['filename']; 
    $lines = file($file); 
    $out = "text"; 
    foreach ($lines as $line) { 
        if (strstr($line, $exclude) == "") { 
        $out .= $line; 
    } 
    } 
 $f = fopen($file, "w"); 
 fwrite($f, $out); 
 fclose($f); 
}

}
?>

2 个答案:

答案 0 :(得分:1)

为此你想了解一些事情。第一个是mod_rewrite,它允许“URL重写”。你可以做些什么,你可以做到这一点,以便当用户试图访问“http://example.com/files/file-123.txt”时,他们会得到“http://example.com/download.php?file=file-123.txt”。他们不会知道他们正在使用PHP脚本,但他们确实如此。

使用这个,在download.php上,您可以执行类似

的操作
$file = $_GET['file'];
if (file_exists($file)) 
{
    //Put your headers here
    $contents = file_get_contents($pathToFile);

    //Do your replacements in $contents here, but don't write to the file
    echo $contents;
}

这样你只会修改发送给用户的文件,而不是修改服务器本身的文件。

请注意,这不会支付您需要修复的任何安全问题。当你进行文件访问时,有很多它们,比如确保$ _GET ['file']是一个他们实际上被允许访问的文件,而不是说“/etc/sudoers".

但我认为这是你想采取的方法,是吗?

答案 1 :(得分:0)

我认为您必须下载文件然后进行修改并保存。

要阅读文件的特定部分,请使用fgets($file, position) 如果您想将内容放在特定位置,请尝试fseek() 如果您只想追加file_put_content($file, $content, FILE_APPEND);