Results > Posts Filed Under > PHP

Dec 20

FreeBSD7.1-PRERELEASE Apache2.2.11へアップグレード

0

portsのwww/apache22で、2.2.11が出ていたので2.2.9からアップグレード。

# cd /usr/ports
# portupgrade -p www/apache22
# /usr/local/etc/rc.d/apache22 stop
# /usr/local/etc/rc.d/apache22 start

所詮、自宅内の開発用webサーバですが、今のところ問題はなさそう。ついでに、PHPも5.2.8へアップグレードしたけど、こちらも今のところ問題無さそうな挙動をしています。

Nov 23

PHP XML_Unserializer で、XMLの属性を取得したい時

0

今扱っている案件で、XMLを読み込んで、ごにょごにょする機会があり、はまったことがあったので、メモとして残します。

PHPのXML読み込み実装の中でも、かなり使えるXML_Unserializerですが、以下のようなXMLを読み込んで、なおかつ、articleタグのtypeやidのような属性までも取得したい場合、オプションを設定する必要があることがわかりました。

<articles>
	 <article type="news" id="ID10001">
		 <title>記事1</title>
	 </article>
	 <article type="news" id="ID10002">
		 <title>記事2</title>
	 </article>
</articles>

やり方は、簡単で、XML_UnserializerのsetOptionメソッドで、parseAttributesをTrueに設定すれば良いだけでした (オプション一覧)。以下はPHP5の読み込みまでの例。

<?php
require_once("XML/Unserializer.php");

$xml = file_get_contents("sample.xml");
$obj = new XML_Unserializer();

$obj->setOption("parseAttributes", true);

$status  = $obj->unserialize($xml);
if ($status === true) {
    $dat = $obj->getUnserializedData();
	  print_r($dat);
}
?>

pear の XML_Serializer, XML_Unserializerは、未だにバージョンは beta のままですが、一度これに慣れてしまうと非常に便利で手放せないモジュールになると思います。

Oct 1

CentOS4でapxsをインストールしたい時

0

CentOS4 で、apacheはrpm、phpだけは、ソースからインストールしようとしたのですが、apxsが無く、一瞬迷ったので、メモ。

$ yum install httpd-devel

上記のように単純に httpd-devel パッケージをインストールすれば良いだけでした….

ただ、phpのみソースコンパイルってのが非常にダサ目なので、自家製rpmパッケージ作って管理したい所です。

Jul 26

PHP 配列のマージ/足し算 (配列演算子)

0

PHP を利用していて二つの配列から一つの配列を作りたい場合って皆さんどうしてますか?
実は今日初めて気付いたのですが、+ を使用して一つの配列に出来るんですね~。

$a = array (
“1″ => “a”,
“2″ => “aa”,
);
$b = array(
“100″ => “b”,
“101″ => “bb”,
);

のとき、$a + $b を実行すると、

array (
“1″ => “a”,
“2″ => “aa”,
“100″ => “b”,
“101″ => “bb”,
);

になるんです。いままでこういうケースの時、array_merge だと欲しい配列にならないので、しょーもない自作の関数作って foreach で回して一つの配列作ってましたよ…

なんか知らないことはまだまだありますねぇ。

マニュアル: 配列演算子 [Array Operators] の項

Jul 24

PECL SQLite が FedoraCore4 でインストール出来ない場合

2

ちょっと必要に迫られ PHP のライブラリ Pecl の SQLite をインストールすることに。
なんとかインストールは出来たものの、いつもの通りすんなりは行きませんでした…

通常ですと、

$ pecl install sqlite

で済むはずが、どうしてもエラーが出る…

/tmp/pear/cache/SQLite-1.0.3/sqlite.c:56: error: ‘BYREF_NONE’ undeclared here (not in a function)
/tmp/pear/cache/SQLite-1.0.3/sqlite.c:56: error: ‘BYREF_FORCE’ undeclared here (not in a function)

BYREF_NONE と BYREF_FORCE が定義されていないっすといった感じであろうか。困ったので検索しまくっていたらまたもや直接的な対処方法を発見。

対処方法: FC4 PHP and SQLite

ざっくり読むと FC4 だと問題が出る、解決方法はこうだ!とあります。なので、その通りソースをダウンロードしてインストールすることにします。

$ wget http://pecl.php.net/get/SQLite-1.0.3.tgz
$ tar xzf SQLite-1.0.3.tgz
$ cd SQLite-1.0.3
$ phpize
$ ./configure

で、ここでソースを直接編集します。

Line: 56 行目をコメントアウト /* ~ */ で囲う

/* static unsigned char arg3_force_ref[] = {3, BYREF_NONE, BYREF_NONE, BYREF_FORCE }; */

Line: 125, 126 の arg3_force_ref を third_arg_force_ref に変更

PHP_FE(sqlite_open, arg3_force_ref) → PHP_FE(sqlite_open, third_arg_force_ref)
PHP_FE(sqlite_popen, arg3_force_ref) → PHP_FE(sqlite_popen, third_arg_force_ref)

でソースを編集し終わったら make してインストール。

$ make
$ make install

これで最後に php.ini で extension の設定をすれば、無事 SQLite のインストールは完了です。

※ 確認方法は、phpinfo() に SQLite が表示されていれば OK です。

May 29

PHP GetImageSize での swf ファイル読み込み (swc?)

0

PHP で Flash ファイル(.swf) をアップロード出来るアプリを作っていたところ、今までなら問題なくアップロード出来ていたコードなのに、急にアップロード出来なくなる現象に遭遇しました。

で、早速色々と調べたところ、アップロードされたファイルの判断方法に原因があることがわかりました。

いつも、アップロードされたファイルが何なのかは、GetImageSizeで判断しており、
通常、swf ファイルをアップロードすると、返ってくる画像のフラグは、4 = SWF になりますが、そのとあるファイルに限っては、13 = SWC が返ってきているため判断のミスが起こり、アップロード出来ていませんでした。

それにしても SWC って一体… と思い調べたところ、Adobe のサイトに以下の記述がありました。

SWC ファイルには、再利用可能な Flash コンポーネントが含まれます。各 SWC ファイルには、コンパイル済みのムービークリップ、ActionScript コード、およびコンポーネントに必要なその他のアセットが格納されます。

だからといって、何故 swf ファイルを読み込んで、swc と判断するかまでは追い切れないので、一瞬悩みましたが、「swc だったら、swf と判断する」処理を加え今回の所も乗り切ることにしました。

用途だけを考えるのならば、これで問題ないといえばないので良しとしておきたいところです。
うーん、でもちょっと気持ち悪いな…

Mar 23

PHP 数字配列生成方法

0

たとえば 1990 ~ 2006 など、一定のルールに従い連続した数字の配列を生成する場合に簡単な関数があることを、今日はじめて知りました…

range
(PHP 3 >= 3.0.8, PHP 4, PHP 5)
range – ある範囲の整数を有する配列を作成する
array range ( mixed low, mixed high [, number step] )

PHP Official 日本語マニュアル range の説明

自分で関数つくって for 文でループさせていたのがアホに思えます…
自分で用意しようと思えば簡単に用意できちゃうために、未だ知らない事って結構あるなぁと思います。

Feb 23

php マニュアル(chm版) 文字化け解消方法

8

皆様は、phpオフィシャルサイトから、Windowsヘルプ形式のchm版のマニュアルをダウンロードしたことはありますでしょうか?
多分一度でも使ったことのある方は、非常に便利だ!って思っている方が多いと思います。

ただ、それでも実は 1 点大きな欠点があります。もちろん使用されたことのある方は知っているかと思いますが、ダウンロードしたままだと、マニュアル内のキーワード(マニュアルに含まれるキーワードをインクリメンタルサーチが出来る部分)が、文字化けしているんです。

実は結構悩んでいて、ただそのために随分古い文字化けの無いバージョンを使用していたのですが、解消する方法がわかったのでメモ残しておきます。

【方法】
ダウンロードした chm ファイルを、自分の PC 上で再コンパイルする。
【必要なツール】
【手順】
  1. KeyTool を起動
  2. メニューバー [Tools] → [Decompile] から、chm ファイルを自分の好きなフォルダに decompile (元のファイルに解凍?ってイメージに近い) する。
  3. そうすると、php_manual_ja.hhc、php_manual_ja.hhk、php_manual_ja.hhp、ja というフォルダ(中に数千の、.html) が作成されます。
  4. 今度は、HTML Help Workshop を起動。
  5. メニューバー [File] → [Compile] → [さきほどの php_manual_ja.hhp] を選択。
  6. Compile(数千の html ファイルをまとめ、chm ファイルを生成) が始まるので、しばらく待つ。
  7. 完了! キーワードの文字化けが解消した chm マニュアルが完成します。

オフィシャルの方は、何故うまくいってないかは想像でしか判断出来ませんが、自分で再コンパイルしてでも、キーワード検索は利用出来たほうが良いです(キッパリ)。

(おまけ)
でも、chm ファイルも便利ですが、つい先日のはてな勉強会で知った、
http://api.rails2u.com/
のインターフェイスのほうがさらに今風でかっこいいよなーと思います。

Feb 20

php で YAML

0

いまさらながら、YAML。簡単かつわかりやすくて良いですねぇ。
日本 ruby の会によるるびまでも YAML についての記事がありましたが、php でも spyc というライブラリで簡単に扱うことができます。

spyc
http://spyc.sourceforge.net/

もし、schema.yml というファイルを読み込む場合、

$dat = Spyc::YAMLLoad(’schema.yml’);

とやるだけで、$dat に 配列として、schema.yml を読み込むことが出来てしまいます。
これはもう簡単というかなんというか、便利すぎです。

実は最近、symfony という PHP5 のフレームワークをいじっているのですが、このフレームワークも、YAML を最大限利用して作られているんですよね。

その中で出てきた propel という O/R マッパー(?)なんかも含めもうちょっと理解できたらまとめたいと思います。

普段自分は情報を追っかけているつもりでしたが、全然追えていないし、自分が知らないだけで便利な技術っていっぱいあるんだなーと改めて思いました。

Feb 16

pear コマンド alpha、beta バージョンのインストール方法

0

なんだかたまに詰まる pear コマンドの使用方法。
まれに、依存性の関係やらなにやらで、beta が必要になる時があります。

以下コマンドで普通にインストールすると、stable 版がインストールされてしまいます。
(例として、パッケージを phpdocumentor とします)

> pear install phpdocumentor

それを回避したい場合は、以下の様にコマンドを打つことで回避できます。

beta バージョン

> pear install phpdocumentor-beta

alpha バージョン

> pear install phpdocumentor-alpha

わかっちゃえば簡単なんですが、ついつい引っかかったりしちゃうんですよねぇ…

<<追記>>
ホント無知であれなのですが、予め以下のコマンドを打っておくと、-beta 無しで行けるようです。
(stable ではなく、開発途上バージョン[beta等] を優先する)

>pear config-set preferred_state beta

 Page 1 of 2  1  2 »