Nacky - Snowland.net

Nacky(Issei Ishii)がDJ/Composerのようなふりして書き散らすblogサイト

Info

«Prev || 1 | 2 || Next»

2010-03-08

PHP5.1でjson関係の関数を使う

CentOS5.4でのPHPはまだ5.1系なので,5.2系以降対応になっているjson関数(json_decode等)が使えません.
がんばってPHPを5.2に上げるという手もありますが,それは一苦労.
しかしマニュアルにある通りPECLでリリースされているので,追加してやれば使えます.
(むしろPECLであったものが5.2で標準になった)

# pecl install json
# echo 'extension=json.so' > /etc/php.d/json.ini
# service httpd restart

phpinfoでpeclを確認.問題なく動きました.
23:14:15 - nacky - Category: Com/Tech ( PHP ) - No comments - No Trackbacks

2010-02-12

PHPのサーバ環境変数とEZwebの挙動

PHPで$_SERVERを参照するとサーバ環境変数が取得できます.

このうち $_SERVER['HTTP_HOST'] と $_SERVER['SERVER_NAME'] は似て非なるものです.
HTTP_HOSTは,クライアントがリクエストヘッダ中でサーバに送ってくる Host ヘッダ.
SERVER_NAMEは,サーバ側が持ってる名前(VirtualHostのときはその名前).

大体の場合両者は一致するのですが,EZweb端末でSSL上のリクエストを行うと,HTTP_HOSTの末尾にポート番号が付きます.
https://example.com/ とすると
$_SERVER['HTTP_HOST']は example.com:443
$_SERVER['SERVER_NAME']は example.com
なんですな.

いずれにしろHTTP_HOSTのほうはブラウザが任意で送ってくるものなのでアテにしちゃいけません.
逆に443がほしければ $_SERVER['SERVER_PORT'] で取得できます.

PHP: $_SERVER - Manual
17:15:22 - nacky - Category: Com/Tech ( PHP ) - No comments - No Trackbacks

2010-01-27

PHPでbmpやtiffを扱いたい

PHPのGD関数だとimagecreatefromjpegとかでサクサクとjpegファイルを読み込めてとても便利なんですが,Windows BMPとtiffには対応していません.

Windows BMPに関してはDHKoldさんのimagecreatefrombmp関数(自力でbmpを読む)がありますのでありがたく使わせていただきます.
PHP: imagecreate - Manual #53879

じゃあtiffはどうするか.これがまた全然情報がない.
仕方ないのでとりあえずはtiff2pngという外部のプログラムを使うことにします.

tiff2png Home Page
PNG 利用術

Linux x86/glibc のバイナリがあるのでそちらをDL.
$ tiff2png -destdir <書き出し先> <tiffファイル>
動作確認.
あとはtmpnameなりを使ってテンポラリファイルを確保して,system()関数あたりで呼び出してやればOK.
# tiff2pngは-destdirを指定しないとカレントに書き出そうとするようで,パーミッション問題でややハマり.

追記
tiff2pngは拡張子.tiffや.tifだとリネームして.pngになってくれますが,tmpnameとかでテンポラリファイルとして拡張子なしのものを食わせると,後ろに.pngを追加したファイル名にしてくれます.

hogehoge.tif → hogehoge.png
hogehogetmp → hogehogetmp.png
20:54:54 - nacky - Category: Com/Tech ( PHP ) - No comments - No Trackbacks

2009-12-16

追記リダイレクトを同時に走らせるとどうなるか

「これって出力をリダイレクトしてますけど,複数プロセス走ったらどうなるんですか?」

試せばいいじゃないか…

test1.php
<?php echo 'A'; sleep(10); echo 'B';
test2.php
<?php echo 'C'; sleep(10); echo 'D';
で,実行.
$ php test1.php > log &
[1] xxxx
$ php test2.php > log &
[2] xxxx
$ cat log
C
[1]- Done php test1.php > log
[2]+ Done php test2.php > log
$ cat log
CD

$ php test1.php >> log &
[1] xxxx
$ php test2.php >> log &
[2] xxxx
$ cat log
AB
[1]- Done php test1.php >> log &
[2]+ Done php test2.php >> log &
$ cat log
ACBD

…みたいな話,やらないで通った人はやらないまんまなんだろうなぁ.

※phpで書いてるのはそういうシチュエーションだったからです
※CentOS5上での話.処理系によって異なる?まぁ試せばいいじゃないか…
12:33:00 - nacky - Category: Com/Tech ( UNIX , PHP ) - No comments - No Trackbacks

2009-12-07

use_trans_sidと&amp;の実体参照

PHPで携帯用サイトを作る際に,セッション情報を持たせるためにuse_trans_sidを設定し,URLの末尾にPHPSESSID=xxxxxx... という文字列をつけさせる処理はよく行われます.

しかしXHTMLで書いた携帯サイトをFireFoxで見たらXMLエラーが!
ソースを見てみると,GETパラメータの後に自動で付加される PHPSESSID が &PHPSESSID となっている.
本来だったら文字実体参照で &amp;PHPSESSID となってほしい.

.htaccessに
php_value arg_separator.output '&amp;'
と書いて解決.

もちろん
ini_set('arg_separator.output','&amp;');
としても良い,はず.
21:42:37 - nacky - Category: Com/Tech ( PHP ) - No comments - No Trackbacks
«Prev || 1 | 2 || Next»