IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Problème d'exécution d'un script php avec crontab


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 20
    Points
    20
    Par défaut Problème d'exécution d'un script php avec crontab
    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 .

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    Bonjour,

    il faut indiquer le chemin complet vers le fichier : cron n'a pas de répertoire par défaut.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 20
    Points
    20
    Par défaut
    je suis bien sure du chemin du cron parce que comme je l'ai déjà dit j'ai essayer avec un autre script dans le même répertoire que ce lui la et il marche donc je crois qu'il y a quelque chose dans ce script qui gène l’exécution avec cron

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    dans le script, il faut indiquer le chemin complet du fichier destination backup
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 20
    Points
    20
    Par défaut
    je ne comprend pas !! dans le fichier backup.php ( le script que je veux executer avec le cron) ? je dois ajouter quoi exactement ?

    parce que quand je test avec cron c'est clair il trouve le fichier parce qu'ai debut il m'a donné des erreurs lors de son exection envoyé par email !!

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    manuellement ça marche très bien le fichier de backup est générer mais quand je configure crontab ca marche pas
    si le «fichier de backup» (le fichier destination) est renseigné dans le script backup.php, alors il faut indiquer le chemin complet vers «le fichier de backup», dans le script backup.php.
    sinon, il faut nous montrer la ligne de commande inscrite dans crontab.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Voici la commande que j’exécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/php /var/www/vhosts/lienduSite.be/httpdocs/backup/backup.php
    et bien sûr je choisis l'intervalle d’exécution de la tache.
    Merci pour votre aide

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2014
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2014
    Messages : 41
    Points : 20
    Points
    20
    Par défaut
    Bon bein j'ai trouver la solution j'ai du utiliser wget voila merci .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Exécution d'un script php avec retour
    Par JokerAs dans le forum AJAX
    Réponses: 9
    Dernier message: 30/09/2014, 16h09
  2. Exécuter script php avec crontab
    Par Sh4dow49 dans le forum Administration système
    Réponses: 1
    Dernier message: 29/07/2008, 15h49
  3. exécution d'un script PHP avec wget
    Par Dud225 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 28/06/2007, 15h31
  4. [PHP-JS] Problème d'exécution d'un script php
    Par Yoteco dans le forum Langage
    Réponses: 1
    Dernier message: 06/10/2006, 14h19
  5. Problèmes de timeout pour un script PHP avec Apache
    Par bluemartini dans le forum Apache
    Réponses: 2
    Dernier message: 11/07/2006, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo