Fopen et fwrite

Résolu/Fermé
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 - 30 juil. 2012 à 19:08
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 - 3 août 2012 à 11:50
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

Utilisateur anonyme
31 juil. 2012 à 00:36
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
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
31 juil. 2012 à 18:48
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
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
31 juil. 2012 à 20:40
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
?
0
Utilisateur anonyme
31 juil. 2012 à 21:01
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)
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
31 juil. 2012 à 21:13
C'est ce que je craignais...
0
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
Modifié par bartimus37 le 1/08/2012 à 10:26
0
Utilisateur anonyme
1 août 2012 à 11:11
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
Utilisateur anonyme
1 août 2012 à 19:21
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
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
1 août 2012 à 19:39
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.
0
Utilisateur anonyme
2 août 2012 à 19:11
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
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
3 août 2012 à 11:50
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
30 juil. 2012 à 22:19
Salut,

Ton problème est ici :
$somecontent = "$heures = 0;
En supprimant cette guillemet, ton problème devrait être résolu !
0
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
31 juil. 2012 à 18:49
si je supprimer ce guillemet le fichier créer est vide
0
Utilisateur anonyme
31 juil. 2012 à 20:59
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 ?
0
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
1 août 2012 à 17:55
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.";
}
?>
0
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
1 août 2012 à 20:11
il était en trops le <?php
0
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
1 août 2012 à 20:10
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.
0
Utilisateur anonyme
2 août 2012 à 00:06
Tous ces "undefined variable" indiquent que tu as retiré des \ devant des $ alors qu'ils auraient dû y rester.
0
bartimus37 Messages postés 193 Date d'inscription samedi 19 novembre 2011 Statut Membre Dernière intervention 8 octobre 2014 14
2 août 2012 à 18:32
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 .
0