2010-04-14 3 views
-5

J'ai deux pages en php (index.php) et une autre en Perl (dbcon.pl).comment inclure le fichier .pl (PERL) en PHP

fondamentalement je veux que mon dossier de php montre seulement l'interface utilisateur et toutes les opérations de données seraient faites dans le dossier de Perl.

j'ai essayé dans index.pl

<?php include("dbcon.pl");?> 
<html> 
<br/>PHP</br> 
</html> 

et dbcon.pl a

#!/usr/bin/perl 
use strict; 
use warnings; 
use DBI; 

use CGI::Simple; 
my $cgi = CGI::Simple->new; 
my $dsn = sprintf('DBI:mysql:database=%s;host=%s','dbname','localhost'); 

my $dbh = DBI->connect($dsn,root =>'',{AutoCommit => 0,RaisError=> 0}); 


my $sql= "SELECT * FROM products"; 
my $sth =$dbh->prepare($sql); 
$sth->execute or die "SQL Error: $DBI::errstr\n"; 
while (my @row = $sth->fetchrow_array){ 
print $cgi->header, <<html; 
<div>&nbsp;@row[0]&nbsp;@row[1]&nbsp;@row[2]&nbsp;@row[3]&nbsp;@row[4]</div> 
html 
} 

mais quand je lance index.php dans le navigateur il imprime tout le code dans le fichier dbcon.pl au lieu de l'exécuter

comment résoudre ce problème?

Note: je cours dans Windows environnement

est-il une autre façon de le faire?

+11

Vous devriez vraiment comprendre les principes de base des outils que vous utilisez, avant de les utiliser. Je ne veux pas être impoli, mais cette question crie presque "Je ne sais pas comment les langues interprétées fonctionnent", donc bien que vous puissiez suivre certaines des réponses ci-dessous (elles sont assez bonnes), vous rencontrerez des problèmes beaucoup plus le futur proche. –

+0

Je vais garder cela à l'esprit, merci – dexter

+1

Je suis désolé de paraître grossier, aussi, mais vous semblez vraiment déterminé à ce que vous avez décidé d'utiliser, et obstinément refuser de le faire d'une manière différente. À mon avis, il n'y a absolument aucune raison d'utiliser Perl et PHP dans un mélange si étrange et vous ne semblez pas capable d'articuler le motif * réel pour passer votre chemin, à part des déclarations vagues comme "je dois vraiment le faire de cette façon seulement". –

Répondre

2

Ce que vous essayez n'est pas possible que facile. Vous devrez exécuter le script perl avec PHP, capturer la sortie et l'imprimer comme:

<?php echo exec('perl dbcon.pl'); ?> 

Comme mentionné ce n'est pas une bonne chose à faire. Pour une bonne séparation entre le backend et l'interface utilisateur, vous devriez jeter un oeil aux frameworks PHP existants.

+1

Pas une solution que je recommanderais du tout. – jamiei

+1

Oui, ce n'est pas le cas. Mais c'est ce qu'il voulait faire. – Daff

+0

puis-je savoir pourquoi ce n'est pas recommandé – dexter

5

Puis-je demander quel est vraiment le problème? Je ne vois rien dans le code Perl « spécial », de sorte que vous soit:

a) Je ne sais pas comment accéder à votre base de données à partir de PHP (vous ne savez pas PHP) ou

b) Vous ne savez pas ce que fait Perl (ie vous ne connaissez pas Perl) ou

c) votre environnement est peut-être configuré de sorte que vous puissiez utiliser Perl DBI mais vous ne pouvez pas faire de même avec PHP.

Ce link vous devez donner des indications à faire ce que vous faites en Perl directement à partir de PHP. Vous trouverez facilement des dizaines d'exemples pour différentes combinaisons PHP/DB. La seule autre manière serait de faire ce qu'une autre affiche suggère: invoquer le script Perl et analyser le résultat (imprimé à standard). Ceci est irritant, fragile et inacceptable comme solution, sauf si vous êtes absolument désespéré d'utiliser quelque chose qui est disponible uniquement en tant que module Perl (ce qui n'est pas le cas de l'exemple que vous avez posté). En général, si vous voulez faire quelque chose dans une langue et l'utiliser dans une autre langue, le meilleur moyen serait de faire fonctionner (dans votre cas) Perl comme une sorte de "serveur", c'est-à-dire un processus séparé - et lui faire exposer des services en utilisant XML-RPC ou un autre protocole léger.

INVOQUER DES PROGRAMMES AVEC DES EXCELLENTS EXECUTIONS() OU DES CONSTRUCTIONS SIMILAIRES EST EXTREMEMENT MAUVAIS PRATIQUE.

+0

merci pour la réponse, je sais comment l'accès DB forme à la fois PHP et PERL, ma principale préoccupation est d'appeler (ou exécuter) fichier perl de php parce que je pensais faire toutes les opérations back-end en Perl et UI serait en PHP. merci encore – dexter

+2

Non, il n'y a pas de séparation. Votre script Perl génère toujours des éléments d'interface utilisateur. Vous devriez vraiment jeter un oeil à tous les frameworks PHP pour la séparation que vous voulez faire. – Daff

+1

"Je pensais faire toutes les opérations back-end dans Perl" est un peu faible à moins que vous ne vouliez tirer parti de quelque chose qui n'est pas disponible en PHP. Si c'est le cas, optez pour la solution "Serveur". Utiliser Exec() sera horriblement lent, inefficace et fragile. –

2

Il y a Perl PECL package pour intégrer Perl dans PHP.

P.S.À mon humble avis, il est préférable d'utiliser un système de modèle comme Template Toolkit en Perl. Vous pouvez même utiliser Perl dans les modèles.