Fopen et fwrite

Résolu
Bonjour, j'ai une erreur : Parse error: syntax error, unexpected 'Y' (T_STRING) in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 9
avec se script :
form-redirlien.php :
<form action="redir.php" method="post">
<p>
<input type="text" name="lien" />
<input type="submit" value="Valider" />
</p>
</form>

redir.php :

<?php
$jeux = $_POST['lien'];
$mon_fichier=fopen("$jeux.php","w+");
$filename = '$jeux.php';
$somecontent = "$heures = 0; // les heures < 24
$minutes = 0; // les minutes < 60
$secondes = 15; // les secondes < 60
$annee = date("Y"); // année
$mois = date("m"); // mois
$jour = date("d"); // jours

$redirection = 'http://localhost/lienjeu/$jeux';
$secondes = mktime(date("H") + $heures,
date("i") + $minutes,
date("s") + $secondes,
$mois,
$jour,
$annee
) - time();
?>

<html>
<head>
<title>redirection</title>
<script type="text/javascript">
var temps = <?php echo $secondes;?>;
var timer =setInterval('CompteaRebour()',1000);
function CompteaRebour(){

temps-- ;
j = parseInt(temps) ;
h = parseInt(temps/3600) ;
m = parseInt((temps%3600)/60) ;
s = parseInt((temps%3600)%60) ;
document.getElementById('minutes').innerHTML=(s<10 ? "0"+s : s) + ' s ';
if ((s == 0 && m ==0 && h ==0)) {
clearInterval(timer);
url = "<?php echo $redirection;?>"
Redirection(url)
}
}
function Redirection(url) {
setTimeout("window.location=url", 500)
}
</script>
</head>

<body onload="timer">
<?php
if ($secondes <= 3600*24) {
?>
<span style="font-size: 36px;">Veuillez patienter pendant : </span>
<div id="minutes" style="font-size: 36px;"></div></span>
<?php
}
?>";
if (is_writable($filename)) {
if (!$handle = fopen($filename, 'a')) {
echo "Impossible d'ouvrir le fichier ($filename)";
exit;
}

// Ecrivons dans le fichier.
if (fwrite($handle, $somecontent) === FALSE) {
echo "Impossible d'écrire dans le fichier ($filename)";
exit;
}

echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi";

fclose($handle);

} else {
echo "Le fichier $filename n'est pas accessible en écriture.";
}
?>

Merci de vos réponse

9 réponses

  1. Salut,

    Ton problème est ici :
    $somecontent = "$heures = 0;
    En supprimant cette guillemet, ton problème devrait être résolu !
    1. si je supprimer ce guillemet le fichier créer est vide
  2. Bonsoir

    Je crois que ce n'est pas tout à fait aussi simple que ça.
    En fait, tu essayes de mettre dans $somecontent un texte assez long que tu choisis d'entourer par des "
    Mais ce texte s'arrête alors au premier " rencontré - celui de $annee = date("Y"); // année
    Si tu veux mettre des " dans une chaîne entre ", il faut échapper les " avec des \.
    Je ne donne que le début comme exemple :

    <?php
    $jeux = $_POST['lien'];
    $filename = "$jeux.php"; 
    $somecontent = "$heures = 0; // les heures < 24
    $minutes = 0; // les minutes < 60
    $secondes = 15; // les secondes < 60
    $annee = date(\"Y\"); // année
    $mois = date(\"m\"); // mois
    $jour = date(\"d\"); // jours
    ...
    


    J'ai corrigé aussi le début, où tu te mêlais les pinceaux avec $filename, les apostrophes simples. Tu devrais ouvrir le fichier en w+ au moment d'écrire dedans.
    1. J'ai ajouter des \ avant chaque " mais :
      Parse error: syntax error, unexpected '\' (T_NS_SEPARATOR) in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 9
    2. Juste une question bartimus37 : qu'est-ce que doit contenir ta variable $somecontent ? Tout le bloc de code $heures = 0; // les heures < 24
      $minutes = 0; // les minutes < 60
      $secondes = 15; // les secondes < 60
      $annee = date(\"Y\"); // année
      $mois = date(\"m\"); // mois
      $jour = date(\"d\"); // jours
      ?
    3. Et même bien plus loin que ça. En fait, ça s'arrête juste avant if (is_writable($filename)) {
      On voit bien que bartimus37 crée dynamiquement un fichier php (beurk)
    4. C'est ce que je craignais...
  3. J'avais oublié de te dire d'en mettre aussi avant les $. Mais ça n'explique pas ton message d'erreur, peux-tu montrer ton code avec les \ ajoutés ?
    1. Comme l'a dit Autumn'Tears, tu as mis les \ après les " au lieu de les mettre avant à certains endroits.
      Et en plus, tu as oublié des \ avant certains $
      Mais surtout, comme tu as obéi à une consigne sans la comprendre, tu as mal obéi et tu as mis des \ au-delà de la partie où il en fallait en mettre. Il en fallait UNIQUEMENTdans la partie comprise entre le " initial et le " final de $somecontent = "....";
      De plus, dans cette partie, il faut ou il ne faut pas de \ devant les $, ça dépend de l'effet recherché : remplacement de la variable par sa valeur lors de l'exécution de redir.php, ou conservation du nom de variable dans le fichier qui sera créé.

      Conclusion : lis le paragraphe du manuel php sur l'écriture des chaines entre " et comment échapper les caractères dans ces chaînes (ça ne fait qu'une page). Après, tu sauras ce qu'il faut vraiment faire - et pourquoi.
      1. J'ai relu tout le fichier redir.php et j'ai corrigé les \ en trops et mal placé mais maintenant j'ai une erreur que je ne comprend pas :
        Parse error: syntax error, unexpected '<' in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 58
        à ma ligne 58 j'ai le debut de
        <?php
        // Assurons nous que le fichier est accessible en écriture
        if (is_writable($filename)) {

        // Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout
        // Le pointeur de fichier est placé à la fin du fichier
        // c'est là que $somecontent sera placé
        if (!$handle = fopen($filename, 'a')) {
        echo "Impossible d'ouvrir le fichier ($filename)";
        exit;
        }

        // Ecrivons quelque chose dans notre fichier.
        if (fwrite($handle, $somecontent) === FALSE) {
        echo "Impossible d'écrire dans le fichier ($filename)";
        exit;
        }

        echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi";

        fclose($handle);

        } else {
        echo "Le fichier $filename n'est pas accessible en écriture.";
        }
        ?>
        1. il était en trops le <?php
      2. Ce <?php n'était pas là dans ton script initial.
        Et il n'a probablement rien à faire ici, il faudrait avoir le code qui précède l'erreur pour en être sûr. Mais a priori c'est
        <?php
        }
        ?>";

        Tu es en php après le ; car le ?> est à l'intérieur de ta chaîne $somecontent="...<gras>?>"; </gras>
        Il ne faut pas de balise <?php puisque tu es déjà en php.
        1. oui j'était déjà en php j'ai corrigé cette erreur mais :
          Notice: Undefined variable: heures in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 6

          Notice: Undefined variable: minutes in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 7

          Notice: Undefined variable: secondes in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 8

          Notice: Undefined variable: annee in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 9

          Notice: Undefined variable: mois in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 10

          Notice: Undefined variable: jour in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 12

          Notice: Undefined variable: redirection in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 12

          Notice: Undefined variable: secondes in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 13

          Notice: Undefined variable: heures in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 16

          Notice: Undefined variable: mois in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 17

          Notice: Undefined variable: jour in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 18

          Notice: Undefined variable: annee in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 26

          Notice: Undefined variable: secondes in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 38

          Notice: Undefined variable: redirection in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 57
          Le fichier $jeux.php n'est pas accessible en écriture.
      3. maintenant j'ai :
        Notice: Undefined variable: heures in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 6

        Notice: Undefined variable: minutes in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 7

        Notice: Undefined variable: secondes in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 8

        Notice: Undefined variable: annee in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 9

        Notice: Undefined variable: mois in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 10

        Notice: Undefined variable: jour in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 12

        Notice: Undefined variable: redirection in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 12

        Notice: Undefined variable: secondes in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 13

        Notice: Undefined variable: heures in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 16

        Notice: Undefined variable: mois in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 17

        Notice: Undefined variable: jour in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 18

        Notice: Undefined variable: annee in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 26

        Notice: Undefined variable: secondes in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 38

        Notice: Undefined variable: redirection in C:\Program Files (x86)\EasyPHP-12.0\www\redir.php on line 57
        Le fichier $jeux.php n'est pas accessible en écriture.
        1. Tous ces "undefined variable" indiquent que tu as retiré des \ devant des $ alors qu'ils auraient dû y rester.
          1. maintenant j'ai : Notice: Undefined variable: heures in C:\Program Files (x86)\EasyPHP-12.0\www\redirection\redir.php on line 57
            Le fichier $jeux.php n'est pas accessible en écriture.
            Et j'aimerai qu'a la place de $jeux.php il y est la valeur entré dans le formulaire .
        2. Je vois que tu as décidé de ne pas apprendre le php et d'attendre que je te donne les réponses.
          Pourtant ton problème ne porte pas sur des choses compliquées, seulement sur le B A BA de l'écriture des chaînes avec simples et doubles quotes.

          Alors dernier tuyau : s'il y a $jeux.php, c'est parce que tu as mis $filename = '$jeux.php';. Si tu mettais $filename = "$jeux.php"; ça marcherait nettement mieux.
          1. merci