IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP 8] Fonctionnement de stream_get_contents avec une URL


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2023
    Messages : 14
    Points : 25
    Points
    25
    Par défaut [PHP 8] Fonctionnement de stream_get_contents avec une URL
    Salut tout le monde,

    J'arrive à faire fonctionner la fonction PHP stream_get_contents sur un fichier. Par contre, je n'arrive pas à le faire fonctionner avec une URL.

    Je suis bien la doc:
    https://www.php.net/manual/en/functi...t-contents.php

    Techniquement, si je prends n'importe quel site comme celui là par exemple:
    https://fr.lipsum.com/, je devrais avoir quelque chose avec le code suivant qui doit me permettre d'afficher les 20 premiers octets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    echo nl2br("Test de stream_get_contents\n\n");
     
    $handle = fopen('https://fr.lipsum.com/', 'r');
     
    if ($handle) {
        $content = stream_get_contents($handle, 20);
     
        echo nl2br($content);
     
        fclose($handle);
    }
    Or, cela ne fonctionne pas. J'ai bien "Test de stream_get_contents" mais rien d'autres.

    Voyez vous ce qu'il manque s'il vous plaît?

    Merci par avance,

  2. #2
    Membre éclairé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 343
    Points : 697
    Points
    697
    Par défaut
    Bonjour,

    Si ce n'est pas déjà le cas, active l'affichage des erreurs PHP (idéalement dans php.ini sur ton environnement de dév, sinon via ini_set) pour avoir plus de détails sur ton problème.

    Est-ce la directive allow_url_fopen est activée dans la configuration de PHP (à voir via phpinfo() ou via ini_get) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
     
    echo 'Allow URL fopen ? ', ini_get('allow_url_fopen');

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2023
    Messages : 14
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Effectivement, en lançant phpinfo(), je vois que allow_url_fopen n'est pas activé:

    Directive Local Value Master Value
    allow_url_fopen Off Off
    J'ai aussi lancé tes commandes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
     
    echo 'Allow URL fopen ? ', ini_get('allow_url_fopen');
    Et, j'obtiens bien:

    Allow URL fopen ? 0
    Du coup, je suis allé sur mon php.ini: /etc/php/8.1/fpm/php.ini, puis j'ai regardé ça:

    Code ini : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ;;;;;;;;;;;;;;;;;;
    ; Fopen wrappers ;
    ;;;;;;;;;;;;;;;;;;
     
    ; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
    ; https://php.net/allow-url-fopen
    allow_url_fopen = On

    Il était bien déjà à "On".

    C'est là que j'ai vu que j'avais crée un pool pour mon application en local: /etc/php/8.1/fpm/pool.d/dactylo_pool.conf

    qui contient:

    Code ini : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [dactylo_site]
    user = lkolndeep
    group = lkolndeep
    listen = /var/run/php8.1-fpm-dactylo-site.sock
    listen.owner = www-data
    listen.group = www-data
    php_admin_value[disable_functions] = exec,passthru,shell_exec,system
    php_admin_flag[allow_url_fopen] = off
    ; Choose how the process manager will control the number of child processes.
    pm = dynamic
    pm.max_children = 75
    pm.start_servers = 10
    pm.min_spare_servers = 5
    pm.max_spare_servers = 20
    pm.process_idle_timeout = 10s

    Ici, on voit bien:
    php_admin_flag[allow_url_fopen] = off

    Cela veut dire qu'on peut activer et désactiver des directives dans des pools directement.
    Je m'étais basé sur ça:
    Configuration de pool

    Du coup, en mettant à On la directive:
    php_admin_flag[allow_url_fopen] = On

    Puis,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sudo service nginx restart
    sudo service php8.1-fpm restart
    Maintenant, phpinfo() me donne bien:

    Directive Local Value Master Value
    allow_url_fopen On On
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
     
    echo nl2br("Valeur de allow_url_fopen\n\n");
     
    echo 'Allow URL fopen ? ', ini_get('allow_url_fopen');
    me donne:

    Valeur de allow_url_fopen

    Allow URL fopen ? 1
    et ensuite, j'ai fait mon test en changeant l'URL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    echo nl2br("Test de stream_get_contents\n\n");
     
    // J'ai changé le lien
    $handle = fopen('https://docs.w3cub.com/php/function.stream-get-contents.html', 'r');
     
    if ($handle) {
        $content = stream_get_contents($handle, -1, 1);
     
        echo $content;
     
        fclose($handle);
    }
    Cela me donne bien toute la page. Du coup, ça fonctionne.

    Merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 7] D'excel à PHP : connexion à une BDD avec une url
    Par tenjy dans le forum Langage
    Réponses: 3
    Dernier message: 21/08/2018, 12h06
  2. Ancrage avec une URL PHP
    Par HwRZxLc4 dans le forum Langage
    Réponses: 2
    Dernier message: 04/10/2007, 15h55
  3. [PHP-JS] Bouton radio : sélection d'une URL
    Par Nothing dans le forum Langage
    Réponses: 2
    Dernier message: 26/01/2006, 16h59
  4. [HTTP][Socket] avec une url c'est possible ?
    Par tck-lt dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 19/08/2005, 09h39
  5. [C#] Comment récuper un page xml avec une URL
    Par pc152 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/02/2005, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo