refirio.org
気ままな雑記帳&実験場。好き勝手に色々やっています。
エントリー
タグ「PHP」の検索結果は以下のとおりです。
PHPでディレクトリの内容をリスト表示
自分用にメモ。
ディレクトリの内容をリストですべて表示するプログラム。記事のツリー表示や全文検索やサイトマップ自動作成などに応用できるかもしれません。
<?php
function get_tree($path)
{
if (!is_dir($path)) {
return;
}
$trees = array();
if ($dir = scandir($path)) {
foreach ($dir as $entry) {
if ($entry == '.' or $entry == '..') {
continue;
}
if (is_dir($path . '/' . $entry)) {
$trees[$entry] = get_tree($path . '/' . $entry);
} else {
$trees[$entry] = $path . '/' . $entry;
}
}
}
return $trees;
}
function put_tree($trees)
{
if (!is_array($trees)) {
return;
}
echo '<ul>';
foreach ($trees as $key => $value) {
if (is_array($value)) {
echo '<li>[d] ' . $key;
put_tree($value);
echo '</li>';
} else {
echo '<li>[f] '. $key . '</li>';
}
}
echo '</ul>';
return;
}
$dir = './sample'; //sampleディレクトリの内容を表示
$trees = get_tree($dir);
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
<title>ディレクトリ表示</title>
</head>
<body>
<?php put_tree($trees); ?>
</body>
</html>
実行すると以下のようにリストタグでツリー表示されます。ディレクトリには [d]
、ファイルには [f]
が表示されます。
<ul>
<li>[d] sample1
<ul>
<li>[d] sample1-1
<ul>
<li>[f] sample1-1-1.txt</li>
<li>[f] sample1-1-2.txt</li>
</ul>
</li>
<li>[f] sample1-1.txt</li>
<li>[f] sample1-2.txt</li>
</ul>
</li>
<li>[d] sample2
<ul>
<li>[f] sample2-1.txt</li>
<li>[f] sample2-2.txt</li>
</ul>
</li>
<li>[f] test1.txt</li>
<li>[f] test2.txt</li>
</ul>
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カレンダー携帯用ツール改良
前に作ったツールは「パケット代を安く!」を重視していたので見た目はイマイチだったけど、定額プランにしたのでデザインもいじってみた。
公式サイトを意識した配色にしています。
また、認証には固体識別情報を使うように改良。アクセスキーも設定したので、使い勝手も良くなりました。満足。
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>
CSVデータ表示ツール
「CSVファイルをアップロードしたら、自動で表にして出力してくれるプログラム」の制作を依頼していただくことが時々あります。
確かに色々な使い方ができそうなので、そこそこ汎用性の高い状態にして配布してみた。
http://www.php-labo.net/download/list/
管理画面からCSVファイルをアップロードすると、表形式で表示するプログラムです。改ページ処理とか検索機能も実装しておいた。
「予定一覧を簡単に作りたい」とか「大量の商品情報を掲載したい」という場合には便利かもしれません。
また、普通の表を高機能にしてくれるJavaScriptが色々発表されているので、それらと組み合わせるのも面白いかもしれません。試してないけど。
PHP5で fgetcsv()
が使い物にならなくなった問題への対処は、以下のページを参考にさせていただきました。
メッセージ送信ツール
このブログのサイドバーに設置しているメッセージ送信ツールですが、以下のページからダウンロードできるようにしました。
http://www.php-labo.net/download/message/
色々機能を追加しようか迷ったけど、結局シンプル路線です。
プログラム自体は大したモノではないのですが、使ってみたい方はどうぞ。あと、もし要望とかあれば、可能なものはプラグインで対応するかもしれません。
ユーティリティ
カテゴリー
タグクラウド
- 33分探偵1
- AMBITIOUS JAPAN!1
- ARIA2
- Air2
- Android2
- BLACK CAT2
- C#1
- Chrome2
- FINAL FANTASY2
- Flash2
- GAE1
- JavaScript18
- Kindle1
- Mac2
- MySQL7
- PHP68
- PayPal1
- Perl3
- PostgreSQL2
- Python1
- Ruby1
- SQLite6
- Switch1
- TinyMCE4
- Windows Media Player1
- bot1
- fragile1
- freo53
- iPhone3
- iTunes1
- levis1
- mod_rewrite2
- node.js1
- sola1
- true tears1
- いつかのメリークリスマス1
- いつか帰るところ1
- けいおん!1
- ここにしか咲かない花3
- とある魔術の禁書目録1
- とらドラ!2
- ひぐらしのなく頃に2
- みなみけ1
- イラスト4
- ガンダム003
- クロノトリガー1
- ザナルカンドにて4
- テラ1
- ニコニコ動画8
- ハゲタカ2
- ピアノ36
- マクロスF3
- ユニットテスト1
- ルパン三世1
- ローズ・オブ・メイ4
- 初音ミク1
- 半分の月がのぼる空1
- 名探偵コナン1
- 戦場のメリークリスマス5
- 携帯10
- 攻殻機動隊1
- 桜2
- 機工魔術士1
- 決行~姫をさがして~1
- 涼宮ハルヒの憂鬱10
- 深愛2
- 灼眼のシャナ4
- 聖剣伝説2
- 蕾3
- 蟲師2
- 返信2
- 野球1
- 鋼の錬金術師1