/
json.php
155 lines (124 loc) · 5.64 KB
/
json.php
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<?
//Â header() çàäàåì ôîðìàò âûâîäà JSON-çàïèñè, óêàçûâàåì, ÷òî äîêóìåíò ÿâëÿåòñÿ JavaScript'îì â êîäèðîâêå UTF-8.
header('Content-Type: application/x-javascript; charset=utf8');
// Ïîäêëþ÷àåì ôàéë ñ êîìïðåññîðîì Õàôôìàíà
include ("huffman.php");
if(isset($_FILES['files'])) {
$myfile = $_FILES["files"]["tmp_name"];
$myfile_name = $_FILES["files"]["name"];
$myfile_size = $_FILES["files"]["size"];
$myfile_type = $_FILES["files"]["type"];
}
// Ãåíåðèðóåì ïóòü ê ôàéëàì, äëÿ óïàêîâàííîãî è íå óïàêîâàííîãî âàðèàíòîâ. Òàêæå äëÿ àðõèâà.
$newname = "upload_file/" . date("Y-m-d") . "_" . rand(0, 10000) . ".txt";
$newname_compr = "upload_file/" . date("Y-m-d") . "_" . rand(0, 10000) . ".txt";
$newname_zip = "upload_zip/" . date("Y-m-d") . "_" . rand(0, 10000) . ".zip";
// Åñëè ïîëó÷èëè zip-àðõèâ îò ôîðìû:
// ãåíåðèðóåì ïóòü äëÿ ðàñïàêîâàííîãî èç àðõèâà ôàéëà. Òàêæå íîâîå íàçâàíèå ôàéëà, ïîñëå ïåðåèìåíîâàíèÿ ïîëó÷åííîãî, ôóíêöèåé rename().
$newname_unpack = "upload_unpack/" . date("Y-m-d") . "_" . rand(0, 10000);
$newname_unpack_name = "upload_unpack/" . date("Y-m-d") . "_" . rand(0, 10000) . ".txt";
if(!empty($myfile) && $myfile_type == "text/plain") {
if($myfile_type != "text/plain") {
echo ("Âûáðàí íåâåðíûé òèï ôàéëà. Ìîæíî çàãðóæàòü òîëüêî ôàéëû .txt");
} else {
if ($myfile_type=="text/plain") {
// ×èòàåì äàííûå èç ïîëó÷åííîãî îò ôîðìû òåêñòîâîãî ôàéëà.
$data = implode("", file($myfile));
// Ìåíÿåì èõ êîäèðîâêó íà "UTF-8", äëÿ áðàóçåðà IE.
$data_encoding = mb_convert_encoding($data, "UTF-8", "windows-1251");
// Îïðåäåëÿåì òèï áðàóçåðà.
$user_agent = $_SERVER["HTTP_USER_AGENT"];
// Ñ ïîìîùüþ êîìïðåññîðà Õàôôìàíà, ñæèìàåì ïîëó÷åííûå äàííûå
$huffman = new Huffman();
// Åñëè áðàóçåð IE, äîáàâëÿåì íà êîìïðåññèíã $data_encoding.
if( strpos($_SERVER['HTTP_USER_AGENT'],'MSIE') !== false ||
strpos($_SERVER['HTTP_USER_AGENT'],'rv:11.0') !== false) {
$compressed = $huffman->compress($data_encoding);
}
else {
$compressed = $huffman->compress($data);
}
// Ðàñïàêîâûâàåì äåêîìïðåññîðîì äàííûå
$huffman2 = new Huffman();
$decompressed = $huffman2->decompress($compressed);
// Çàïèñûâàåì óïàêîâàííûå äàííûå â ôàéë $myfile.
$fp = fopen($myfile, "w");
fwrite($fp, $compressed);
fclose($fp);
// Êîïèðóåì âðåìåííûé ôàéë â ïàïêó $newname_compr.
copy($myfile, $newname_compr);
// Î÷èùàåì ñîäåðæèìîå ôàéëà $myfile.
file_put_contents($myfile, '');
// Çàïèñûâàåì ðàñïàêîâàííûå äàííûå âî âðåìåííûé ôàéë $myfile.
$fp = fopen($myfile, "w");
fwrite($fp, $decompressed);
fclose($fp);
// Êîïèðóåì âðåìåííûé ôàéë â ïàïêó $newname.
copy($myfile, $newname);
//Ñîçäàíèå zip-àðõèâà íà ñåðâåðå
$zip = new ZipArchive;
if ($zip->open($newname_zip, ZipArchive::CREATE) === true) {
$zip->addFromString('info_compressed.txt', $compressed);
$zip->addFromString('info.txt', $decompressed);
$zip->close();
} else {
echo 'Íå ìîãó ñîçäàòü àðõèâ!';
}
}
}
// Ôîðìèðóåì JSON-çàïèñü, äëÿ ïåðåäà÷è åå â js ôàéë.
echo json_encode($newname.",".$newname_compr.",".$newname_zip);
}
// Åñëè ïåðåäàí àðõèâ íà ñåðâåð
else {
// Îáúÿâëÿåì ýêçåìïëÿð êëàññà ZipArchive.
$zip = new ZipArchive;
//Ñþäà áóäåì ñêëàäûâàòü èìåíà ôàéëîâ.
//$filenames = array();
// Ðàçàðõèâèðóåì ïîëó÷åííûé îò ôîðìû àðõèâ.
if ($zip->open($myfile) === true) {
//öèêë, ïðîõîäèì ïî èíäåêñàì ôàéëîâ
/*
for($i=0; $i<$zip->numFiles; $i++) {
//ñ ïîìîùüþ ìåòîäà getNameIndex ïîëó÷àåì èìÿ ýëåìåíòà ïî èíäåêñó
//è ïîìåùàåì â íàø ìàññèâ èì¸í ;)
$filenames[] = $zip->getNameIndex($i);
$zip->renameName($filenames[i],'info.txt');
}
*/
// $zip->renameName(getNameIndex('1'),'info.txt');
$zip->extractTo($newname_unpack);
$zip->close();
} else {
echo 'Íå ìîãó íàéòè ôàéë àðõèâà!';
}
// Ïàïêà êóäà ðàñïàêîâàëèñü ôàéëû.
$dir_unpack = $newname_unpack;
// Ïîëó÷àåì ñïèñîê ôàéëîâ â íåé.
$f = scandir($dir_unpack);
// Íàõîäèì ðàñïàêîâàííûé .txt ôàéë. Ïðèñâàèâàåì åãî ïåðåìåííîé $dir_unpack_file.
foreach ($f as $file){
if(preg_match('/\.(txt)/', $file)) {
$dir_unpack_file = $newname_unpack."\\".$file;
// Ñ÷èòûâàåì äàííûå èç ôàéëà, â ïåðeìåííóþ $data_zip
$data_zip = implode("", file($dir_unpack_file));
// Äåëàåì êîìïðåññèíã ïîëó÷åííûõ äàííûõ
$huffman3 = new Huffman();
$compressed = $huffman3->compress($data_zip);
// Äåëàåì äåêîìïðåññèíã ïîëó÷åííûõ äàííûõ
$huffman4 = new Huffman();
$decompressed = $huffman4->decompress($compressed);
// Çàïèñûâàåì ðàñïàêîâàííûå äàííûå â ôàéë $dir_unpack_file.
$fp = fopen($dir_unpack_file, "w");
fwrite($fp, $decompressed);
fclose($fp);
}
}
// Ïåðåíîñèì ôàéë $dir_unpack_file â ïàïêó upload_unpack. ×òîáû ñêà÷èâàíèå ïî ññûëêå "Ñêà÷àòü ðàñïàêîâàííûé ôàéë", ïðîèçâîäèëîñü ïî ïðàâèëüíîìó ïóòè.
rename($dir_unpack_file, $newname_unpack_name);
// Ïîñëå ïåðåíîñà ôàéëà, óäàëÿåì âðåìåííóþ ïàïêó ñ ïåðâîíà÷àëüíûìè, ðàçàðõèâèðîâàííûìè äàííûìè.
rmdir($newname_unpack);
// Ôîðìèðóåì JSON-çàïèñü, äëÿ ïåðåäà÷è åå â js ôàéë.
echo json_encode($newname_unpack_name);
}
?>