Probleme d'executin d'un script php avec crontab
Résolu
jakj82
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
zak -
zak -
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 :
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 .
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:
- Probleme d'executin d'un script php avec crontab
- Script vidéo youtube - Guide
- Easy php - Télécharger - Divers Web & Internet
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Expert php pinterest - Télécharger - Langages
5 réponses
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+
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+
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
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
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"
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"
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.
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.
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....
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....
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question