2016-09-16 1 views
0

J'essaie d'inclure le fichier PHP depuis différents endroits de mon ordinateur. J'ai donc défini différents chemins d'inclusion dans mon php.iniPHP.ini include_path sur les fenêtres avec différents lecteurs

include_path=".;C:\project\a;X:\project\b" 

Lorsque je tente d'inclure un fichier X: \ projet \ b \ file_b.php à partir d'un script PHP sur C: \ projet \ a \ file_a.php avec

require_once("file_b.php"); 

ou

require_once("X:\project\b\file_b.php"); 

je reçois l'erreur

Warning: require_once(X:\project\b\file_b.php): failed to open stream: No such file or directory in C:\project\a\file_a.php on line 2

Fatal error: require_once(): Failed opening required 'X:\project\b\file_b.php' (include_path='.;C:\project\a;X:\project\b') in C:\project\a\file_a.php on line 2

Abort Processing during Fatal-Error: require_once(): Failed opening required 'X:\project\b\file_b.php' (include_path='.;C:\project\a;X:\project\b') Error in Script C:\project\a\file_a.php on Line 2

J'ai essayé tout ce que je peux faire avec mon knowlegde, mais rien ne fonctionne. J'espère que quelqu'un pourra me résoudre pour résoudre ce problème. Y a-t-il un problème avec les chemins d'inclusion sur différents lecteurs sur un système Windows?

Meilleures salutations, bition

+0

fait tout utilisateur ID votre serveur Web est en cours d'exécution en ont le droit d'accéder à ce lecteur/dossiers/fichiers? et notez que c'est une bonne idée de ne pas utiliser les barres obliques inverses pour les chemins en php. 'file_get_contents (" C: \ now \ then \ forever ")' ne lit pas un fichier "forever" dans le sous-répertoire "now \ then", il lit 'c: [linefeed] ow [tab] hen [formfeed] ou tout' –

+0

Vous pouvez essayer 'chdir' avant l'instruction' require_once' .... http: //php.net/manual/fr/function.chdir.php – Hackerman

+0

Merci pour vos commentaires. @Marc B: les fichiers qui doivent être inclus sont accessibles par everone. Donc je pense qu'il n'y a pas de problème de peermission avec les fichiers. – bition

Répondre

0

Après un long moment, j'ai enfin la réponse à mon problème particulier.

C'est vraiment spécial, car j'utilise BoxCryptor pour crypter mon disque D:. BoxCryptor crée le périphérique virtuel X :, mais il n'est pas présent pour Apache et PHP. Mais je peux configurer BoxCryptor le montage du périphérique X: comme un disque dur rwal. Après avoir réglé ceci, tout fonctionne bien.

Désolé pour la confusion au sujet de mes disques durs vortuels et réels et je vous remercie pour votre aide!

Meilleures salutations, bition

-1

j'ai trouvé avec WAMP etc dans le passé, que l'utilisation backslashs fonctionne. Juste ne pas encapsuler la chaîne avec des guillemets doubles "C: \ path", cela traitera le contenu comme @Marc B avertit. Au lieu encapsuler la chaîne avec des guillemets simples 'C: \ path' et ensuite le contenu ne sont pas traités.

Si les barres obliques inverses dans le contenu de la chaîne de guillemet simple sont toujours en cours de traitement, essayez ce qui suit.

<?php 

$path = 'X:/project/b/file_b.php';   // PATH WITH FORWARD SLASHS 
$path = str_replace(chr(47) ,chr(92) ,$path); // REPLACE FORWARD WITH BACKWARD SLASHS 
require_once($path);       // RUN FILE 

?> 
+0

La chaîne de remplacement est complètement inutile. Utilisez juste '\\'. En outre, il ne devrait pas être un problème en premier lieu si vous utilisez des guillemets simples. – Brad

+0

Je ne suis pas sûr que c'est tout à fait exact, j'ai eu des problèmes dans le passé sur les systèmes Windows avec des barres obliques dans les chemins locaux. J'ai mentionné les encapsulations de citation dans les notes avant l'exemple de code. – ZBerg

+0

N'utilisez ensuite pas de barres obliques ... utilisez des barres obliques inversées. Le fait est que vous pouvez utiliser les barres obliques inverses dans votre chaîne littérale. Pas besoin de remplacement. – Brad