2013-07-12 4 views
0

PHP를 통해 텍스트 파일의 첫 번째 줄을 편집하려고합니다. 내 스크립트를 부러 뜨리고 기능 1을 테스트했습니다. 1 행을 삭제하면 정상적으로 작동합니다. 그러나 나는 처음에 선을 삽입하려고 시도하고 파일을 0으로 닦은 다음 쓴다.PHP 텍스트 파일의 첫 번째 줄 편집

내 코드 :

<?php 

$filename = $_GET['jobname']; 
$sunits = $_GET['s']; 
$wunits = $_GET['w']; 
$funits = $_GET['f']; 
$vunits = $_GET['v']; 
$tunits = $_GET['t']; 
$data = "S: $sunits - W: $wunits - F: $funits - V: $vunits - T: $tunits"; 

$f = "$filename.txt"; 

// read into array 
$arr = file($f); 

// remove second line 
unset($arr[0]); 

// reindex array 
$arr = array_values($arr); 

// write back to file 
file_put_contents($f,implode($arr)); 

$handle = fopen("$filename.txt", 'r+') or die('Cannot open file: '.$filename); 
fwrite($handle, $data . "\n"); 
fclose($handle); 

?> 

사람이 내가 뭘 잘못 볼 수 있을까요?

감사

답변

4

: 당신이해야 할 일은 배열의 시작 부분에 새 줄을 추가 한 후 다시 전체 배열을 쓰기입니다.
(실제로 file_put_contents()를 호출 할 때 호출됩니다.

<?php 
$filename = $_GET['jobname']; 
$sunits = $_GET['s']; 
$wunits = $_GET['w']; 
$funits = $_GET['f']; 
$vunits = $_GET['v']; 
$tunits = $_GET['t']; 
$data = "S: $sunits - W: $wunits - F: $funits - V: $vunits - T: $tunits"; 

$f = "$filename.txt"; 

// read into array 
$arr = file($f); 

// edit first line 
$arr[0] = $data; 

// write back to file 
file_put_contents($f, implode($arr)); 
?> 

당신이 implode(PHP_EOL,$arr)을 사용해야 할 수도 있으므로 배열의 각 요소는 자신의 라인에 후에는 fopen()를 사용할 필요가 없습니다

+1

내 자신의 글을 작성한 후 솔루션을 보았습니다. –

0

문제는 존재하거나 다음 내용을 쓰기 깨끗한 파일을 쳐하지 않는 경우 하나의 파일을 생성 file_put_contents의 사용에서 온다. 귀하의 경우에는 추가 모드에서 fopen, fwrite을 사용하여 데이터를 쓰고 파일을 닫으려면 fclose을 사용해야합니다. 정확한 코드에는 두 번째 또는 두 번째 단계가있을 것입니다.하지만 이미 콘텐츠가있는 파일에 데이터를 추가하는 일반적인 아이디어입니다.

+0

내 코드의 첫 번째 부분이 정상적으로 작동하고 있습니다. 첫 번째 부분이 삭제 중입니다. 내 문제는 내가 열 때부터 시작된다. 선을 삽입하십시오. 그것이 모든 것이 닦여지는 요점입니다. 이 스크립트의 목적을 위해 파일은 이미 존재하며 데이터를 포함합니다. 첫 번째 줄을 삭제하고 다른 줄로 바꾸고 있습니다. –

+0

가장 간단한 방법은 파일을 읽고 해당 데이터에 데이터를 추가 한 다음 전체 파일을 다시 쓰는 것입니다. 최고는 아니지만 파일 형식, 내용 및 크기에 따라 정상적으로 작동합니다. –

+0

그건 내가 한 일입니다. 그것들은 단지 작은 텍스트 파일이므로 문제는 발생하지 않아야합니다. –

1

텍스트 파일의 시작 부분에 줄을 추가 할 수는 없습니다. 난 단지 file_get_contents() [file() in your case] + file_put_contents()을 사용

// Read the file 

$fileContents = file('myfile.txt'); 

// Remove first line 

array_shift($fileContents); 

// Add the new line to the beginning 

array_unshift($fileContents, $data); 

// Write the file back 

$newContent = implode("\n", $fileContents); 

$fp = fopen('myfile.txt', "w+"); // w+ means create new or replace the old file-content 
fputs($fp, $newContent); 
fclose($fp); 
+0

나는 당신이 제안하고 단순화 한 것에 대해 설명해 보았다. –

+0

사실, 아래쪽의 매시의 솔루션은 더 우아합니다. :) – Swissdude

0

내가 결국 unset $arry[0]이 아니고 $arr[0] = $data . "\n"으로 설정 한 다음 다시 파일에 넣으면 작동합니다.

+0

은 좋은 솔루션처럼 들립니다. – Mash

관련 문제