source: pmb4.2/trunk/fuentes/pmb/admin/sauvegarde/lib/api.inc.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 6.1 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: api.inc.php,v 1.17.4.1 2015-10-05 12:03:43 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
8
9//Liste de fonctions utiles
10// connectFtp($url,$user,$password) renvoie un identifiant de connexion ou rien si erreur de connexion
11
12function connectFtp($url="", $user="", $password="", $chemin, &$msg_) {
13        global $msg;
14
15        $conn_id = @ftp_connect($url);
16        if ($conn_id) {
17                // login with username and password
18                $login_result = @ftp_login($conn_id, $user, $password);
19                if (!$login_result) {
20                        $msg_=$msg["sauv_api_connect_failed"];
21                        return "";
22                }
23                $chdir_result=@ftp_chdir($conn_id,$chemin);
24                if (!$chdir_result) {
25                        $msg_=$msg["sauv_api_failed_path"];
26                        return "";
27                }
28        } else {
29                $msg_=$msg["sauv_api_failed_host"];
30                return "";
31        }
32        return $conn_id;
33}
34
35function abort($msg_,$logid) {
36        global $msg;
37        $requete="update sauv_log set sauv_log_messages=concat(sauv_log_messages,'Abort : ".addslashes($msg_)."') where sauv_log_id=".$logid;
38        @pmb_mysql_query($requete);
39        echo sprintf($msg["sauv_api_failed_cancel"],$msg_);
40        exit();
41}
42
43/*
44Plus tard pour Dimitri & le planificateur des tâches
45function stop($msg_,$logid) {
46        global $msg;
47        $requete="update sauv_log set sauv_log_messages=concat(sauv_log_messages,'Abort : ".addslashes($msg_)."') where sauv_log_id=".$logid;
48        @pmb_mysql_query($requete);
49        return sprintf($msg["sauv_api_failed_cancel"],$msg_);
50}
51*/
52function abort_copy($msg_,$logid) {
53        global $msg;
54        $requete="update sauv_log set sauv_log_messages=concat(sauv_log_messages,'Abort Copy : ".addslashes($msg_)."') where sauv_log_id=".$logid;
55        @pmb_mysql_query($requete);
56        echo sprintf($msg["sauv_api_copy_failed_cancel"],$msg_);
57        exit();
58}
59
60/*
61Plus tard pour Dimitri & le planificateur des tâches
62function stop_copy($msg_,$logid) {
63        global $msg;
64        $requete="update sauv_log set sauv_log_messages=concat(sauv_log_messages,'Abort Copy : ".addslashes($msg_)."') where sauv_log_id=".$logid;
65        @pmb_mysql_query($requete);
66        return sprintf($msg["sauv_api_copy_failed_cancel"],$msg_);
67}
68*/
69function write_log($msg_,$logid) {
70        $requete="update sauv_log set sauv_log_messages=concat(sauv_log_messages,'Log : ".addslashes($msg_)."\n') where sauv_log_id=".$logid;
71        @pmb_mysql_query($requete);
72}
73
74function create_statement($table) {
75       
76        global $dbh;
77        $requete = "SHOW CREATE TABLE $table";
78        $result = pmb_mysql_query($requete, $dbh);
79        if ($result) {
80                $create = pmb_mysql_fetch_row($result);
81                $create[1] = str_replace("\r"," ", $create[1]);
82                $create[1] = str_replace("\n"," ", $create[1]);
83                $create[1] .= ";";
84                return $create[1];
85        } else {
86                return "";
87        }
88}
89
90function table_dump($table_name,$fp) {
91
92                global $dbh;
93
94                fwrite($fp,"#".$table_name."\r\n");
95               
96                fwrite($fp,"drop table if exists ".$table_name.";\r\n");
97               
98                //Get strucutre
99                fwrite($fp,create_statement($table_name)."\n");
100
101                //enumerate tables
102
103                $update_a_faire=0; /* permet de gérer les id auto_increment qui auraient pour valeur 0 */
104                //parse the field info first
105                $res2=pmb_mysql_query("select * from ${table_name} order by 1 ",$dbh);
106                if ($res2) {
107                        $nf=pmb_mysql_num_fields($res2);
108                        $nr=pmb_mysql_num_rows($res2);
109                }
110                $fields = '';
111                $values = '';
112                if ($nf) {
113                        for ($b=0;$b<$nf;$b++) {
114                                $fn=pmb_mysql_field_name($res2,$b);
115                            $ft=pmb_mysql_field_type($res2,$b);
116                                $fs=pmb_mysql_field_len($res2,$b);
117                                $ff=pmb_mysql_field_flags($res2,$b);
118                                $is_numeric=false;
119                                switch(strtolower($ft))
120                                        {
121                                        case "int":
122                                                $is_numeric=true;
123                                                break;
124                                               
125                                        case "blob":
126                                            $is_numeric=false;
127                                            break;
128                                           
129                                        case "real":
130                                                $is_numeric=true;
131                                                break;
132       
133                                        case "string":
134                                                $is_numeric=false;
135                                                break;
136       
137                                        case "unknown":
138                                                switch(intval($fs))
139                                                        {
140                                                        case 4:
141                                                                // little weakness here...
142                                                                // there is no way (thru the PHP/MySQL interface)
143                                                                // to tell the difference between a tinyint and a year field type
144                                                                $is_numeric=true;
145                                                                break;
146       
147                                                        default:
148                                                                $is_numeric=true;
149                                                                break;
150                                                        }
151                                                break;
152       
153                                        case "timestamp":
154                                                // Afin de résoudre le pb des timestamp pas corrects en restauration $is_numeric=true;
155                                                $is_numeric=false;
156                                                break;
157                                        case "date":
158                                                $is_numeric=false;
159                                                break;
160       
161                                        case "datetime":
162                                                $is_numeric=false;
163                                                break;
164       
165                                        case "time":
166                                                $is_numeric=false;
167                                                break;
168                                               
169                                        case "geometry":
170                                                $is_numeric=false;
171                                                break;
172       
173                                        default:
174                                                //future support for field types that are not recognized
175                                                //(hopefully this will work without need for future modification)
176                                                $is_numeric=true;
177                                                //I'm assuming new field types will follow SQL numeric syntax..
178                                                // this is where this support will breakdown
179                                                break;
180                                }
181       
182                                (string)$fields!="" ? $fields .= ', '.$fn : $fields .= $fn;
183                                $fna[$b] = $fn;
184                                $ina[$b] = $is_numeric;
185                        }
186                }
187                //parse out the table's data and generate the SQL INSERT statements in order to replicate the data itself...
188                if ($nr) {
189                        for ($c=0;$c<$nr;$c++) {
190                                $row=pmb_mysql_fetch_row($res2);
191                                $values = '';
192                                for ($d=0;$d<$nf;$d++) {
193                                        $data=strval($row[$d]);
194                                        if ($ina[$d]==true) {
195                                                ((string)$values!="")? $values.= ', '.floatval($data) : $values.= floatval($data);
196                                        } else {
197                                                ((string)$values!="")? $values.=", \"".pmb_mysql_real_escape_string($data)."\"" : $values.="\"".pmb_mysql_real_escape_string($data)."\"";
198                                        }
199                                }
200                                fwrite($fp,"insert into $table_name ($fields) values ($values);\r\n");
201                                if ($update_a_faire==1) {
202                                        $update_a_faire=0;
203                                        fwrite($fp,"update $table_name set ".$cle_update."='0' where ".$cle_update."='1';\r\n");
204                                }
205                        }
206                }
207                if ($res2) pmb_mysql_free_result($res2);
208}
209
210function read_infos($filename) {
211        $tInfo=array();
212        $f=fopen($filename,"r") or die("Le fichier n'existe pas !");
213        $line=fgets($f,8192);
214        $line=rtrim($line);
215        while ((!feof($f))&&($line!="#data-section")) {
216                $tLine=explode(" : ",$line);
217                $tInfo[substr($tLine[0],1)]=$tLine[1];
218                $line=fgets($f,8192);
219                $line=rtrim($line);
220        }
221        return $tInfo;         
222}
223?>
Note: See TracBrowser for help on using the repository browser.