12
votes

Comment puis-je ignorer le Perl Shebang sous Windows avec Apache 2?

J'ai configuré un environnement Web Perl local sur ma machine Windows. L'application que je travaille est à l'origine d'un serveur Linux, et donc le shebang pour la source .pl code>. Les fichiers sont donc suivants: xxx pré>

Ceci provoque l'erreur suivante Sur ma machine Windows Dev Machine: P>

(OS 2)The system cannot find the file specified.


4 commentaires

Beaucoup de vos questions souffrent du problème xy ( perlmonks.org/index.pl?node_id = 542341 ). Vous posez des questions sur ce que vous pensez que la solution est au lieu de poser du problème. Dans ce cas, je ne pense pas que vous avez réellement besoin d'une ligne de plate-forme de plate-forme de plate-forme, vous avez simplement besoin d'un qui fonctionne pour ActivePerl sur Windows 7 en utilisant Apache 2.


@brian génial! Merci pour le conseil. J'ai toujours su que je fasse cela et que cela réside le problème. Je vais essayer de poser des questions sur le problème dans les réponses futures au lieu de me faire déjà penser à la solution.


Eh bien, maintenant que vous avez changé la question, c'est beaucoup plus facile: vous ne mettez pas une ligne de shebang dans le script. Il n'y a aucune exigence pour qu'il soit là à moins que vous souhaitiez que le système découvre l'interprète à appeler. Cela n'a pas d'importance dans votre cas.


@brian question mise à jour.


8 Réponses :


13
votes

J'utilise #! / usr / bin / perl code> dans mes scripts et configure Apache sur Windows pour ignorer la ligne Shebang. Ajouter xxx pré>

à votre httpd.conf code> et configurez la clé de registre Windows comme expliqué dans le Apache Docs . P>

Voici ce que je reçois lorsque j'exporte la clé: P>

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]
@="c:\\opt\\perl\\bin\\perl.exe"


3 commentaires

Comme indiqué par les documents, j'ai essayé cela dans tous les contextes: Configuration du serveur, hôte virtuel, répertoire, .htaccess - mais cela ne semble pas résoudre l'erreur, que pourrais-je me tromper?


Oui j'ai redémarré. J'utilise Activeperl donc je ne sais pas, quelle clé de registre dois-je rechercher? J'utilise la directive dans httpd.conf juste en dessous de documentaireOrot (ligne de configuration par défaut 177).


Merci, j'ai ajouté la clé hkey_classes_root \ .pl \ shell \ exécutant \ commandes avec reg_sz valeur c: \ perl \ bin \ perl.exe -wt , et ça marche!



0
votes

Je n'ai pas de fenêtres à portée de main, mais PerlCritic dit: xxx

donc, je suppose #! Perl devrait fonctionner.

Edit: ne fonctionne pas sur Linux; apparemment fonctionne dans perroquet , bien que je ne voie pas comment ils gèrent cela.


1 commentaires

#! Perl ne fonctionne pas sur notre serveur Linux, mais fonctionne correctement sur ma machine de développement Windows locale. Merci quand même.



4
votes

Il n'y a pas de ligne de shebang portable. Même sur la même plate-forme et la même architecture, quelqu'un pourrait avoir installé Perl est un emplacement différent.

L'astuce consiste à ne pas installer de modules et de scripts à la main. Lorsque vous emballez tout comme des distributions et utilisez le module Toolchain, les lignes Shebang sont modifiées automatiquement pour pointer vers le Perl que vous avez utilisé pour tout installer. Vous ne devriez pas avoir à penser à ces détails. :)


2 commentaires

Je ne suis pas en mesure d'utiliser cette solution car les fichiers .pl ne sont pas exécutés sur notre serveur d'hébergement Linux partagé sans Shebang. Malheureusement, je ne suis pas en mesure de changer la configuration du serveur; J'aurais ajouté un gestionnaire Apache pour Perl si c'était le cas. En outre, il existe de nombreux scripts existants .pl sur le site qui utilisent le shebang - si j'étais plus confiant avec Perl, je changerais probablement cela, mais je ne veux pas marcher sur les orteils de personne. parler.


Eh bien, vous n'avez pas besoin d'avoir la même ligne Shebang sur les deux installations. Une installation correcte va résoudre ce problème pour vous.



1
votes

La façon dont j'ai eu ce travail était de copier Perl.exe à C: / usr / bin / et le renommer à Perl (Strip the .exe)


0 commentaires

3
votes

J'utilise # ! / USR / BIN / ENV PERL Comme Shebang sur tout mon Perl, que ce soit sur * Nix ou Windows. Windows l'ignore simplement et l'UNIXEN Suivez env au Perl Disto choisi.


0 commentaires

1
votes

dans Win7 et up Vous pouvez également le faire avec la commande "DOS" mklink.

Démarrer une coque CMD en tant qu'administrateur et faire quelque chose comme ce qui suit: xxx


0 commentaires

0
votes
  1. Installez tout em> Saveur Windows Bash (tel que Cygwin, MSYS2 ou GNUWIN32); LI>
  2. Créer un script shell redirigeant trivial: p> XXX PRE> LI>

  3. Créer une entrée de registre: P>

    ScriptInterpreterSource Registry
    
  4. Jot dans votre httpd.conf code> fichier: p> XXX PRE> LI>

    Apache va maintenant résoudre les Shebangs Unix par rapport à l'interprétation donnée par votre saveur de bash choisie. Cela donne beaucoup em> plus flexibilité que les chemins d'interprétation du code papier dans le registre. P> ol>


0 commentaires

0
votes

Comment utiliser Linux Shebang (#! / usr / bin / perl) lors de l'exécution d'un site Web basé sur Perl avec {nom du site} sur localhost dans Windows 10?

Ceci fonctionne pour moi: P>

  • XAMPP sur localhost \ {nom du site} (C: \ xampp \ htdocs \ {nom du site}) li>
  • Strawberry Perl de fraises indépendamment installé (C: \ Perl \ Perl \ bin) car Perl inclus dans l'emballage XAMPP n'est pas satisfaisant LI> ul>

    Dans la configuration par défaut, vous devez utiliser ce shebang: p> xxx pré>

    est-il possible d'inclure le répertoire (après-interrupteur) de manière permanente vers @inc? P>

    Oui, vous pouvez le faire en définissant les variables d'environnement Perllib ou Perl5Lib. Cela fonctionne lors de l'exécution du script Perl de la ligne de commande, mais il est étonnamment ignoré par Apache Server dans XAMPP. Cependant, l'un des répertoires @inc (C: / Perl / Perl / Site / Lib) est généralement vide pour que vous puissiez créer un lien symbolique sur votre répertoire de site Web: P>

    #!/usr/bin/perl
    


  • 0 commentaires