Warning: fopen ?

Fermé
Sihpe - 18 juin 2008 à 15:37
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 - 20 juin 2008 à 14:37
Bonjour,
J'ai fait une page pour créer d'autre page comme cela:
<h1>Proposer sa page !</h1>
			<?php
				if($pun_user['username'] == "" or $pun_user['username'] == "Guest"){
				{
					echo "Pour y acceder vous devez vous connecter:	<br />";
				}
			?>
	<br />	<br />	<br />
				<center><form method="post" action="forum/login.php?action=in">
                	<input type="hidden" name="form_sent" value="1" />
					<input type="hidden" name="redirect_url" value="../index.ph?p=creer_la_page&action=creer" />
                    <input type="text" name="req_username" size="20"/><br />
                    <input type="password" name="req_password" size="20" /><br />
                    <input type="submit" id="submit" value="Se connecter et créer la page" /><br />
                </form>
		</center>
	<br />	<br />	<br />
				
			<?php
				 
				if($pun_user['username'] == "" or $pun_user['username'] == "Guest")
				{
					echo "<br /><p font=\"2px\">Pas encore inscrit ?!<br />
					<a href=\"http://monsite.fr/forum/register.php\">Enregistrez vous !</a>";
				}
			?>
	<br />	<br />	<br />    
<?php
}elseif($pun_user['username'] != "Guest" or $_POST["action"] == "creer")
{ 
echo "<form method=\"post\" action=\"../index.php?p=creer_la_page\" name=\"creer_la_page\">" ;
echo "<fieldset><legend>Créer une nouvelle page</legend>" ; 
echo "<label for=\"nom\">Nom de la page :</label><input type=\"text\" name=\"nom\" maxlength=\"30\" id=\"nom\" /><br />" ; 
echo "<label for=\"titre\">Titre de la page :</label><input type=\"text\" name=\"titre\" maxlength=\"20\" id=\"titre\" /><br />" ;
echo "<label for=\"contenu\">Contenu de la page :</label><textarea name=\"contenu\" cols=\"50\" rows=\"30\" id=\"contenu\" /></textarea><br />" ;
echo "<input type=\"hidden\" name=\"action\" value=\"creer\" /><input type=\"submit\" name=\"Envoyer\" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" ;
echo "<input type=\"reset\" name=\"Annuler\" />" ;
echo "</fieldset></form>" ;
}
if($_POST["action"] == "creer")
{
		$nom=stripslashes($_POST["nom"]) ;
		$contenu=stripslashes($_POST["contenu"]) ;
		$pun_user=stripslashes($_POST["username"]);
		$titre=stripslashes($_POST["titre"]) ;
 
   $$fichier=fopen('../Page_a_Valider/'.$nom .$pun_user, 'w+') ;
 
   $contenufichier='<!DOCTYPE html PUBLIC "-//W3C\\DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>'.$titre.'</title>
<body>'.$contenu.'</body></html>' ;
 
  fputs($fichier, $contenufichier) ; 
 
   fclose($fichier) ; 
   echo "Fichier créé avec succès" ; 
}
?>


Mais le soucis c'est qu'il me dit pour fopen:fopen(../Page_a_Valider/test) [function.fopen]: failed to open stream: No such file or directory in ../includes/creer_la_page.php on line 48.
Pour fputs():Warning: fputs(): supplied argument is not a valid stream resource in ../includes/creer_sa_page.php on line 56
et fclose():Warning: fclose(): supplied argument is not a valid stream resource in ../includes/creer_sa_page.php on line 58

Alors la je ne comprend pas pourquoi :s Surtout qu'il ne me créer pas la page au final!
Donc si quelqu'un peut m'aider je lui en serais reconnaissant.

12 réponses

macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
19 juin 2008 à 19:20
1. Tu testes if($_POST["action"] == "creer")
Problème : au premier passage (en tout cas sur ma page de test...) il n'est pas défini.
Solution :
if((isset($_POST["action"])) && ($_POST["action"] == "creer"))

2. Ton formulaire renvoie sur la page ../index.php
Ca fonctionne chez toi ? Je veux dire, quand tu cliques sur "Envoyer", ça te ramène à quelle page ?
Normalement, ça devrait te ramener à cette même page (celle dont tu me donnes le code, avec le formulaire).
Sinon, tu n'exécutes pas le code qui suit (celui qui créer le fichier).

Pour moi (au vu du code,si ça tombe je me plante complètement !) :
Ton site est organisé +- comme ça :
Répertoire racine :
index.php
Page_a_Valider/
pages/

Répertoire pages :
creer_sa_page.php

Dans index, tu appelles la page passée en paramètre p=

Si ce n'est pas ça, ça veut dire que ton formulaire renvoie sur la page index.php qui ne contient pas le code de création du fichier...

Et l question que je me pose, si c'est bien organisé comme ça : Quand tu cliques, tu arrives bien sur ta page index.php ?
Parce que chez moi, pour que ça fonctionne, j'ai dû modifier l'action du formulaire, pour pointer vers ./index.php et pas ../index.php
Ce qui fait qu'il faudrait peut-être essayer en faisant
$fichier=fopen('./Page_a_Valider/'.$nom .$pun_user, 'w+') ;
plutôt que
$fichier=fopen('../Page_a_Valider/'.$nom .$pun_user, 'w+') ;
1
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
18 juin 2008 à 16:57
Bonjour.

Le message important, c'est le premier qui te dis qu'il ne peut pas créer le fichier.
Les autres sont logiques (vu que tu ne crées pas le fichier, tu ne peux ni écrire dedans, ni le fermer)

Le répertoire Page_a_Valider existe ? Il a le bon chmod ?

Vérifie dans quel répertoire tu es quand tu exécutes le script (si tu l'appelle via un incude, il me semble que PHP considère que tu es encore dans le répertoire du script appelant.)
0
Ah Chmod j'avais oublié je test ça merci par contre comment vérifier où il execute son code ?
0
Oui ce n'est pas chmod non plus car j'ai tjrs la même erreur, par contre je ne sais pas comment faire pour vérifier le répertoire ? Ainsi comment le modifier car j'ai indiqué qu'il devait être dans Page_a_Valider ainsi que il doit partir de la racine ...
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
18 juin 2008 à 17:25
Je crois qu'on trouve le chemin dans une des variables de $_SERVER, mais je ne sais plus laquelle :-O

Une solution simple :
essaye de lui faire faire fopen(./test.htm)
Ensuite, regarde le réperoire où le fichier test.htm est créé...
0

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

Posez votre question
Ah lol oué c'est plus simple que la variable $server lol je test ça dessuite merci
0
Ah non c'est pire, quand je met .test.htm il me met quand même l'érreur de
Warning: fputs(): supplied argument is not a valid stream resource in ../includes/creer_sa_page.php on line 56

Warning: fclose(): supplied argument is not a valid stream resource in ../includes/creer_sa_page.php on line 58
Alors que logiquement ça devrais le faire non ? :o
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
18 juin 2008 à 18:02
Oui, mais tu fais
$$fichier=fopen('../Page_a_Valider/'.$nom .$pun_user, 'w+') ;
Essaye
$fichier=fopen('../Page_a_Valider/'.$nom .$pun_user, 'w+') ;
0
Ah oui ,
mais avant ça n'y était pas, et la je viens de le refaire
et ça ne marche pas :'(
$fichier=fopen('../Page_a_Valider/'.$nom .$pun_user, 'w+') ;
j'ai même fait sous d'autre repertoire changer le chmod en 777 et tout ..
0
Pfff ça me saoul je ne sais pas quoi faire :(
Help Help Help
0
PLS help me !
Je ne comprend pas, je n'y arrive toujours pas !
Pourtant si je ne fait que le code de création de page ça marche, alors peut être que c'est le formulaire qui le bloque ?!!
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
19 juin 2008 à 18:25
Tu en es où de ta page ?
Tu peux poster le code ?
0
oui, c'est le même presque:
<h1>Proposer sa page !</h1>
			<?php
				if($pun_user['username'] == "" or $pun_user['username'] == "Guest"){
				{
					echo "Vous pouvez aider le site et donc l'association Nhorrat tout en faisant des pages sur le notre, bien évidemment nous devons le valider avant parution de votre page. <br />
Si vous vous êtes inscrit sur notre site, vous aurez la possibilité de modifier vos pages ...  <br /><br />Pour y acceder vous devez vous connecter:	<br />";
				}
			?>
	<br />	<br />	<br />
				<center><form method="post" action="forum/login.php?action=in">
                	<input type="hidden" name="form_sent" value="1" />
					<input type="hidden" name="redirect_url" value="../index.ph?p=creer_sa_page&action=creer" />
                    <input type="text" name="req_username" size="20"/><br />
                    <input type="password" name="req_password" size="20" /><br />
                    <input type="submit" id="submit" value="Se connecter et créer sa page" /><br />
                </form>
		</center>
	<br />	<br />	<br />
				
			<?php
				 
				if($pun_user['username'] == "" or $pun_user['username'] == "Guest")
				{
					echo "<br /><p font=\"2px\">Pas encore inscrit ?!<br />
					<a href=\"http://nhorrat.fr/forum/register.php\">Enregistrez vous !</a>";
				}
			?>
	<br />	<br />	<br />    
<?php
}if($pun_user['username'] != "Guest" or $_POST["action"] == "creer")
{ 
echo "<form method=\"post\" action=\"../index.php?p=creer_sa_page\" name=\"creer_sa_page\">" ;
echo "<fieldset><legend>Créer une nouvelle page</legend>" ; 
echo "<label for=\"nom\">Nom de la page :</label><input type=\"text\" name=\"nom\" maxlength=\"30\" id=\"nom\" /><br />" ; 
echo "<label for=\"titre\">Titre de la page :</label><input type=\"text\" name=\"titre\" maxlength=\"20\" id=\"titre\" /><br />" ;
echo "<label for=\"contenu\">Contenu de la page :</label><textarea name=\"contenu\" cols=\"50\" rows=\"30\" id=\"contenu\" /></textarea><br />" ;
echo "<input type=\"hidden\" name=\"action\" value=\"creer\" /><input type=\"submit\" name=\"Envoyer\" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" ;
echo "<input type=\"reset\" name=\"Annuler\" />" ;
echo "</fieldset></form>" ;
}
if($_POST["action"] == "creer")
{
		$nom=stripslashes($_POST["nom"]) ;
		$contenu=stripslashes($_POST["contenu"]) ;
		$pun_user=stripslashes($_POST["username"]);
		$titre=stripslashes($_POST["titre"]) ;
 
   $fichier=fopen('../Page_a_Valider/'.$nom .$pun_user, 'w+') ;
 
   $contenufichier='<!DOCTYPE html PUBLIC "-//W3C\\DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>'.$titre.'</title>
<body>'.$contenu.'</body></html>' ;
 
  fputs($fichier, $contenufichier) ; 
 
   fclose($fichier) ; 
   echo "Fichier créé avec succès" ; 
}
?>


Je ne vois vraiment pas d'où viens l'erreur !
0
Merci de ton aide, d'une part moi avec tes deux codes ça ne me donne jamais le formulaire ... !
Si je veux avoir le formulaire il me faut cette variable }if($pun_user['username'] != "Guest" or $_POST["action"] == "creer")

Et je ne sais pas si tu parle du premier formulaire ou du deuxiemmes je suppose que c'est pour le 2 e et donc moi il me renvois sur la même page "../index.php?p=creer_sa_page" donc je reste tout le temps sur creer_sa_page.

Et oui c'est le bon plan de mon site:
Mon repertoire racine:
-index.php
-Page_a_Valider et dedans ---La pagequejecréeraveclesite.php/html
-include: et dedans creer_sa_page.php

"
Dans index, tu appelles la page passée en paramètre p=

Si ce n'est pas ça, ça veut dire que ton formulaire renvoie sur la page index.php qui ne contient pas le code de création du fichier... " ça j'ai pas bien compris ce que tu voulais dire ? :s


Mon dieu quand j'ai fait ./Page_à_Valider ça marche !!!!!!
MERCI mais pourquoi ? :o
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
20 juin 2008 à 14:37
Je vais essayer d'être plus clair...

En gros :
1. Tu es dans la page index.php
2. Tu fais un include ('rep1/rep2/rep3/.../fichier.php').

Que se passe-t'il ? Le code qui es dans le fichier rep1/rep2/rep3/.../fichier.php est "collé" dans la page index.php.
Donc, les chemins relatifs (../Page_à_Valider/) sont calculés à partir de l'endroit où tu es : la page index.php, et pas à partir de l'endroit où se trouve la page que tu as appelé par l'include.


Pour ton problème avec le nom de fichier qui ne prend pas $pun_user :
$pun_user est un tableau. Essaye avec $pun_user['username']...
0
Ainsi que je ne comprend pas pourquoi dans la création de fichier au nom qu'il doit prendre il ne prend pas .$pun_user ???
0