Probleme d'executin d'un script php avec crontab

Résolu/Fermé
jakj82 Messages postés 11 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 14 mars 2014 - 3 févr. 2014 à 15:45
 zak - 11 avril 2014 à 14:59
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 :

<?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 tres 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 etre générer lors de l'execution du script merci d'avance de votre aide .
A voir également:

5 réponses

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
3 févr. 2014 à 20:43
Bonjour,

Votre CRONTAB doit pas exécuter le script PHP directement via le moteur PHP mais via un WGET:

WGET http://...........votre script.........

et là ça devrait marcher

A+
1
jakj82 Messages postés 11 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 14 mars 2014
Modifié par jakj82 le 4/02/2014 à 09:24
Bonjour,

Merci pour votre réponse bon voila la commande que je met sur cron dans la section tache planifier :

/usr/bin/php /var/www/vhosts/gestcom.be/httpdocs/backup/backup.php

bien sure je choisie l'intervalle d'exécution du script backup.php .

donc j'ai pas bien compris votre réponse si vous pouvez m'expliquer quoi faire exactement ca serait genial de votre part merci.

PS; j'ai fait une petite recherche , a ce que j'ai compris je dois faire comme sa :

wget -q /var/www/vhosts/gestcom.be/httpdocs/backup/backup.php ? merci
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
4 févr. 2014 à 09:24
votre script PHp il est bien monté sur un serveur?

si oui, ce serveur a un URL

donc vous lancez la commande

WGET http://www.monsite.be/backup.php

A noter qu'un CRONTAB n'est pas nécessairement installé SUR LE SERVEUR. En fait vous pouvez l'installer sur n'importe quelle machine connectée à Internet.

Sous WINDOWS c'est également possible, ça s'appelle "tâches planifiées"
0
http://smsamour-gratuit.blogspot.com/
0
jakj82 Messages postés 11 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 14 mars 2014
4 févr. 2014 à 09:35
Pour mon serveur il est bien installer donc je n'ai qu'a choisir le temps quand il sera executer et ajouter la commande bref je viens de tester avec

wget -q /var/www/vhosts/gestcom.be/httpdocs/backup/backup.php

mais ca marche pas est ce que vous croyez qu'il y a un problème avec le chemin ? merci.
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
4 févr. 2014 à 09:38
wget ne marche QUE AVEC un URL!!!!!!

Je l'ai pourtant écris noir sur blanc!

WGET -q http://www.monsite.be/backup.php

à la place de www.monsite.be vous mettez L'ADRESSE DE VOTRE SITE!!!!!!

purée, pas compliqué quand même....
0
jakj82 Messages postés 11 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 14 mars 2014
4 févr. 2014 à 12:51
Merci ça fonctionne très bien.
0
jakj82 Messages postés 11 Date d'inscription lundi 3 février 2014 Statut Membre Dernière intervention 14 mars 2014
4 févr. 2014 à 09:41
oui j'avais des doutes de ne pas mettre le chemin en entier parce que le serveur contient differents domaines donc c'est pour cela je voulais vérifier si je dois mettre le chemin en entier ou bien juste comme vous l'avez dit
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
http://smsamour-gratuit.blogspot.com/ sms
0