2013-10-05 2 views
0

Voici mon code:Comportement étrange file_get_contents()

<?php 
    $file = 'install.php'; 
    echo file_get_contents($file); 
?> 

Ce code est en fait à l'intérieur du fichier en cours passé dans file_get_contents(). Pourquoi est-ce que je reçois un message d'erreur "Impossible d'ouvrir le flux: aucun fichier ou répertoire de ce type dans /path/to/install.php"? Cela n'a pas de sens, car exactement la même chose fonctionne parfaitement dans un autre projet que j'ai sur le même serveur.

Aidez s'il vous plaît!

BTW J'ai cURL activé et allow_fopen est activé. Je n'ai aucune idée de ce que le problème pourrait être.

MISE À JOUR:

Il fonctionne comme prévu lorsque j'utilise un chemin absolu (/var/www/path/to/install.php) mais, comme le but est de mettre en place une auto script d'installation, j'ai vraiment besoin de pouvoir utiliser un chemin relatif. Y a-t-il un endroit pour y parvenir?

+0

Le chemin rapporté est-il correct? – Gumbo

+0

Oui, tout devrait bien fonctionner. –

+1

@ BrandonGiles-Maynard Voir ma mise à jour concernant le chemin absolu. – AlexP

Répondre

1

L'erreur est due à l'illisibilité. Cela est normalement dû au fait qu'il est inexistant (mauvais chemin de fichier) ou que l'utilisateur actuel (par exemple, www-data) a des autorisations de fichier incorrectes.

Vous pouvez vérifier cela, pour éviter l'erreur:

$file = realpath('foo.php'); 
if (! file_exists($file)) { 
    throw new \Exception(sprintf('The file %s cannot be found', $file)); 
} else if (! is_readable($file)) { 
    throw new \Exception(sprintf('The file %s cannot be read', $file)); 
} else { 
    $contents = file_get_contents($file); 
} 

Vérifiez la documentation on file system functions des moyens plus utiles pour déboguer ce genre d'erreurs.

Mise à jour

Pour étendre le chemin de fichier relatif, utilisez realpath()

+0

Mais comment pourrait-il être le mauvais chemin de fichier quand je passe dans le fichier le code lui-même est? Aussi, comme je l'ai dit, cette même fonctionnalité (aucune différence) a fonctionné comme prévu dans un autre projet que j'ai sur le même serveur. –

+0

Merci! Cela m'a indiqué dans la bonne direction. –

+1

Apparemment, les chemins de fichiers passés dans file_get_contents() sont toujours relatifs au répertoire racine. –

0

Si je vous, je fais deux contrôles en place:

I. est install.php situé dans le même répertoire en tant que fichier de script contenant:

<?php 
    $file = 'install.php'; 
    echo file_get_contents($file); 
?> 

II. Le propriétaire Unix de l'install.php est l'appelant de la page Web, par exemple, dans Debian OS, le groupe et le propriétaire de install.php doit être www-data? Si le propriétaire est root, la page Web ne peut pas lire ce fichier en raison de la protection de fichier à la lecture.

Cette erreur peut être faite lorsque vous vous connectez en tant que root, vous copiez un répertoire entier sous l'utilisateur root, root sera le propriétaire de sa création. Aucun autre utilisateur ne peut lire ces répertoires/fichiers.

0

Puisque vous avez dit ce code est en fait à l'intérieur install.php (si je comprends bien) faire ce qui suit serait suffisant:

<?php 
    echo file_get_contents(__FILE__); 
?> 

En outre, il serait votre script non seulement le système de fichiers indépendant, mais aussi nom de fichier indépendant .

0

utilisation:

echo htmlspecialchars(file_get_contents($file)); 

Le problème est le fait que la source de ce fichier contenait <?php et ?> balises, donc, ils sont bien outputed, mais votre navigateur ne marche pas afficher le visuel bloc (source de Voir la page , et vous verrez là.)