PHP: lecture d'un fichier distant avec JS ext

Fermé
doriantoruin - 4 août 2009 à 13:21
 doriantourin - 6 août 2009 à 17:37
Bonjour,

Existe-t-il un moyen de récupérer le rendu d'une page distance contenant du javascript ?

En fait, je dois faire appel à un script js externe et dont les résultats sont stockés dans des variables JS. J'aimerais que ce fichier soit appelé à distance et non visité directement pour des raisons de construction.

J'ai déjà essayé d'utiliser la fonction PHP implode('', file(...)); ainsi que file_get_contents() avec des document.write() des variables JS, sans succès.

Avez-vous des idées ?

Merci !
A voir également:

22 réponses

imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 42
4 août 2009 à 14:54
Je comprend pas bien la question ...

Tu veux intégrer un javascript distant ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 août 2009 à 15:08
pour faire appel a un fichier javascript externe à ton script tu mets dans le head

<script type="text/javascript" src="chemin_vers__ton_fichier .js"></script>
0
C'est pas ça la question, c'est beaucoup plus compliqué.

Il s'agit de passer les résultats d'un script javascript à un script PHP !

Je compte donc appeler via PHP une page contenant un script JS et récupérer les variables de sortie... Tout cela sans avoir à passer par un formulaire.

Donc je souhaite faire comme les fonctions file() ou file_get_contents() de PHP, mais en récupérant des variables après exécution d'un javascript !

La classe cURL pourrait-elle m'être utile ?

Merci !
0
imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 42
4 août 2009 à 17:09
le JS est executé sur un navigateur, le PHP sur un serveur.

A priori, tu ne pourra jamais appeler un JS en PHP et obtenir un retour du JS executé !

La seule chose faisable, si c'est ce que tu veux, c'est que le JS sur la page en cours envoi des infos à PHP.
Ca c'est faisable : AJAX
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 août 2009 à 20:00
ll s'agit de passer les résultats d'un script javascript à un script PHP


ça c'est tout à fait possible en AJAX

Je compte donc appeler via PHP une page contenant un script JS et récupérer les variables de sortie.

ça comme dit doriantoruin ce n'est pas possible

par php tu peux très bien générer une page html contenant du javascript mais les résultats ne seront pas récupérés par le script php ce dernier étant terminé depuis longtemps sur le serveur.
0
OK pour le fait que PHP soit exécuté bien avant le JS, et pas au même endroit.

Mais pour la solution AJAX, comment je pourrais faire ? Ce qui me fait buter, c'est que pour réaliser des traitements en PHP, j'ai besoin d'un résultat d'un code JS de manière intermédiaire...

Y'a rien qui permet à un script PHP de se mettre en pause, d'appeler un script JS (sur un autre fichier, évidemment) et de récupérer les résultats sous forme de chaîne de caractères ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 août 2009 à 20:09
Y'a rien qui permet à un script PHP de se mettre en pause

NON sinon les serveurs se mettraient vite à genoux

par contre avec Ajax tu peux bien sur appeler "en arrière plan" sans recharger la page un script php et lui passer un ou plusieurs valeurs

quand le script php appelé répond tu fais ce que tu veux de la réponse, tu peux l'écrire à un endroit précis de ta page dans un div par exemple

si tu veux je peux te donner un bout d'exemple
0
Je veux bien un bout d'exemple, oui...

J'utilise déjà pas mal AJAX pour des vérifs dans des bases de données pour des champs de formulaire, mais j'avoue que là, j'ai du mal à conceptualiser !

Merci beaucoup, en tous cas.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 août 2009 à 20:32
<html>
<head>
<script type="text/javascript">
function makeRequest(url,nom_champ_poste,id_lire,id_ecrire){
	var http_request = false;
		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
        http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
		// lancement de la requete
		http_request.open('POST', url, true);
		//changer le type MIME de la requête pour envoyer des données avec la méthode POST ,  !!!! cette ligne doit etre absolument apres http_request.open('POST'....
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		obj=document.getElementById(id_lire);
		data=nom_champ_poste+"="+obj.value;
        http_request.send(data);
}

function traitementReponse(http_request,id_ecrire) {
	var affich="";
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
					// cas avec reponse de PHP en mode texte:
			//ecriture dans le div, si c'est dans un input il faut utiliser .value au lieu de .innerHTML
			var reponse=http_request.responseText;
			//alert(reponse);
				document.getElementById(id_ecrire).innerHTML=reponse;
		} 
		else {
                alert('Un problème est survenu avec la requête.');
        }
    }
}
</script>

</head>
<body>
<form name="form1" method="post" action="">
<input type="text" name="champ1" id="champ1" value=""><br />
<input type="button" name="bouton_Ajax"  value="Appeller Ajax" onClick="makeRequest('test.php','val_champ1','champ1','reponse');">
<br />
<div id="reponse"><!-- ajax va ecrire là --></div>
</form>
</body>

et le script php appelé:test.php

<?php
$val_champ1=$_POST['val_champ1'];
//on va faire une réponse bidon:
echo "Vous avez saisi ".$val_champ1;

?>
0
Merci, sympa pour le code, très clair !

Juste un détail : Ajax permet de récupérer des variables en javascript. Je souhaite néanmoins les traiter dans un script PHP, comment faire ? L'idée de départ est d'éviter de passer par un formulaire ou une page tierce qui serait chargée, recevant des données en GET ou POST...

Ton idée permet de récupérer les données au moment où on le souhaite dans l'exécution d'un script / d'une page, mais pas de les récupérer en tant que chaîne de caractères PHP.

Je cherche la perle rare qui ferait :

$resultat = fonctionMiracle("script.html");

avec script.html du type :
<script type='text/javascript'>
...
var result = "test"
document.write(result);
</script>

Mon but est donc que $resultat prenne la valeur "test" !.. Et je n'ai pas l'impression que ton script me permette d'avoir ça, du moins directement...

Une idée ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 août 2009 à 20:50
si je comprend bien tu veux a partir d'un script php appeler un script javascript et recupérer le resultat dans un script php

alors pourquoi ne pas passer directement de php à php ?

header('Location:script2.php?variable1=toto&variable2=titi');

et tu récupéres dans le script 2 par $_GET
0
J'ai pensé à cette solution, mais en fait, j'ai à effectuer le script JS pour une série de résultats issus d'une recherche dans une base de données.

Je ne suis donc pas super convaincu par faire ça :
Recherche DB -> résultats en PHP -> script PHP -> script JS -> script PHP -> JS -> PHP -> etc...
car ça fait changer de page plein de fois, et il faut passer plein de paramètres entre chacun d'entre elles.

Je cherche donc plutôt une solution du type :
Recherche DB
-> résultats en PHP avec fetch_array
-> script PHP
-> appel du script JS pour le résultat 1
-> fin du script PHP pour le résultat 1
-> appel du script JS pour le résultat 2
-> fin du script PHP pour le résultat 2
etc...

Faisable ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 août 2009 à 22:21
script PHP
-> appel du script JS pour le résultat 1
-> fin du script PHP pour le résultat 1


la je ne comprend pas tout ?

pourquoi passer par du JS pour afficher des resultats isuus d'une BDD

par un seul script php tu peux interroger la BDD, exploiter les réponses par fetch_array et le afficher ensuite toujours dans le même script

ce que tu appelles resultat 2 c'est quoi une deuxième liste déroulante par exemple ?
0
Je pensais m'être bien exprimé...

Recherche DB
PUIS
résultats dans un tableau
PUIS
pour chaque résultat, application d'un script PHP, d'un script JS et d'encore un peu de PHP
PUIS
affichage

Ainsi, j'ai besoin d'appeler un JS (ca fait appel à un script externe, je n'ai pas le choix du langage) pour une itération qui peut être très longue...
0
imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 42
5 août 2009 à 11:57
C'est un peu bizarre, mais admettons ...

Dans ce cas, il faut le faire en 2 étapes,
tu envoi la page avec le script au navigateur,
une fois le traiement JS fini, tu renvoi les données au 2eme script php (ou le même selon le cas).

Pour faire le renvoi, le plus simple est juste de faire un document.location='page.php?valeur='+val;
0
S'il n'y a vraiment que cette solution... Ca va faire lourd : imaginons que j'ai 30 résultats sortant de la base, ca me fait 60 pages successives à charger... :-/

Mais s'il n'y a que ça, c'est parti !..
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 août 2009 à 14:03
imaginons que j'ai 30 résultats sortant de la base, ca me fait 60 pages successives à charger

pourquoi tu ne peux pas afficher tes 30 résultats dans la même page ?

Recherche DB
PUIS
résultats dans un tableau
PUIS
pour chaque résultat, application d'un script PHP,

tu peux faire tout ça en un seul script php

d'un script JS et d'encore un peu de PHP
PUIS
affichage


ensuite je suppose qu'il y a une action de l'utilisateur, un évènement, un click sur un lien (spécifique à un des items affiché) pour déclencher un script javascript qui va appeler un script php pour afficher un complément ou autre et ça c'est de l'AJAX

mais si tu nous donnais un petit bout d'exemple de ce qu e tu veux faire on te conseillerait mieux
0
Hm... Je posterai des bouts de codes d'ici quelques jours si j'ai pas trouvé...

Je suis d'accord pour le fait qu'on peut mettre tout le début dans un seul script PHP.

Le truc, c'est qu'il y a deux niveaux de rafinement pour l'affichage : il y a une première sélection faite dans la base de donnée qui donne un premier tableau de résultats. C'est ensuite l'application d'un script JS sur ces résultats qui va déterminer s'ils doivent être affichés ou pas !

Ainsi, le script JS n'est pas appelé par l'utilisateur...

Tu vois le problème ? ^^
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 août 2009 à 14:19
ensuite l'application d'un script JS sur ces résultats qui va déterminer s'ils doivent être affichés ou pas

il te faut du JS pour ça, pourquoi pas avec du php ?
si ce sont des infos liés au navigateur, pays etc tu peux avoir ça dès le début avec ton script php
0
Comme je l'ai dit au début, je suis obligé de charger un script JS externe, je n'y peux rien et il me donne des infos nécessaires à mon traitement. Je ne peux pas passer outre !
0