Problème d’utilisation de la fonction « include » pour les adresses absolues

Wilouis
Invité n'ayant pas de compte PHPfrance

09 mai 2019, 23:15

Salut. J’aimerais savoir comment faire pour utiliser la fonction « include » dans le cas où le fichier appelant et le fichier appelé sont sur 2 serveurs différents ?

Par exemple :
Le fichier test.php (hébergé sur le serveur #1), renferme le code suivant :
<?php include("https://www.monsite.com/distant.php"); ?>

Et le fichier "distant.php" est hébergé sur le serveur #2

Merci déjà pour votre aide.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

09 mai 2019, 23:20

Un bon point de départ est la page de la doc de la fonction include() qui est très complète, avec notamment le grand cadre rouge d'alerte de sécurité :-D
https://www.php.net/manual/fr/function.include.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Wilouis
Invité n'ayant pas de compte PHPfrance

10 mai 2019, 01:16

Ok. Merci pour votre reponse. Je viens de voir votre lien. Je vois qu’ils ont suggéré la fonction readfile(). Je viens donc de l’insérer dans mon code mais je vois que ça ne reconnait pas les requêtes de connexion php/MySQL se trouvant dans le fichier distant.php (sur le serveur #2). N’y a-t-il pas un autre moyen de faire cela ?

Il s’agit d’une application que je développe en php. Je veux garder certains codes secrets sur mon serveur dans des fichiers php qui seront inclus dans des fichiers php de base installés sur le serveur des utilisateurs de mon application.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 mai 2019, 10:11

Tu as lu trop vite la doc.

Si tu fais un include d'un fichier distant, ça va récupérer le contenu du fichier (comme le ferai ton navigateur web, c'est important à comprendre) et seulement ensuite essayer d’interpréter ce qu'il a récupéré comme si c'était du code PHP.

:arrow: Dans tous les cas ce n'est pas une bonne pratique et je te déconseille très très fortement de faire ainsi, surtout que tu sembles débutant en PHP.

Réfléchis à une autre architecture pour ton programme, via une API pour échanger des données entre les 2 serveurs par exemple.
Quand tout le reste a échoué, lisez le mode d'emploi...

Wilouis
Invité n'ayant pas de compte PHPfrance

10 mai 2019, 21:07

Je ne suis pas vraiment un débutant en php. Sauf que je n’ai jamais eu à connecter avant 2 fichiers php installés sur 2 serveurs différents. Merci de me proposer une alternative, c’est-à-dire une API. Peut-être que je vais devoir apprendre l’API Rest. Mais si je pouvais trouver les directives et codes spécifiques, cela me permettrait d’aller plus vite.

Avatar du membre
Eléphanteau du PHP | 19 Messages

11 mai 2019, 16:25

pour orienter ma réponse tes serveurs sont sous linux , ou sous windows ?
autre question les données "sensible" sont uniquement dans la base ou dans la base et dans les fichiers php ?
EX Administrateur infogérence infrastructure web.( chaine de télévision ; et autre site a données sensibles). Très bonne connaissance en : routeur , firewall ,switch , serveur linux ubuntu ,apache , php, mysql (y compris master-slave), et bien d'autre technologies. Pratiquant le php assez regulierement , depuis la version 3.0 ,surtout comme langage de script ,tel que pour redémarrer des services windows via une interface web. Cherchant a se reconvertir ,suite a un Burn-out ,dans le dev php-mysql ,sur paris,RP-ouest.

Wilouis
Invité n'ayant pas de compte PHPfrance

14 mai 2019, 19:11

1) Dans le cas présent, les 2 serveurs sont sur Linux. Mais j’aimerais qu’on prenne aussi le cas où l’un est sous Linux et l’autre sous Windows ; et le cas où les 2 sont sous Windows

2) Concernant les données sensibles, elles seront stockées dans la base de données.

En fait, je veux seulement mettre les fichiers php des codes traitant les requêtes SQL sur mon serveur et les connectés aux fichiers php de base de l’application installée sur le serveur de l’utilisateur

Avatar du membre
Mammouth du PHP | 1609 Messages

14 mai 2019, 20:05

Salut, je pense que tu peux t'orienter vers une API SOAP ou une API REST parce qu'à priori tu ne pourras pas garder tes codes secrets en utilisant l'include étant donné que dans ce cas l'adresse incluse doit retourner le code.
Quand au choix entre SOAP et REST je ne saurai te dire qu'elle serait la meilleur solution dans ton cas. Tu pourrais même mettre en place ton propre système.
En tout cas tu n'as à priori pas d'autre choix que de mettre en place un système permettant l'échange des données entre les 2 serveurs.
Développeur web depuis + de 20 ans

Wilouis
Invité n'ayant pas de compte PHPfrance

16 mai 2019, 16:11

Ok. Merci beaucoup. Je pense que je vais opter pour REST dans ce cas

Avatar du membre
Eléphanteau du PHP | 19 Messages

16 mai 2019, 21:29

hello,
sur le serveur "utilisateur" si les utilisateurs n'ont pas un acces "root" , une autre solution est de créer sous répertoire qui as seulement des droits uniquement pour l'utilisateur www-data (www-data étant l'utilisateur dédié au serveur apache).

tu crée un répertoire ,dans se répertoire tu met ton fichier a inclure avec la connexion a la base sur ton serveur.
puis tu modifie les droits pour tout ce qui ce trouve dans ce répertoire :

Code : Tout sélectionner

chown -R www-data:www-data ./mon-repertoire chmod -R 700 ./mon-repertoire
ton repertoire et tout ce qui se trouve dedans ne serra plus accesible que par "root" et "www-data"

Ensuite sur ton serveur MYSQL il faudra créer un utilisateur ayant accès a ta base avec l'ip du serveur "utilisateur". enfin dans ton fichier a inclure il faudra définir la connexion MYSQL vers ton serveur.






pour le cas ou ton serveur "utilisateur" est sous windows c'est a peu près le meme principe ; et pareillement il faudra créer un répertoire uniquement utilisable avec le compte sous lequel ton serveur web tourne , si par exemple si c'est IIS , le nom du compte ressemble , de tete , a quelque chose comme "IUSER_INTERNET". enfin dans ta page php a inclure il faudra utiliser un connecteur sois un connecteur mysqli sois un connecteur ODBC pour se connecter a ta base en ayant a préalable installer :https://dev.mysql.com/downloads/connector/odbc/, a la place de MYSQLI ( https://www.php.net/manual/fr/book.uodbc.php )

si tu utilise un serveur WAMP il faut activer le démarrage en temps que services windows , et le mieux est de creer un utilisateur dédié et modifier les services pour qu'ils se lancent avec le dit utilisateur et modifier les droits en consequence sur les repertoire web.


et enfin dans tout les cas si les utilisateurs on un accès "root" sous linux , ou "administrateur" sous windows , quoi que tu fasse meme avec SOAP et REST , un utilisateur ayant un des connaissances avancés pourra se débrouiller pour aller taper dans ta base. car rien n'empeche que quiconque , copie ta page ailleurs sur le serveur , modifie la dite page pour récupérer non pas un enregistrement , mais, toute ta base en modifiant les requetes SOAP, et lance la dite page dans un navigateur.
c'est pour ca qu'on as inventer les droits utilisateur... ;-) ;-)
EX Administrateur infogérence infrastructure web.( chaine de télévision ; et autre site a données sensibles). Très bonne connaissance en : routeur , firewall ,switch , serveur linux ubuntu ,apache , php, mysql (y compris master-slave), et bien d'autre technologies. Pratiquant le php assez regulierement , depuis la version 3.0 ,surtout comme langage de script ,tel que pour redémarrer des services windows via une interface web. Cherchant a se reconvertir ,suite a un Burn-out ,dans le dev php-mysql ,sur paris,RP-ouest.