1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| ///////////////////////////wrap
$mysql = new dbase();
$mysql->connect_mysql();
$rows_USERS = $mysql->getSet("select * from mytable limit 5000", null);
//encode recordset array to json string http://php.net/manual/en/function.json-encode.php
$s = json_encode($rows_USERS);
//compress string with ratio 9 http://php.net/manual/en/function.gzcompress.php
$out = bzcompress($s, 9);
//encode data with MIME base64 http://php.net/manual/en/function.base64-encode.php
$out2 = base64_encode($out);
//write to file
file_put_contents('the_recs.dat', $out2);
///////////////////////////post to serverB
$target_url = 'http://serverB/upload.php';
//This needs to be the full path to the file you want to send.
$file_name_with_full_path = realpath('./the_recs.dat');
/* extra_info will appear at $_POST (Note that you can include other arguments in the post along with the file. This allows you to authenticate the upload)
* my_file will appear at $_FILES
*/
$post = array('extra_info' => '123456', 'my_file'=> new CurlFile($file_name_with_full_path, 'application/octet-stream', 'filename.foo'));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
echo $result;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| ///////////////////////////unwrap
//read file content http://php.net/manual/en/function.file-get-contents.php
$out = file_get_contents('the_recs.dat');
//decode data encoded with MIME base64 http://php.net/manual/en/function.base64-decode.php
$out2 = base64_decode($out);
//decompress http://php.net/manual/en/function.bzdecompress.php
$out3 = bzdecompress($out2);
//decode json string http://php.net/manual/en/function.json-decode.php
$out4 = json_decode($out3, true); //When TRUE, returned objects will be converted into associative arrays. Otherwise will be stdClass
var_dump($out4);
///////////////////////////serverB/upload.php
$uploaddir = realpath('./') . '/';
$uploadfile = $uploaddir . basename($_FILES['my_file']['name']);
echo '
';
if (move_uploaded_file($_FILES['my_file']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
echo "\n
* * *
\n";
print_r($_POST);
print "
\n";
|
1
2
3
4
5
6
7
8
9
| /*
pure = 856kb
gzcompress = 119kb http://php.net/manual/en/function.gzcompress.php
bzcompress = 71.7kb http://php.net/manual/en/function.bzcompress.php
3959 records -bzip2- 1.63mb => 302kb
Encoding the compressed data into json string
got better results with json vs serialize (https://stackoverflow.com/a/32819917) on a long recordset.
*/
|
ref - https://www.pipiscrew.com/2019/04/php-string-compress-at-gzipbzip-c-decompress/
origin - http://www.pipiscrew.com/?p=10957 servera-wrap-bzip2-database-recordset-serverb-unwrap-it