Le répertoire courant de mon script perl est " / " ?!

Le répertoire courant de mon script perl est " / " ?! - Perl - Programmation

Marsh Posté le 21-11-2008 à 11:12:32    

Bonjour à tous,
 
Après une migration de serveur, j'ai importé une base Postgresql, puis transféré le contenu d'un site contenant de nombreux scripts perl.
 
La plupart de ces scripts ne se lancent pas et, après vérification, la raison semble en être la suivante : au lieu de prendre le répertoire courant (Cwd) du script en question, je me retrouve constamment avec un répertoire courant Root, donc /. Or ceci me pose un gros problème car j'utilise presque partout des chemins relatifs... et de fait, les commandes des scripts ne se lancent pas car le chemin d'accès (notamment aux fichiers html incorporant mes formulaires) en devient faussé.
 
Également, et par ailleurs très troublant, je remarque que le répertoire courant en question change en fonction des Refresh sur mes navigateurs (IE comme Firefox)! Cwd me renvoie aléatoirement le répertoire racine de mon serveur (le plus souvent), ou bien quelquefois le répertoire de base de mes fichiers web (www/httpdocs), ou bien quelque fois le véritable répertoire courant du script que je tente de lancer (et dans ce cas, évidemment, le script se lance correctement)....  
Je n'arrive pas à comprendre comment la même commande peut me renvoyer 3 résultats différents de façon aléatoire juste en faisant un Refresh!!
 
Ce problème vous est-il fammilier ?
 
Cordialement
 
Frédéric


Message édité par Sailing_Port le 21-11-2008 à 11:22:34
Reply

Marsh Posté le 21-11-2008 à 11:12:32   

Reply

Marsh Posté le 21-11-2008 à 11:41:53    

Iniitalement le répertoire courant d'un programme est le répertoire qui était le répertoire courant au moment de l'invocation du programme. Je ne vois pas ce qui te fais penser que le répertoire courant de ton programme pourrait être le répertoire dans lequel se trouve le programme. Ca ne sera le cas que tu tu es dans le répertoire du programme au moment où tu lances le programme.

Reply

Marsh Posté le 21-11-2008 à 11:42:14    

Ca donne quoi avec:
use FindBin qw($Bin $RealBin);
tu as la valeur correcte du repertoire que tu veux dans $Bin ou dans $RealBin, non??
A+,


Message édité par gilou le 21-11-2008 à 11:44:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-11-2008 à 11:56:22    

Bonjour et merci de vos réponses.
 
Pour répondre à gilou, $Bin et $ReakBin me renvoient la même valeur : /usr/sbin. N'étant pas un expert, je ne suis pas sûr de savoir à quoi correspondent ces valeurs.
 
Mes scripts sont des petits .pl à partir d'un répertoire /cgi, je m'attendais donc à ce que les liens en chemin relatif que j'ai incorporés se construisent à partir de ce même dossier.... ce qui n'est pas le cas, vous l'aurez désormais compris.

Reply

Marsh Posté le 21-11-2008 à 13:26:56    

Citation :

Pour répondre à gilou, $Bin et $ReakBin me renvoient la même valeur : /usr/sbin. N'étant pas un expert, je ne suis pas sûr de savoir à quoi correspondent ces valeurs.

Bizarre ça, normalement ca renvoie le répertoire ou se trouve le script qui est lancé.
Ca marche en Perl, mais en CGI Perl, je n'en sais rien, ce n'est pas une chose que je pratique couramment.
 
A tout hasard, fais ceci:
use FindBin($Bin $RealBin);
FindBin::again();
et regardes les valeurs de $Bin et $RealBin des fois que les valeurs aient ete appelées et mises en cache par un autre module.
A+,


Message édité par gilou le 21-11-2008 à 13:35:28

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-11-2008 à 14:36:11    

Bonjour,
 
Le résultat est le même. Je ne comprends vraiment pas.  
Merci tout de même.

Reply

Marsh Posté le 21-11-2008 à 15:47:33    

En googlant, on trouve que FindBin marche pas avec mod_perl, j'en déduis donc que ce doit être ce qui t'arrive.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 26-11-2008 à 15:48:07    

.... Je ne comprends plus!!!
 
Maintenant que je refais le test, $Bin me renvoie bien le bon chemin courant.... 2 fois sur 3!! à chaque Refresh la valeur est différente.
Lorsque je lance mon script à partir de mon lien d'origine, celui-ci s'affiche correctement... ou pas! je n'arrive pas à comprendre comment une variable globale peut afficher plusieurs résultats aléatoirement.....
 
J'ai évidement vidé le cache dans les deux navigateurs (IE et Firefox) pour être sûr que le problème ne venait pas de là.....


Message édité par Sailing_Port le 26-11-2008 à 15:48:38
Reply

Marsh Posté le 26-11-2008 à 16:55:43    

Si c'est du CGI perl, tu as essayé $ENV{'SCRIPT_FILENAME'} ??
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 27-11-2008 à 17:08:47    

gilou,
 
$ENV{'SCRIPT_FILENAME'} me donne bien le chemin complet de mon script. Après quelques recherches, il est possible que ceci ai à voir avec mod_perl. Mais je ne comprends pas vraiment quoi....

Reply

Marsh Posté le 27-11-2008 à 17:08:47   

Reply

Marsh Posté le 27-11-2008 à 18:23:12    

Si tu fais du CGI perl, il faut alors regarder la doc spécifique correspondante.
La, c'était la 5e reponse de google avec "CGI Perl script pathname" qui m'a donné l'info.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed