Bonjour,
Voila j'ai un petit problème avec crontab pour exécuter un script de backup de base de donnée je vous donne le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
156
157
158
159
160
161
<?php
 
error_reporting(E_ALL);
ini_set('display_errors', true);
 
 
 
class BackupMySQL extends mysqli {
 
 
	protected $dossier;
 
	protected $nom_fichier;
 
	protected $gz_fichier;
 
	public function __construct($options = array()) {
		$default = array(
			'host' => ini_get('mysqli.default_host'),
			'username' => ini_get('mysqli.default_user'),
			'passwd' => ini_get('mysqli.default_pw'),
			'dbname' => '',
			'port' => ini_get('mysqli.default_port'),
			'socket' => ini_get('mysqli.default_socket'),
			'dossier' => './',
			'nbr_fichiers' => 5,
			'nom_fichier' => 'backup'
			);
		$options = array_merge($default, $options);
		extract($options);
 
		@parent::__construct($host, $username, $passwd, $dbname, $port, $socket);
		if($this->connect_error) {
			$this->message('Erreur de connexion (' . $this->connect_errno . ') '. $this->connect_error);
			return;
		}
 
		$this->dossier = $dossier;
		if(!is_dir($this->dossier)) {
			$this->message('Erreur de dossier "' . htmlspecialchars($this->dossier) . '"');
			return;
		}
 
		$this->nom_fichier = $nom_fichier . date('Ymd-His') . '.sql.gz';
		$this->gz_fichier = @gzopen($this->dossier . $this->nom_fichier, 'w');
		if(!$this->gz_fichier) {
			$this->message('Erreur de fichier "' . htmlspecialchars($this->nom_fichier) . '"');
			return;
		}
 
				$this->sauvegarder();
		$this->purger_fichiers($nbr_fichiers);
	}
 
 
	protected function message($message = ' ') {
		echo '<p style="padding:0; margin:1px 10px; font-family:sans-serif;">'. $message .'</p>';
	}
 
	protected function insert_clean($string) {
		$s1 = array( "\\"	, "'"	, "\r", "\n", );
		$s2 = array( "\\\\"	, "''"	, '\r', '\n', );
		return str_replace($s1, $s2, $string);
	}
 
	protected function sauvegarder() {
		$this->message('Sauvegarde...');
 
		$sql  = '--' ."\n";
		$sql .= '-- '. $this->nom_fichier ."\n";
		gzwrite($this->gz_fichier, $sql);
 
		$result_tables = $this->query('SHOW TABLE STATUS');
		if($result_tables && $result_tables->num_rows) {
			while($obj_table = $result_tables->fetch_object()) {
				$this->message('- ' . htmlspecialchars($obj_table->{'Name'}));
 
				$sql  = "\n\n";
				$sql .= 'DROP TABLE IF EXISTS ''. $obj_table->{'Name'} .''' .";\n";
 
				$result_create = $this->query('SHOW CREATE TABLE ''. $obj_table->{'Name'} .''');
				if($result_create && $result_create->num_rows) {
					$obj_create = $result_create->fetch_object();
					$sql .= $obj_create->{'Create Table'} .";\n";
					$result_create->free_result();
				}
 
				$result_insert = $this->query('SELECT * FROM ''. $obj_table->{'Name'} .''');
				if($result_insert && $result_insert->num_rows) {
					$sql .= "\n";
					while($obj_insert = $result_insert->fetch_object()) {
						$virgule = false;
 
						$sql .= 'INSERT INTO ''. $obj_table->{'Name'} .'' VALUES (';
						foreach($obj_insert as $val) {
							$sql .= ($virgule ? ',' : '');
							if(is_null($val)) {
								$sql .= 'NULL';
							} else {
								$sql .= '\''. $this->insert_clean($val) . '\'';
							}
							$virgule = true;
						} 
 
						$sql .= ')' .";\n";
 
					} 
					$result_insert->free_result();
				}
 
				gzwrite($this->gz_fichier, $sql);
			} 
			$result_tables->free_result();
		}
		gzclose($this->gz_fichier);
		$this->message('<strong style="color:green;">' . htmlspecialchars($this->nom_fichier) . '</strong>');
 
		$this->message('Sauvegarde terminée !');
	}
 
	protected function purger_fichiers($nbr_fichiers_max) {
		$this->message();
		$this->message('Suppression des anciens fichiers...');
		$fichiers = array();
 
		if($dossier = dir($this->dossier)) {
			while(false !== ($fichier = $dossier->read())) {
				if($fichier != '.' && $fichier != '..') {
					if(is_dir($this->dossier . $fichier)) {
						continue;
					} else {
						if(preg_match('/\.gz$/i', $fichier)) {
							$fichiers[] = $fichier;
						}
					}
				}
			} 
			$dossier->close();
		}
 
		$nbr_fichiers_total = count($fichiers);
		if($nbr_fichiers_total >= $nbr_fichiers_max) {
			rsort($fichiers);
 
			for($i = $nbr_fichiers_max; $i < $nbr_fichiers_total; $i++) {
				$this->message('<strong style="color:red;">' . htmlspecialchars($fichiers[$i]) . '</strong>');
				unlink($this->dossier . $fichiers[$i]);
			}
		}
		$this->message('Suppression terminée !');
	}
 
}
new BackupMySQL(array(
	'username' => 'username',
	'passwd' => 'motdepasse',
	'dbname' => 'dbname'
	));
 
 
?>
quand j'actualise la page manuellement ça marche très bien le fichier de backup est générer mais quand je configure crontab ca marche pas je suis bien sure du chemin mis pour crontab parce que je l'ai tester avec un autre script et ca marche très bien pour celui la j'ai reçu un mail avec des erreur pour le require_once donc je l'ai enlever et remis les donnée de connexion de la base directement bref a la fin je reçois un email vide mais je ne trouve pas le fichier qui qui doit être générer lors de l’exécution du script merci d'avance de votre aide .