Bonjour,
J'ai un problème que je ne comprend pas.
J'ai une page web php qui lance un script bash via la fonction exec().
Le script bash contient la ligne "rsync -r -c --log-format="[%i] %f" $FILE.out/ $CSPATH/$SITE/"
Lorsque j'appelle la page avec firefox (3.5) sous mon mac, la page est chargée deux fois ( il n'y rien dans le code qui est censé provoquer cela ).
Si j'utilise opera ou safari je n'ai pas le problème. J'ai essayé avec d'autres poste avec firefox sous windows, certains marchent, d'autres pas.
Si je commente la ligne du rsync dans mon script bash je n'ai plus le problème.
J'ai regardé ce qui transit sur le http:
- via le module firebug de firefox je ne vois q'un seul appel GET
- dans les logs apache je vois deux appels
Sur l'écran je vois la page qui commence à s'afficher, puis ça la recharge subitement une deuxième fois.
J'ai essayé toutes les fonctions similaires à exec() mais j'ai toujours le même résultat.
J'ai l'impression que firefox plante et recharge la page mais je ne vois pas pourquoi ...
Informations:
Os du serveur: linux debian lenny
Paquet php de la distrib: PHP 5.2.6-1+lenny3
Mon script php:
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css">
<title>xxx</title>
</head>
<body>
<h1>xxx</h1>
<?php
include 'setup.inc.php';
echo '<h2>Copie</h2>';
$cmd=strtr($CMD_rsync,array("__td__"=>$TD,"__file__"=>$FILE));
exec($cmd,$output,$rcode);
echo "<pre>";
foreach($output as $line){
echo $line."\n";
}
echo "</pre>";
?>
<p>xxxx</p>
</body></html>
setup.inc.php:
<?php
$ftpDir="/xxx/xxx/xxx/";
$CMD_rsync_dry="/xxx/xxx.sh __td__ __file__";
$CMD_rsync="/xxx/yyy.sh __td__ __file__";
$TD="-";
$HASH="-";
$FILE="-";
//CHECK
if(isset($_GET['s']) && isset($_GET['h']) && isset($_GET['f']) ){
$TD=$_GET['s'];
$HASH=$_GET['h'];
$FILE=$_GET['f'];
clearstatcache();
if(!file_exists($ftpDir.$TD.'/'.$FILE.'.sha1')){
echo '<p>xxx</p>';
exit;
}
$up_hash=file_get_contents($ftpDir.$TD.'/'.$FILE.'.sha1');
if($up_hash != $_GET['h']){
echo '<p>Mauvais hash, exit ...</p>';
exit;
}
} else {
echo '<p>Erreur de parametres, exit ...</p>';
exit;
}
echo '<ul><li>Site: '.$TD.'</li><li>Fichier: '.$FILE.'</li></ul>';
ob_flush();flush();
?>
Le script bash:
Code : Tout sélectionner
#!/bin/sh
SITE=$1
FILE=$2
FTPUPLOADFOLDER="/xxxx"
CSPATH="/xxxx"
GROUP="xxxx"
cd $FTPUPLOADFOLDER/$SITE
#check for the sha1 file ( upload is finish )
if [ ! -e $FILE.sha1 ];then
continue
fi
#unzip and rsync
unzip -qq -d $FILE.out $FILE
chmod -R g+w $FILE.out/
chown -R :$GROUP $FILE.out/
rsync -r -c --log-format="[%i] %f" $FILE.out/ $CSPATH/$SITE/
Quelqu'un a t'il déjà eu un cas similaire ?