PHP | Free Style



2008年05月14日

PHPでFLVの情報を取得する方法

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

まぁメタデータ取ってくるだけですが、うまくパースできなかったので
Web漁ってみるも、どうにも見つからない…

FLVの仕様自体はAdobeにあるのだけれども、仕様読んでも意味わからん!
ていうか、結構適当な感じなんだけどどうなんだろう。

で、なんとか見つけたのがFLV4PHPってもの。

Flv4Php is a OS ( Open Source ) .flv Meta-data Manipulator / File output run-time. This article will give an example on how use Flv4Php. This tool can be used to change a flv file's header ( meta-data ) run-time as you back-play it, ( save it to desktop ) or what you wanna use it for.

デモページ

FLV4PHPでググってもさっぱり実績とかないので、中身見てみると
どうやらPHPでFLVの操作全部やっちゃうぜ!的なノリっぽい。

メタデータ取ってるとこだけ参考にしようと思ったけど、そのまんま使ってたりw
が、そのまんま使うとファイルをオープンするときに、どうもハッシュ計算してる
様で結構重い罠。

ローカルパス前提でメタデータだけ取れればいいので、余計なとこ取ったら軽くなった!

で、実装してみた
動画サイズと時間が取れれば良かったので、こんな感じでいいかなと。

時間があったら、メタデータだけ取得するようにしてみよう。

canSeekToEndが取得できてないのはご愛敬?

2008年01月12日

mb_http_outputで文字化け

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

以前書いた文字コード変換して出力する方法ですが、穴がありました…

mb_internal_encodingがSJISだと問題ないのですが、
UTF-8だとEUCにご認識してしまう場合がありました。
(まぁautoで変換してこけてるんだろうなぁ…)

で、回避方法としては明示的にmb_internal_encodingを指定してあげればOK。

mb_internal_encoding("UTF-8");
mb_http_output("SJIS");
ob_start("mb_output_handler");

2007年07月02日

PHPとExcelその2

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

PHP4環境で試してみた。

総論でまとめてしまうとSpreadsheet_Excel_Writer系統は全滅。
BIFF8モードで書き込みすると文字化け以外にも問題が発生。

PHP4でBIFF8使うならテンプレ作ってExcel_Reviserで処理するってのがベターかも。
セルの装飾属性の設定ができないので、装飾属性用のテンプレートシートでも作って
おいて、テンプレートシートからセルの装飾属性のコピーをして(コピーはできる)出力
する前にテンプレートシートを消せばほぼほぼ対応はいけるかも。

テンプレート作るの面倒…

PHP4でやるならCOMでやるのが一番のような。Winサーバ欲しいよ(笑

2007年07月01日

PHPとExcelまとめてみた

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

Linuxサーバ前提なのでCOMはなしよ。

PHPExcel
対応:PHP5系
Excel2007対応

PEAR:Spreadsheet_Excel_Writer
対応:PHP4,5系

日本語文字化け対応patch
対応:PHP4,5系
Spreadsheet_Excel_Writerの日本語文字化け修正パッチ

PHP Excel Creator library
対応:PHP4,5系
Spreadsheet_Excel_WriterのBIFF8修正版

Excel_Reviser
対応:PHP4,5系
テンプレート編集型

Spreadsheet_Excel_Writer使うならパッチ当てるか、
Excel Creator libraryを使った方が良いかもしれない。

日本語環境下であればExcel_Reviserのがいいかも。
PHP5環境であればPHPExcelなのかな?

総論としては

■PHP4
日本語文字化け対応patchかPHP Excel Creator library、Excel_Reviser

■PHP5
PHPExcel

の予感。海外産だと日本語周りの不具合がありそうなのでなんとなく。

2007年06月19日

文字コード変換

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

PHPでのページ単位での文字コード変換の覚え書き。

1.「Content-Type: text/」の場合
2.「Content-Type: text/」以外の場合
3.JsphonやXML_Serializer使う場合

とりあえずぱっと思いついた3パターン。
やり方が正しいかどうかは別として変換できたことが重要だ(何

1.「Content-Type: text/」の場合

mb_http_output("UTF-8");
ob_start("mb_output_handler");

おもむろに魔法の言葉を並べるだけ。

2.「Content-Type: text/」以外の場合


ob_start();

[html部分]

$out = ob_get_contents();
ob_end_clean();
echo mb_convert_encoding($out,"UTF-8","SJIS");

「Content-Type: text/」以外だとmb_output_handlerが
変換無視ってくれる。XMLとかゴリゴリ書くとき用とか?

直接PHPのソースいじって該当部分修正しちゃうのもアリかもね。

まぁ便宜上html部分と書いてますけど要は出力部分。
一旦バッファに突っ込んで変換かけてそれから出力。

3.JsphonやXML_Serializer使う場合

mb_convert_variables('UTF-8', 'SJIS', $array);
$serial = new XML_Serializer($options);
$result = $serial->serialize($array);
echo $serial->getSerializedData();

上記はXML_Serializerの場合。
つまり配列の値に対して文字コード変換をしてやると。
こんな関数あったんだなぁとしみじみ。

2007年06月13日

eAcceleratorインストール

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加
■おもむろにconfigure
export PHP_PREFIX="/usr/local/php5.1"
$PHP_PREFIX/bin/phpize
CFLAGS="-O3 -mtune=nocona -msse3 -I/usr/local/include" \
CXX=gcc CXXFLAGS="-O3 -mtune=nocona -msse3 \
-felide-constructors -fno-exceptions -fno-rtti -I/usr/local/include" \
LDFLAGS="-L/usr/local/lib" \
./configure \
--with-php-config=$PHP_PREFIX/bin/php-config \
--enable-eaccelerator \
--with-eaccelerator-shared-memory \
--with-eaccelerator-sessions \
--with-eaccelerator-content-caching \
--with-eaccelerator-disassembler
■php.iniに以下を追加
[eaccelerator]
zend_extension="/usr/local/php5.1/lib/php/extensions/no-debug-non-zts-20050922/eaccelerator.so"
eaccelerator.shm_size = "32"
eaccelerator.cache_dir = "/usr/local/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk"

これも割と迷うことなく。基本的に入れれば速くなる的な感じ。
eAcceleratorの細かい設定とかはコチラがお奨めかも。

PHP5.1 with MySQL4.1インストール

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

■まずはMySQL突っ込む
めんどくさかったので、公式RPMをおもむろにぶっ込み。
64bitOSなのでRPMも64bit用を使用する。

Server Standard 4.1.22.0

Client Standard 4.1.22.0

Shared libraries Standard 4.1.22.0

Headers and libraries Standard 4.1.22.0

Test suite Standard 4.1.22.0

■PHPをインストールするときに怒られるので無理矢理リンク
ln -s /usr/bin /usr/local/mysql/bin
ln -s /usr/include/mysql /usr/local/mysql/include
ln -s /usr/share/info /usr/local/mysql/info
ln -s /usr/lib64/mysql /usr/local/mysql/lib
ln -s /usr/libexec /usr/local/mysql/libexec
ln -s /usr/share/mysql /usr/local/mysql/share
■GD用にインストール
yum install -y libjpeg-devel.x86_64
yum install -y libpng-devel.x86_64
yum install -y freetype-devel.x86_64
■64bitだとパス通ってくれないので無理矢理リンク
ln -s /usr/lib64/libjpeg.so.62.0.0 /usr/lib/libjpeg.so
ln -s /usr/lib64/libpng.so.3 /usr/lib/libpng.so
ln -s /usr/lib64/libfreetype.so.6.3.7 /usr/lib/libfreetype.so
■準備ができたのでPHPインストール
CFLAGS="-O3 -mtune=nocona -msse3 -I/usr/local/include" \
CXX=gcc CXXFLAGS="-O3 -mtune=nocona -msse3 \
-felide-constructors -fno-exceptions -fno-rtti -I/usr/local/include" \
LDFLAGS="-L/usr/local/lib" \
./configure \
--prefix=/usr/local/php5.1 \
--with-zlib \
--with-gd \
--with-jpeg-dir=/usr/lib \
--with-png-dir=/usr/lib \
--enable-mbstring \
--enable-mbregex \
--enable-gd-native-ttf \
--with-zlib-dir=/usr/local \
--with-jpeg-dir=/usr/local \
--with-png-dir=/usr/local/libpng \
--with-tiff-dir=/usr/local \
--with-freetype-dir=/usr/local \
--with-pdflib=/usr/local \
--with-gettext \
--enable-sqlite-utf8 \
--with-curl=/usr/local/lib \
--with-mysql=/usr/local/mysql \
--with-iconv \
--with-config-file-path=/usr/local/php5.1 \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-pear=/usr/local/php5.1/pear


2007年02月20日

ob_implicit_flushが使えない!

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

久々にはまりました。ということでメモ。

実際どういうことかというと、実際に見た方が早いので、

パターンA

パターンB

を用意しました。パターンAになれば成功です。グラフィカルに表示させたい。
が、パターンBになっててはまりました。

ob_implicit_flushがどういうものかっていうのは割愛して、ob_implicit_flushを
使ってもうまく動かないって場合の説明。
mod_gzipが有効になっているか確認しましょう。

Port80 Software: Fortune 1000 HTTP Compression Survey

おそらくmod_gzipが有効になっているはずなので、.htaccessで無効にします。

<Files *.php>
<ifmodule mod_gzip.c>
mod_gzip_on no
</ifmodule>
</Files>

実はパターンAはmod_gzipが無効で、パターンBが有効の状態なだけでコードは全く一緒です。
mod_gzipの特性を考えると至極当たり前なことなんですが忘れてた!!

2006年10月09日

ロリポップでcronライクな動作をPHPでやってみる

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

MTの指定日実行タスクを実行するには、通常cronで実行するように
マニュアルには書いているわけだが、ロリポップではcronが利用できないので、
PHPでcronライクに動かしてみようと試みる。

とりあえず、ロジックだけヅラヅラ書いて

cronはシステム内でトリガーを起こして、指定時間経っていれば
指定されたアクションを起こすもので、
PHPで実装するにはビジターにトリガーを起こしてもらえば良い。

PerlやShellなどを呼び出す場合は、バックグラウンドで実行してやれば、
ブラウザで表示させる際の影響はでない。

と、実行自体は問題ないはずなのだが、肝心のrun-periodic-tasksが

system ("cd [設置している場所へのフルパス];/usr/local/bin/perl -w run-periodic-tasks > /dev/null &");

でうまいこと動いてくれないのでしょんぼりっく。

さて、どうしたものか。
パーミッションの違いとかはないはずなんだけれども。

2006年09月27日

Spreadsheet_Excel_Writer

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

10ヶ月ぶりにバージョンアップ
マイナーアップの0.90⇒0.91に。

Changelogを確認するも、Bug fixが2件のみ…
今後、肝心なBIFF8(EXCEL97/2000形式)関連の期待はかなり薄そうなのである。
困った。

久しぶりに調べてみると有益な情報を発見。
そこで衝撃の事実。
http://chazuke.com/archives/2006/08/spreadsheet_exc_2.html

BIFF5で日本語を使うにはshift_jisだが、BIFF8ではUTF-16LEを使う。

え、文字コードも変えないとだめなんですか…しらんかった。
てかめんどかったのでソースなんか読んでない!

Spreadsheet_Excel_Writerのpatch
キタコレ!
ソースレベルでの修正情報をやっと発見!
実証はしていないのでなんとも言えないけど。
これは期待がもてそうだ!(時間的にどうかなー。)

とはいえ、いい加減Excelからは逃げたいのである。

2006年09月13日

動的なページを静的なページに見せてみよう

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

RewriteRuleで色々調べてたら、こんな記事が見つかった。

で、htaccessでいちいち追加するの面倒だなーと思い、PHPでできないかやってみようと思い立つ。

1.arg_separator.inputを使ってみる
phpオプションのarg_separator.inputで実験。
セパレータを追加するだけなので断念
使用すると下記のようになる。

Ex.

hoge.php?a=1/a=2

hoge.php?a=1;a=2

hoge.php?a=1&a=2

2.ごりごりやってみる
さっくり出来る方法がないっぽいので、ごりごりやってみることにする。
この方法で実際できたので、http://iidx.jp/mobiledb/を例に。

http://iidx.jp/mobiledb/?carrier=ez

    ↓

http://iidx.jp/mobiledb/info/ez/

となってスマートになった気がする!

で、種明かし。

前提として、Apache(もしくはhtaccess)「Multiviews」 が有効になっていること。
「Multiviews」とはApacheがファイルをマップするタイプマップを自動で作ってくれるオプション。
但し、携帯系でこれを使うと一部の端末で正常に見れなくなる。
(タイプマップ無視して、拡張子で勝手にマッピングする端末とか…)

まず実体のhttp://iidx.jp/mobiledb/index.phpから。
$_SERVER[PATH_INFO]を「/」でsplitするだけ!

list($null,$carrier)= split("/",$_SERVER[PATH_INFO]);

こんな感じ。実にシンプル!
PATH_INFOは「/」から始まるため先頭は不要になるので適当に捨てる。
$nullとしてるのはこんなん使いそうにないから(笑

で、次。
http://iidx.jp/mobiledb/ez/となるのが理想だったが、そのためには
http://iidx.jp/mobiledb.phpで作る必要がある。
が、トップ配下にごちゃごちゃ置きたくなかったので苦肉の策。
http://iidx.jp/mobiledb/index/ez/よりhttp://iidx.jp/mobiledb/info/ez/
のがいいじゃないってことで、http://iidx.jp/mobiledb/info.phpを置いてみる。
中身は、index.phpと同じ物でいいんだけれども、メンテが大変なので、
index.phpをまるごとincludeしてやる。そうすると簡単。

■メリット
・URLが短くなる
⇒変数名が必要なくなるため
・恥ずかしい変数名を見られなくて済む!
⇒変数名が必要なくなるため
・ちょっとセキュリティ強化?
⇒変数名が必要なくなるため

変数名が見えなくなるのっていいね!

■デメリット
・変数の順番間違えると大変
変数名でなく順番で取得するため。

デメリットというほどデメリットでもないかも。
単に管理の仕方が変わるだけ。

たまにはPHPネタも書いてみた。
ソースの公開なんてものはとても恥ずかしくてできないので、
カテゴリを作ったは良いがネタがなくてとても困る!

2006年06月08日

Amazon3分くっきんぐ

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

MTのプラグインはPERLで書かなきゃだから面倒だし、
MTのPHP化はできないので、苦肉の策でIFRAME大作戦。

PHPはデフォルトでパーサー装備してるけどPEARのライブラリ使うとすごい楽。
XML_Serializer
XML_Parser

ロリポップでPEARを使う場合は、解凍してライブラリを適当に設置して、
パス変えてやればOK。

XMLはSnoopyで処理してやると
これまた楽ちん。

後は力業でデータ整形して↓な感じ

ECSの仕様がややこしいというか微妙に使いづらいのであまり深入りはしないようにしよう…
Amazon Web サービス ブログ

2006年04月15日

RSS携帯版

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

です。
PC版は↓のエントリーか←のメニューにあるはず!
一通り動作確認したのでたぶん問題ないはず。
これでとりあえずベース部分は終わりかな?

移動中の暇つぶしや、デラ並びの間にどうぞ!
フルブラウザ搭載機種でも値段高くなるからほとんど使ったことがないのは秘密( ;´Д`)

RSS

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

続思いつき。
今更ながら前つくったのがひどかったのでメニューのリンク変えました。
これね。
一旦キャッシュにRSS落としてますので、前よりも断然軽くなったはず。
リアルタイムじゃなくなりましたが純リアルタイムぐらいかな。
次のステップは携帯対応にでもしてみます。
DB化はその次ですかね。
携帯でTOPページ見てくれる人は皆無だと思うので
DXScorのメニューにでも追加してみますね(笑

今あるサイトリストは適当に突っ込んでる
オススメのサイトのRSSとかあったらおしえてくださーい。

2006年04月14日

思いつき

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

以前、思いつきで作ったコレなんですが、
再び思いつきで色々やってみようかなと思ってます?
というのもmixiで最近外部blogが増えてきて、携帯からがチェキできないわけですよ。
んで、最近のblogって大体RSSついてるもんだから、
・RSS、htmlのブックマークリストを保存
・携帯、PCからも編集可
・携帯不可のblogはGoogleモバイル先生に丸投げ
な感じで改造したら割と使えるんじゃねーの?とか思いついた。
つかどっかやってるかもしれんけどね。

RSS非対応のサイトに対してはブックマーク、
RSS対応のサイトに対してはRSSリストと分離してもって、
各URIに対して携帯対応・非対応情報を登録。ま、手動ですが。
んで、IIDXScoreみたいな感じにデータを各個保存できるようにすれば皆はっぴー?

まぁ、いじってみよう。

2005年12月27日

ぺあー

Yahoo!ブックマークに登録 はてなブックマークに追加 del.icio.usに追加 livedoorクリップへ追加 Buzzurlに追加 POOKMARK Airlinesへ追加 newsingへ投稿 Saafブックマークに追加

http://pear.php.net/package/Services_Amazon

対アマゾンモジュール。
Amazon ECS4.0対応というのと、
XML関係の関数はPHP5からってことで使ってみようかと。

直接Amazonのデータを覗ける感じがすごく気に入った。
データは共有してなんぼですよね。たぶん。

このモジュール使ってなにやろう。。。

●Todoとかメモとか
■IIDXScore
・PC対応(テンプレ)
・内部仕様変更
・Excel出力のOoo対応?(⇒びみょー)
■RSSリーダーもどき
・なんか使えるようにならないかぁ。(個人的に使ってるけど)
■PHP-Stats
・本家潰れちゃったのかねー?






MSN:chrome_fs@hotmail.co.jp
※メッセ専用

800*600 ATOM1.0
RSS1.0 RSS2.0
人気ブログランキング - Free Style