Pages : 1
#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
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é
Hors ligne
Pages : 1