我想在下载之前编辑文件的某些部分。我想通过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);
}
}
?>
答案 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)
;