メイン

PHP アーカイブ

Page:  1  |  2  |  3  |  4 

2010年5月 5日

要点だけのメモ

Bashbの環境設定を追加

export EXTRA_LIBS="-lresolv"

make時にiconv関連のエラーが以下のように出るので、PHP5.2.3にパッチをあてる

Undefined symbols:
  "_libiconv", referenced from:
      __php_iconv_strlen in iconv.o
      _php_iconv_string in iconv.o
      _php_iconv_string in iconv.o
      __php_iconv_strpos in iconv.o
      __php_iconv_appendl in iconv.o
      __php_iconv_appendl in iconv.o
      _zif_iconv_substr in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _zif_iconv_mime_encode in iconv.o
      _php_iconv_stream_filter_append_bucket in iconv.o
      _php_iconv_stream_filter_append_bucket in iconv.o
     (maybe you meant: __libiconv_version)
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [libs/libphp5.bundle] Error 1

PHP 5.3.0 on Mac OS 10.6 (Snow Leopard)を参考

diff -Naur php-5.3.0/ext/iconv/iconv.c php/ext/iconv/iconv.c
--- php-5.3.0/ext/iconv/iconv.c	2009-03-16 22:31:04.000000000 -0700
+++ php/ext/iconv/iconv.c	2009-07-15 14:40:09.000000000 -0700
@@ -51,9 +51,6 @@
 #include 
 #endif
 
-#ifdef HAVE_LIBICONV
-#undef iconv
-#endif
 
 #include "ext/standard/php_smart_str.h"
 #include "ext/standard/base64.h"
@@ -182,9 +179,6 @@
 }
 /* }}} */
 
-#ifdef HAVE_LIBICONV
-#define iconv libiconv
-#endif
 
 /* {{{ typedef enum php_iconv_enc_scheme_t */
 typedef enum _php_iconv_enc_scheme_t {

5.3.0用なので、そこはpacheの指示に従ってファイルを指定すればかかるハズ。

configure

./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-apxs2=/usr/sbin/apxs --with-ldap=/usr  --with-gd --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/local/lib --with-readline --with-openssl --with-kerberos --enable-cli --with-zlib-dir=/usr --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-config-file-path=/etc --sysconfdir=/private/etc --with-pgsql --with-xmlrpc --with-xsl=/usr --with-iconv-dir=/usr/bin

メモ書いて気づいた^^;
上書きしちゃったよorz
/usr/local/binに突っ込む予定だったのに。何のためにサーチパスの変更までしたんだか…。

./configure --with-pgsql --with-gd --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/local/lib --with-readline --with-openssl --with-kerberos --with-zlib --with-curl --enable-exif --with-iconv-dir=/usr/bin

10.6.4で上書きされたら、次回はこっちでインスコしてみよう。

2009年7月27日

とりあえずいろいろメモ状態ですが…。

MacPortを使うもコンパイルエラーで断念。
とりあえず、ImageMagicとかライブラリなど依存関係のものは(Universal状態で)インストールできたので、PATHを通してありがたく使用する。

PostgreSQLをソースからインストール。

環境変数をセットする。

cd
vi .bash_profile
export PATH=$PATH:/usr/local/pgsql/bin
export MANPATH=$MANPATH:/usr/local/pgsql/man
export POSTGRES_HOME="/usr/local/pgsql/"
export POSTGRES_LIB="/usr/local/pgsql/lib -lssl -lcrypto"
export POSTGRES_INCLUDE="/usr/local/pgsql/include"

OSXのshared memory segmentの変更を行う。
これ重要。後にperlモジュールのDBD:Pgのmake testでエラーの原因となる。

shared memoryの確認方法

ipcs -M

sysctl.confを作成して再起動で設定を反映させる。

sudo vi /etc/sysctl.conf
kern.sysv.shmmax=167772160
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.sysv.shmall=65536

PHPをソースからインストール。

./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-apxs2=/usr/sbin/apxs --with-ldap=/usr --with-kerberos=/usr --enable-cli --with-zlib-dir=/usr --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-config-file-path=/etc --sysconfdir=/private/etc --with-pgsql --with-xmlrpc --with-xsl=/usr --without-pear

インストールされた、libphp5.soの様子がおかしい。

sudo httpd -t
httpd: Syntax error on line 115 of /private/etc/apache2/httpd.conf: Cannot load /usr/libexec/apache2/libphp5.so into server: dlopen(/usr/libexec/apache2/libphp5.so, 10): no suitable image found.  Did find:\n\t/usr/libexec/apache2/libphp5.so: mach-o, but wrong architecture

Leopard で PHP5 を再構築できなかった話によると、デフォルトでインストールされているapacheは64ビット(x86_64)で動いているのに、phpのモジュールが32ビット(i386)なのでイヤをしているとのこと。
httpd_64.jpg
ロードされている他のモジュールがどのようにコンパイルされているかを考えたら先には進めないのですが、きっとPPC、ppc64、i386、x86_64対応になっているんだよ!
というわけで、疑問は横においといて、解決策として、Running FogBugz on Leopardにあるように、Apacheの方をなんとかしちゃえって話にして片付ける。

% cd /usr/sbin
% sudo cp httpd httpd-fat
% sudo lipo httpd -thin i386 -output httpd

とりあえずこれで32ビットのapacheを抽出したのかな?

一応これで解決だけど、いろいろと面倒なことになった感じ…。
セキュリティアップグレードの度にごにょごにょしないといけないかもね;;
雪豹あたりだと64ビットでコンパイルできるようになるのかなぁ?

続きを読む "IntelMacにPostgreSQL8.3とPHP5.2のインストール" »

2009年5月 8日

PHPでカレンダーを作るときに、面倒なのが土日祝日。
土日はなんとかなるとしても、祝日は無理。
なので、ここは素直に関数をもらってきます。

PHP 用祝日判定コード
もともとVBAで書かれたものをいろんな言語に移植してくれています。

ここは素直にありがとーございます。

2009年3月11日

いろいろと忘れちゃっていて右往左往。
PHPのセッションIDはcookieに保存されるのが通例だけど、cookieが無効な場合にURLに付加したり、HTMLに埋め込んだりできる設定がある。

php.ini

session.use_only_cookies = 1
;1 -> セッションIDをクッキーからのみ受け付ける設定
;0 -> セッションをGETからも受け付ける設定

session.use_trans_sid = 0
;1 -> HTMLにセッションIDを埋め込む設定がON
;     ブラウザのcookieがOFF & session.use_only_cookies = 0 の時に有効
;0 -> HTMLにセッションIDを埋め込む設定がOFF

ただ今、掲示板で書き込みする際にcokie食べない子には403 Forbiddenをプレゼント中です。

2009年1月27日

strftime()で日付をフォーマットする際に年を%Gにするか%Yにするかで結果が変わってくるころがあるんですね。

マニュアルによると、

%G - ISO 週番号 (%V を参照) に対応する 4 桁の年。 これは ISO 週番号が前年もしくは次年に属するかによって使用される年が 異なる事を除き %Y と同じフォーマットと値です。

これは、ISO 8601形式による週の番号によって年が決まるということで、

ISO 8601:1988 で規定された現在の年の週番号の 10 進数表現で、 01 から 53 までの範囲となります。1 は最初の週で、その週は現在の年に 最低 4 日はあります。週は月曜日から始まります (指定したタイムスタンプの週番号に対応する年を表すには、 %G あるいは %g をしてください)。

つまるところ、1月4日を含む週がその年の第1週。 例えば2008年末から2009年始のカレンダーを例にすると、

Mo Tu We Th Fr Sa Su
29 30 31 01 02 03 04 <--第1週
05 06 07 08 09 10 11 <--第2週

2008年12月29日から2009年扱いになります。 つまり%Gで年を表記すると、同じタイムスタンプからでも%Yとは異なる結果になるというわけです。

また、週のフォーマットの方も%U、%W、%Vで結果が異なります。

%U - 年間で何番目の週であるかを 10 進数で表現。 年間で最初の日曜を最初の週の最初の日として数えます。
%V - ISO 8601:1988 で規定された現在の年の週番号の 10 進数表現で、 01 から 53 までの範囲となります。1 は最初の週で、その週は現在の年に 最低 4 日はあります。週は月曜日から始まります (指定したタイムスタンプの週番号に対応する年を表すには、 %G あるいは %g をしてください)。
%W - 現在の年で何番目の週であるかを 10 進数で表現。 年間で最初の月曜を最初の週の最初の日として数えます。
年始何末の挙動
1230303600 --> 2008-12-27(Sat)
 %Y(%U:%W) --> 2008(51:51)
 %G(%V)    --> 2008(52)
1230390000 --> 2008-12-28(Sun)
 %Y(%U:%W) --> 2008(52:51)**********(1)
 %G(%V)    --> 2008(52)
1230476400 --> 2008-12-29(Mon)
 %Y(%U:%W) --> 2008(52:52)
 %G(%V)    --> 2009(01)**********(2)
1230562800 --> 2008-12-30(Tue)
 %Y(%U:%W) --> 2008(52:52)
 %G(%V)    --> 2009(01)
1230649200 --> 2008-12-31(Wed)
 %Y(%U:%W) --> 2008(52:52)
 %G(%V)    --> 2009(01)
1230735600 --> 2009-01-01(Thu)
 %Y(%U:%W) --> 2009(00:00)**********(3)
 %G(%V)    --> 2009(01)
1230822000 --> 2009-01-02(Fri)
 %Y(%U:%W) --> 2009(00:00)
 %G(%V)    --> 2009(01)
1230908400 --> 2009-01-03(Sat)
 %Y(%U:%W) --> 2009(00:00)
 %G(%V)    --> 2009(01)
1230994800 --> 2009-01-04(Sun)
 %Y(%U:%W) --> 2009(01:00)**********(1)
 %G(%V)    --> 2009(01)
1231081200 --> 2009-01-05(Mon)
 %Y(%U:%W) --> 2009(01:01)
 %G(%V)    --> 2009(02)
終了

(1)%Uは日曜始まり、%Wは月曜始まり
(2)ISO週番号に連動して年始まりが繰り上がる
(3)週番号のスタート値が%U・%Wでは00だが、%Vでは01

ちなみに2009年末から2010年始はどうなるかというと、

Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 01 <--第53週
02 03 04 05 06 07 08 <--第1週

1262271600 --> 2010-01-01(Fri)
 %Y(%U:%W) --> 2010(00:00)
 %G(%V)    --> 2009(53)

2010年1月1日までが2009年になるなど、週の方も繰り下がります。

Page:  1  |  2  |  3  |  4 

カテゴリー

PAMO Menu
イラスト 綾波レイ MIWO 独白 掲示板