Avatar billede sjensen Nybegynder
29. juni 2007 - 12:38 Der er 5 kommentarer

Konvertering af Perlscripts

Jeg har nogle få cgi-scripts skrevet i Perl som jeg skal have konvewrteret til PHP. Er der nogen der kan hjælpe med det ?
Avatar billede lolman Nybegynder
29. juni 2007 - 13:25 #1
kan man evt. se nogle af de omtalte scripts?
Avatar billede sjensen Nybegynder
29. juni 2007 - 16:47 #2
Ja, selvfølgeligt. Her er et af dem:

#!/usr/bin/perl
####################
#
#
#####################
chdir('cgi-bin');
@pairs = split(/&/, $ENV{'QUERY_STRING'});
foreach $pair(@pairs) {
  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $input{$name} = $value;
}
print "Content-type: text/html\n\n";
$startdir = "$input{'lok'}";
$imagedir = $startdir;
$lookdir = "../web$startdir";
if ($ENV{'SERVER_SOFTWARE'} eq "Microsoft-IIS/5.0") {
$lookdir = "..$startdir";
}
$heading = $input{'title'};
$kattext = "";
$linktext = "";
open (fil,"<top.txt");
@top = <fil>;
close(fil);
foreach $i(@top) {
  print "$i\n";
}
print <<EndOfHTML;
<br><br><br>
<center>
<font size=3 color="#FF9900">$heading</font><br><br>
<table border="0" cellpadding="5">
EndOfHTML
;
opendir(DIR,$lookdir) || print "can't open $startdir\n";
@tfiler = readdir(DIR);
closedir(DIR);
@filer = sort(@tfiler);
$bibcount = 0;
$filcount = 0;
foreach $i(@filer) {
  if (($i ne ".") && ($i ne "..")) {
    if (index($i,'.') == -1) {
      if (-e "$lookdir$i.txt") {
        open(FIL,"<$lookdir$i.txt");
        $ltext = <FIL>;
        close(FIL);
        $ptext = "\&nbsp\;";
        if (-e "$lookdir$i.gif") {
          $ptext = "<a href=\"/cgi-bin/showlinks.pl?lok=$startdir$i/\&title=$ltext\&level=1\"><img border=\"0\" src=\"$imagedir$i.gif\"></a>";
        }
        $gltext = $kattext;
        if ($bibcount%2 == 0) {
          $nytext =  "<tr><td>$ptext</td><td valign=\"middle\"><a href=\"/cgi-bin/showlinks.pl?lok=$startdir$i/\&title=$ltext\&level=1\">$ltext</a></td>\n";
          $kattext = "$gltext$nytext";
        }
        else {
          $nytext =  "<td>$ptext</td><td valign=\"middle\"><a href=\"/cgi-bin/showlinks.pl?lok=$startdir$i/\&title=$ltext\&level=1\">$ltext</a></td></tr>\n";
          $kattext = "$gltext$nytext";
        }
        $bibcount++;
      } 
    }
    else {
      ($navn,$ext) = split(/\./,$i);
      if ((uc($ext) eq "JPG") || (uc($ext) eq "JPEG")) {
        if (-e "$lookdir$navn.txt") {
          open(FIL,"<$lookdir$navn.txt");
          $ltext = <FIL>;
          close(FIL);
          if ($filcount%2 == 0) {
          if (-e "$lookdir$navn\_tn.$ext") {
            $linktext = "$linktext<tr><td align=\"center\"><a href=\"/cgi-bin/showpic.pl?pic=$imagedir$i\" target=\"Midt\"><img src=\"$imagedir$navn\_tn.$ext\" border=\"0\"></a></td><td valing=\"top\"><a href=\"/cgi-bin/showpic.pl?pic=$imagedir$i\" target=\"Midt\">$ltext</a></td>\n";
          }
          else {
            $linktext = "$linktext<tr><td align=\"center\">\&nbsp\;</a></td><td valing=\"top\"><a href=\"/cgi-bin/showpic.pl?pic=$imagedir$i\" target=\"Midt\">$ltext</a></td>\n";
          }
          }
          else {
          if (-e "$lookdir$navn\_tn.$ext") {
            $linktext = "$linktext<td align=\"center\"><a href=\"/cgi-bin/showpic.pl?pic=$imagedir$i\" target=\"Midt\"><img src=\"$imagedir$navn\_tn.$ext\" border=\"0\"></a></td><td valing=\"top\"><a href=\"/cgi-bin/showpic.pl?pic=$imagedir$i\" target=\"Midt\">$ltext</a></td></tr>\n";
          }
          else {
            $linktext = "$linktext<td align=\"center\">\&nbsp\;</a></td><td valing=\"top\"><a href=\"/cgi-bin/showpic.pl?pic=$imagedir$i\" target=\"Midt\">$ltext</a></td></tr>\n";
          }

          }
         
          $filcount++;     
        }
      }
    }
  }
}
if ($bibcount%2== 1) {$kattext="$kattext<td>\&nbsp\;</td><td>\&nbsp\;</td></tr>";}
if ($filcount%2== 1) {$linktext="$linktext<td>\&nbsp\;</td><td>\&nbsp\;</td></tr>";}
print "$kattext";
print "$linktext";
print <<EndOfHTML1;
</table>
</center>
EndOfHTML1
;
open (fil,"<bottom.txt");
@bottom = <fil>;
close(fil);
foreach $i(@bottom) {
  print "$i\n";
}

Jeg har hidtil brugt Webunion.dk der accepterede Perl-scripts, men de er nu lukket og af samme årsag kan jeg ikke henvise til den side hvor de fungerede. Men kort sagt handler dette script om at læse et dir og at vise indholdet af de evt. tekstfiler det finder og at lave noget af teksten i hver fil til et link. Min side havde en funktion hvor jeg via tekstfiler kunne opbygge en liste med henvisninger (links) til andre sider, så i stedet for at skulle skrive og ændre html kode var det nok blot at tilføje en tekstfil på disken.

De øvrige scripts er stort set magen til. Dvs. at læse nogle dirs, vise indholdet af filer på skærmen og lave links ud af dele af tekst. Som f.eks. dette der er til at vise et billede når man klikker på en tekst:

#!/usr/bin/perl
####################
#
#
#####################
@pairs = split(/&/, $ENV{'QUERY_STRING'});
foreach $pair(@pairs) {
  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $input{$name} = $value;
}
print "Content-type: text/html\n\n";
chdir('cgi-bin');
$img =$input{'pic'};
print <<EndOfHTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<LINK rel="stylesheet" type="text/css" href="/css/std.css">
</HEAD>
<BODY onload="document.fo.backbutton.style.visibility='visible'; document.all['tempdiv'].style.visibility='hidden';">
<center>
<div id="tempdiv" style="top:100px;width:200px;border:#33cc33 thin dotted">Loading image, please wait ...</div>
<img src="$img"><br><br>
<form name="fo"><input type="button" value="Back" onCLick="history.go(-1)" style="color: #33CC33; font-weight:900; background-color:#000000;visibility:hidden" name="backbutton"></form>
</center>
</body>
</html>
EndOfHTML
;

Totalt er der 6-7 scripts som disse, men hvis jeg kan få hjælp til disse 2 kan jeg formentligt selv rette resten fordi de langt hen ad vejen er ens.
Avatar billede lolman Nybegynder
03. juli 2007 - 21:32 #3
dvs. at du ikke bruger nogen form får datebase, hvilket egentlig, vist nok, også kan ses via dine scripts.

For lige at være sikker på at jeg har fået det hele med så gør dine scripts følg:
- Åbner en mappe
- Laver links til alt i mappen; Ud fra filens navn?
- Mapperne indeholder billeder og du vil derfor have at de skal vises.
- Konklution: En form for en billede fremvisningsside du har haft?

øøhhmm.. Hvis det jeg har skrevet ovenover passer så kan du kigge på følgende funktioner: (Jeg kan også skrive en hel kode til dig, men med egen arfaring mener jeg at det er bedst at få henvisningere til steder hvor der er eksempler)
- http://php.net/opendir // Åbner en mappe
- http://php.net/closedir // Lukker en mappe
- http://php.net/fopen // Åbner en fil
- http://php.net/fclose // Lukker en fil
- http://php.net/fwread // Læs  en fil
- http://php.net/fwrite // Skriv i en fil


Bare skriv hvis der er noget... Har derværre ikke super meget tid for tiden, men kan da prøve at hjælpe dig. :)
Avatar billede lolman Nybegynder
03. juli 2007 - 21:38 #4
evt kan du også lige se på funktionen explode der gør det sammen som perls split (tror jeg)
Et lille eksempel på funktionen explode
---
<?
$sti = "/usr/bin/perl";
$splittedeStier = explode("/",$sti);
?>
"$splittedeStier" er nu blevet lavet til en array der indeholder:

usr,bin,perl

for at hente disse disse værdier ud fra arrayen gøres dette
---
<?
echo $splittedeStier[0]; // echo = udskriver en tekst (man kan også bruge print mm.), 0 = usr, 1 = bin & 2 = perl
?>
Avatar billede sjensen Nybegynder
04. juli 2007 - 12:09 #5
Ja, det er rigtigt. Jeg har ikke brug for en database og det er et script til at fremvise billeder. Dvs først gennemsøges diret og evt. thumpnails vises med en supplerende tekst og ved klik på billedet kaldes showpic scriptet og billedet vises. Hvis billedet i stedet er navnet på et subdir, åbnes det og evt. thumpnails i subdir vises. Hvis det er navnet på et "moder" dir vises indholdet af det. Dvs. samme script tillader surferen at skifte op og ned i dirs som på en harddisk. På den måde kan jeg vedligeholde alle billeder (næsten) som at vedligeholde en dir med subdirs. Der er ikke behov for html eller lign. for at tilføje billeder eller når/hvis nogen skal fjernes.

Med det du har henvist til er der stor mulighed for at jeg kan ændre mine scriots selv, så det vil jeg lige prøve. Men jeg skal dog først have flyttet sitet til en ny provider. Det virker ikke hos webunion.dk mere. Jeg melder tilbage på et senere tidspunkt. Tak for det foreløbigt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester