2010-06-17 8 views
0

aidez s'il vous plaît! Je deviens vraiment fou de ce problème!Serveur HTTP Perl & Apache: Impossible de faire le lien MLDBM lorsque le script cgi est exécuté à partir du serveur, mais correct lorsqu'il est exécuté à partir de la ligne de commande. Pourquoi?

J'ai un script Perl CGI et il échoue toujours à la ligne suivante lorsqu'il est exécuté à partir du serveur HTTP Apache:

tie %db, 'MLDBM', "$data_path/$db_name.db", O_RDONLY, 0640 or die $! 

et l'erreur est Permission refusée:

Software error:

Permission denied at /var/www/cgi-bin/rich/pages/display line 381.

For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.

Mais lorsqu'il est exécuté à partir de la ligne de commande, cela fonctionne sans aucun problème.

Je me suis assuré que les répertoires et le fichier à lier ont les permissions correctes.

Alors quoi d'autre ai-je manqué? Quelles configurations dans le httpd.conf d'Apache je pourrais me tromper? Certes, je n'avais aucune expérience avec le serveur HTTP Apache, c'est donc la première fois que je joue avec. Cependant, j'ai lu les manuels plus d'une fois pour trouver des erreurs, mais je n'ai rien remarqué. Mais je peux me tromper bien sûr.

Merci!

+1

Ajouter 'die -e "$ chemin_données/$ nom_bd.db";' avant cette ligne –

Répondre

0

Avez-vous vérifié que $data_path et $db_name contiennent ce que vous pensez qu'ils font?

$data_path est un chemin absolu qui ne dépend pas de l'identité ou du répertoire personnel de l'utilisateur actif?

Que montre ls -l $data_path/$db_name.db pour la propriété et les autorisations du fichier?

Je n'ai jamais rencontré (ou entendu parler) de quelque chose dans apache qui empêcherait un processus CGI d'avoir l'autorisation d'ouvrir des fichiers, donc je doute fortement qu'il s'agisse d'un problème de configuration apache. Très probablement, il cherche le mauvais fichier ou les permissions du fichier sont incorrectes pour l'utilisateur qu'apache exécute le processus CGI.

+0

$ data_path est un chemin absolu et $ db_name.db est un fichier binaire normal. L'autorisation de fichier pour $ chemin_données/$ nom_bdd.db est '' -rwxrwxrwx ''. Comme je l'ai dit, lorsque le script est exécuté à partir de la ligne de commande '' ./display '', il n'y a aucun problème à ouvrir le fichier. J'ai même changé l'utilisateur et le groupe exécutant le serveur Apache au propriétaire du dossier, mais toujours pas de chance. – His

+0

@user: pouvez-vous ouvrir le fichier pour une lecture simple? c'est-à-dire 'ouvrir mes $ fh, '<'," $ chemin_données/$ nom_bdd.db "ou mourir" n'a pas réussi à ouvrir $ chemin_données/$ nom_bdd.db: $! ";' – Ether