/[LeafOK_CVS]/fenglin/manage/export_article.php
ViewVC logotype

Annotation of /fenglin/manage/export_article.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Fri Jan 16 09:16:57 2026 UTC (8 weeks, 4 days ago) by sysadm
Branch: MAIN
Changes since 1.1: +12 -4 lines
Update

1 sysadm 1.1 <?php
2     if (!isset($_SERVER["argc"]))
3     {
4     echo "Invalid usage";
5     exit();
6     }
7    
8     chdir(dirname($_SERVER["argv"][0]));
9    
10     require_once "../lib/db_open.inc.php";
11     require_once "../lib/common.inc.php";
12    
13     $export_dir = "../export_xml";
14     $export_state_file = $export_dir . "/export_state.json";
15     $export_batch_size = 100;
16    
17     $export_state = array(
18     "last_aid" => -1,
19     "last_mid" => -1,
20     );
21    
22     if (!file_exists($export_dir) && mkdir($export_dir, 0750) == false)
23     {
24     echo ("Create dir error!");
25     exit(-1);
26     }
27    
28     if(file_exists($export_state_file))
29     {
30     $export_state_json = file_get_contents($export_state_file);
31     if ($export_state_json !== false)
32     {
33     $export_state_loaded = json_decode($export_state_json, true);
34     if (isset($export_state_loaded["last_aid"]))
35     {
36     $export_state["last_aid"] = intval($export_state_loaded["last_aid"]);
37     }
38     if (isset($export_state_loaded["last_mid"]))
39     {
40     $export_state["last_mid"] = intval($export_state_loaded["last_mid"]);
41     }
42     }
43     }
44    
45     if ($export_state["last_mid"] == -1)
46     {
47     $sql = "SELECT MID FROM bbs_article_op ORDER BY MID DESC LIMIT 1";
48    
49     $rs = mysqli_query($db_conn, $sql);
50     if ($rs == false)
51     {
52     echo "Query article log error: " . mysqli_error($db_conn);
53     mysqli_close($db_conn);
54     exit(-2);
55     }
56    
57     if ($row = mysqli_fetch_array($rs))
58     {
59     $export_state["last_mid"] = intval($row["MID"]);
60     }
61    
62     mysqli_free_result($rs);
63     }
64    
65     $ret = 0;
66     while ($ret == 0)
67     {
68     $sql = "SELECT AID FROM bbs WHERE AID > " . $export_state["last_aid"] .
69     " AND TID = 0 AND visible ORDER BY AID LIMIT $export_batch_size";
70    
71     $rs = mysqli_query($db_conn, $sql);
72     if ($rs == false)
73     {
74     echo "Query article list error: " . mysqli_error($db_conn);
75     $ret = -2;
76     break;
77     }
78    
79     $last_aid = $export_state["last_aid"];
80    
81     while($row = mysqli_fetch_array($rs))
82     {
83     $last_aid = intval($row["AID"]);
84    
85     $buffer = shell_exec($PHP_bin . " ../bbs/view_article.php export_xml " . $row["AID"]);
86     if (!$buffer || ($buffer[0] == "<" && file_put_contents($export_dir . "/" . $row["AID"] . ".xml", $buffer) == false))
87     {
88     echo ("Write " . $row["AID"] . ".xml error!");
89     $ret = -3;
90     break;
91     }
92 sysadm 1.2 echo $row["AID"] . "\n";
93 sysadm 1.1 }
94    
95     mysqli_free_result($rs);
96    
97     if ($ret != 0)
98     {
99     break;
100     }
101    
102     if ($export_state["last_aid"] == $last_aid)
103     {
104     break;
105     }
106     $export_state["last_aid"] = $last_aid;
107    
108     file_put_contents($export_state_file, json_encode($export_state));
109     }
110    
111     while($ret == 0)
112     {
113     $sql = "SELECT MID, bbs.AID, bbs.TID, type FROM bbs_article_op
114     INNER JOIN bbs ON bbs_article_op.AID = bbs.AID
115     WHERE MID > " . $export_state["last_mid"] .
116     " AND type NOT IN ('A') ORDER BY MID LIMIT $export_batch_size";
117    
118     $rs = mysqli_query($db_conn, $sql);
119     if ($rs == false)
120     {
121     echo "Query article log error: " . mysqli_error($db_conn);
122     $ret = -4;
123     break;
124     }
125    
126     $export_aid_list = array();
127     $delete_aid_list = array();
128    
129     $last_mid = $export_state["last_mid"];
130    
131     while($row = mysqli_fetch_array($rs))
132     {
133     $last_mid = intval($row["MID"]);
134     $aid = ($row["TID"] == 0 ? $row["AID"] : $row["TID"]);
135    
136     switch ($row["type"])
137     {
138     case 'D': // Delete article
139     case 'X': // Delete article by Admin
140     if ($row["TID"] == 0)
141     {
142     // Topic
143     unset($export_aid_list[$aid]);
144     $delete_aid_list[$aid] = true;
145     }
146     else
147     {
148     // Reply
149     unset($delete_aid_list[$aid]);
150     $export_aid_list[$aid] = true;
151     }
152     break;
153     case 'S': // Restore article
154     case 'M': // Modify article
155     case 'T': // Move article
156     case 'Z': // Set article as trnasship
157     unset($delete_aid_list[$aid]);
158     $export_aid_list[$aid] = true;
159     break;
160     default:
161     // Unknown type
162     break;
163     }
164     }
165    
166     mysqli_free_result($rs);
167    
168     foreach($delete_aid_list as $aid => $dummy)
169     {
170     $export_file = $export_dir . "/" . $aid . ".xml";
171    
172 sysadm 1.2 $buffer = <<< HTML
173     <delete>
174     <id>{$aid}</id>
175     </delete>
176    
177     HTML;
178    
179     if (file_put_contents($export_dir . "/" . $aid . ".xml", $buffer) == false)
180 sysadm 1.1 {
181 sysadm 1.2 echo ("Write " . $aid . ".xml error!");
182 sysadm 1.1 $ret = -3;
183     break;
184     }
185 sysadm 1.2 echo $aid . "\n";
186 sysadm 1.1 }
187    
188     if ($ret != 0)
189     {
190     break;
191     }
192    
193     foreach($export_aid_list as $aid => $dummy)
194     {
195     $buffer = shell_exec($PHP_bin . " ../bbs/view_article.php export_xml " . $aid);
196     if (!$buffer || ($buffer[0] == "<" && file_put_contents($export_dir . "/" . $aid . ".xml", $buffer) == false))
197     {
198     echo ("Write " . $aid . ".xml error!");
199     $ret = -3;
200     break;
201     }
202 sysadm 1.2 echo $aid . "\n";
203 sysadm 1.1 }
204    
205     if ($ret != 0)
206     {
207     break;
208     }
209    
210     unset($export_aid_list);
211     unset($delete_aid_list);
212    
213     if ($export_state["last_mid"] == $last_mid)
214     {
215     break;
216     }
217     $export_state["last_mid"] = $last_mid;
218    
219     file_put_contents($export_state_file, json_encode($export_state));
220     }
221    
222     mysqli_close($db_conn);
223    
224     exit($ret);

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1