2014-11-25 6 views
0

Я хочу отредактировать некоторые части файла до его загрузки. Я хочу сделать это через php, но я могу жить с javascript или flash. Как я это сделал?Как отредактировать определенную часть файла через php?

это, как я пытался, но он заменяет всю строку, а также оленья кожа вернется к первоначальному

<?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

Вы потеряли меня во флеше: P – Saikios

+0

lol Я предпочитаю php: D – halomythfinders

+0

Как вы определяете, какую конкретную строку редактировать? –

ответ

0

Я думаю, что вы должны загрузить файл, а затем изменить его и сохранить.

Чтобы прочитать определенную часть файла использовать fgets($file, position) Если вы хотите разместить содержание в конкретной позиции попробуйте fseek() Если вы хотите просто добавить file_put_content($file, $content, FILE_APPEND);

+0

так что я могу просто сделать временный файл, отредактировать его, загрузить ли он, а затем удалить? если да, то как мне копировать материал во временный файл? – halomythfinders

+0

Загруженный файл является временным файлом. $ FILE ['tmp'], как я помню. Вы также можете создать свой собственный, если потребуется: http://php.net/manual/en/function.tmpfile.php –

1

Для этого вы хотите узнать о нескольких вещах. Первым из них является mod_rewrite, что позволяет «URL Rewriting». Что вы можете сделать с этим, вы можете сделать так, чтобы, когда пользователь пытался получить доступ к «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».

Но я думаю, что это подход, который вы хотели бы принять, да?