2014-11-25 2 views
0

파일을 다운로드하기 전에 특정 부분을 편집하고 싶습니다. 나는 PHP를 통해 그것을하고 싶지만, 나는 자바 스크립트 또는 플래시와 함께 살 수 있습니다. 나는 그것을 어떻게 지었는가?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

롤 PHP를 선호합니다 : D – halomythfinders

+0

편집 할 특정 라인을 어떻게 결정합니까? –

답변

0

로 되돌릴 나던.

하면 그냥 file_put_content($file, $content, FILE_APPEND)를 추가하려면 특정 위치에있는 내용이 fseek() 을 시도 배치 할 경우 fgets($file, position) 을 사용하여 파일의 특정 부분을 읽으려면;

+0

그래서 임시 파일을 만들고 편집하고 다운로드 한 다음 삭제할 수 있습니까? 그렇다면 임시 파일에 내용을 어떻게 복사합니까? – halomythfinders

+0

업로드 된 파일은 임시 파일입니다. $ FILE [ 'tmp'] 내가 기억하는 한. 필요한 경우 자신 만의 템플릿을 만들 수도 있습니다. http://php.net/manual/en/function.tmpfile.php –

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"가 아니라 실제로 액세스 할 수있는 파일인지 확인하는 것과 같이 파일 접근을 할 때 많은 것들이 있습니다.

그러나 이것이 내가 취하고 싶은 접근 방법이라고 생각합니다. 그렇습니다.

관련 문제