web-dev-qa-db-fra.com

file_get_contents (): le flux ne prend pas en charge la recherche / Quand le comportement de PHP à ce sujet a-t-il changé?

Quand a PHP à ce sujet a-t-il changé?

De quelle PHP version est-ce?


Avertissement: file_get_contents (): le flux ne prend pas en charge la recherche dans /simple_html_dom.php

Avertissement: file_get_contents (): échec de la recherche de la position -1 dans le flux dans /simple_html_dom.php


include('parser/simple_html_dom.php');
$url = "https://en.wikipedia.org/wiki/Stack_Overflow";
$html = file_get_html($url);
if ($html !== false) {
  foreach($html->find('div#mw-content-text') as $item){
    $item->plaintext;
  }
}
16
re1

Voir file_get_contents (): le flux ne prend pas en charge la recherche de PHP

Vous travaillez avec un fichier distant. La recherche n'est prise en charge que pour les fichiers locaux.

Vous devez probablement copier le fichier sur votre système de fichiers local avant d'utiliser file_get_html. Cela devrait bien fonctionner sur localhost.

2
le_m

J'ai eu le même problème sur ma page lorsque je l'ai déplacé d'un système à un autre, j'ai pu changer le simple_html_dom.php fichier en supprimant la référence de décalage (n'a pas posé de problème supplémentaire pour moi).

À la ligne 75 de simple_html_dom.php:

$contents = file_get_contents($url, $use_include_path, $context, $offset);

J'ai supprimé la référence à $offset:

$contents = file_get_contents($url, $use_include_path, $context);

Non, ma page fonctionne bien. Ne prenant aucune responsabilité pour quoi que ce soit d'autre, il casse! :)

95
Rmj86

Changement

function file_get_html(..., $offset = -1,...)

à

function file_get_html(..., $offset = 0,...)

dans simple_html_dom.php

18
Neibce

Vous n'avez pas besoin de modifier les fichiers du fournisseur. Changez simplement vos demandes de:

$html = HtmlDomParser::file_get_html( "https://www.google.com/");

à:

$html = HtmlDomParser::file_get_html( "https://www.google.com/", false, null, 0 );

Le problème est que le décalage par défaut utilisé par Simple HTML DOM est "-1" lorsque vous voulez qu'il soit "0". Heureusement, il l'accepte comme paramètre, ce qui signifie que vous pouvez le changer facilement sans avoir besoin de changer la source DOM HTML simple.

Remarque: Ce problème de compatibilité a été corrigé dans la v1.7 +

14
Chuck Le Butt

Dans le simple_html_dom.php fichier, recherchez $offset et supprimez-le - il devrait être dans les lignes 75 et 76. Tout fonctionnera bien alors.

4
ahmed.soli

D'autres ont partagé la solution, mais personne n'a expliqué pourquoi. Je ne sais pas précisément pourquoi cela est différent entre PHP 7.0 & 7.1, mais les documentation PHP.net pour cette fonction disent:

La recherche (décalage) n'est pas prise en charge avec les fichiers distants. Tenter de rechercher des fichiers non locaux peut fonctionner avec de petits décalages, mais cela est imprévisible car cela fonctionne sur le flux mis en mémoire tampon.

Je peux confirmer que la suppression du paramètre offset dans file_get_contents sur la ligne 75 fonctionne pour moi et/ou définit le décalage à 0 dans le file_get_html la fonction sur la ligne 70 fonctionne aussi.

Je suppose que le paramètre offset n'a jamais été conçu pour être utilisé avec des fichiers non locaux car:

Décalage où la lecture commence sur le flux d'origine. Les décalages négatifs comptent à partir de la fin du flux.

J'espère que cela aide à dissiper toute confusion. Avec des sources externes, il est logique de commencer la diffusion depuis le début.

2
Crazycoolcam