Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/10/2009, à 18:04

jbduzan

Lancement PHP en ligne de commande[Résolu]

Bonjour tout le monde,
Je souhaiterais lancé un script php en ligne de commande depuis mon serveurs.
J'ai installé le package php5-cli, et j'utilise la commande suivante:

php /chemindufichier/fichier.php

Je souhaiterais réussir ça afin de pouvoir ensuite le planifier dans un cron, pour que il se lance tout les soir a la même heure( script de sauvegarde de bdd ).
Cela me retourne l'erreur suivante :

Warning: file_put_contents(dump/sqldump_28-10-2009.sql): failed to open stream: No such file or directory in /home/aquitec/www/sauvegarde.php on line 61

ci-dessous mon code php

<?php
// création d'une fonction comportant les identifiants de connexion au FTP : 

function mysql_structure(){
	// création d'un fichier affichant en boucle le contenu des tuples de la base : 
	require('conf.php');

	mysql_connect($bdd_host, $bdd_user, $bdd_pass);
	mysql_select_db($bdd_base);
	$tables = mysql_list_tables($bdd_base);
	while ($donnees = mysql_fetch_array($tables))
	{
		$table = $donnees[0];
		$res = mysql_query("SHOW CREATE TABLE $table");
		if ($res)
		{
			$insertions = "";
			$tableau = mysql_fetch_array($res);
			$tableau[1] .= ";";
			$dumpsql[] = str_replace("\n", "", $tableau[1]);
			$req_table = mysql_query("SELECT * FROM $table");
			$nbr_champs = mysql_num_fields($req_table);
			while ($ligne = mysql_fetch_array($req_table))
			{
				$insertions .= "INSERT INTO $table VALUES(";
				for ($i=0; $i<=$nbr_champs-1; $i++)
					{
					$insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
					}
				$insertions = substr($insertions, 0, -2);
				$insertions .= ");\n";
			}
			if ($insertions != "")
			{
			$dumpsql[] = $insertions;
			}
		}	
	}
	return implode("\r", $dumpsql);
}


// creation d'une fonction file_put_content si le script est en PHP4 : 

if(!function_exists('file_put_contents')) {
	function file_put_contents($filename, $data, $file_append = false) {
		$fp = fopen($filename, (!$file_append ? 'w+' : 'a+'));
		if(!$fp) {
			trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR);
			return;
			}
	fputs($fp, $data);
	fclose($fp);
	}
}



// création du fichier de dump sur le même niveau que ce fichier dump.php

file_put_contents("dump/sqldump_".date("d-n-Y").".sql", mysql_structure());

// effacement du fichier precedant (créé 7 jours plus tot)
$time_old = getdate(mktime()-(7*24*3600));
$an = $time_old['year'];
$mois = $time_old['mon'];
$jour = $time_old['mday'];


// formatage des jours à 1 chiffre 

for($k=1; $k<10; $k++)
{
	if ($jour==$k)
	{
		$jour='0'.$jour;
	}
}

$date_old=$jour.'-'.$mois.'-'.$an;
$file_old="dump/sqldump_".$date_old.".sql";
// unlink($file_old);
?>

Merci a ceux qui pourront me donner un coup de main smile

Dernière modification par jbduzan (Le 02/11/2009, à 14:54)

Hors ligne

#2 Le 30/10/2009, à 10:21

jbduzan

Re : Lancement PHP en ligne de commande[Résolu]

Up

Hors ligne

#3 Le 30/10/2009, à 10:54

tar_NeFyS

Re : Lancement PHP en ligne de commande[Résolu]

Ton script php fait une erreur, le message d'erreur est assez explicite ligne 61,

file_put_contents("dump/sqldump_".date("d-n-Y").".sql", mysql_structure());

Il n'arrive pas à ouvrir le fichier dump/sqldump... car il n'existe pas.

Vérifie que tu as bien répertoire nommer dump depuis l'emplacement où tu exécutes ton script.

Si tu souhaites utilisé ce script depuis cron, il est préférable d'utiliser un chemin absolu plutôt que relatif par exemple : /home/aquitec/www/dump/...

Hors ligne

#4 Le 30/10/2009, à 14:38

jbduzan

Re : Lancement PHP en ligne de commande[Résolu]

effectivement avec le chemin absolu dans le fichier php, cela fonctionne en lançant directement en ligne de commande.
Par contre en rajoutant ça avec le crontab -e

36 14 * * * root php /home/aquitec/www/sauvegarde.php

cela ne me lance rien.
Il y a une faute dans la commande ?

Hors ligne

#5 Le 02/11/2009, à 10:39

tar_NeFyS

Re : Lancement PHP en ligne de commande[Résolu]

La syntaxe dans le crontab est

# m h  dom mon dow   command

Il ne faut pas mettre le nom de l'utilisateur, ici root

En fait, il y a un crontab par utilisateur. Si tu veux que cron lance le programme sur ton compte, tu fais la commande

crontab -e

Si tu veux que cela soit lancer par root, il faut le lancer sous root soit :

sudo crontab -e

et tu mets la même ligne sans le root.


Quand tu as des problèmes avec des lancement cron, tu peux regarder les sorties d'erreur dans /var/log/syslog.

Hors ligne

#6 Le 02/11/2009, à 14:54

jbduzan

Re : Lancement PHP en ligne de commande[Résolu]

Effectivement en le lançant en root, sans préciser le root dans la cron, cela fonctionne.
Merci de vos réponses qui m'ont bien aidé smile

Hors ligne