Est-il possible d'obtenir le contenu d'une URL avec PHP (en utilisant une sorte de fonction comme file_get_contents ou l'en-tête) mais seulement après l'exécution d'un code Javascript?
Exemple:
Mysite.com dispose d'un script qui charge loadUrlAfterJavascriptExec('http://exampletogetcontent.com/')
et imprime / fait écho au contenu. Imaginez que certains jQuery s'exécutent sur http://exampletogetcontent.com/
qui modifient les DOM et loadUrlAfterJavascriptExec
obtiendra le HTML résultant
pouvons-nous faire cela?
@Modifier
Je ne sais pas si je me suis rendu clair, mais ce que je voulais, c'était d'obtenir le contenu d'une page, via une URL, mais seulement après que Javascript soit exécuté sur la page cible (l'un des PHP obtient son contenu)
Je suis conscient que PHP s'exécute avant que la page ne soit envoyée au client, et JS seulement après cela, mais mabe, il y avait une solution de contournement experte
Mise à jour 2 Ajoute plus de détails sur la façon d'utiliser phantomjs
partir de PHP.
Mise à jour 1 (après avoir précisé que javascript sur la page cible doit être exécuté en premier)
1. Téléchargez phantomjs et placez l'exécutable dans un chemin que votre binaire PHP peut atteindre.
2. Placez les 2 fichiers suivants dans le même répertoire:
Get-website.php
<?php $phantom_script= dirname(__FILE__). '/get-website.js'; $response = exec ('phantomjs ' . $phantom_script); echo htmlspecialchars($response); ?>
Get-website.js
var webPage = require('webpage'); var page = webPage.create(); page.open('http://google.com/', function(status) { console.log(page.content); phantom.exit(); });
3. Naviguez vers get-website.php
et le site cible, les contenus http://google.com
s'affichent après l'exécution du javascript en ligne. Vous pouvez également appeler ceci à partir d'une ligne de commande en utilisant php /path/to/get-website.php
.
/get-website.php
<?php $html=file_get_contents('http://google.com'); echo $html; ?>
Test.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>on demo</title> <style> p { color: red; } span { color: blue; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <button id='click_me'>Click me</button> <span style="display:none;"></span> <script> $( "#click_me" ).click(function () { $.get("/get-website.php", function(data) { var json = { html: JSON.stringify(data), delay: 1 }; alert(json.html); }); }); </script> </body> </html>
Tout le PHP s'exécute avant que l'information ne soit envoyée au client. Tous les JavaScript s'exécutent après l'envoi de l'information au client.
Pour faire quelque chose avec PHP après la chargement de la page, la page devra être soit
Étant donné que les données semblent être dans un fichier différent de celui de votre PHP, c'est une très bonne solution. Comme vous l'avez marqué jQuery, je suppose que vous l'utilisez.
JQuery a un ensemble de pages sur la façon dont il implémente Ajax
Mais la façon la plus simple d'utiliser jQuery pour cela est .post
ex:
$.post( "http://example.com/myDataFile.txt", function( data ) { //do more JavaScript stuff with the data you just retrieved });
$.post()
, comme son nom l'indique, peut envoyer des données avec la demande pour le fichier de données, donc si cette demande consiste, par exemple, à un fichier PHP, le fichier PHP peut utiliser ces données.
ex:
$.post( "http://example.com/myDataFile.txt", { foo: "bar"; yabba: "dabba" }, function( data ) { //do more JavaScript stuff with the data you just retrieved });
Les données doivent être au format JSON dans les paires clé / valeur.