Php : fopen et erreur

Résolu
elacsap Messages postés 13 Statut Membre -  
 trokiki -
Bonjour,
Je souhaite afficher divers fichiers xml sur une même page web. Jusqeu là tout va bien... si ce n'est que je n'arrive pas à ouvrir mon fichier avec la fonction fopen...J'ai essayé d'ouvrir plusieurs fichiers, mais ça bloque...
J'ai même repris le code de base proposé sur le site :
<? 
$fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier
while (!feof($fp)) { //on parcourt toutes les lignes
  $page .= fgets($fp, 4096); // lecture du contenu de la ligne
} 
?>  


Ben rien à faire, ça me renvoie toujours le même message d'erreur :
Warning: fopen(http://www.commentcamarche.net): failed to open stream: Bad file descriptor in c:\program files\easyphp1-8\www\test.php on line 3

Fatal error: Maximum execution time of 30 seconds exceeded in c:\program files\easyphp1-8\www\test.php on line 3


Est-ce que quelqu'un peut m'aider ? D'avance merci...

11 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Chez moi cela fonctionne
    johand@horus:~/src/php$ cat fopen.php
    <?php
    $page = '';
    $fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier
    while (!feof($fp)) { //on parcourt toutes les lignes
      $page .= fgets($fp, 4096); // lecture du contenu de la ligne
    }
    print($page);
    ?>
    johand@horus:~/src/php$ php fopen.php | sed -e '/^ *$/d'|head
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <META NAME="site" content="http://www.commentcamarche.net">
    <META NAME="expires" content="never">
    <META NAME="rating" content="general">
    <META NAME="revisit-after" content="7 days">
    <META NAME="ROBOTS" content="index,follow">
    <META NAME="author" content="Jean-François Pillou">
    <META NAME="subject" content="Comment ça marche? [L'informatique]">
    


    Il est probable que cela vienne de la configuration php du serveur http
    http://php.easynet.be/manual/fr/function.fopen.php
    <cut>
    Si PHP a décidé que filename spécifie un protocole enregistré, et que ce protocole est enregistré comme un protocole réseau, PHP s'assurera que la directive allow_url_fopen est activée. Si elle est inactive, PHP va émettre une alerte et l'ouverture va échouer.
    </cut>

    Contacte ton administrateur , ou trouve un hébergeur permettant l'ouverture distante.
    Johan
    2
    1. Zep3k!GnO Messages postés 2049 Statut Membre 200
       
      Si PHP a décidé que filename spécifie un protocole enregistré, et que ce protocole est enregistré comme un protocole réseau, PHP s'assurera que la directive allow_url_fopen est activée. Si elle est inactive, PHP va émettre une alerte et l'ouverture va échouer.
      Yiep ! bien joué :D


      Zep3k!GnO
      0
  2. trokiki
     
    D'apres le manuel PHP :

    Si PHP a décidé que filename spécifie un protocole enregistré, et que ce protocole est enregistré comme un protocole réseau, PHP s'assurera que la directive allow_url_fopen est activée. Si elle est inactive, PHP va émettre une alerte et l'ouverture va échouer.

    C'est une histoire de config php. Faut aller faire un petit tour dans '/etc'.
    2
  3. Gaëtan LOISEL
     
    Bonjour,

    Le problème vient probablement du temps que met le script php à s'exécuter.
    En réalité, vous rencontrez une erreur de timeout (durée d'exécution maximale d'un script) et non une erreur liée à la mauvaise utilisation de la fonction fopen.
    La solution en local : éditer le fichier httpd.conf, rechercher "timeout" (sans les guillemets), puis augmenter la valeur numérique située à droite de "timeout" qui correspond au délai en secondes avant Time out.

    Cordialement,
    Logan.
    1
  4. elacsap Messages postés 13 Statut Membre
     
    Je viens de tester la même chose avec un fichier en local et ça fonctionne. Est-ce que ça peut venir du serveur ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Zep3k!GnO Messages postés 2049 Statut Membre 200
     
    attend c'est bizarr, t'as mis :
    $fp = fopen("http://www.commentcamarche.net","r"); //lecture du fichier
    et ca marche en local ? ! non de non je dis la..

    en fait dans le premier argument de fopen, c'est le chemin de ton fichier..
    $file=fopen("./monfichier.txt","r");


    voilà la ca devrait aller mieux :P

    Zep3k!Gno
    0
    1. elacsap Messages postés 13 Statut Membre
       
      Ben c'est ce que j'ai fait... Le problème c'est que cela ne fonctionne pas avec les fichiers distants (mais c'est bon avec les fichiers en local)... et forcement je dois travailler sur des fichiers distants...
      0
  7. elacsap Messages postés 13 Statut Membre
     
    mais normalement fopen devrait fonctionner avec les fichiers distants, non ?
    0
  8. dfdf
     
    salut coco
    moi c <html>
    <head>
    <title>essai formulaire</title>
    </head>
    <body>
    <? print("message : ".$_GET["msg"]."<br>\n");
    print("nom : ".$_POST["nom"]."<br>\nage : ".$_POST["age"]."<br>\n"); ?>
    <form action="exemple3.php?msg=bonjour" method="post">

    nom : <input type="text" name="nom">
    age : <input type="text" name="age">
    <input type="submit" value="Valider">
    </form>
    </body>
    </html> u
    0
  9. Sib
     
    ini_set ("max_execution_time","90");

    cette ligne met le timeout à 90, le temps peut etre ralonger en fonction des besoins... Il suffi de la mettre en debut de page
    0
  10. trokiki
     
    D'apres le manuel PHP :

    Si PHP a décidé que filename spécifie un protocole enregistré, et que ce protocole est enregistré comme un protocole réseau, PHP s'assurera que la directive allow_url_fopen est activée. Si elle est inactive, PHP va émettre une alerte et l'ouverture va échouer.

    C'est une histoire de config php. Faux allé faire un petit tour dans ton '/etc'.
    0