0

我希望能够通过 ftp 以文件的形式将 php 数组从一台服务器传输到另一台服务器。

接收服务器需要能够打开所述文件并读取其内容并使用提供的数组。

我考虑过这两种方法,要么从服务器 1 用数组的 php 代码编写一个 php 文件,然后简单地将这个文件加载到服务器 2 上。但是,当数组的深度未知时,编写所述文件变得很棘手.

所以我想将数组写入json编码的文件,但我不知道第二台服务器如何打开并读取所述数据。

我可以简单地做:

$jsonArray= json_encode($masterArray);
$fh = fopen('thefile.txt' , 'w');
fwrite($fh, $thePHPfile);
fclose($fh);

然后在另一台服务器上将数据打开到一个变量中:

$data = json_decode( include('thefile.txt') );

有没有人有过这方面的经验?

4

4 回答 4

3

对于第一台服务器,通过 FTP 连接到第二台服务器并将该文件内容放入文件中

$jsonArray = json_encode($masterArray);
$stream    = stream_context_create(array('ftp' => array('overwrite' => true))); 
file_put_contents('ftp://user:pass@host/folder/thefile.txt', $jsonArray, 0, $stream);

用于file_get_contents()第二台服务器:

$data = json_decode( file_get_contents('/path/to/folder/thefile.txt') );
于 2012-09-16T13:25:57.727 回答
2

如果您只对使用 PHP 读取文件感兴趣,您是否考虑过使用serialize()and unserialize()

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

它也可能json_encode()/更快json_decode()(参见http://php.net/manual/en/function.serialize.php#103761)。

于 2012-09-16T13:32:55.503 回答
1

要在服务器之间“传输”阵列,使用文件作为媒介,您使用json_encodeand找到了一个很好的解决方案json_decodeserializeandunserialize函数可以很好地执行相同的目标。

$my_array = array('contents', 'et cetera');

$serialized = serialize($my_array);
$json_encoded = json_encode($my_array);

// here you send the file to the other server, (you said you know how to do)
// for example:
file_put_contents($serialized_destination, $serialized);
file_put_contents($json_encoded_destination, $json_encoded);

在接收服务器中,您只需要读取文件内容并应用相应的“解析”函数:

$serialized = file_get_contents($serialized_destination);
$json_encoded = file_get_contents($json_encoded_destination);

$my_array1 = unserialize($serialized);
$my_array2 = json_decode($json_encoded);
于 2012-09-16T13:46:04.720 回答
1

您正在寻找的 PHP 函数是:file_get_contents

$masterArray = array('Test','Test2','Test3');
$jsonArray= json_encode($masterArray);
$fh = fopen('thefile.txt' , 'w');
fwrite($fh, $jsonArray);
fclose($fh);

然后在另一台服务器上:

$masterArray = json_decode( file_get_contents('thefile.txt') );
var_dump($masterArray);
于 2012-09-16T13:36:24.353 回答