Question

J'essaie d'utiliser PHP pour lire la source d'un fichier PHP séparé. J'essaie d'utiliser File_get_contents de la manière suivante

file_get_contents('http://www.example.com/someFile.php');

Malheureusement, le code ci-dessus tente d'exécuter le code PHP plutôt que de simplement lire le texte comme il le ferait avec tout autre fichier.

Je suis tombé sur un article qui semble résoudre le problème, ce qui m'a conduit au code suivant:

file_get_contents('php://filter/convert.base64-encode/resource=http://www.example.com/someFile.php');

Cependant, ce code a le même effet; Il tente d'exécuter le code PHP.

Comment puis-je utiliser PHP pour lire la source d'un autre fichier PHP sans tenter d'exécuter le PHP dans le fichier?

Était-ce utile?

La solution

Malheureusement, le code ci-dessus tente d'exécuter le code PHP plutôt que de simplement lire le texte comme il le ferait avec tout autre fichier.

Non, ce n'est pas le cas.

Ce qui se passe ici, c'est que file_get_contents fait une demande HTTP régulière pour http://www.example.com/someFile.php, et le télécommande Le serveur à "Exemple.com" interprète le code PHP. Il sert les résultats exactement comme si vous aviez navigué vers http://www.example.com/someFile.php dans votre navigateur. Votre script télécharge cette sortie.

file_get_contents Fait certainement ne pas Exécutez le contenu du fichier après l'avoir récupéré. Le seul accès que votre script a à "Somefile.php" est ce que le serveur distant est prêt à servir; file_get_contents Je ne peux plus en quelque sorte récupérer la source PHP sous-jacente que vous ne le pouvez avec votre navigateur, affichez en quelque sorte la source PHP.

Autres conseils

Si le serveur distant ne vous donne pas la source du fichier PHP 'comme c'est «vous ne l'obtiendrez jamais par vous-même. Le serveur distant sera toujours (sauf, bien sûr, de la situation avec une mauvaise configuration) exécuter le moteur PHP pour lui et renverra la sortie du script. Imaginez ce qui se passerait si vous pouviez obtenir la source de tout fichier PHP distant.

Comme il a été dit précédemment, si vous essayez de lire le fichier via une URL HTTP, la demande sera ensuite traitée par le serveur Web sur ce serveur et il exécutera le fichier PHP.

Si le fichier est sur le même serveur que votre code PHP, essayez d'utiliser un fichier relatif ou absolu comme file_get_contents('/dir/dir/yourfile') ou file_get_contents('dir/file.php').

Lorsque vous demandez un fichier distant, comment il est rendu est à la hauteur du serveur à l'autre bout. Si l'hôte distant est configuré pour exécuter un fichier PHP avant de le servir, vous pouvez vous attendre à récupérer la sortie.

Si vous possédez le serveur à l'autre extrémité, vous pouvez lui demander de ne pas analyser .php fichiers avant de les renvoyer. Pour Apache, vous voudrez probablement lire mod_mime: http://httpd.apache.org/docs/2.0/mod/mod_mime.html

Dans mon cas, j'ai pu lire la source PHP de fichiers dans mon serveur en utilisant htmlentities: $ filedata = file_get_contents ('myfile.php'); echo htmlentities ($ filedata);

Mais cette méthode ne fonctionne pas pour les fichiers distants. Cela dépend peut-être de la configuration du serveur (lorsque PHP est servi) comme indiqué ci-dessus.

Vous ne pouvez pas lire le contenu du fichier PHP à l'aide de l'URL, car si vous utilisez http: //, il est traité via votre serveur Apache et que l'Apache donne la sortie du fichier PHP et non le contenu. Si vous pouviez lire le fichier PHP à l'aide de http: //, c'est un problème de sécurité et vous pouvez également lire le contenu des fichiers d'un autre serveur. Donc, la réponse est que vous ne pouvez pas le faire, aussi simple que ça !!

Par hasard, si vous essayez d'accéder au fichier PHP à partir d'un autre serveur qui ne vous appartient pas, c'est simple illégal !!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top