Requetes SQL sur serveur distant

WRInaute discret
Bonjour,

Je cherche un moyen d'interroger et renseigner une base MYSQL qui est sur un serveur différent de celui qui héberge mon site.
Le problème est qu'en raison d'un parefeu, je ne peux y accèder directement depuis une IP externe.

La solution que j'entrevoie est de mettre un script PHP sur le serveur hébergeant la base SQL (requete.php) puis depuis le site web faire une requete du genre
http://serveurSQL.com/requete.php?param ... aram3=titi

Le script requete.php récupèrerait les paramètres pour construire la requete SQL avec.

Mais comment executer la requete "http://serveurSQL.com/requete.php?param1=tutu&param2=toto&param3=titi" depuis mon serveur web ?

J'ai bien pensé à :
<img src="http://serveurSQL.com/requete.php?param1=tutu&param2=toto&param3=titi" alt="bidon" />

Mais je ne trouve pas ça très propre, même si d'après mes premiers tests cela à l'air de fonctionner.

Merci d'avance.
 
WRInaute discret
Je te remercie pour ton aide.
Par contre, dans mon fichier distant, je place un cookie :
Code:
if(!isset($_COOKIE['visiteurID'])) {
  $uniqueid=uniqid(rand(), true);
} else {
  $uniqueid=$_COOKIE["visiteurID"];
}
if(!isset($_COOKIE['visiteurID'])) {
  setcookie('visiteurID',$uniqueid);
}

Avec la méthode du file_get_contents, le cookie ne se crée pas.

Par contre, si j'execute le script requete.php directement en mettant son URL dans la barre d'adresse de mon navigateur, le cookie se créé bien.

Une idée ?

Merci d'avance.
 
WRInaute discret
Je ne peux pas car je n'ai pas la main sur la config du serveur (free.fr).

Mais je viens de trouver.

En fait c'est normal que le cookie ne passe pas vu que je le fais créer sur le serveur mysql et que je cherche sur le serveur du site :(

Donc je le crée sur le serveur du site, puis je le passe en argument dans le file_get_contents pour pouvoir l'exploiter dans la base SQL.


Merci de votre aide à tous les 2
 
WRInaute impliqué
totof78 a dit:
J'ai bien pensé à :
<img src="http://serveurSQL.com/requete.php?param1=tutu&param2=toto&param3=titi" alt="bidon" />
Comme ça n'importe quel visiteur peut se balader et faire n'importe quoi sur ta base de donnée...

Méthode à éviter. Il faut gérer ça en interne dans PHP, le visiteur ne doit pas voir ce qui se passe.

Je n'ai pas compris l'histoire du cookie, à quoi te sert-il ?
Tu peux le passer en paramètre de ton script requete.php

@+
 
WRInaute impliqué
Serious a dit:
file_get_contents('http://sql.com/requete');
oui ou sinon utiliser l'extension curl :
Code:
<?php
$data = array('sql' => "SELECT CRYPTE");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://sql.com/requete');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
curl_setopt ($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
curl_exec($ch);
?>
Ici les données sont postées.
Pour la sécurité il conviendrait de crypter la requête
A remarquer que CURLOPT_COOKIEJAR et CURLOPT_COOKIEFILE permettent de manipuler les cookie de sql.com
Maintenant tu n'as peut être pas curl d'installer sur ton serveur...
 
WRInaute discret
Bonjour,

Curl est bien installé mais je ne le connais pas.
Je vais regarder ça de plus prêt.

merci.
 
WRInaute discret
Re: [Resolu] Requetes SQL sur serveur distant

Alors, j'ai essayé :

Code:
file_get_contents("http://serveurSQL.com/requete.php?param1=tutu&param2=toto&param3=titi")
ou
fopen("http://serveurSQL.com/requete.php?param1=tutu&param2=toto&param3=titi","r")

Mais chaque fois j'ai :

[function.file-get-contents]: failed to open stream: No such file or directory
ou
[function.fopen]: failed to open stream: No such file or directory


Alors que si j'enlève les arguments pour ne laisser que http://serveurSQL.com/requete.php ça marche.

Le problème est que j'ai des arguments à passer :cry:

Une idée ?
 
WRInaute passionné
Es-tu sur que ton URL est valide? as-tu bien encode les parametres? Poste un exemple stp (sans le domaine).
 
WRInaute discret
julienr a dit:
et avec curl tu t'en sors pas ?

J'ai fais des essais hier soir avec le code suivant :
Code:
$data = "ip=$ipnumber";
$data = $data."&page_lang=$userlanguage";
$data = $data."&hote=$hote";
$data = $data."&id=".$_SESSION['uniqueid'];

$error_FH = fopen("http://xxx.free.fr/includes/error.log","w");
echo 'lancement de Curl';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://xxxi.free.fr/includes/requete.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $error_FH);
curl_exec($ch);

Dans mon script requete.php je fais des entrées dans une base SQL et, la, rien ne se passe

De plus le fichier error.log ne se créé pas.
 
WRInaute impliqué
ok deux choses :
- si tu précises curl_setopt($ch, CURLOPT_POST, 1); curl va poster, retire cette ligne pour faire un GET sur l'url
- fopen("http://xxx.free.fr/includes/error.log","w"); je sais pas si free le permet, utilise un chemin local plutot
ensuite je pense que cela sera bon :)
 
WRInaute passionné
Alors je ne vois pas... pourquoi ca marche sans parametre et ca ne marche pas avec. Tu es en mode post ou get?
Sois sur d'utiliser le meme de chaque cote.
 
WRInaute discret
julienr a dit:
ok deux choses :
- si tu précises curl_setopt($ch, CURLOPT_POST, 1); curl va poster, retire cette ligne pour faire un GET sur l'url
- fopen("http://xxx.free.fr/includes/error.log","w"); je sais pas si free le permet, utilise un chemin local plutot
ensuite je pense que cela sera bon :)

Bien vu, ça marche en supprimant la ligne.

Merci de ton aide, je vais pouvoir avancer sur mon projet.
 
WRInaute impliqué
Juste par curiosité, quelle est l'utilité de monter un système pareil sur un compte page perso chez Free ? (je veux dire, les bases de données sont mutualisées là-bas, donc il n'y a aucun gain de performance ...).
 
Discussions similaires
Haut