Bonjour,

Je suis novice en php.
J'utilise la fonction 'file_get_contents' pour faire appel à une page d'un autre site.
Une fois la fonction lancée, tout se déroule bien pour la suite de mon utilisation, qui est un script JavaScript pour récupérer une partie des données stockées dans un tableau du site appelé et les afficher sur le mien.

Par contre je rencontre un problème avec la page du site appelé.
Par exemple, dans la page appelée il y a des lignes comme celle-ci :
<script type="text/javascript" src="/_inc/js/jquery-3.4.1.min.js"></script>


Dans la console de mon navigateur, je vois que le fichier jquery est recherché depuis mon site.
Normalement cela devrait être :
src="http://www.siteappelé.com/_inc/js/jquery-3.4.1.min.js

Mais je constate ceci :
src="http://www.monsite.com/_inc/js/jquery-3.4.1.min.js


Ma question :
Est-il possible de corriger cela ? (Il y a beaucoup d'autres liens autres que celui en exemple)

Cordialement
Jérôme
Salut

C'est normal que ce soit tonsite qui soit mis dans les chemins relatifs.
C'est le comportement par défault, si tu veux qu'il est "siteappelé.com/_inc etc.." il faut que tu fasse une fonction qui va lire ce que tu récupère avec file get content et que tu ajouter ton site sur les chemins relatif, exemple :


$url = 'http://www.siteappelé.com/'; 
$base_url = 'http://www.monsite.com/'; 
$content = file_get_contents($url);

// Remplacer les chemins relatifs par des chemins absolus
$content = preg_replace_callback(
    '/(src|href)="([^"]+)"/',
    function($matches) use ($base_url) {
        // Si l'URL est relative, ajoutez l'URL de base
        if (strpos($matches[2], 'http://') === false && strpos($matches[2], 'https://') === false) {
            return sprintf('%s="%s%s"', $matches[1], $base_url, ltrim($matches[2], '/'));
        }
        return $matches[0]; // Renvoie l'URL d'origine si elle est déjà absolue
    },
    $content
);

Modifié par JENCAL (25 Sep 2024 - 13:27)
Bonsoir,

Merci pour la réponse.
Je viens de tester mais sans succès. Voici le contenu de ma page de test (c'est juste un brouillon pour tester la récupération des données dans un array (javascript))

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<style>
#masque1 {
	display: none;
}
td, th {
	border: 1px solid black;
}
</style>
</head>
<body>
<div id="masque1">
<?php
$homepage = file_get_contents('https://www.taransworld.com/Spoilers/maxPower.pl?d=&language=French');
echo $homepage;
?>
</font>
</div>
<script>
$url = 'https://www.taransworld.com/Spoilers/maxPower.pl?d=&language=French'; 
$base_url = 'https://www.turtlegow.com/'; 
$content = file_get_contents($url);

// Remplacer les chemins relatifs par des chemins absolus
$content = preg_replace_callback(
    '/(src|href)="([^"]+)"/',
    function($matches) use ($base_url) {
        // Si l'URL est relative, ajoutez l'URL de base
        if (strpos($matches[2], 'http://') === false && strpos($matches[2], 'https://') === false) {
            return sprintf('%s="%s%s"', $matches[1], $base_url, ltrim($matches[2], '/'));
        }
        return $matches[0]; // Renvoie l'URL d'origine si elle est déjà absolue
    },
    $content
);
</script>
<table>
<thead>
<tr>
<th>col111</th>
<th>col222</th>
</tr>
</thead>
<tbody>
<tr>
<td>Adana</td>
<td>...</td>
</tr>
<tr>
<td>Adana</td>
<td>...</td>
</tr>
</tbody>
</table>
<span id="recup123"></span>
<script>
const tabroymax = [];
var tablesource = document.getElementById('table1');
for (i = 0, ligne1 = 1, num = 0; i < 38; i++, num++) {
var pmax = tablesource.querySelector('tr:nth-child('+ligne1+') > td:nth-child(8)').innerText;
var roy = tablesource.querySelector('tr:nth-child('+ligne1+') > td:nth-child(1)').innerText;
ligne1++;
pmax2 = Number(pmax);
roy = roy.substring(0, roy.length - 2);
tabroymax.push([pmax2,roy]);
var divsortie = document.getElementById('recup123');
}
var divsortie = document.getElementById('recup123');
for (i = 0, num = 0; i < 38; i++, num++) {
divsortie.innerHTML += tabroymax[num][0];
divsortie.innerHTML += tabroymax[num][1]+'AAAA<br>';
}
</script>
</body>
</html>


Cordialement
Jérôme
Modifié par Jerome87 (25 Sep 2024 - 21:38)
Bonsoir,

J'ai lu en diagonale, mais j'ai quand même vu que vous avez placé le code PHP proposé par Jencal dans des balises JavaScript... Commencez déjà par rectifier ce point.
Bonsoir,
Ah oui effectivement. Faute d'inattention.

J'ai corrigé comme ceci mais même problème.

<div id="masque1">
<?php
$homepage = file_get_contents('https://www.taransworld.com/Spoilers/maxPower.pl?d=&language=French');
echo $homepage;
?>
</font>
</div>
<?php
$url = 'https://www.taransworld.com/Spoilers/maxPower.pl?d=&language=French'; 
$base_url = 'https://www.turtlegow.com/'; 
$content = file_get_contents($url);

// Remplacer les chemins relatifs par des chemins absolus
$content = preg_replace_callback(
    '/(src|href)="([^"]+)"/',
    function($matches) use ($base_url) {
        // Si l'URL est relative, ajoutez l'URL de base
        if (strpos($matches[2], 'http://') === false && strpos($matches[2], 'https://') === false) {
            return sprintf('%s="%s%s"', $matches[1], $base_url, ltrim($matches[2], '/'));
        }
        return $matches[0]; // Renvoie l'URL d'origine si elle est déjà absolue
    },
    $content
);
?>


Le lien pour tester directement https://www.turtlegow.com/test.php

J'ai mis </font> pour refermer la balise ouverte de la page insérer.

Cordialement
Jérôme
Modifié par Jerome87 (26 Sep 2024 - 00:27)
Olivier C a écrit :
Bonsoir,

J'ai lu en diagonale, mais j'ai quand même vu que vous avez placé le code PHP proposé par Jencal dans des balises JavaScript... Commencez déjà par rectifier ce point.


My bad ! j'ai balisé mon extrait de code avec des balises javascript. ça porte effectivement à confusion Smiley petard
Jerome87 a écrit :
Bonsoir,
Ah oui effectivement. Faute d'inattention.

J'ai corrigé comme ceci mais même problème.

&lt;div id="masque1"&gt;
&lt;?php
$homepage = file_get_contents('https://www.taransworld.com/Spoilers/maxPower.pl?d=&amp;language=French');
echo $homepage;
?&gt;
&lt;/font&gt;
&lt;/div&gt;
&lt;?php
$url = 'https://www.taransworld.com/Spoilers/maxPower.pl?d=&amp;language=French'; 
$base_url = 'https://www.turtlegow.com/'; 
$content = file_get_contents($url);

// Remplacer les chemins relatifs par des chemins absolus
$content = preg_replace_callback(
    '/(src|href)="([^"]+)"/',
    function($matches) use ($base_url) {
        // Si l'URL est relative, ajoutez l'URL de base
        if (strpos($matches[2], 'http://') === false &amp;&amp; strpos($matches[2], 'https://') === false) {
            return sprintf('%s="%s%s"', $matches[1], $base_url, ltrim($matches[2], '/'));
        }
        return $matches[0]; // Renvoie l'URL d'origine si elle est déjà absolue
    },
    $content
);
?&gt;


Le lien pour tester directement https://www.turtlegow.com/test.php

J'ai mis &lt;/font&gt; pour refermer la balise ouverte de la page insérer.

Cordialement
Jérôme


Alors, il suffit pas de "copier/coller" Smiley smile

tu fais déjà un
$homepage = file_get_contents('https://www.taransworld.com/Spoilers/maxPower.pl?d=&language=French');
echo $homepage

alors du coup c'est ce homepage qui est affiché ! Smiley smile

Et du coup, le code que je t'ai partagé ne fait que "travaillé" sur $content.. mais ne l'affiche pas. Il faut que tu fasse un mix entre ton $homepage et mon $content. et que t'affiche le résultat final qu'une fois.
Bonjour,

J'ai essayé comme ceci mais je suis totalement novice. (J'ai essayé cette nuit en supprimant les 2 lignes homepage).
Doit y avoir un truc qui m'échappe.


<?php
//$homepage = file_get_contents('https://www.taransworld.com/Spoilers/maxPower.pl?d=&language=French');
//echo $homepage;
$url = 'https://www.taransworld.com/Spoilers/maxPower.pl?d=&language=French'; 
$base_url = 'https://www.turtlegow.com/'; 
$content = file_get_contents($url);

// Remplacer les chemins relatifs par des chemins absolus
$content = preg_replace_callback(
    '/(src|href)="([^"]+)"/',
    function($matches) use ($base_url) {
        // Si l'URL est relative, ajoutez l'URL de base
        if (strpos($matches[2], 'http://') === false && strpos($matches[2], 'https://') === false) {
            return sprintf('%s="%s%s"', $matches[1], $base_url, ltrim($matches[2], '/'));
        }
        return $matches[0]; // Renvoie l'URL d'origine si elle est déjà absolue
    },
    $content
);
echo $content;
?>


Cordialement
Jérôme
Ah,

Moi ça fonctionne bien :

<head>
		<link rel="apple-touch-icon-precomposed" sizes="76x76" href="https://www.turtlegow.com/assets/img/apple-touch-icon-76x76-precomposed.png">
		<link rel="apple-touch-icon-precomposed" sizes="120x120" href="https://www.turtlegow.com/assets/img/apple-touch-icon-120x120-precomposed.png">
		<link rel="apple-touch-icon-precomposed" sizes="152x152" href="https://www.turtlegow.com/assets/img/apple-touch-icon-152x152-precomposed.png">
		<link rel="apple-touch-icon-precomposed" sizes="180x180" href="https://www.turtlegow.com/assets/img/apple-touch-icon-180x180-precomposed.png">
		<link rel="icon" sizes="192x192" href="https://www.turtlegow.com/assets/img/touch-icon-192x192.png">

</style><script src="https://www.turtlegow.com/js/browsers.js?1708940587"></script></head>


j'ai file get content un site dont j'ai l'autorisation hein Smiley smile
(par contre quand je fais un $homepage = file_get_contents('https://www.taransworld.com/Spoilers/maxPower.pl?d=&language=French'); ça me dit clairement que j'ai pas l'autorisation de le faire, car le site taransworld l'a expressement refusé. Je sais pas comment tu y arrives Smiley smile )

et ça ma remplacer mes url relatif, comme on voit au dessus, les différents appel link / script.
Modifié par JENCAL (26 Sep 2024 - 14:22)
Ah ok merci
Donc si le site refuse, je vais devoir laisser les erreurs.
Au moins j'arrive a récupérer les données que je souhaite.

Cordialement
Jérôme
Oui j'arrive a récupérer les données du tableau et les mettre dans un array javascript.
Mais en voyant les erreurs dans inspecter puis console de mon navigateur, je me suis dit ce n'est pas propre. Donc je souhaitais corriger ce problème.
Je suis un peu trop pointilleux lol
Par contre du coup ça a marché la portion de code que j'ai fourni, tu disais que ça marché pas, mais je vois bien

<script type="text/javascript" src="https://www.turtlegow.com/_inc/js/jquery.tablesorter-2.31.1.min.js"></script>

dans ta page de test.
Par contre, les erreurs que tu as dans la console, c'est pour beaucoup lié aux images qui sont stocké sur le serveur que tu récupèrer, et non sur le tien.

- Prenons exemple avec cette image :
/GoW_graphics/flag_Chinese.png

elle est heberger par taransworld.com et pas par toi Smiley smile

Si tu met ceci :
https://www.turtlegow.com/GoW_graphics/flag_Chinese.png
tu auras une erreur console 404. et ça pour toutes les images car elle sont ici :
https://www.taransworld.com/GoW_graphics/flag_Chinese.png
Modifié par JENCAL (26 Sep 2024 - 15:33)
Oui pour les images ce n'est pas un souci, le site les partage sur une page dédiée.
Après les fichiers css et js, là je ne souhaitais pas les copier chez moi, ils les ont créés donc c'est à eux.
Jerome87 a écrit :
Oui pour les images ce n'est pas un souci, le site les partage sur une page dédiée.
Après les fichiers css et js, là je ne souhaitais pas les copier chez moi, ils les ont créés donc c'est à eux.


Tkt pas, les fichiers ne sont pas copier chez toi avec un file get content.