2012-11-17 7 views
6

외부 서버의 응답을 텍스트 파일에 저장 했으므로 연결 요청을 계속 실행하지 않아도됩니다. 대신, 다시 연결하기 위해 읽을 때까지 아마도 조작 목적으로 텍스트 파일을 사용할 수 있습니다. 여기PHP 배열을 텍스트 파일에 저장했습니다.

내가 텍스트 파일로 저장 한 것입니다 (또한, 내 연결 요청이 외부 서버로 제한됩니다) :

records.txt 더 배열에 실제로있다

Array 
(
    [0] => stdClass Object 
     (
      [id] => 552 
      [date_created] => 2012-02-23 10:30:56 
      [date_modified] => 2012-03-09 18:55:26 
      [date_deleted] => 2012-03-09 18:55:26 
      [first_name] => Test 
      [middle_name] => 
      [last_name] => Test 
      [home_phone] => (123) 123-1234 
      [email] => [email protected] 
     ) 
    [1] => stdClass Object 
     (
      [id] => 553 
      [date_created] => 2012-02-23 10:30:56 
      [date_modified] => 2012-03-09 18:55:26 
      [date_deleted] => 2012-03-09 18:55:26 
      [first_name] => Test 
      [middle_name] => 
      [last_name] => Test 
      [home_phone] => (325) 558-1234 
      [email] => [email protected] 
     ) 
) 

, 그러나 나는 2가 좋다고 확신한다.

이것은 텍스트 파일이므로 실제 외부 서버 (동일한 정보를 보내는 서버) 인 것처럼 가장하고 싶습니다. 어떻게 다시 실제 배열로 만들 수 있습니까?

은 내가 먼저 파일을 열 필요가 알고

<?php 
$fp = fopen('records.txt', "r"); // open the file 
$theData = fread($fh, filesize('records.txt')); 
fclose($fh); 
echo $theData; 
?> 

지금까지 $theData은 문자열 값입니다. 거기에 그것을 원래로 온 배열로 다시 변환하는 방법이 있나요?

답변

19

파일을 직렬화하고 파일에 저장 한 다음 배열로 다시 배열 해제하는 것이 좋습니다.

// serialize your input array (say $array) 
$serializedData = serialize($array); 

// save serialized data in a text file 
file_put_contents('your_file_name.txt', $serializedData); 

// at a later point, you can convert it back to array like: 
$recoveredData = file_get_contents('your_file_name.txt'); 

// unserializing to get actual array 
$recoveredArray = unserialize($recoveredData); 

// you can print your array like 
print_r($recoveredArray); 
3

serialize 배열을 파일로 텍스트로 쓰기 전에 수 있습니다. 그러면 파일 unserialize에서 데이터를 다시 읽어 어레이로 되돌릴 수 있습니다.

3

그런 다음 print_r 형식으로 저장하면 안됩니다.

사용 중 하나

.

print_r decoder이 있습니다. 그러나 입력 데이터에 영향을 줄 수없는 경우에만 최후의 수단이되어야합니다 (가능하면 가능!).

+1

당신은 확실히 var_export'ed 데이터를 배열로 다시 변환 할 수 있습니까?! FYI, php.net manual에 또 다른 사실이 나와 있습니다. var_export()는 순환 참조를 처리하지 못하기 때문에 구문 분석 가능한 PHP 코드를 생성 할 수 없기 때문입니다. 배열이나 객체의 완전한 표현으로 무언가를하고 싶다면 serialize()를 사용하십시오. – rajukoyilandy

+0

@rajukoyilandy : 둘 다 serialize하거나 json_encode을 사용할 수 없습니다. 순환 참조는 객체 구조의 경우이지만 일반 배열에는 OP가 포함되지 않습니다. 'var_export' 파일은 일반적으로 PHP를 다시 include()하는 간단한 PHP 코드입니다. 주의 깊게 사용해야하지만 구성 파일에는 매우 중요합니다. – mario

+0

var_export는 print_r 또는 var_damp와 같습니다. – Sergey

0

JSON 버전

$json_data = json_encode($the_array); 
file_put_contents("records.txt", $json_data); 

// Recovering 
$the_data = file_get_contents("records.txt"); 
$the_array = json_decode($the_data); 
관련 문제