2013-10-21 1 views
1

내 사이트의 사용자 의견을 txt 파일에 저장하려고합니다. 그래서 .. PHP를 사용하여 txt 파일 내용을 편집하는 방법을 알고 싶습니다. PHP를 사용하여 txt 파일 콘텐츠를 편집하는 방법?

내 txt 파일 내용

내가 PHP를 함께 할 수있는 방법, UID = 5의 주석을 편집 할 so..if

uid=5 
comment="Hello world" 
time="2013:11:21:xx:xx" 

uid=6 
comment="Test comment" 
time="2013:11:21:xx:xx" 

... 이런 식으로 간다. 또는 더 나은 방법을 말해, 콘텐츠가 텍스트 파일에이 작업을 게을리하게 만들어야합니다.

내 의견을 저장하기 위해 databse를 사용하고 싶지 않습니다. pls, 누군가가이 문제에 도움이됩니다. Thansk

+1

DB를 사용하는 것이 좋습니다. 당신은 달성하고자하는 것과 함께 "시간의 고래"를 가질 것입니다. iniative를 가져 와서 DB를 사용하십시오. 내가 한 최고의 결정입니다. "암소가 집에 올 때까지"** 편집 지옥 ** 코딩을 진행하게됩니다. –

+1

더 나은 방법은 데이터베이스를 사용하는 것입니다. 데이터베이스로 파싱하는 엄청난 양의 텍스트를 저장하면됩니다. 최악의 경우 텍스트 파일에 저장된 JSON 객체를 사용할 수도 있지만 두통이있을 수도 있습니다. – Snowburnt

+0

이 기능에 CSV 파일을 사용해야합니다. –

답변

2
$txt_file = file_get_contents('path/to/file'); 
$rows = explode("\n", $txt_file); //you get all rows here 
foreach ($rows as $row => &$data) { 
    if (strstr($data, 'uid=5') !== FALSE) { 
     //it means the following line contains your comment, 
     //work with it as string 
     $rows[$row + 1] = "comment=" . $newComment; 
    } 
    $data = $data . "\n"; 
} 
file_put_contents('path/to/file', $rows); 
+0

* "so..if ** 나는 ** uid = 5의 코멘트를 편집하고 싶습니다."* –

+0

Thansk 당신은 간단하고 작동합니다. 나는 사용자가 게시물과 코멘트를 작성하도록 사이트를 크레이트로 만들 예정입니다. 나는 databse에 게시물을 추가하고 txt 파일에 주석을 저장하려고하며 게시물과 관련된 테이블 행에 txt 파일에 대한 링크를 넣습니다. 나는 이런 방식으로 MySQL 데이터베이스가 행의 thousends 내에 양식을 제공 할 정도로 속도가 떨어졌을 까? 이게 좋은 생각인데 어떻게 생각하니? – Milan

+0

질문을 잘 이해하지 못했지만 MySQL 데이터베이스는 수백만 행을 매우 신속하게 처리 할 수 ​​있습니다. 웹 사이트를 막 시작하는 경우 데이터베이스 성능에 대해 걱정할 필요가 없다고 생각합니다. 사이트가 성장하기 시작하면 실적에 대해 생각할 수 있습니다. –

0

데이터베이스 서버를 사용할 수없는 경우 SQLite을 사용하는 것이 좋습니다. 실제 데이터베이스 서버처럼 작동하지만 데이터를 디스크의 파일에 저장합니다. 조만간 일반 텍스트 파일을 사용하면 조만간 문제가 발생할 것입니다.

1

json은 배열을 문자열로 직렬화하는 간단한 방법을 제공합니다.
json_decodejson_encode을 사용하면 위의 예를 행당 하나의 json 레코드로 변환 할 수 있습니다.

그런 다음 위의 대답을 사용하여 한 번에 한 줄씩 읽고 마음에있는 uid를 찾으십시오. 단지 json_decode 행을 사용하여 주석을 얻습니다.

이 방법을 사용하면 파일 구문 분석을 복잡하게 만들지 않고 이중 공백 링크 나 공백 트릭을 사용하여 레코드를 구분하지 않고 나중에 주석의 속성 수를 변경하거나 일부 속성을 옵션으로 만들 수 있습니다.

파일 예를

{ 'uid':'5','comment'='Hello world','time'='2013:11:21:xx:xx' }\r\n 
{ 'uid':'6','comment'='Hello world','time'='2013:11:21:xx:xx' }\r\n 
0

당신이 다음 CSV가 작업하기 쉬울 것 데이터베이스를 사용할 수없는 경우 나, Bhavik 샤에 동의합니다. 그러나 당신이 아래에있는 것들 중 하나를 할 수 없다고 가정 할 때, 해결책은 가장 우아하지는 않지만 솔루션은 덜합니다.

$file = 'myfile.txt'; 
$fileArray = file($file); 
$reachedUser = false; 
for($i=0; $i<=count($fileArray); $i++){ 
    if(preg_match('/uid=6/', $fileArray[$i]) == 1){ 
     $reachedUser = true; 
     continue; 
    } 
    if($reachedUser && preg_match('/comment=/', $fileArray[$i])){ 
     $fileArray[$i] = "comment=\"This is the users new comment\"\n"; 
     break; 
    } 
} 
reset($fileArray); 

$fh = fopen($file, "w"); 
foreach($fileArray as $line){ 
    fwrite($fh, $line); 
} 
+0

morgunder의 해결책은 훨씬 쉽습니다.텍스트 문서를 json 문서로 변환하십시오. 그런 다음 json_decode로 재생하십시오. –

관련 문제