2016-08-18 8 views
-2
$testarray['player1'] = $player1Plays; 
$testarray['player2'] = $player2Plays; 
$testarray['result'] = $result; 

print_r ($testarray); 

$yoyo = serialize ($testarray); 

$file = 'prevdata.dat'; 
fopen ($file, 'w'); 
file_put_contents($file, trim($yoyo) . PHP_EOL, FILE_APPEND); 

내가 클래스에 대한 작은 가위, 바위, 보 게임을하고 파일에 각 이동하고 결과를 저장해야 해요 덮어 쓰기됩니다 파일에 저장합니다. 이것은 내가 지금까지 가지고 있고 데이터를 serialize하고 파일에 저장하는 작업이지만, 게임을 다시 할 때마다 현재 파일에있는 데이터를 덮어 쓴다. (필자는 'FILE_APPEND'를 추가해야한다고 생각했다.) . 여기에 전체 코드가 제공됩니다 https://eval.in/624620PHP는 - 매번 나는 이전 데이터가

+2

왜 사용하면 fopen과 file_put_contents를 모두

$file = 'prevdata.dat'; fopen ($file, 'w'); file_put_contents($file, trim($yoyo) . PHP_EOL, FILE_APPEND); 

? –

+5

['fopen' : * 'w'쓰기 전용으로 엽니 다. 파일 포인터를 파일의 시작 부분에 놓고 파일을 길이 0으로 자릅니다. *] (http://php.net/manual/en/function.fopen.php). –

+0

@PaulCrovella의 의견이 답입니다. –

답변

1

변경하거나

$fp = fopen('prevdata.dat', 'a'); fwrite($fp, trim($yoyo)); 

또는

file_put_contents('prevdata.dat', trim($yoyo), FILE_APPEND); 
+1

코드 스 니펫 (snippet)을 제공하는 것보다 설명하는 것이 더 낫습니다. –

+0

나는 'file_put_contents'를 엉망으로 만드는 동안 내 파일에 'put_contents'에 추가하기 전에 작동 시키려고 노력하면서 fopen을 추가했다. fopen 줄을 제거한 후 코드가 잘 동작했습니다. – Baker2795

+0

@PHPglue는 파일에 저장하려는 이전 게임의 수를 제한하는 방법이 있습니까? 25 게임 만 기록하고 싶다고 말하면 가장 오래된 데이터를 덮어 쓰는 방법이 있습니까? – Baker2795

0

fopen 기능의 올바른 모드를 사용하는 것이 중요합니다. 이 같은 파일의 끝에서 (당신이 쓰는 머리로 생각할 수) 포인터를 넣어해야합니다

fopen($file, 'a'); 

는 모든 가능한 모드를 확인하기 위해 문서를 살펴 보자.

http://php.net/manual/en/function.fopen.php

+0

file_put_contents가 사용 중이므로 모드에 관계없이 fopen이 없어야합니다. –

+0

당신 말이 맞아, PHPglue 대답은 더 센스를 만듭니다. – mgadrat