Ma page se charge deux fois avec firefox (exec en cause)

Petit nouveau ! | 2 Messages

05 août 2009, 19:23

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 ?

Eléphanteau du PHP | 18 Messages

06 août 2009, 21:24

Salut,

Est ce que tu as testé ton script hors ligne?
Essaye de voir ce que renvoie exec() avec un echo.

++

ViPHP
fab
ViPHP | 2657 Messages

06 août 2009, 22:34

J'ai eu ce bug avec les circonstances suivantes :
- temps d'éxécution très long
- taille de la page envoyé très importante sans avoir pour autant dde mise en page html , ( 80 mo de texte je crois )

J'ai résolu le problème en éxécutant en mode console mon script ( qui était un script php )
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Petit nouveau ! | 2 Messages

07 août 2009, 17:51

Oui j'ai essayé en cli et pas de problème.

Dans le cas de mon test la sortie n'est pas énorme, moins de 10 lignes ( vu que je fais un rsync que je répète pour mes tests j'ai peu de changement de fichiers ).

Sinon je vais faire en asynchrone avec un fichier déclencheur posé par le php + un cron mais c'est un peu plus long ... mais surement plus propre.

Eléphanteau du PHP | 18 Messages

07 août 2009, 22:09

Est-ce que par hasard t'aurais la barre d'ouil Google ?

Si oui, télécharge l'extension Live HTTP Headers, tu vera que cette saloperie de toolbar génère des requêtes supplémentaires.

J'ai le problème avec un script de géolocalisation, j'ai eu du mal à trouver.
Quelques tuto photoshop sur mon site ^^