Problème avec la fonction fopen()
Derbie88 Messages postés 120 Statut Membre -
J'ai un problème avec la fonction fopen().
Voici ce que je fais :
<?php
$login = $_SESSION['log'];
$nom = $_SESSION['nom'];
$prenom = $_SESSION['prenom'];
$destinationficher = "C:/Documents and Settings/cocha0081/Mes documents/test/essais.html";
$fp = fopen($destinationfichier, 'xb');
$handle = @fopen ( $destinationfichier, 'w' );
$contenu = "<html>
<head>
<title>Fiche perso de machin</title>
</head>
<body>
<b>Pseudo :</b> ".$pseudo."
</body>
</html>";
if ( is_writable ( $destinationfichier ) and $handle != FALSE ) {
fwrite ( $handle, $contenu );
fclose ( $handle );
}
else {
echo 'Fichier non disponible en écriture';
}
?>
Mais immanquablement, ça me sort une erreur (fichier non disponible en écriture). Où me suis-je trompé ?
Par avance merci !
Configuration: Windows XP Firefox 3.0.5
34 réponses
- 1
- 2
Le problème porte sur l'écriture d'un fichier en PHP sous Windows XP avec fopen, où le code retourne systématiquement « Fichier non disponible en écriture » malgré l'ouverture supposée. La meilleure réponse recommande de simplifier le code en utilisant un chemin relatif ('essais.html') et le mode 'a+' via fopen, ce qui permet d'écrire quand le fichier existe ou de le créer. Ensuite, on vérifie le résultat de fwrite et on ferme le flux, plutôt que de tester is_writable sur le chemin, ce qui évite les erreurs liées aux droits. D'autres facteurs comme les droits Windows, l'emplacement des fichiers et les restrictions FTP peuvent influencer l'écriture, et la version PHP peut aussi impacter le comportement des modes d'ouverture.
-
J'ai testé ton code et il ne fonctionnait pas. J'ai donc quasiment refait le code.
<?php $login = $_SESSION['log']; $nom = $_SESSION['nom']; $prenom = $_SESSION['prenom']; $contenu = "<html> <head> <title>Fiche perso de machin</title> </head> <body> <b>Prénom :</b> ".$prenom." </body> </html>"; $fp = @fopen("essais.html","a+"); $resultat = @fwrite($fp,$contenu); if($resultat == true) { echo 'Fiche perso de machin écrite'; } else { echo 'Fichier non disponible en écriture'; } @fclose($fp); ?> -
Hum... :
$fp = fopen($destinationfichier, 'xb');
le 'xb' c'est quoi ? C'est pas 'wb' plutôt ?
Tu peux voir la fonction ici:
http://www.punchost.com/php/function.fopen.php
-
Non, ça ne changer rien, j'ai toujours l'erreur... Mais je pense avoir fait tout ce qu'il fallait, je ne vois pas où ça cloche (mais je sens que c'est stupide).
En tout cas merci ! -
Ah oui... bon sang !
Tu es en serveur local sur ta bécane j'imagine ?
Le chemin de ton fichier est C:/....
C'est impossible !
Tu dois mettre ton fichier dans le répertoire "www" de ton serveur local, et mettre le lien ou en relatif "pages/monfichier.html", ou alors en absolu "http://localhost/pages/monfichier.html"
Dans tous les cas tu oublies les espaces dans les urls, alors renomme tes répertoires et fichiers !
Tiens-nous au courant.
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Je ne suis pas sûr d'avoir bien compris. Je dois mettre l'adresse de mon serveur ftp pour dossier de destination ?
Merci !! -
Tu es en localhost ?
Tes fichiers sont sur ton ordinateur ET tu as installé wamp serveur, esayphp ou autre...
ou bien tu es sur internet ?
Ma réponse sera différente suivant la tienne
-
Mes fichiers sont sur mon ordinateur et je les upload sur le serveur ftp de mon hébergeur, ma session est dans le réseau de ma fac, mais c'est juste pour tester car les fichiers qui seront par la suite uploadés seront sur mon ordi perso. J'espère avoir répondu !
-
Y a pas de session dans ce qui nous occupe...
Le tout est que tu me dises si tu tests tes fichiers en local ou sur le serveur.
Si c'est en local ton fichier doit être dans le répertoire "www", et si c'est sur un hébergement alors tu chemins doit être "https://www.hugedomains.com/domain_profile.cfm?d=tondomaine&e=com"
-
Ah pardon, je test mes fichiers sur le serveur. Je vais voir ce que ça donne !
Merci
Edit : j'ai mis l'adresse du site/essai.html, mais ça ne marche pas... Pourquoi ? -
Décidément, j'ai beau modifier la destination, tout ce que je veux, rien n'y fait. Qu'est ce que j'ai manqué ?
Merci ! -
Salut
Es-tu sûr d'avoir mis les droits en écriture (CHMOD 666) sur le fichier cible ou sur le répertoire si le fichier n'existe pas ? -
Donc, pour être sur, j'ai ajouté
$destinationficher = "http://touscelebres.olympe-network.com/essais.html"; chmod($destinationfichier,0666); $fp = fopen($destinationfichier, 'wb');
Mais j'ai une erreur
Warning: chmod() [function.chmod]: No such file or directory in /www/touscelebres/test.php on line 7
Donc je pense que le prob se situe à la création du fichier, non ? -
Non ! Le droits en écritures doivent être mis via le FTP et pas en PHP. Et après, en PHP, tu ouvres ton fichier de façon à pouvoir écrire dessus.
Et je te conseil d'utiliser une Url relative pour le chemin du fichier :$destinationficher = "/essais.html";
-
Je vais poser une question peut être stupide : comment mettre les droits via le ftp ? Merci !
-
Tout dépend du logiciel. Avec FileZilla : Clic droit → Attributs du fichier
-
Je vais peut être encore poser une question stupide, mais je fais ce chmod sur quel fichier ? sur mon test.php ? (le fichier sur lequel je m'échine depuis tout à l'heure) ?
Merci !! -
Normalement, c'est sur le fichier essais.html mais si il n'existe pas et que tu souhaite que PHP le crée, il faut mettre les droits sur le dossier qui contiendra la fichier. Je pense que sur Olympe-Network tu ne puisses pas modifier le CHMOD (c'est par défaut à 777 ou 666). Jete un coup d'œil ici
-
Bon, voila ce que je viens de faire : j'ai créé un repertoire "pages_users" dans le répetoire du site distant dans fileZilla, et j'ai mis les droits à 666. J'ai changé le chemindestination en "/pages_users/essais.html", mais là, ça ne marche pas quand même. Qu'est ce que j'ai encore fait de travers ? Merci de votre patience.
-
As-tu lu le tuto ?
Là j'y vais donc je ne te répondrai pas avant 6h -
Bon, j'ai lu le tuto, j'ai juste changé le "w" en "a" (
$fp = fopen($destinationfichier, 'ab');
), mais ça ne marche toujours pas. Merci en tout cas d'avoir pris du temps pour m'aider !
- 1
- 2