WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 24.05.2002, 22:17   #1
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Blinzeln Flamebait: Perl oder PHP ?

Nachdem von mir immer mehr PHP gefordert wird, bin ich heute wieder über was gestolpert, was mich an PHP mehr als zweifeln ließ.

Ein Script, dass die Files eines Verzeichnisses ausliest und ausgibt, schaut in Perl z.B. so aus:
Code:
#!/usr/bin/perl
use strict;
print "Content-type: text/html\n\n\n";

my $dir = '../htdocs/ate/data';
opendir(DIR, $dir) || die "can't opendir $dir: $!";
my @files = grep { /\.txt/ } readdir(DIR);
closedir DIR;

foreach (@files) {
    print "$_
\n";
}
In PHP hab ich das so gemacht:
Code:
<?php
$datadir = "data";
$handle = opendir($datadir);
if($handle == "") {
	exit("Konte Verzeichnis $datadir nicht lesen!\n");
}
 
$files = array();
while (false !== ($file = readdir ($handle))) {
//	if ( strlen($file) > 4 && strpos($file, ".txt", strlen($file)-4 ) ) { // Ohne RegEx
if( preg_match( "/\.txt/", $file) ) {	// Mit RegEx
	array_push ($files, "$datadir/$file");
}
closedir($handle);

foreach ($files as $file) {
	echo "$file
\n";
}

?>
Ich mein, viel umständlicher als in PHP gehts nicht mehr. Abgesehn davon, dass nirgends dokumentiert ist, wie man einen ungültigen Handle abfragt.
Wo sind die PHP-Gurus? Geht das nicht eleganter?
Ich bin von PHP (wieder einmal) schwer enttäuscht.
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 25.05.2002, 00:34   #2
sagi
Elite
 
Registriert seit: 08.11.2001
Alter: 42
Beiträge: 1.285


Standard

Tja es ist natürlich eine Frage der Anforderungen. Ich finde, dass es praktisch unmöglich ist, Perl in eine grafisch aufwendige Site einzubauen, da der gesamte Quelltext vom Script ausgegeben werden muss und dadurch mit keinem WYSIWYG Editor mehr bearbeitet werden kann.

PHP rulez

mfg

c.
____________________________________
www.sagmueller.net

Freedom - use it or lose it (Lawrence Lessig)

Im übrigen bin ich der Meinung, dass Microsoft zerschlagen werden muss.
sagi ist offline   Mit Zitat antworten
Alt 25.05.2002, 09:15   #3
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Perl kann mehr als PHP - allein schon deswegen, weil es vor dem Web entstand. Kommandozeile, GUI (mit TK), Web, einbetten in Applikationen, ........
Wenn schon Vergleiche auf Webebene, dann z.B. Mason vs. PHP. Und dagegen schaut PHP IMNSHO ganz schön alt aus
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 25.05.2002, 12:01   #4
Philipp
verXENt
 
Benutzerbild von Philipp
 
Registriert seit: 01.08.1999
Beiträge: 7.084

Mein Computer

Standard

Zitat:
Perl kann mehr als PHP - allein schon deswegen, weil es vor dem Web entstand.
Genau das ist der Unterschied. Perl wurde nie speziell für Webapplikationen entwickelt, PHP dagegen schon . Es bietet auch eine Reihe von Features an die bei Perl nur relativ umständlich möglich sind.

Ausserdem sind die meisten Perl Scripts wesentlich Ressourcenhungriger (CPU Auslastung von 100% ist bei Hochlast keine Seltenheit) als das PHP Gegenstück. Das liegt aber größtenteils daran das Perl auf den meisten Servern als CGI läuft bzw. auch viele Scripts nicht unter mod_perl funktionsfähig sind.

Während Perl mittels mod_perl in die Geschwindichkeitsregion von PHP kommt, kann man PHP mit PHP Accelerator weiter beschleunigen.

Bestes Beispiel: http://www.majorgeeks.com/article.php?sid=99

Dieser Mirror von 3D Mark 2001 SE hatte in den ersten beiden Tagen ca. 250000 Downloads, wobei der MajorGeeks Webserver (Cobalt RaQ3 AMD K6/2-300MHz mit 512MB Ram) knapp eine 1 Million Pageviews hatte.

Glaubst du das man mittels einer dynamisch generierten Perl Seite wirklich mehr aus dem Webserver hätte herausholen können? Ich glaube es nicht.

Ich habe mir dein PHP Script kurz angesehen und da sind mir zwei Sachen sofort aufgefallen:

PHP-Code:
$handle opendir($datadir);
if(
$handle == "") {
    exit(
"Konte Verzeichnis $datadir nicht lesen!\n");

Bei $handle = opendir($datadir); wird trotzdem eine Fehlermeldung von PHP ausgegeben. Diese kann mittels @opendir($datadir); unterdrückt werden.

if($handle == "") kann auch kürzer geschrieben werden: if (!$handle) bewerkt das gleiche.

Am schnellsten ist aber nach wie vor:
PHP-Code:
$handle opendir($datadir) or die("Konnte Verzeichnis $datadir nicht lesen!"); 
In dieser Zeile:
PHP-Code:
while (false !== ($file readdir ($handle))) { 
ist das false !== ( ... ) unnötig.
Philipp ist offline   Mit Zitat antworten
Alt 25.05.2002, 13:01   #5
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

<?
$directory = "datadir";

$dir = @opendir($directory) or die ("not found");

while ($file = readdir ($dir))
{
if (substr ($file, strlen($file)-4, 4) == ".txt")
echo $file."
\n";

}
closedir ($dir);

?>

so würd ich das auf die schnelle lösen, wobei ich beim substr vielleicht doch noch mal überlegen würd, was am schnellsten geht, das müsst ich mir noch anschauen.
aber prinzipiell ist dass dann auch nicht komplizierter als das perl script

gibts eigentlich einen besondern grund, warum du zuerst in ein array schreibst, und dann das array erst ausgibts?
wieso nicht gleich ausgeben?


wennst wirklich alle files (nicht nur alle textfiles) auslesen willst, schreibst einfach statt dem substr-topfen
if (is_file($file))
hin


zu der frage was besser ist
ich kann von mir sagen, dass ich php code weitaus einfacher lesen kann als perl-code
grund dafür ist, dass php weitaus mehr ähnlichkeit zu c und java hat, in denen ich schon vorher programmiert hab, als perl

sprich ein c-programmierer wird sich glaub ich mit php weitaus einfacher tun als mit perl.
Who-T ist offline   Mit Zitat antworten
Alt 25.05.2002, 17:12   #6
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Zitat:
Original geschrieben von Philipp
Es bietet auch eine Reihe von Features an die bei Perl nur relativ umständlich möglich sind.
Welche? Mir sind schon Sachen untergekommen, die Perl hatte, aber PHP nicht, aber ned umgekehrt.

Zitat:

Während Perl mittels mod_perl in die Geschwindichkeitsregion von PHP kommt, kann man PHP mit PHP Accelerator weiter beschleunigen.
Das würde ich nicht so stehen lassen, aber das könnte man ja mal in einem WCM-Artikel genauer betrachten

Zitat:

Ich habe mir dein PHP Script kurz angesehen und da sind mir zwei Sachen sofort aufgefallen:
...
Bei $handle = opendir($datadir); wird trotzdem eine Fehlermeldung von PHP ausgegeben. Diese kann mittels @opendir($datadir); unterdrückt werden.
Das ist mir schon klar, nur wenn ich den Fehler überhaupt nicht abfange, verhält sich das Script überhaupt total verrückt unsc schiebt die Fehlermeldung zig mal.
Ach ja - danke für's ansehen.

Zitat:

if($handle == "") kann auch kürzer geschrieben werden: if (!$handle) bewerkt das gleiche.

Am schnellsten ist aber nach wie vor:
PHP-Code:
$handle opendir($datadir) or die("Konnte Verzeichnis $datadir nicht lesen!"); 
Und warum steht das nicht in der Doku? Keine einizoge Zeile zur Fehlerbehandlung bnei der Beschreibung der Funktion

Danke für's Feedback, wieder was gelernt
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 25.05.2002, 17:20   #7
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Zitat:
Original geschrieben von Who-T
PHP-Code:
if (substr ($filestrlen($file)-44) == ".txt"
so würd ich das auf die schnelle lösen, wobei ich beim substr vielleicht doch noch mal überlegen würd, was am schnellsten geht, das müsst ich mir noch anschauen.
Da hast Du aber das Problem, dass Du bei den Fileeinträgen "." und ".." eine Fehlermeldung bekommst Hatte ich zuerst auch
Zitat:
gibts eigentlich einen besondern grund, warum du zuerst in ein array schreibst, und dann das array erst ausgibts?
wieso nicht gleich ausgeben?
War ein Teil eines größeren Scripts, wo ich mit dem Array nacher noch was gemacht habe.

Zitat:

zu der frage was besser ist
ich kann von mir sagen, dass ich php code weitaus einfacher lesen kann als perl-code
grund dafür ist, dass php weitaus mehr ähnlichkeit zu c und java hat, in denen ich schon vorher programmiert hab, als perl
sprich ein c-programmierer wird sich glaub ich mit php weitaus einfacher tun als mit perl.
Veto! Ich kann Perl auch wie C-Code schreiben, die Sprachen sind sich ähnlich (http://quong.best.vwh.net/perlin20/#LtohTOCentry-8). Also das mit dem Lesen ist IMHO kein Argument, das ist reine Gewohnheitssache. Aber mit fehlen einfach ein paar Konstrukte/Funktionalitäten, die PHP gegenüber Perl nicht hat.

Z.B.:
Es gibt in PHP eine Funktion, um ein File in ein Array zu lesen - Fein.
Es gibt auch einen Funktion, um eine Zeile in einen String zu lesen. Da muss ich aber wissen, wie lang der String wird - des is doch a Schass, oder?
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 25.05.2002, 17:35   #8
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

stimmt
bei . und .. gibts probleme, auf die hab ich vergessen

die behandelt ich normal mit
if ($file == "." || $file ="..")

weil die meistens andere funktionen bekommen und daher gesonderte ausgabe benötigen.



das mit dem lesen ist gewohnheitssache, nur trau ich mir zu sagen, dass wenn ich von c komm, auf anhieb ein php-script eher versteh als ein perl-script
zumindest wars bei mir so.

was heißt eigentlich das "my" in perl?



falls du mit der zeile einlesen "fgets" meinst, stimmt das nur zum teil
denn ich kann bei fgets ($filehandler, 100000); mitgeben und das liest mir dann die ersten 100 kB aus (ja, ich weiß, sind nicht genau 100kB);

wenn vorher ein linebreak oder eof kommt, passts auch, weil dann wird nur bis zum ende der zeile/des files gelesen.

das problem war in meinen scripts bis jetzt immmer nur sehr bedingt vorhanden, weil ich selten über diese längen hinausgekommen bin.

aber ich weiß was du meinst, das problem selbst ist da, wie oft es relevant wird, hängt halt wieder von der art des scripts ab.
Who-T ist offline   Mit Zitat antworten
Alt 25.05.2002, 17:54   #9
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Wie gesagt, dass mit dem Lesen ist IMHO Ansichtssache

Das mit dem eine Zeile einlesen kommt bei mir öfter - und ich hatte schon LANGE Zeilen

Mit "My " deklariest Du eine Variable. Wenn Du "use strict" am Anfang eines Scripts angibst, musst Du eine Variable deklarieren, bevor Du sie verwendest. Sehr praktisch, da dadurch bereits zur Kompilierzeit viele Fehler gefunden werden.
Weiters beschrängt ein my die Gültigkeit der Variablen auf den aktuellen Block (File bzw. {}).
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 25.05.2002, 21:41   #10
Philipp
verXENt
 
Benutzerbild von Philipp
 
Registriert seit: 01.08.1999
Beiträge: 7.084

Mein Computer

Standard

Zitat:
Welche? Mir sind schon Sachen untergekommen, die Perl hatte, aber PHP nicht, aber ned umgekehrt.
z.B. die ganzen Buffering Features die auch die Möglichkeit bieten Seiten mittels gzip zu komprimieren. Selbst die einfachsten Dinge wie MD5 Verschlüsslung sind bei Perl wesentlich komplizierter.

Zitat:
Das würde ich nicht so stehen lassen, aber das könnte man ja mal in einem WCM-Artikel genauer betrachten
Dann probiere es doch selber:
http://forums.ikonboard.com (mod_perl)
http://www.invisionboard.com/forums/ (PHP ohne PHP Accelerator)

Was ist schneller?
Philipp ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:14 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag