9
votes

file_get_contents ne trouve pas de fichier qui existe

J'ai un fichier que j'aimerais que un autre script accède à l'utilisation de file_get_contents

Le fichier que j'aimerais que j'aimerais accéder est dans le répertoire au-dessus de celui-ci, donc j'utilise file_get_contents ('../ file.php? this = que')

Cependant, il renvoie aucun fichier ou répertoire de ce type et je ne comprends pas pourquoi. Le fichier est là.

Je suppose que cela a quelque chose à voir avec le fichier local plutôt qu'une télécommande. Des idées ou des solutions de contournement?


0 commentaires

6 Réponses :


4
votes

Il n'y a pas de fichier à cet endroit.
Vous devez utiliser un chemin approprié.

Tout d'abord faire un echo getcwd (); pour voir quel répertoire est actuellement actuel (à partir de laquelle votre chemin relatif est construit)
Ensuite, vérifiez l'emplacement de fichier.php par rapport à ce répertoire.
Vérifiez le cas du nom de fichier, cela pourrait être sensible.

Puis-je poser une raison pour laquelle ouvrez-vous un fichier PHP avec cette fonction?

Eh bien, une réponse: xxx


27 commentaires

Le fichier est à cet endroit et j'ai pu y accéder lors de l'utilisation d'une URL absolue. J'utilise cette fonction pour l'ouvrir afin que je puisse envoyer des paramètres obtenir et recevoir des messages qu'il produira en ce qui concerne les erreurs ou le succès.


Oui, je le fais, en considérant que cela fonctionne quand je l'utilise avec une URL complète


@Rob, c'est stupide attitude de l'équipe PHP Qu'est-ce qui vous a trompé. Et manque de connaissances, bien sûr. Une fonction unique fichier_get_Contents est utilisée pour demander deux royaumes complètement différents. Un système de fichiers et un service HTTP. Un développeur PHP devrait bien les distinguer


Existe-t-il un moyen de le faire en utilisant fichier_get_contents ou quelque chose de similaire, plutôt que de définir les variables, puis de l'inclusion du fichier?


@Rob une raison pour laquelle vous demandez une telle manière?


@Col. Shrapnel aucune raison autre que la paresse pure. Je préfère ne pas refaire beaucoup de code à ce stade s'il y a une solution de contournement différente. Je vais probablement le faire votre chemin après un moment, mais j'ai besoin d'une solution plus rapide pour le moment.


Je suis d'accord avec @col. La dernière obus de Shrapnel. Vous avez probablement un code dans ce fichier qui doit être utilisé d'autre où. Envisagez de mettre ce code dans une bibliothèque de fonctions réutilisables ou même de meilleurs objets.


En fait, file_get_contents exécute le code PHP et non Jakenoble, je n'ai pas besoin de l'utiliser nulle part ailleurs.


@ROB: file_get_contents () n'exécutera que le code PHP si le paramètre à l'intérieur de la parenthèse est une URL, sinon, cette fonction renvoie la teneur brude du fichier, si un fichier pouvant être consulté directement de La ligne de commande existe. Un fichier PHP local ne peut être exécuté qu'en utilisant Inclure () , nécessite () ou en chargeant le code brut, puis eval () - ces contenus.


@ROB Ignorance n'est pas une chose d'être fière de


@Rob: "< Je ferai probablement votre chemin après un moment, mais j'ai besoin d'une solution plus rapide pour le moment. " devrait être assez facile d'appliquer la suggestion du colonel - faites juste une "trouvaille et remplacer "pour les noms de variable dans le fichier fourni, remplacez" $ _GET "avec" $ inclusvités ", vous déclarez simplement toutes les variables dans le tableau incluse avant y compris le fichier - $ inclusvars ['this'] = 'ça';


@LUCANOS: J'aimerais que ce soit aussi simple, mais il existe divers autres paramètres et déclarations conditionnelles qui devraient être modifiés pour vous adapter. @Col. Shrapnel: Votre dernier commentaire n'aide pas, ni une contribution. Je comprends que vous en savez beaucoup sur PHP, mais ce n'est pas une raison d'être impoli aux utilisateurs qui ne le font pas. Vous semblez troll des utilisateurs beaucoup plus que ce que vous les aidez. C'est très immature et ennuyeux.


@Rob il n'était même pas destiné à aider. Parce que vous avez déjà montré que vous refusez d'apprendre et d'accepter des conseils utiles. C'est très enfantin, arrogant et gênant. Alors, essayant de vous aider, c'est juste perdre du temps. Et ce n'est pas moi de blâmer.


@Col. Shrapnel: Non, j'ai remarqué que vous le faites assez souvent. Vous parlez aux personnes qui sont moins compétentes, ce qui ne les empêcherait que plutôt que de l'aide. Et aider est l'intention de ce site Web, n'est-ce pas?


@Rob c'est juste pas la vérité. Je suis Toujours Essayer d'aide. Comme dans ce cas même. J'ai fait une merde de travail pour trouver votre problème Real et vous donner une solution appropriée . Et vous osez toujours dire que je n'ai aide personne? En fait, je n'attendais rien d'autre de votre part. Aider est l'intention de ce site Web, oui. Mais celui qui demande n'est pas un patron et ceux qui répondent ne sont pas vos esclaves. Vous ne pouvez pas exiger de l'aide. Surtout si vous entrez un mauvais moyen et que vous refusez d'aller un bon.


@Col. Shrapnel: Toujours ? Alors, quand vous avez dit "l'ignorance n'est pas une chose d'être fière", c'était une aide? Je n'ai jamais demandé de l'aide, mais je m'attends à ce que je puisse poster, vous devriez avoir la maturité pour ne pas rire de l'utilisateur de demander de l'aide et de lui parler


@ROB à nouveau. Je l'ai déjà expliqué: 1. J'essayais d'aider. Et c'était moi, qui a découvert quel est votre vrai problème, malgré votre faute - ne postez pas le code réel. 2. Mais vous persistez à rester mal basé sur l'ignorance (disant que file_get_contents exécute le code PHP est ignorance). 3 Seulement alors J'ai abandonné. Parce qu'il est impossible d'aider quelqu'un qui refuse d'écouter. La partie la plus drôle de tout cela est qu'il y a beaucoup de vos fautes et vous blâmez quiconque mais vous-même :)


@Col. Shrapnel où ai-je blâmé quelqu'un pour mon erreur dans la matière? En fait, si vous n'étiez pas si impoli à propos de la façon dont vous m'avez dit mon erreur, je vous aurais remercié.


@Rob je n'ai pas besoin de votre merci. Arrêtez-vous juste d'm'accuser suffit.


@Col. Shrapnel La seule chose que je t'accusé est d'être impoli, que vous êtes constamment et que vous regardez à travers vos autres commentaires et réponses, je ne suis pas le seul qui le pense.


@Rob bien au moins vous ne m'accusez plus pour ne pas être utile. Je suis maigre reconnaissant. Parfois, j'ai perdu mon tempérament, oui. Et j'avoue que ce n'est pas le meilleur comportement. Mais il y a toujours une raison. Ce site souffre de nombreuses approches non professionnelles.


@Col. Shrapnel Je n'ai jamais voulu vous accuser de ne pas être utile, autrement que dans certains de vos commentaires. Vous m'avez aidé un peu sur ce site, tout ce que je demande, c'est que vous le faites de manière moins grossière. Vous pouvez obtenir des réponses plus reconnaissantes de moi-même aussi bien que beaucoup d'autres si vous vous résolvez l'élitisme


@Rob Quelle est l'utilisation de telles "réponses appréciatiques"? Pas de blague, je ne sais vraiment pas. La seule réponse reconnaissante est de me demander "où je me trompe et comment puis-je faire mieux?". D'autres sont juste beaucoup d'air.


@Tall: Calmez les gars. Rob: Autant que des réponses courtes et brutales sont une épine de côté (j'ai eu ma juste part, de divers utilisateurs, également), ils font partie intégrante du site. Tout ce que vous pouvez faire, c'est que nos commentaires et nos interactions soient aussi encourageants que possible. "Nous devons être le changement que nous souhaitons voir dans ce monde" -Hhandi.


Colonel: Votre réponse a été, comme vous soulignez, corrigez et a été la première à détailler la faute. Votre aide et votre contribution est-elle appréciée. Vous avez évidemment beaucoup d'expérience et de compétences, et les gens l'embrasseront d'autant plus si vous permettez simplement au fait que, comme pour toutes les activités, la majorité des développeurs PHP sont inférieurs à des experts - nous commençons tous quelque part, et C'est l'encouragement et les conseils d'experts comme vous qui vous font ou qui nous brisent comme des développeurs. Si une réponse ajoute à la capacité technique d'un utilisateur, mais enfreint leur passion pour apprendre, nous perdons tous.


@Lucanos: vos deux réponses ont été très bien placées. J'aime particulièrement la citation de Ghandi.


@Lucanos: C'est Gandhi, pas Ghandi.



1
votes

est getcwd () == dirname (__ fichier __) ?

Une fois, j'ai rencontré un problème où l'utilisation d'un chemin relatif a toujours jeté une erreur sur certains hôtes partagés. Nous avons fini par utiliser des chemins absolus à l'aide de DirName (__ fichier __) comme chemin de base (réglage d'une constante dans le bootstrap et en utilisant cette valeur constante comme valeur de chemin de base) et tout fonctionnait bien. Nous n'avons pas digues plus loin dans le problème, mais vous rencontrez peut-être la même chose. Je devine juste ici.


0 commentaires

25
votes
file_get_contents('../file.php?this=that')
This will never work, unless you build a full URL with the entire http://.... syntax. PHP will see this as a request to get a file named file.php?this=that one level above the current directory. It won't treat it as a relative URL and do an HTTP request, it'll use the local filesystem handler instead. You may very well have file.php up there, but since the local file system has no concept of URLs or query parameters, it won't know to strip off the ?this=that and just load file.php. Hence your 'no such file error'.

5 commentaires

Eh bien, y a-t-il un moyen de travailler autour d'elle sans y compris le fichier, alors?


Bien sûr, utilisez simplement une URL absolue. File_Get_Contents ('http://example.com/some/dirs/file.php?thi s = que'); qui passera par le gestionnaire HTTP et le travail probablement comme vous le souhaitez. Mais il semble idiot de faire un aller-retour complet à travers HTTPLAND juste pour obtenir quelque chose d'un autre fichier PHP. Plutôt comme ébullition spaghetti une nouille à la fois et chauffer de l'eau douce pour chaque nouille.


Bien voir que ce n'est pas une grande partie d'une option non plus. J'ai besoin de le rendre un peu plus portable, et donc l'URL de fichier.php changera, mais il continuera d'être un répertoire au-dessus du fichier l'accédant. Holez-moi, laissez-moi aller regarder quelques touches $ _ / code> et voir si je peux comprendre quelque chose. P.s. J'aime ta simile


Aucune raison pour laquelle vous devez coder le code HostName / Chemin, vous pouvez le construire à l'aide de la version renvoyée à partir de parse_url ($ _ serveur ['php_self']) et ajout du rapport ../ fichier.php ? Cela = que . Tant que cela ressemble à une URL, fichu_get_contents passera via le gestionnaire HTTP.


@MARCB Je souhaite accéder à une image dans le répertoire local puisque l'accès à l'URL absolu n'est pas dynamique et passera via le gestionnaire HTTP qui empêchera l'accès direct des images. Pouvez-vous me guider avec ce problème s'il vous plaît?



4
votes

Je suis allé de l'avant et j'ai utilisé quelques variables $ _Server, y combinant ensemble pour obtenir l'URL complète et l'utiliser dans File_Get_Contents :

file_get_contents ('http: //'. $ _Server ["http_host ']. Dirname ($ _ serveur [nom_serveur"]).' /../ fichier.php? this '); < / code>

qui a fait l'affaire. Merci pour l'aide de tout le monde.


2 commentaires

Deux bowvotes et aucune raison ou des commentaires? Je demande des solutions de contournement et personne ne me fournit aucun. Je trouve un et les gens se fâchent et ainsivotent? MDR


Je pense que les gens ont baissé cela parce que Marc B vous a dit ce qui n'allait pas et vous a eu la majeure partie, vous n'avez que vous avez seulement dû trouver le bon _ variables de serveur , qui est trivial ... mais alors vous avez créé Votre possède répondez et accepté plutôt que de mentionner vos variables _ Server dans un commentaire et acceptation SA Réponse. Il n'était pas nécessaire de faire.



3
votes

Utilisez comme ça ....

$string1=file_get_contents("c:/rose1/ram.txt"); echo $string1;


0 commentaires

15
votes

Selon Php.net la solution appropriée à la lecture de fichiers à l'aide de fichiers_get_contents à partir du serveur local utilise

// <= PHP 5
$file = file_get_contents('./people.txt', true);

// > PHP 5
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);


0 commentaires