[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>";
----------------------
以上