Rechercher : dans
Par :

PHP: lecture d'un fichier distant avec JS ext

Dernière réponse le 6 aoû 2009 à 17:37:08 doriantoruin, le 4 aoû 2009 à 13:21:40 
 Signaler ce message aux modérateurs

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 !

Configuration: Linux
Firefox 3.0.11

Meilleures réponses pour « PHP: lecture d'un fichier distant avec JS ext » dans :
PHP - Les fichiers Voir La gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
[Python] Lire et écrire des fichiers CSV VoirLIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce sujet, mais uniquement...
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
Fichier CDA VoirFormat CDA Un fichier CDA est le plus souvent un fichier-"plage" (ou "piste") directement issu d'un CD audio. Lire un fichier CDA Pour lire de tels fichiers, il suffit de télécharger un lecteur capable de lire les CD audio, par exemple...

1

imw, le 4 aoû 2009 à 14:54:09

Je comprend pas bien la question ...

Tu veux intégrer un javascript distant ?
Combien faut-il de développeurs chez µ$ pour faire un bon lo­giciel ?
Plus ... beaucoup plus !

Répondre à imw

2

Alain_42, le 4 aoû 2009 à 15:08:46

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>

Répondre à Alain_42

3

doriantoruin, le 4 aoû 2009 à 17:06:10

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 !

Répondre à doriantoruin

4

imw, le 4 aoû 2009 à 17:09:59

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 Combien faut-il de développeurs chez µ$ pour faire un bon lo­giciel ?
Plus ... beaucoup plus !

Répondre à imw

5

Alain_42, le 4 aoû 2009 à 20:00:21

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.

Répondre à Alain_42

6

doriantourin, le 4 aoû 2009 à 20:04:51

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 ?

Répondre à doriantourin

7

Alain_42, le 4 aoû 2009 à 20:09:26

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

Répondre à Alain_42

8

doriantourin, le 4 aoû 2009 à 20:18:25

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.

Répondre à doriantourin

9

Alain_42, le 4 aoû 2009 à 20:32:05

<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;

?>

Répondre à Alain_42

10

doriantourin, le 4 aoû 2009 à 20:41:13

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 ?

Répondre à doriantourin

11

Alain_42, le 4 aoû 2009 à 20:50:53

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

Répondre à Alain_42

12

doriantourin, le 4 aoû 2009 à 21:22:12

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 ?

Répondre à doriantourin

13

Alain_42, le 4 aoû 2009 à 22:21:07

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 ?

Répondre à Alain_42

14

doriantourin, le 5 aoû 2009 à 06:50:11

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...

Répondre à doriantourin

15

imw, le 5 aoû 2009 à 11:57:54

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;

Répondre à imw

16

doriantoruin, le 5 aoû 2009 à 12:03:23

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 !..

Répondre à doriantoruin

17

Alain_42, le 5 aoû 2009 à 14:03:27

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

Répondre à Alain_42

18

doriantoruin, le 5 aoû 2009 à 14:12:21

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 ? ^^

Répondre à doriantoruin

19

Alain_42, le 5 aoû 2009 à 14:19:21

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

Répondre à Alain_42
Collection CommentÇaMarche.net