warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

Perl で、POST したい。

Perl で POST するには、LWP で
my $req = HTTP::Request->new(POST => $url);
として URL を指定し、
$req->content_type('application/x-www-form-urlencoded');
$req->content('Entity=Flight&ContractID=490&Enroute=N&FlightCategory=...');
のように POST するデータを与えればよい。サーバ(CGI スクリプト)に渡すパラメータは、URL の 「?」 の後に続き、<パラメータ名1>=<値1&gt&<パラメータ名2>=<値2&gt&<パラメータ名3>=<値3&gt&…といった形で、「&」 を用いていくつものパラメータと値の組み合わせをつなげることが出来る。 以下は、FryteComm というサイトにアクセスして、XML で現在のフライト状況を取得するサンプルである。飛行機が遅れているかどうかの状況がわかる。 使用するモジュール
use LWP::UserAgent;
#!/usr/bin/perl -w

use LWP::UserAgent;

our $ua = LWP::UserAgent->new;
our $url = 'https://applecomputer:apc0606jb@flytesource.flytecomm.com/FlyteSourceGeneratorWebApp/Application';
our $query_string = 'Entity=Flight&ContractID=490&Enroute=N&FlightCategory=COM&DataView=detail&DepartureAirportCode=SFO&ArrivalAirportCode=NRT&AirlineCode=UA&FlightNumber=837';

my $req = HTTP::Request->new(POST => $url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($query_string);

my $res = $ua->request($req);
print $res->as_string;

1;
Perl で POST するには、LWP で
my $req = HTTP::Request->new(POST => $url);
として URL を指定し、
$req->content_type('application/x-www-form-urlencoded');
$req->content('Entity=Flight&ContractID=490&Enroute=N&FlightCategory=...');
のように POST するデータを与えればよい。サーバ(CGI スクリプト)に渡すパラメータは、URL の 「?」 の後に続き、<パラメータ名1>=<値1&gt&<パラメータ名2>=<値2&gt&<パラメータ名3>=<値3&gt&…といった形で、「&」 を用いていくつものパラメータと値の組み合わせをつなげることが出来る。 以下は、FryteComm というサイトにアクセスして、XML で現在のフライト状況を取得するサンプルである。飛行機が遅れているかどうかの状況がわかる。 使用するモジュール
use LWP::UserAgent;
#!/usr/bin/perl -w

use LWP::UserAgent;

our $ua = LWP::UserAgent->new;
our $url = 'https://applecomputer:apc0606jb@flytesource.flytecomm.com/FlyteSourceGeneratorWebApp/Application';
our $query_string = 'Entity=Flight&ContractID=490&Enroute=N&FlightCategory=COM&DataView=detail&DepartureAirportCode=SFO&ArrivalAirportCode=NRT&AirlineCode=UA&FlightNumber=837';

my $req = HTTP::Request->new(POST => $url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($query_string);

my $res = $ua->request($req);
print $res->as_string;

1;

Favicon を表示させる方法

まず元になる画像を用意する。画像形式は JPEG、PNG、そしてアニメ GIF どれでもよい。それを favicon.ico という名前で Favicon を 作成、サーバにアップロードする。favicon.ico という名前は決めうちである。基本的には Favionを表示させたいページの ... タグの中に下記のタグを追加する。従って Movable Type でも、テンプレート中の ... の間に、下記のタグを追記すればよい。
<head>

    <link rel="shortcut icon" href="favicon までのパス/favicon.ico" />

</head>
Favicon は以下のサイトで作成できる。
まず元になる画像を用意する。画像形式は JPEG、PNG、そしてアニメ GIF どれでもよい。それを favicon.ico という名前で Favicon を 作成、サーバにアップロードする。favicon.ico という名前は決めうちである。基本的には Favionを表示させたいページの ... タグの中に下記のタグを追加する。従って Movable Type でも、テンプレート中の ... の間に、下記のタグを追記すればよい。
<head>

    <link rel="shortcut icon" href="favicon までのパス/favicon.ico" />

</head>
Favicon は以下のサイトで作成できる。

PHP で、連続カウント防止・カンマ区切り付きカウンタを作成する

PHP で、以下の仕様を満たすカウンタを作成してみる (このサイトで使っています)。
  1. 同一 IP からの連続したアクセスをカウントしない (連続カウント防止)。
  2. カウンタの数字をカンマ (,) で区切って表示する。
連続カウント防止機能は、
if(($ip_check == 1 && $ip != $_SERVER['REMOTE_ADDR']) ...
の部分でチェックしている。$ip には、「直前にアクセスしてきた IP アドレス」が入っている。同じ IP アドレスからアクセスし続ける限りはカウントされない。通常はこれでわりと正確なカウンタとなり得ると思うが、ファイアウォールの内側にいる同一マシンなどで、ファイアウォールのアドレスがアクセスのたびに変わる場合はこの限りではない。また、ケータイからのアクセスなどの場合も毎回アクセス元の IP アドレスがある一定の範囲内で変わるので連続カウント防止にはならないことに注意。 カウンタの数字をカンマ区切りにしているのは以下の 1行である。
$total = number_format($total);      // カンマ区切りにする
以下は PHP の全ソース。
<?php

// count.php
// (c) 2006 twinkle.cc
// <a />
//" title="https://perltips.twinkle.cc/
//">https://perltips.twinkle.cc/
//</a> updated by yas 2006/01/03
// updated by yas 2003/05/07
// updated by yas 2003/03/05
// オリジナル: <a />
//" title="https://works.xrea.jp/
//">https://works.xrea.jp/
//</a> ※このスクリプトと同じディレクトリに「count.dat」という名前のファイルを作成し、置いておくこと。

if(!$file) { $file='count.dat'; }

// 設定 ここから ────────────────────────────

$HOME = 'count.datがあるディレクトリのパス'; // ディレクトリ
$data = "$HOME/$file";               // カウント記録ファイル
$ip_check = 1;                       // 連続カウント防止(yes=1 no=0)

// 設定 ここまで ────────────────────────────

$count = file($data);                            // ファイルを配列に

// データ内の文字列を分解してそれぞれの変数に代入
list($total, $ip)=explode('<>', $count[0]);

// カウントアップ処理
if(($ip_check == 1 && $ip != $_SERVER['REMOTE_ADDR'])
||   
$ip_check == 0) {
   
$total++;
   
$new_data = implode('<>', array($total, $_SERVER['REMOTE_ADDR']));
   
$fp = fopen($data, 'w');         // 書きモードでオープン
   
flock($fp, LOCK_EX);             // ファイルロック
   
fputs($fp, $new_data);           // 書き込み
   
flock($fp, LOCK_UN);             // ロック解除
   
fclose($fp);                     // ファイルを閉じる
}
$total = number_format($total);      // カンマ区切りにする
print $total;                        // カウンタを表示
?>
このソースを自身の PHP のカウンタを表示したいページを同じディレクトリに置き、同じディレクトリに count.dat という名前のファイルを置く (私のところは「chmod 644 count.dat」で動いているがお使いの環境によってはパーミッションに注意)。 最後に、カウンタを表示したい場所に以下のように書けばよい。
<?php
include('count.php');
?>
PHP で、以下の仕様を満たすカウンタを作成してみる (このサイトで使っています)。
  1. 同一 IP からの連続したアクセスをカウントしない (連続カウント防止)。
  2. カウンタの数字をカンマ (,) で区切って表示する。
連続カウント防止機能は、
if(($ip_check == 1 && $ip != $_SERVER['REMOTE_ADDR']) ...
の部分でチェックしている。$ip には、「直前にアクセスしてきた IP アドレス」が入っている。同じ IP アドレスからアクセスし続ける限りはカウントされない。通常はこれでわりと正確なカウンタとなり得ると思うが、ファイアウォールの内側にいる同一マシンなどで、ファイアウォールのアドレスがアクセスのたびに変わる場合はこの限りではない。また、ケータイからのアクセスなどの場合も毎回アクセス元の IP アドレスがある一定の範囲内で変わるので連続カウント防止にはならないことに注意。 カウンタの数字をカンマ区切りにしているのは以下の 1行である。
$total = number_format($total);      // カンマ区切りにする
以下は PHP の全ソース。
<?php

// count.php
// (c) 2006 twinkle.cc
// <a />
//" title="https://perltips.twinkle.cc/
//">https://perltips.twinkle.cc/
//</a> updated by yas 2006/01/03
// updated by yas 2003/05/07
// updated by yas 2003/03/05
// オリジナル: <a />
//" title="https://works.xrea.jp/
//">https://works.xrea.jp/
//</a> ※このスクリプトと同じディレクトリに「count.dat」という名前のファイルを作成し、置いておくこと。

if(!$file) { $file='count.dat'; }

// 設定 ここから ────────────────────────────

$HOME = 'count.datがあるディレクトリのパス'; // ディレクトリ
$data = "$HOME/$file";               // カウント記録ファイル
$ip_check = 1;                       // 連続カウント防止(yes=1 no=0)

// 設定 ここまで ────────────────────────────

$count = file($data);                            // ファイルを配列に

// データ内の文字列を分解してそれぞれの変数に代入
list($total, $ip)=explode('<>', $count[0]);

// カウントアップ処理
if(($ip_check == 1 && $ip != $_SERVER['REMOTE_ADDR'])
||   
$ip_check == 0) {
   
$total++;
   
$new_data = implode('<>', array($total, $_SERVER['REMOTE_ADDR']));
   
$fp = fopen($data, 'w');         // 書きモードでオープン
   
flock($fp, LOCK_EX);             // ファイルロック
   
fputs($fp, $new_data);           // 書き込み
   
flock($fp, LOCK_UN);             // ロック解除
   
fclose($fp);                     // ファイルを閉じる
}
$total = number_format($total);      // カンマ区切りにする
print $total;                        // カウンタを表示
?>
このソースを自身の PHP のカウンタを表示したいページを同じディレクトリに置き、同じディレクトリに count.dat という名前のファイルを置く (私のところは「chmod 644 count.dat」で動いているがお使いの環境によってはパーミッションに注意)。 最後に、カウンタを表示したい場所に以下のように書けばよい。
<?php
include('count.php');
?>

Perl で、添付ファイル付きのメールを送る方法

Perl で、
open(SEND, '/usr/sbin/sendmail') || die;
などとせずにモジュールを使ってメールを送信するには、以下のようにする。 使用するモジュール
use Net::SMTP;
use MIME::Entity;
#!/usr/bin/perl

use Net::SMTP;
use MIME::Entity;

# Settings
our $SENDER          = '送信元のメールアドレス';
our $RECIPIENT       = '送信先のメールアドレス';
our $SUBJECT         = 'タイトル';
our $ATTACHED_FILE_1 = '/home/youraccount/添付ファイル名その1.jpg';
our $ATTACHED_FILE_2 = '/home/youraccount/添付ファイル名その2.jpg';

# Create object
my $smtp=Net::SMTP->new('localhost',
                        HELLO=>'yourmailsever.yourdomain.com');

# Built headers
$smtp->mail($SENDER);                 # Sender
$smtp->to  ($RECIPIENT);              # Receiver

# Built Data (Create data by MIME::Entity)
$smtp->data();
my $mime = MIME::Entity->build(
            From    =>    $SENDER   , # Sender   (data)
            To      =>    $RECIPIENT, # Receiver (data)
            Subject =>    $SUBJECT  , # Subject
            Data    => ['']);         # body

# Attached file
$mime->attach(
        Path     => $ATTACHED_FILE_1,
        Type     => 'image/jpeg',
        Encoding => 'Base64'
);

# Attached file
$mime->attach(
        Path     => $ATTACHED_FILE_2,
        Type     => 'image/jpeg',
        Encoding => 'Base64'
);

# Attached file (Text)
# $mime->attach(
#    Path     => $ATTACHED_FILE,
#    Type     => 'text/plain',
#    Encoding => '-SUGGEST'
#);

$smtp->datasend($mime->stringify); # transfer strings

# Data termination and send mail
$smtp->dataend();

#Quit SMTP connection
$smtp->quit;

# for debug
print "Sender    : $SENDER\n";
print "Recipient : $RECIPIENT\n";
print "Attached  : $ATTACHED_FILE\n";

1;
Perl で、
open(SEND, '/usr/sbin/sendmail') || die;
などとせずにモジュールを使ってメールを送信するには、以下のようにする。 使用するモジュール
use Net::SMTP;
use MIME::Entity;
#!/usr/bin/perl

use Net::SMTP;
use MIME::Entity;

# Settings
our $SENDER          = '送信元のメールアドレス';
our $RECIPIENT       = '送信先のメールアドレス';
our $SUBJECT         = 'タイトル';
our $ATTACHED_FILE_1 = '/home/youraccount/添付ファイル名その1.jpg';
our $ATTACHED_FILE_2 = '/home/youraccount/添付ファイル名その2.jpg';

# Create object
my $smtp=Net::SMTP->new('localhost',
                        HELLO=>'yourmailsever.yourdomain.com');

# Built headers
$smtp->mail($SENDER);                 # Sender
$smtp->to  ($RECIPIENT);              # Receiver

# Built Data (Create data by MIME::Entity)
$smtp->data();
my $mime = MIME::Entity->build(
            From    =>    $SENDER   , # Sender   (data)
            To      =>    $RECIPIENT, # Receiver (data)
            Subject =>    $SUBJECT  , # Subject
            Data    => ['']);         # body

# Attached file
$mime->attach(
        Path     => $ATTACHED_FILE_1,
        Type     => 'image/jpeg',
        Encoding => 'Base64'
);

# Attached file
$mime->attach(
        Path     => $ATTACHED_FILE_2,
        Type     => 'image/jpeg',
        Encoding => 'Base64'
);

# Attached file (Text)
# $mime->attach(
#    Path     => $ATTACHED_FILE,
#    Type     => 'text/plain',
#    Encoding => '-SUGGEST'
#);

$smtp->datasend($mime->stringify); # transfer strings

# Data termination and send mail
$smtp->dataend();

#Quit SMTP connection
$smtp->quit;

# for debug
print "Sender    : $SENDER\n";
print "Recipient : $RECIPIENT\n";
print "Attached  : $ATTACHED_FILE\n";

1;