PHP Scrapbook
ダウンロードデータ
webcreators 2005年8月号
PHPスクラップブック:記事中スクリプト
リスト1 トラックバック受信後のレスポンス
・正常に受け付けた
<?xml version="1.0" encoding="iso-8859-1">
<response>
 <error>0</error>
</response>

・エラーが発生して受け付けられなかった
<?xml version="1.0" encoding="iso-8859-1">
<response>
 <error>1</error>
 <message>error message...</message>
</response>
リスト2 POSTメソッドで送信されるデータ形式
POST /path?query HTTP/1.0
HOST: 相手ホスト名
User-Agent: 送信者のユーザーエージェント
Content-type: application/x-www-form-urlencoded
Content-Length: 送信するボディのサイズ

url=http://www.foo.co.jp/foo.php?id=25&title=タイトル&exceprt="要約"&blog_name="ブログ名"
リスト3 sendPost関数
 function sendPost( $targeturl, $data ) {
  $port = 80;
  $query = "";
  $post = "";

  // postデータの作成
  foreach( $data as $key => $value ) {
   if( $post != "" ) $post .= "&";
   $post .= $key . "=" . urlencode( $value );
  }

  // targeturl先URLからホスト名やパスを取り出す
  $url = parse_url( $targeturl );
  if( isset( $url['query']) ) $query = "?".$url['query'];
  if( isset( $url['port'])  ) $port = $url['port'];

  // HTTPリクエストの作成
  $req = "POST ".$url['path'].$query." HTTP/1.0\r\n";
  $req .= "Host: ".$url['host']."\r\n";
  $req .= "User-Agent: PHP/".phpversion()."\r\n";
  $req .= "Content-type: application/x-www-form-urlencoded\r\n";
  $req .= "Content-Length: ".strlen($post)."\r\n\r\n";
  $req .= $post."\r\n";

  // ソケットを開く
  $fn = fsockopen( $url['host'], $port );
  if( $fn === FALSE )
   return FALSE;

  // 送信
  fputs( $fn, $req );
  // レスポンス受信
  $res = "";
  while( !feof($fn) ) {
   $res = $res . fgets( $fn );
  }
  fclose($fn);

  return $res;
 }
リスト4 テンプレートの抜粋。{section}ループが再現されれば、そのほかのレイアウトはユーザーが自由に変更してかまわない
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>トラックバックの送信テスト</title>
</head>
<body>

<form method="post" action="posttest.php">
 送信先URL:<input type=text name="target" size="20" ><br>
 トラックバック元URL:<input type=text name="url" size="20" ><br>
 トラックバックタイトル:<input type=text name="title" size="20" ><br>
 トラックバック記事要約:<input type=text name="exceprt" size="20" ><br>
 トラックバック元blog名:<input type=text name="blog_name" size="20" ><br>
 <input type="submit" name="submit" value="submit">
</form>


<?php
 if( ! isset($_POST['submit']) ) exit();

 $target = trim( $_POST['target'] );
 $data =array();


 $data['url']       = trim( $_POST['url'] );
 $data['title']     = mb_convert_encoding( trim( $_POST['title']) , "UTF-8" );
 $data['exceprt']   = mb_convert_encoding( trim( $_POST['exceprt']) , "UTF-8" );
 $data['blog_name'] = mb_convert_encoding( trim( $_POST['blog_name']) , "UTF-8" );


 if( ($res = sendPost( $target, $data )) === FALSE )
  exit("トラックバックに失敗:オープンできません<br>");

 list($head, $body) = split("\r\n\r\n", $res, 2 );  

 if( strstr( $body, "<error>1</error>") !== FALSE )
  exit("トラックバックに失敗:". $body );
 else
  exit("トラックバックを送信しました" );
?>
</body>
</html>
リスト5 トラックバック受信例
<?php
 $url = "";
 $title = "";
 $excerpt ="";
 $blog_name = "";

 if( isset( $_POST['url']) )
  $url = $_POST['url'];
 else if( isset( $_GET['url']) )
  $url = $_GET['url'];
 else
  exit("url is empty");

 if( isset( $_POST['title'] ) )
  $title = $_POST['title'];
 else if( isset( $_GET['title']) )
  $title = $_GET['title'];
 $title = mb_convert_encoding( trim($title), mb_internal_encoding(), "auto");

 if( isset( $_POST['excerpt'] ) )
  $excerpt = $_POST['excerpt'];
 else if( isset( $_GET['excerpt']) )
  $excerpt = $_GET['excerpt'];
 $excerpt = mb_convert_encoding( trim($excerpt), mb_internal_encoding(), "auto");

 if( isset( $_POST['blog_name'] ) )
  $blog_name = $_POST['blog_name'];
 else if( isset($_GET['blog_name']) )
  $blog_name = $_GET['blog_name'];
 $blog_name = mb_convert_encoding( trim($blog_name), mb_internal_encoding(), "auto" );
◆ PHP役立ちリンク「PHP.NET」
www.php.net/
◆ PHP役立ちリンク「日本PHPユーザ会」
www.php.gr.jp/

←BACK

Copyright (c) 2005 MdN Corporation  All rights reserved.