y compris le fichier php d'un autre serveur avec php
J'ai deux fichiers PHP situés sur des serveurs différents, l'un à http://www.mysite.com/main.php
, l'autre à http://www.sample.com/includeThis.php
.
Je veux inclure le deuxième fichier du premier.
Le contenu du second fichier ressemble à ceci:
<?php
$foo = "this is data from file one";
Et le premier fichier:
<?php
include "http://www.sample.com/includeThis.php";
echo $foo;
Y a-t-il un moyen de le faire?
6 réponses
Non, ce paramètre est désactivé/non autorisé par défaut dans la plupart des serveurs web (php.ini) vous ne pouvez donc pas utiliser le include
pour inclure les fichiers d'une adresse distante pour des raisons de sécurité .
Si vous souhaitez autoriser inclusion de fichiers à distance, la directive allow_url_include
doit être mis à On
en php.ini
Mais encore une fois c'est une mauvaise pratique, d'un point de vue axé sur la sécurité ; et, donc, il est généralement désactivé (Je ne l'ai jamais vu activé, en fait)
Si vous voulez lire le contenu d'un fichier distant, vous pouvez utiliser file_get_contents
Fonction à la place mais cela sera retourné en tant que code de balisage HTML pur, il n'y aura pas de codeCôté Serveur .
Après avoir lu vos commentaires - dans lesquels vous déclarez que vous voulez le faire comme un moyen de protection contre la copie - ma réponse est emphatique, oubliez-le . Ce n'est pas ainsi que fonctionne la protection contre la copie.
La seule chose que vous pouvez faire en utilisant include()
est récupérer le code source d'ailleurs pour être interprété sur l'interpréteur local. C'est enfantin facile à craquer: un client malveillant aurait juste à echo()
le code récupéré.
Exécuter le script distant à distance (sur votre serveur) ne vous aidera pas, car l'état de ce script (variables, fonctions...) ne sera pas présent dans le script à partir duquel vous l'appelez.
Les options que vous avez sont:
-
Compiler / encoder / obscurcir le script, nécessitant éventuellement un module PHP spécifique pour l'exécuter (beaucoup de questions à ce sujet sur SO)
Création d'un service web réel (par exemple en utilisant SOAP) qui s'exécute sur votre serveur et effectue le des opérations
Pour ce que ça vaut, cependant, personnellement, je n'achète pas, ni ne recommande aux clients d'acheter, des scripts codés et des scripts qui doivent "téléphoner à la maison" pour travailler. Je crois en la protection de vos produits grâce à un accord de licence rigoureux (qui effraiera les clients professionnels à acheter votre produit, car les risques de se faire prendre en train de voler sont trop chers.)
Je me demande si L'OP a jamais trouvé une solution pour lui-même. Autant que je sache, la seule solution, ce serait d'avoir tous vos comptes clients sur le même serveur que les scripts que vous souhaitez inclure - j'ai fait quelque chose de similaire:
/ path_to_myserver_root / httpdocs / clients / client01/wwwroot / scriptA.php / path_to_myserver_root / httpdocs / clients / client02 / wwwroot / scriptA.php ETC....
Alors: / path_to_myserver_root / privatefiles / myapp / scriptB.php
Wwwroot est où chaque points de domaine client.
ScriptA.php a une logique métier puis inclut scriptB.php pour ses fonctions avec le chemin complet ci-dessus:
Require ('/path_to_myserver_root/privatefiles/myapp / scriptB.php')
ScriptB.php réside dans un répertoire privé protégé sur le serveur, inaccessible par http, et non traversable par les clients.
Maintenant, rappelez-vous, mes raisons de le faire est de maintenir la cohérence de la version sur plusieurs comptes, de ne pas retenir certains propriétaires code PHP magique de ma clientèle - mais je suppose qu'il pourrait être implémenté à cette fin.
Meh, YMMV.
Utiliser file_get_contents
, pour ouvrir le fichier, ajouter à la deuxième fichier comme ceci:
$secondFile = file_get_contents('http://www.sample.com/includeThis.php');
file_put_contents('your_file', $secondFile, FILE_APPEND);
Cela fonctionnera si vous voulez le mettre à la fin de votre fichier. Que de simplement faire une inclusion sur votre fichier.
Quoi qu'il en soit, comme je l'ai dit, C'est une OMI risquée et dangereuse, surtout si vous n'êtes pas sûr du contenu qu'elle contient.
En outre, your_file devra être un chemin de serveur réel, pas une URL.
Lorsque vous essayez de parcourir les domaines comme vous l'avez suggéré, vous n'incluez pas réellement un fichier qui est assis là prêt à faire - le processus est différent. La machine doit ramener le fichier sur http, ce qui n'est pas ce que l'instruction include est.
Aussi, si vous êtes sur un hébergement partagé, PHP est souvent configuré pour vous empêcher de sortir de votre propre domaine.
Si vous n'êtes pas sous cette restriction, une solution pourrait être D'utiliser PHP pour copier une copie de le fichier de l'autre serveur, puis l'inclure une fois qu'il est assis dans votre domaine. Un autre apporach pourrait être d'écrire un petit script de "déploiement" qui le Copie partout où il doit être chaque fois que vous apportez des modifications...
J'espère que cela aide...
Martin
Renommez le premier en .txt
alors réfléchissez à deux fois, Êtes-vous sûr que vous avez besoin d'include cross-domain