2009-08-19 11 views
2

Je sais que "quelque chose doit avoir été changé" mais mon code semble s'être rompu pendant la nuit sans raison.php fopen chemin relatif cassé - mystère

Ma structure de répertoire du serveur est quelque chose comme ceci:

/
/scripts
/audit
/other_things

J'ai un script (disons qu'il est appelé «/scripts /MyScript.php ") dans le dossier" scripts "qui rassemble les données d'une page Web en utilisant curl, et enregistre une copie datée de la page Web qu'il lit dans le dossier" audit ".

Pour écrire dans le dossier d'audit, je

$ fh = fopen ("./ audit/2008-09-09-183000.backup.log", "w");

mais qui a cessé de travailler, lancer

[function.fopen]: failed to open stream: Aucun fichier ou répertoire dans /home/web/website.co.uk/audit/2008- 09-09-183000.backup.log sur la ligne 353

J'ai cependant fixé en changeant le chemin de

"../audit/2008 etc." à partir de "./audit/2008" (c'est deux arrêts/périodes, au lieu d'un)

La logique indique que quelque chose doit avoir changé dans la configuration du serveur, mais quoi? C'est un serveur dédié que je gère. Comment puis-je éviter que quelque chose comme ça se reproduise?

Je suis même passé par SVN pour MyScript.php et toutes les versions précédentes ont utilisé le single. Sur le chemin.

Répondre

7

Utilisez dirname(__FILE__) pour obtenir le chemin du système de fichiers pour le fichier en cours. Ensuite, utilisez les chemins relatifs à partir de là pour localiser votre répertoire audit.

Par exemple, dans scripts/MyScript.php, dirname(__FILE__) renverra /home/web/website.co.uk/scripts. Vous pouvez ajouter de manière fiable /../audit à cela.

(Notez que cela fonctionne même dans un include d ou d require fichier dans ce cas, il retournera le répertoire dans lequel le fichier inclus est situé).

0

Votre CWD (répertoire de travail actuel) a changé: il s'agissait de la racine du document et maintenant de la racine/des scripts du document.

Cela peut être dû au chemin utilisé pour accéder au script, par exemple, si vous l'avez fait auparavant http://website.co.uk/MyScript.php en raison d'une réécriture d'URL ou de n'importe quel numéro et que vous accédez maintenant à http://website.co.uk/scripts/MyScript.php.

Je crois me rappeler qu'il y a d'autres coupables possibles mais je ne m'en souviens pas maintenant. Avez-vous mangle avec des règles de réécriture ou des URL? (par exemple, a commencé à utiliser PATH_INFO?)