エントリー

カテゴリー「プログラム」の検索結果は以下のとおりです。

PHP+GDでサムネイル画像作成

自分用にメモ。

画像ファイルを元に、サムネイル画像を自動作成するプログラム。
以前メモしたつもりだったけど見当たらなかった…。

<?php

$dir  = 'test/';    //画像格納フォルダ
$file = 'test.png'; //画像ファイル名
$max  = 200;        //サムネイルのサイズ

if (preg_match('/\.gif$/i', $file)) {
  $image = imagecreatefromgif($dir . $file);
} elseif (preg_match('/\.(jpeg|jpg|jpe)$/i', $file)) {
  $image = imagecreatefromjpeg($dir . $file);
} elseif (preg_match('/\.png$/i', $file)) {
  $image = imagecreatefrompng($dir . $file);
}

$width  = imagesx($image);
$height = imagesy($image);

if ($width > $height) {
  if ($width > $max) {
    $new_width  = $max;
    $new_height = ($new_width / $width) * $height;
  } else {
    $new_width  = $width;
    $new_height = $height;
  }
} else {
  if ($height > $max) {
    $new_height = $max;
    $new_width  = ($new_height / $height) * $width;
  } else {
    $new_width  = $width;
    $new_height = $height;
  }
}

$new_image = imagecreatetruecolor($new_width, $new_height);

imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); //アンチエイリアスなし
//imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); //アンチエイリアスあり

if (preg_match('/\.gif$/i', $file)) {
  imagegif($new_image, $dir . 'copy_of_' . $file);
} elseif (preg_match('/\.(jpeg|jpg|jpe)$/i', $file)) {
  imagejpeg($new_image, $dir . 'copy_of_' . $file, 70);
} elseif (preg_match('/\.png$/i', $file)) {
  imagepng($new_image, $dir . 'copy_of_' . $file);
}

imagedestroy($image);
imagedestroy($new_image);

?>

実行すると、ファイル名の先頭に copy_of_ を付加したファイル名でサムネイル画像が作成されます。
imagecopyresized の部分を imagecopyresampled に変更すると、アンチエイリアスが有効になります。

携帯の絵文字

仕事か・そうで無いかに関わらず、携帯絵文字については定期的に尋ねられるので、PHP Labo のプログラムを絵文字に対応させてみる。

色々検討した末、MobilePictogramConverter を利用するつもり。
PHP Labo のプログラムはプラグインに対応させているので、プラグインとして絵文字に対応…させようと思ったけど、無駄に複雑になるので組み込み機能にする予定。ただし、MobilePictogramConverter は同封せず、必要なら自分で導入する…。という手順にするつもり。

絵文字を扱う方針は、今のところ

  • データベースへ保存する際、絵文字はi-modeのバイナリコードとして記録する
  • データベースの内容を表示する際、絵文字(i-modeのバイナリコード)があれば、キャリアに応じて絵文字を表示
  • メール送信の際、絵文字はすべて削除する

の予定。もし何か問題が発生したら変更します。

以下、自分用のメモ。

データを受信する際の処理

//PCから投稿されたデータを、i-modeのバイナリコードに変換
$str = '絵文字(i-modeの画像)を含むデータ';
$mpc = MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_UTF8, MPC_FROM_OPTION_IMG);
$mpc->setImagePath('../img/');
echo $mpc->Convert(MPC_TO_FOMA, MPC_TO_OPTION_RAW);

//i-modeから投稿されたデータを、i-modeのバイナリコードに変換
$str = 'i-modeから投稿されたデータ';
$mpc = MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_UTF8, MPC_FROM_OPTION_RAW);
$mpc->setImagePath('../img/');
echo $mpc->Convert(MPC_TO_FOMA, MPC_TO_OPTION_RAW);

//EZwebから投稿されたデータを、i-modeのバイナリコードに変換
$str = 'EZwebから投稿されたデータ';
$mpc = MobilePictogramConverter::factory($str, MPC_FROM_EZWEB, MPC_FROM_CHARSET_UTF8, MPC_FROM_OPTION_RAW);
$mpc->setImagePath('../img/');
echo $mpc->Convert(MPC_TO_FOMA, MPC_TO_OPTION_RAW);

//SoftBankから投稿されたデータを、i-modeのバイナリコードに変換
$str = 'SoftBankから投稿されたデータ';
$mpc = MobilePictogramConverter::factory($str, MPC_FROM_SOFTBANK, MPC_FROM_CHARSET_UTF8, MPC_FROM_OPTION_RAW);
$mpc->setImagePath('../img/');
echo $mpc->Convert(MPC_TO_FOMA, MPC_TO_OPTION_RAW);

データを表示する際の処理

//絵文字(i-modeのバイナリコード)があれば、キャリアに応じて絵文字を表示
$str = '絵文字(i-modeのバイナリコード)を含むデータ';
$mpc = MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_UTF8, MPC_FROM_OPTION_RAW);
$mpc->setImagePath('../img/');
echo $mpc->autoConvert();

メールを送信する際の処理

//絵文字(i-modeのバイナリコード)があれば、すべて削除
$str = '絵文字(i-modeのバイナリコード)を含むデータ';
$mpc = MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_UTF8, MPC_FROM_OPTION_RAW);
$mpc->setImagePath('../img/');
echo $mpc->Except();

Googleカレンダー携帯用ツール改良

前に作ったツールは「パケット代を安く!」を重視していたので見た目はイマイチだったけど、定額プランにしたのでデザインもいじってみた
公式サイトを意識した配色にしています。

20090214a.png

20090214b.png

また、認証には固体識別情報を使うように改良。アクセスキーも設定したので、使い勝手も良くなりました。満足。

PHPでファイルダウンロード

自分用にメモ。

画像やテキストファイルへ普通にリンクすると、クリックしたときに画像やテキストファイルがブラウザ内に表示されます。
以下は圧縮ファイルをダウンロードするときのように、保存先を聞いてくれるようにする方法。

<?php

$image_file = 'sample.gif';

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $image_file);
header('Content-Length:' . filesize($image_file));
header('Pragma: no-cache');
header('Cache-Control: no-cache');
readfile($image_file);
exit;

?>

こんなコードを書いたPHPファイルへリンクすると、sample.gif のダウンロードダイアログが開きます。sample.gif はあらかじめアップロードしておきます。画像以外のファイルも同じ方法でOK。また、

<?php

$text_file   = 'sample.txt';
$text_buffer = 'テストメッセージです。';

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $text_file);
header('Content-Length:' . strlen($text_buffer));
header('Pragma: no-cache');
header('Cache-Control: no-cache');
echo $text_buffer;
exit;

?>

こんなコードを書いたPHPファイルへリンクすると、sample.txt のダウンロードダイアログが開きます。sample.txt の内容はPHPで動的に作成します。

個体識別情報

PC&携帯&メール投稿対応のTODOリストが欲しくなったので作ります。

現在、携帯での認証方法について検討中。できるだけ簡単にログインができるようにしたくて少し調べてみたところ、個体識別情報が使いやすくなっているらしい。

以前はこんな風に取得したけど、docomoだと確認ダイアログが毎回表示されて鬱陶しかったのです…。でも今はiモードIDが使えるらしい。(ただし、?guid=ON を付加してアクセスする必要がある。)

そんな訳で以下のコードなら、確認ダイアログも何も表示されずに個体識別情報が取得できる…はず。(個体識別情報の送信を禁止する設定にしていなければ。)

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>TEST</title>
</head>

<body>
<?php

$id = get_serial();

if ($id) {
  echo 'ID is [' . $id . '].';
} else {
  echo 'ID is not found.';
}

/* 個体識別情報取得 */
function get_serial()
{
  if (isset($_SERVER['HTTP_X_DCMGUID'])) {
    $id = $_SERVER['HTTP_X_DCMGUID'];
  } elseif (isset($_SERVER['HTTP_X_UP_SUBNO'])) {
    $id = $_SERVER['HTTP_X_UP_SUBNO'];
  } elseif (isset($_SERVER['HTTP_X_JPHONE_UID'])) {
    $id = $_SERVER['HTTP_X_JPHONE_UID'];
  } else {
    $id = null;
  }

  return $id;
}

?>
</body>

</html>

PHPで色々作成

PHP Labo で、以前に作成した

をそれぞれ公開してみた。
他のプログラムとは別に、「ミニツール」とか「アルファ版」という扱いにしています。

CSVデータ表示ツール

「CSVファイルをアップロードしたら、自動で表にして出力してくれるプログラム」の制作を依頼していただくことが時々あります。
確かに色々な使い方ができそうなので、そこそこ汎用性の高い状態にして配布してみた。

http://www.php-labo.net/download/list/

管理画面からCSVファイルをアップロードすると、表形式で表示するプログラムです。改ページ処理とか検索機能も実装しておいた。
「予定一覧を簡単に作りたい」とか「大量の商品情報を掲載したい」という場合には便利かもしれません。

また、普通の表を高機能にしてくれるJavaScriptが色々発表されているので、それらと組み合わせるのも面白いかもしれません。試してないけど。

PHP5で fgetcsv() が使い物にならなくなった問題への対処は、以下のページを参考にさせていただきました。

PHP5でfgetcsvが正常に動作しない

メッセージ送信ツール

このブログのサイドバーに設置しているメッセージ送信ツールですが、以下のページからダウンロードできるようにしました。

http://www.php-labo.net/download/message/

色々機能を追加しようか迷ったけど、結局シンプル路線です。

プログラム自体は大したモノではないのですが、使ってみたい方はどうぞ。あと、もし要望とかあれば、可能なものはプラグインで対応するかもしれません。

SimpleXML

PHP5の SimpleXML の練習を兼ねて、以前に作成したAmazonのレビュー検索プログラムをPHP5専用に書き直してみた。(見た目や機能は変更なし。)
標準命令でXMLを簡単に扱えて素敵です。

ちなみに、このプログラムは自宅サーバーで稼動中。

PHP5へ移行中

PHP Labo のプログラムをPHP5へ移行中…。(サーバーはロリポップ)

PHPの設定を .htaccess でも ini_set() でも変更できない問題は、一部の設定を php.ini で設定 で決定っぽい。
ということは、プログラムごとに設定を変更するのは不可能なのか…。しかも、php.ini も一部の設定しか変更できないです。

upload_max_filesize など、変更できない値はどうしようもないのかなぁ…。2M で固定されてしまったのはちょっと痛い。
あと、PHP4では何もしなくても PEAR が使えたけど、PHP5からは使えないみたい。

ちなみに、PHP Labo の新しいプログラムは、php.ini 編集画面で magic_quotes_gpcOff に設定すれば問題なく動作するようです。(PEAR は使っていないし。)
.htaccess に書かれたPHPの設定は無視されるけど、大きな問題は無し。

PHP Labo では、php.ini を以下のように設定しておいた。これでしばらく様子見…。

設定項目設定内容
default_charset UTF-8
mbstring.language Japanese
mbstring.internal_encoding UTF-8
mbstring.encoding_translation Off
mbstring.http_input pass
mbstring.http_output pass
magic_quotes_gpc Off
session.use_trans_sid 0
short_open_tag Off
safe_mode On

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed