coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

Windowsに PHP 5.2.9-1 をインストールする。

2009-03-20 00:03:19 | php
前回PHPについては終りにすると言ったのですが、2009-3-10に PHP 5.2.9-1 が出ました。5.2.9 が2009-02-26に出たばっかりなので、セキュリティ上の修正です。

一応インストールしておきます。今回は、すでにインストールしてあるPHPを、アップデートする場合になります。

ダウンロードするのは、
php-5.2.9-1-win32.installer.msi 17,719,296 bytes

  ( md5: 5006e3ba05dee5a65a56d6f052e62a72 
  
    # md5sum php-5.2.9-1-win32-installer.msi
    5006e3ba05dee5a65a56d6f052e62a72  /mnt/php-5.2.9-1-win32-installer.msi  )

です。

早速これを実行します。今回は、インストール時にメモを取ったので少し詳しく報告します。

「PHP 5.2.9-1 Setup」ウィンドウが開き、「Next」をクリックします。

「End-User License Agreement」ウィンドウで、これを受け入れて、「Next」をクリックします。

「Destination Folder」ウィンドウで、インストール先のホルダー名を指定します。
ここでは、デフォルトの C:\Program Files\PHP\ です。指定したら、「Next」をクリックします。

「Web Server Setup」ウィンドウは、今まで通り [Do not setup a web server] にしました。Apache も IIS もありますね。指定したら、「Next」をクリックします。

「Choose Items to Install」ウィンドウで、前回の失敗を教訓にデータベース関係をインストールしないようにします。[Extensions]をクリックして、各機能が展開されたら、ひとつづつ調べていきます。いらないものは、クリックして、メニューから
[Entire feature will be unavailable] をクリックすればバツ印に変わります。
今回は、

DBA
dBase
mSQL
MSSQL
MySQL
Oracle(8)
PostgreSQL
Pspell
SQLite
Sybase

を除外しました。

[Extras] は、[PEAR Install] だけ、[Will be installed on local hard disk]をクリックしてインストールすることにしました。準備ができたので、「Next」をクリックします。

「Ready to install PHP 5.2.9-1」ウィンドウで、「Install」をクリックします。

「Installing PHP 5.2.9-1」ウィンドウで、インストールが始まります。

「PHP 5.2.9-1 Setup」ウィンドウで、[Completed the PHP 5.2.9-1 Setup Wizard] と表示されたら、「Finish」をクリックしてインストール完了です。

しかし、これでも、

php_pdo_oci.dll
php_pdo_oci8.dll
php_pdo_pgsql.dll
php_pdo_sqlite_external.dll

がエラーとなりました。しょうがないので、C:\Program Files\PHP\php.ini の該当するextension 行を削除しました。これがインストール時に、いったいどれに該当しているのか調べきれませんでした。

古いバージョンのPHPに上書きしたわけですが、.php 拡張子に対して実行されるプログラムの指定も含めて特に問題はないようです。

ところで、phpファイルを右クリックして「プログラムから開く」で表示される、CLIですが、command-line interface のことらしいです。なぜ、php と表示されないのでしょうか?しかも、php.exe と php-win.exeが同じように表示されて紛らわしいのが困った点でした。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPで、ソケット通信(UDP)をする。その2(複数のPCからAQUOSを制御する。)

2009-03-15 00:10:16 | php
前回、UDP通信のための用意ができたので、この間作った PHP プログラムを修正しました。remote-c.php を、remote-c-server.php と remote-c-client.php に分けます。

サーバ側 remote-c-server.php は以下のとおりです。ここで、
シリアルポートの名前は   COM2 、
サーバのIPアドレスは     192.168.1.216 、
ポート番号を             11223 、

としました。
<?php
 //
 // remote-c-server.php
 // Written by Espiya 2009-03-11
 // http://blog.goo.ne.jp/espiya
 //

 error_reporting(E_ALL | E_STRICT);

 $str = ser_version();
 echo "Version: $str";
 echo "\n";

 echo "Open port";
 ser_open('COM2', 9600, 8, 'None', 1, 'None');
 echo "\n";

 $str = ser_isopen();
 echo "Port: $str";
 sleep(1); 
 echo "\n";

 $str = ser_read(128);
 echo $str;
 sleep(1);
 echo "\n";

 echo "Ready\n";

 $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
 socket_bind($socket, '192.168.1.216', 11223);
 $from = "";
 $port = 0;

 $b_part = 0; 
 $comline = "null";
  while ( ($rec_len = socket_recvfrom($socket, $line, 8, 0, $from, $port )) == 8 ) {  
    if ($line != "null    ") {
       $comline = $line."\r";
    } else {
       break;
    }
    echo "$line\n";
    ser_write($comline);
    sleep(1); 
    echo "Answer\n";
    $str = ser_read(128);
    echo "$str";
    echo "\n";

    $a_part  = "null";
    $b_part  =  0;
    $comline = "null";
 }
 socket_close($socket); 
 echo "Close port";
 ser_close();
?>

このプログラムの終了は、クライアントから行うのが欠点です。また、セキュリティ的な考慮を全くしていませんので、このプログラムの動く PC にネットワーク的にUDPパケットが送れるコンピュータなら、我が家の AQUOS が制御できてしまいますね。

一応、ブロードバンドルータを使っているので、現状ではインターネットから制御はできません。

一方、クライアントの方 remote-c-client.php は、次のようになります。remote-c.phpを少し直しただけです。
<?php
 //
 // remote-c-client.php
 // Written by Espiya 2009-03-11
 // http://blog.goo.ne.jp/espiya
 //

 $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

 echo "\n";

 echo "Enter command\n";
 
 $b_part = 0; 
 $comline = "null";
  while ( ($line = trim(fgets(STDIN)) ) != "end" ) {  
    sscanf($line, "%s %d", $a_part, $b_part);
    // echo "A part: $a_part \n";
    // echo "B part: $b_part \n";
    if ( $b_part >= 0 && $b_part < 1000) {
      $data = sprintf("% -4d",$b_part);
      switch ($a_part) {
        case "off":
        case "power":
        case "p":
          if ( $b_part <=1 ) {
            $comline = "POWR0   ";
          }
          break;
        case "on":
          $comline = "POWR1   ";
          break;
        case "volume":
        case "vol":
        case "v":
          if ( $b_part > 0 && $b_part < 31 ) {
            $comline = "VOLM$data";
          } else {
            $comline = "VOLM????";
          }
          break;
        case "video":
          $comline = "IAVD5   ";
          break;
        case "tv";
          $comline = "ITVD0   ";
          break;
        case "ch":
          $comline = "CAIR$data";
          break;
        case "dch":
          switch ($b_part) {
            case 1 :
              $data = "11  ";
              break;
            case 3 :
              $data = "21  ";
              break;
            case 4 : 
              $data = "41  ";
              break;
            case 6 :
              $data = "61  ";
              break;
            case 8 :
              $data = "81  ";
              break;
            case 10 :
              $data = "51  ";
              break;
            case 12 :
              $data = "71  ";
              break;
          }
          $comline = "CTBD$data";
          break;
        case "digital":
          $comline = "IDEG0   ";
           break;
        case "mute":
          $comline = "MUTE0   ";
          break;
        case "stop":
          $comline = "null    ";
          break;
        case "help":
        case "h" :
        case "menu":
          echo "Command list(nn は数字)\n";
          echo "  on      : 電源を入れる。( power 1 も可 )\n";
          echo "  off     : 電源を切る。 ( power 0 も可 )\n";
          echo "  vol nn: ボリューム( 0から30まで、v も可 )\n";
          echo "  ch  nn:チャンネル( アナログにする )\n";
          echo "  dch nn:チャンネル( デジタルにする )\n";
          echo "  video  :ビデオにする。\n";
          echo "  tv   :テレビにする。\n";
          echo "  mute  :消音(トグルスィッチ)\n";
          echo "  help  :このヘルプ( menu も可 )\n";
          echo "  end   :プログラムを終了する。\n";
          echo "  stop  :サーバを停止して終了する。\n";
          break;
      }
    }

    if ($comline != "null") {
      socket_sendto($sock,$comline, 8, 0, '192.168.1.216', 11223);
      if ($a_part == "stop") {
        break;
      }
    }
    echo "\n";

    $a_part  = "null";
    $b_part  =  0;
    $comline = "null";
 }
 
 echo "\n";
 echo "Close socket";
 socket_close($sock);
?>

これでようやく PHP で、AQUOSテレビのリモコンができました。どの PC からも AQUOS が制御できてすごく便利です。(本人だけ)

PHPですから、coLinux の Apache を使って、適当にプログラムを組めば、Webページからテレビの制御ができますね。その場合は、ソケットを create したままにするか、毎回 create するかの考察が必要です。socket_close が処理が遅いような気がしますが、気のせいかもしれません。

また、PHP もスクリプト言語として、コマンドにも立派に利用できました。ちょっと使った感じですが、大体のことはプログラムできてしまうのではないでしょうか。しかもかなりお気楽に作れますね。Web用のプログラミング言語とか、httpサーバ上で動くとか決め付けるのは、正しくないことだけは良く分かりました。

長いこと PHP を見てきましたが、シリアルポートとUDP通信も扱えることができました。今回で一応終わりです。ちょっとマイナーな話題でしたね。

それにしても、goo のブログ編集画面ですが、投稿後修正しようとすると、< , > , & , " , \ などの文字が消えてしまうので今回の投稿のようなプログラムを書くと、修正が非常に困難になってしまいます。多少の間違いはご容赦ください。一番良さそうなのは、コメントにて指摘していただき、そのうち修正するということですが。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPで、ソケット通信(UDP)をする。その1

2009-03-14 00:53:45 | php
前回までで、PHP でシリアルポートを使った、AQUOS用のリモコンができましたが、LANにつながっている別のコンピュータからも操作したくなりました。

そこで、ソケット通信を使ってみたいと思います。

この通信は送りつけるだけなので、UDP にしました。

ソケット通信メモ http://www.ne.jp/asahi/hishidama/home/tech/socket/index.htmlなどを参考にすると、UDP通信は、
  クライアント  サーバ
  socket        socket
                bind
                recvfrom (ここで、受信待ちになる)
  sendto                 (データを送信する)
  close	        close

の手順で行います。

さて、UDP通信の手順がわかったところで、具体的に PHP でどのような関数を使うのでしょうか。

PHP: PHP マニュアル - Manual http://www.php.net/manual/jp/で目次を見たところ、それらしいものはないようですが、「関数リファレンス」-> 「その他のサービス」-> 「ソケット」にありました。

この機能は、標準で準備されていますね。ただし、Windows では、

php_sockets.dll

を利用し、coLinux 等で、PHPをコンパイルしてインストールする場合は、

configure にオプション --enable-sockets を指定することにより使用可能になります

ので、注意が必要です。

マニュアルによると、create (上の手順で、socket にあたるもの)して得られるソケットを「ソケットリソース」と呼ぶようです。このソケットリソースを使って、データの送信や受信をするわけです。

先ほどの手順に、対応する PHP の関数を当てはめると、
  クライアント	   サーバ
  socket_create	   socket_create
                   socket_bind
                   socket_recvfrom
  socket_sendto
  socket_close     socket_close

になります。マニュアルを見ながら、各関数について調べていきたいと思います。

最初は、socket ソケットの生成です。今回の通信は、UDP なので、
  $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

です。$socket が、生成されたソケットリソースですね。

bind は、
  socket_bind($socket, IPアドレス, ポート番号);

と、サーバのIPアドレスを、127.0.0.1 のような文字列で指定でき、サーバが使うポート番号も指定できます。

recvfrom 受信は、PHPのマニュアルのサンプルどおりにしたほうが無難です。つまり、
  $from = "";
  $port = 0;
  socket_recvfrom($socket, $buf, 受け取る文字列長, 0, $from, $port);

です。これで指定されたポート番号で受信待ちになります。

一方 sendto 送信は、これも PHP のサンプルを参考に、
  socket_sendto($socket, $msg, 送る文字列長, 0, 
                  サーバのIPアドレス, サーバのポート番号);

です。

しかし、このマニュアルは本当に良くできていますね。各関数にサンプルプログラムがあるので分かりやすいです。次回、プログラムを作成しますが、このサンプルプログラムを大いに活用したいと思います。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPで、RS-232Cを使って、AQUOSを制御する。その2

2009-03-07 22:57:59 | php
前回インストールした、php_ser を使って、PHP Serial Exampleを参考に、いい加減なプログラム remote-c.php を作ってみました。デバッグやテスト用の意味のないコードも入っていますが、読み飛ばしてください。

シリアルポートのオープンが遅いようなので、一度オープンしたらなるべくクローズしないようにすると通常のリモコン並みの反応が得られました。

テレビからの応答もリモコンなのでデバッグ以外にはほとんど関係ないと思います。また、何らかのトラブルでser_close()が実行できないで終了した場合でも、もう一度オープンすれば普通にシリアルポートが使えました。
<?php
 //
 // remote-c.php
 // Written by Espiya 2009-03-04
 // http://blog.goo.ne.jp/espiya/
 //
 $str = ser_version();
 echo "Version: $str";

 echo "\n";

 echo "Open port";
 ser_open("COM2", 9600, 8, "None", 1, "None");

 echo "\n";

 $str = ser_isopen();
 echo "Port: $str"

 sleep(1);
 
 echo "\n";

 $str = ser_read(128);
 echo $str;

 sleep(1);

 echo "\n";

 echo "Enter command\n";
 
 $b_part = 0; 
 $comline = "null";
 while ( ($line = trim(fgets(STDIN)) ) != "end" ) {  
   sscanf($line, "%s %d", $a_part, $b_part);
   // echo "A part: $a_part \n";
   // echo "B part: $b_part \n";
   if ( $b_part >= 0 && $b_part < 1000) {
     $data = sprintf("% -4d\r",$b_part);
     switch ($a_part) {
       case "off":
       case "power":
       case "p":
         if ( $b_part <=1 ) {
           $comline = &qout;POWR0   \r";
         }
         break;
       case "on":
         $comline = "POWR1   \r";
         break;
       case "volume":
       case "vol":
       case "v":
         if ( $b_part >= 0 && $b_part < 31 ) {
           $comline = "VOLM$data";
         } else {
           $comline = "VOLM????\r";
         }
         break;
       case "video":
         $comline = "IAVD5   \r";
         break;
       case "tv";
         $comline = "ITVD0   \r";
         break;
       case "ch":
         $comline = "CAIR$data";
         break;
       case "dch":
         switch ($b_part) {
           case 1 :
             $data = "11  \r";
             break;
           case 3 :
             $data = "21  \r";
             break;
           case 4 : 
             $data = "41  \r";
             break;
           case 6 :
             $data = "61  \r";
             break;
           case 8 :
             $data = "81  \r";
             break;
           case 10 :
             $data = "51  \r";
             break;
           case 12 :
             $data = "71  \r";
         }
         $comline = "CTBD$data";
         break;
       case "digital":
         $comline = "IDEG0   \r";
         break;
       case "mute":
         $comline = "MUTE0   \r";
         break;
       case "help":
       case "h" :
       case "menu":
         echo "Command list(nn は数字)\n";
         echo "  on      : 電源を入れる。( power 1 も可 )\n";
         echo "  off     : 電源を切る。 ( power 0 も可 )\n";
         echo "  vol nn: ボリューム( 0から30まで) \n";
         echo "  ch  nn:チャンネル( アナログにする )\n";
         echo "  dch nn:チャンネル( デジタルにする )\n";
         echo "  video  :ビデオにする。\n";
         echo "  tv   :テレビにする。\n";
         echo "  mute  :消音(トグルスィッチ)\n";
         echo "  help  :このヘルプ( menu も可 )\n";
         echo "  end   :プログラムを終了する。\n";
         break;
     }
   }

   if ($comline != "null") {
     ser_write($comline);
     sleep(1); 
     echo "Answer\n";
     $str = ser_read(128);
     echo "$str";
   }
   echo "\n";

   $a_part  = "null";
   $b_part  =  0;
   $comline = "null";
 }
 
 echo "\n";
 echo "Close port";
 ser_close();
?>


コマンドプロンプトからの操作なので、キーボードでAQUOSを操作している感じです。ただし、たまに反応が遅いことがあります。

ボリュームを 30 以下にしたのは、それ以上にしたことがないのと、万が一コマンドを指定してしまった場合、近所迷惑になるか壊れるかもしれないと思ったからです。デジタルチャンネルは、東京地方のアナログチャンネルに対応させました。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPで、RS-232Cを使って、AQUOSを制御する。その1

2009-03-06 20:38:23 | php
今回からしばらく、PHPについて投稿するつもりです。普通の機能については山のようにWebで見つかりますので、あまり見かけない機能?について調べてみました。

実は、SHARP の テレビ AQUOS を使っているのですが、何気なく取扱説明書を読んでみると、

「PC(パソコン)で本機を制御する」

という機能があることに気がつきました。RS-232Cコネクタ(AQUOSの記述そのまま)がついていて、シリアルラインでPCと接続できるようです。要するにリモコン機能ですね。

テレビの近くにPCがあるので、リモコンが手元見当たらない時に、PCからチャネルとか変えられると便利そうです。

早速作ってみようと思いましたが、PCにRS-232Cコネクタがありません。USBの変換ケーブルを買おうかどうか迷っていました。使えなかった場合、このケーブルの使い道がなさそうなので悩んでいました。

ところが、以前もらった古いモデムに、なんと ELECOM の UC-SGT という、USB-シリアル変換ケーブルが付いていたのです。また、RS-232Cのクロスケーブルもあったので、ハード的には準備 OK になりました。このケーブルは、シリアルポートの番号(最初は、COM17 になっていました。)が、使われていなければ自由に変えられます。

早速、試してみようと思いました。

まず、何でプログラムするかです。ケーブルが短くて、coLinux のマシンまでは届かず、Windows XP しかありません。そこで、前回 Windows にインストールした PHP にすることにしました。

ところで、PHP でシリアルポートの使い方はどうするのでしょうか。

標準には無いようなので、
PHPでシリアル通信 http://d.hatena.ne.jp/akiraneko/20080813/1218607042で紹介されている、
PHP serial extension http://thebyteworks.com/phpserial/index.htmlを、Windows 版専用ということで選びました。

ダウンロードした、php_ser_5.2.0.zip の中身は、

php_ser.dll
php_ser_reference.html
php_ser_test.php
sms_list.php

です。php_ser.dll を、PHP のフォルダ C:\Program Files\PHP\ext に、コピーすれば準備完了です。

更に C:\Program Files\PHP\php.ini に、

extension=php_ser.dll

を指定すればよいです。指定しない場合は、

dl('php_ser');

などでモジュールをロードすることになります。

用意された関数で今回は、php_ser_reference.html から、
string ser_version( void )
void ser_open( string port, int baudrate, int databits,
               string parity, float stopbits, string flowcontrol )
string ser_isopen( void )

void ser_write( string data )
string ser_read( int chars_no )

void ser_close( void )

を使うことにします。関数の順番もこのままで良さそうです。

さて、AQUOSのRS-232Cコネクタの通信仕様は、

ボーレート;9600bps データ長:8ビット パリティ:なし
ストップビット:1ビット、フロー制御:なし

これに対する、ser_open関数は、シリアルポート名を COM2 にあらかじめ指定しておいた場合、

ser_open("COM2", 9600, 8, "None", 1, "None");

となります。早速試したところ、

ser_version関数で得られる文字列が、'20061018.1 trial version'、
ser_isopen関数で得られる文字列が、'COM2 9600 8 None 1 None'

でした。

通信手順は、9バイト(最後がリターンコード 0x0D)の制御コマンドをAQUOSに送ると、OK(3バイトで最後がリターンコード)のレスポンスを受け取れます。異常があった時のレスポンスは ERR(4バイトで最後がリターンコード)です。

制御コマンドの構造ですが、前4バイトが「コマンド種類」で、後ろ4バイトが「パラメータ」で、最後1バイトがリターンコードです。

パラメータには、左詰めで数値が入ります。4桁に足りない場合は後ろに空白文字が付きます。これは、

$param = sprintf("% -4d\r",$data);

などで作ればよいです。よく使うコマンドは、
  POWR  0     (テレビを消す。スタンバイへ移行。パラメタが 1 で復帰。)
  VOLM 0~50 (音量。パラメタは音量値。)
  ITVD 0     (入力切り替えでテレビにする。)
  IAVD 1~6  (入力1から6の指定されたものに切り替える。)
  CAIR 1~20 (地上波アナログのチャンネル指定。)
  CTBD 0~999 (地上波デジタルのチャンネル指定。)
  MUTE 0   (消音オン、オフのトグル。)

です。チャンネル指定のコマンドはアナログからデジタルへの変換もできます。例えば、消音のコマンドは、
  $command = "MUTE0   \r";
  ser_write($command);
  sleep(1);
  echo "Answer\n";
  $str = ser_read(128);
  echo "$str";

のようにすればテレビに送れます。うまくいけば、$str に "OK\r" という文字列が得られます。コマンドの中にはパラメタを "????" にすると今の値が帰ってくるものもあります。例えば、"VOLM????\r" などです。

この続きは、次回にします。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Windows に PHP をインストールする。

2009-03-01 21:39:39 | php
再開の最初は、coLinux から離れて、PHP についてです。

PHP 関連の投稿が1つしかないので、PHPに関して投稿していきたいと思います。

PHP は、Web アプリケーションには良く使われますが、スクリプト言語ですから、コマンドとして使っても問題ありません。このブログは、coLinux をテキストモードで使うのが一つの方針ですから、PHP もコマンドとして利用したいと思います。

現在、Windowsしか動いていないマシンもあるので、PHP を Windows 上で使ってみようと思いました。

早速、Windows に PHP をインストールします。

PHPダウンロードページから、Windows Binaries の PHP 5.2.8 installer をダウンロードして、

php-5.2.8-win32-installer.msi

を得ます。

これを実行して、C:\Program Files\PHP\ にインストールすることにします。

インストール中に聞いてくる、「Web Server Setup」は、コマンドとしての利用なので、「Do not setup a web server」を選択しました。

次に「Choose Items to Install」ですが、
[PHP]->[Program]->[Script Executable]
->[Resister *.php files to open automatically with PHP] と、
[PHP]->[Extensions]の全部をインストールするように指示します。
(実は後で説明するように、データベース機能が必要ない時は、ここでそれらをインストールしないことをお勧めします。)

前者は、拡張子が.php になっていればPHPプログラムファイルとして処理するようになり、後者は様々な機能が利用できる拡張機能で、これでインストールが終了します。

ここで、C:\Program Files\PHP\php.exe を実行すると、

PHP Warning: PHP Startup: Unable to load dynamic library
  'C:\Program Files\PHP\ext\php_oci8.dll'

のようなエラーメッセージがいくつもできます。しかしこのモジュールをよく見てみると、みんなデータベースがらみのモジュール(pspell だけはちょっと違うみたいです。)のようです。データベースソフトがインストールされていないのですから当然ですね。たぶん C:\Program Files\PHP\php.ini に指定してあると考えて調べてみると、Local Variables 以下に指定がありました。以下の行を削除します。

extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_oci8.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_sqlite_external.dll
extension=php_pgsql.dll
extension=php_pspell.dll
extension=php_sqlite.dll
extension=php_sybase_ct.dll

実は、このLocal Variables 以降の*.dll の指定ですが、インストール時に、
[PHP]->[Extensions]を全部インストールしない(デフォルト設定)を選択すると、何も指定されません。この場合は、上述のエラーメッセージも出ないかわりに、多くの関数が、すぐには使えないことになります。

インストール時に最初からデータベース関連を除いておけばよかったですね。

cron.phpの自動実行の記述によるとコマンドプロンプトで使えるPHPは php.exe なので、今回はそれを使い、コマンドプロンプトに出力が得られるようにします。そこで、拡張子 .php のファイルは、php.exe で実行されるように修正します。(標準では、php-win.exe を使うようになっていました。)

以上で、Windows (ここでは、Windows XP と Vista)上で PHP が使えるようになりました。ファイル名に拡張子 .php を付けておくと、ダブルクリックするだけで、コマンドプロンプトウィンドウが開いて動きが確認できて便利です。

次回は、このインストールされた PHP で何か試みてみたいと思います。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

php 5.2.0 インストール

2007-01-04 23:58:56 | php
新年の最初は、php をインストールします。
PHP の公式サイト(http://www.php.net/)を見ると、現在は PHP 5.2.0 です。ソースファイルは、
php-5.2.0.tar.gz
md5: 52d7e8b3d8d7573e75c97340f131f988

です。早速展開して、コンパイルしてみます。
$md5sum php-5.2.0.tar.gz
52d7e8b3d8d7573e75c97340f131f988  php-5.2.0.tar.gz
$

$ tar xvzf php-5.2.0.tar.gz
.........................
$ cd php-5.2.0
$ ./configure --prefix=/usr/local/php520  --enable-mbstring \
              --with-mysql=/usr/local/mysql \
              --with-openssl --with-apxs2=/usr/local/httpd/bin/apxs
.........................
checking for xml2-config path...
configure: error: xml2-config not found. Please check your libxml2 installation.
$

libxml2 がありませんでした。
これを入れます。
# yum install libxml2-devel.i386
.........................
Installed: libxml2-devel.i386 0:2.6.23-1.2
Complete!
#

$ ./configure --prefix=/usr/local/php520  --enable-mbstring \
              --with-mysql=/usr/local/mysql \
              --with-openssl --with-apxs2=/usr/local/httpd/bin/apxs
.........................
Thank you for using PHP.

$ make
.........................
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).

$

# make install
.........................
#

AddType application/x-httpd-php .php .phtml
行がないみたいなので、conf/httpd.conf にとりあえず追加しておきます。

設定ファイルをコピーします。
# cp php.ini-dist /usr/local/php520/lib/php.ini

mbstring の設定を行います。
http://search.net-newbie.com/php/ref.mbstring.htmlを参考に php.ini を修正します。
# vi /usr/loca/php/lib/php.ini
(次の行を直しました。)

mbstring.language = neutral
mbstring.internal_enonding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On

#

日本語のWebページも作るので、nkf も入れておきます。
# yum install nkf.i386
..............................
#

コマンドオプションは、-j が JIS , -s が SJIS , -e が EUC , -w が UTF-8 です。

これで設定は完了です。日本語がうまく表示されないような場合は後で修正します。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする