[PHP-users 2839] Re: Perl と PHP
segawa
php-users@php.gr.jp
Thu, 18 Oct 2001 15:00:55 +0900
はじめまして
せがわ と申します。
> ですが、いったいどのくらいパフォーマンスが違うのか
> という事ははっきりわかっておりません。
> 言語には得意な分野や不得意な分野があると思うので
> 簡単にPerlとPHPを比べる事なんてできないと思うのですが
>
私もはじめ似たような疑問で
perl+dbi cgi動作とphp4.0.4+zend optimizer+jstringで
oracle D/Bアクセス+html表示をした事があります。
その時のソースは以下です。
たぶん、その道のプロの方が見ればそのコードじゃ比較にならんやろ!
とお叱りをうけそうですが、しろーとが適当に書くと(使う自分が書くと)
こんなんかということで、ベンチじゃなくて、参考までに
oracleインストール時のemp表(小さなサンプルテーブル)
をオープン、全件表示、クローズを100回
で結果は
perl 7sec程度
php4 2sec程度
だったんでD/B連携するなら
圧倒的にPHP4が有利!
とゆう事でPHP4にしました。
環境は
H/W pentum3-733MHz、512Mbyte-mem、
O/S Miracle linux SEV1.0
D/B Oracle8.1.6
でした。
----------
<HTML><HEAD><TITLE>PhP系</TITLE></HEAD>
<BODY><p>select * from emp<BR>
<TABLE border="1">
<?php
print("<TR><TD>");
system("date");
print("</TR></TD>");
for($i=0;$i<100;$i++) {
$conn = OCILogon("scott", "tiger", "o816");
$sql = "select * from emp";
$cur = OCIParse($conn, $sql);
$ncols = OCIExecute($cur, OCI_DEFAULT);
$cnt = 0;
While (OCIFetch($cur)) {
$empno = OCIResult($cur, "EMPNO"); $ename = OCIResult($cur, "ENAME");
$job = OCIResult($cur, "JOB"); $mgr = OCIResult($cur, "MGR");
$hiredate = OCIResult($cur, "HIREDATE"); $sal = OCIResult($cur, "SAL");
$comm = OCIResult($cur, "COMM"); $deptno = OCIResult($cur, "DEPTNO");
$cnt++;
if ($cnt == 1) {
echo "<TR>\n"; echo "<TH>EMPNO</TH>\n"; echo "<TH>ENAME</TH>\n";
echo "<TH>JOB</TH>\n"; echo "<TH>MGR</TH>\n"; echo "<TH>HIREDATE</TH>\n";
echo "<TH>SAL</TH>\n"; echo "<TH>COMM</TH>\n"; echo "<TH>DEPTNO</TH>\n"; echo "</TR>\n";
}
echo "<TR>\n"; echo "<TD>".$empno."</TD>\n";
echo "<TD>".$ename."</TD>\n"; echo "<TD>".$job."</TD>\n";
echo "<TD>".$mgr."</TD>\n"; echo "<TD>".$hiredate."</TD>\n";
echo "<TD>".$sal."</TD>\n"; echo "<TD>".$comm."</TD>\n";
echo "<TD>".$deptno."</TD>\n"; echo "</TR>\n";
}
OCILogoff($conn);
}
print("<TR><TD>");
system("date");
print("</TR></TD>");
?>
</TABLE><BR></BODY></HTML>
-------------
#!/usr/bin/perl
use DBI;
# $|=1;
$ENV{'ORACLE_HOME'}='/u01/app/oracle/product/8.1.6';
$ENV{'NLS_LANG'}='Japanese_Japan.JA16EUC';
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>perl調査-正常系</TITLE></HEAD>";
print " <BODY><p>select * from empの結果<BR>";
print "<TABLE border=1>";
print "<TR><TD>";
open(IN,"date|");
$dat=<IN>;
print "$dat";
close(IN);
print "</TR></TD>";
for($iii=0;$iii<=100;$iii++) {
$dbh=DBI->connect("dbi:Oracle:o816",'scott','tiger')
||die"can't connect D/B";
$sql="select * from emp";
$sth=$dbh->prepare($sql);
$rc=$sth->execute ||die"Can't prepare :$DBI::errstr";
print "<TR>\n";
print "<TH>EMPNO</TH>\n";
print "<TH>ENAME</TH>\n";
print "<TH>JOB</TH>\n";
print "<TH>MGR</TH>\n";
print "<TH>HIREDATE</TH>\n";
print "<TH>SAL</TH>\n";
print "<TH>COMM</TH>\n";
print "<TH>DEPTNO</TH>\n";
print "</TR>\n";
@item=();
while(@item =$sth->fetchrow_array) {
print "<TR>\n";
for($j=0;$j<$#item;$j++) {
print "<TD>$item[$j]</TD>\n";
}
print "</TR>\n";
}
$dbh->disconnect;
wait;
}
print "<TR><TD>";
open(IN,"date|");
$dat=<IN>;
print "$dat";
close(IN);
print "</TR></TD>";
print "</TABLE></BODY></HTML>";
----------------------
以上