忍者ブログ

カウンター

プロモーション

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


  • 2024/05/02 19:14

PHP のextension であるbcompilerをVisual Studioでbuild する(1/2)

PHP の調べ物

PHP を使っていると度々魅力的な拡張に出くわす@v@
今回、
bcompiler — PHP バイトコードコンパイラ
というものに出くわして
PHP をインストールせずにexe 形式の実行ファイルを使って
サーバーを擬似的に作れるかもしれない?!という事を発見した。

そして調べていると以下に
http://php.net/manual/ja/bcompiler.installation.php
この PECL 拡張モジュールの DLL は、現在存在しません。 Windows でのビルド も参照ください

とある、^Д^ありえない、一番面倒くさいパターンwww

ネタバレ的なWindows のコンパイルのドキュメントの主要はWiki でした。

Windows Specific Internals Docs

とりあえず、他の方法、つまり他のバージョンのPHP から
該当の拡張が引っ張れないかな?と思ってやってみた。

http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/
で、適当にダウンロードして調べたら
xampp-win32-1.7.1

%userprofile%\Downloads\xampp-win32-1.7.1\xampp\php\ext
に、
php_bcompiler.dll
があるジャマイカ!!!!
が、それ以後のには
php_bcompiler.dll
はやはり無い;x;

これや!と思って現在の、自身の環境、PHP5.3.5 に持ってきたが
PHP Warning:  PHP Startup: bcompiler: Unable to initialize module
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match
 in Unknown on line 0
Warning: PHP Startup: bcompiler: Unable to initialize module
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match
 in Unknown on line 0
PHP Warning:  PHP Startup: bcompiler: Unable to initialize module
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match
 in Unknown on line 0
Warning: PHP Startup: bcompiler: Unable to initialize module
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match
 in Unknown on line 0
と出て無理っぽい

なんでか調べると、PHP のバージョンによって、
コンパイラのバージョンとか、関数の違いとか異なるから
違うと動かないっぽい

一応公式で調べると
PHP 拡張モジュールの Windows へのインストール
ではphp.exe -i してとか、書いてあって、phpinfo()関数使えば
拡張が動いているか分かるよって書いてあるけど、どう考えても無理っぽい・・・

自分でコンパイルしていいよ!とか軽いノリなのかもしれないが
とてつもなく面倒臭いのは目に見えていた゚w゚;

PHP は簡単にWeb系のプログラムが出来るからいいんじゃないか!!!

なんでコンパイルせなぁーあかんのや!(注意:大阪の人じゃぁーありません)

と悩む事約3日、もう逃げられない、イライラとの対決もおさらばしたい!

やるか!もう手が動けばなんとかなる!と思って、今まで調べていたことから
探っていくか・・・と思った。

普通に
Windows システムへのインストール
という所の目次に
手動でのインストール
という項目があり其処に
 PHP for Windows: Binaries and Sources
からWindows 用のソースを落として使ってね!
コンパイラは、

  • PHP を IIS で使う場合は、PHP 5.3 VC9 Non Thread Safe あるいは PHP 5.2 VC6 Non Thread Safe を選びます。

  • PHP 5.3 以降を IIS7 以降で使う場合は、VC9 版のバイナリを使わなければなりません。

  • PHP を Apache 1 あるいは Apache 2 で使う場合は、PHP 5.3 VC6 あるいは PHP 5.2 VC6 を選びます。

だそうです・・・

このページの続きを見て思った!
あれ!?!?!

注意:

VC9 版は Visual Studio 2008 でコンパイルしており、パフォーマンスや安定性が優れています。 VC9 版を使うには、» Microsoft 2008 C++ Runtime (x86) あるいは » Microsoft 2008 C++ Runtime (x64) をインストールしなければなりません。

と書いてある・・・・
しまった、Cisual Studio 2010 しかインストールしてないよ^Д^;

これじゃコンパイラのバージョン違うからビルドできない??!!!

であれこれ調べた記事の中に、
PHP拡張モジュールを Windows でビルド
という記事でパスはよく分からなかったけど
・・・\SDK\include\main\config.w32.h
という部分の
#define PHP_COMPILER_ID "VC10"
#define PHP_COMPILER_ID "VC9"
にしてしまえば、中身はVC10 でコンパイラしたものだけど
VC9 で作った事に見せかけられるらしい!!!

と、とりあえず、開発環境今からなんか出来るだけしたくないというか、
VC10 のPHP もあった様な・・・・!?

公式の
http://windows.php.net/download/
調べてみると、VC10 でコンパイルされているのが無かったorz

PHP5.4(5.4.34)までがVC9 で
PHP5.5(5.5.18)からはVC11 だ!!!
VC10 は何処へ行ったwww
無視されてる;x;

あれ?おかしいな
Windows Build, step by step
には、
  • Visual C++ 9.0 (Visual Studio 2008) for PHP 5.3 and 5.4. You can use the Express versions as well.
あぁ、5.3と5.4 は早いコンパイラとしてVC9.0 が使えますって事か、
使える様になった!つまり、古いコンパイラでもいけるのか?


気になりまくったのでもっと知りたかったので
WikiPedia でMicrosoft Visual C++
そして他のサイトで製品別VCバージョン一覧

うん、違うかもwww

まぁいい・・・とりあえずだ、とりあえず・・・
コンパイルしてみたい・・・
動かない時には本当に入れ替えてみよう・・・
では次

と書いてあり、そこからtools を落とせとある。
       Thursday, May 12, 2011  2:06 PM      1435660 php-sdk-binary-tools-20110512.zip
Thursday, September 15, 2011 1:02 PM 2714535 php-sdk-binary-tools-20110915.zip
があるけれど、新しい方である
php-sdk-binary-tools-20110915.zip
をとりあえずダウンロードして

  1. Create the folder “c:\php-sdk“
  2. Unpack the binary-tools.zip archive (http://windows.php.net/downloads/php-sdk/) into this directory, there should be one sub-directory called “bin” and one called “script“
とあるので、
C:\php-sdk\
とディレクトリの名前を付けてその中に展開した。

次に、

Windows Build, step by step
にはWindows SDK もいるって書いてある

も見つけたが、2014/11/02現在では、Widows Server2003 Platform SDK と
Windows Server 2008 and .NET Framework 3.5 の事が書いてあった。

そういえば、私の環境は、
Microsoft Windows SDK v7.1
があり、そしてダウンロードのフォルダに
Microsoft Windows SDK for Windows 7.1 Setup があって、入っているので、
多分、
を入れているのだと思う。

Windows SDK のバージョンもPHP の説明サイトよりも新しい物が入っているということ。

Windows 8.1 のSDK もあったが、とりあえずこのマシンはWindows 7 だし、
古いSDK を使っている訳でもないので、多分・・・これもいけると思う、
他のサイトでも同様に新しいSDK v.7.1 を使っていたり、1つ前を
使っていたりするのを見かけた。

多分・・・これも何とかなる!!!???

そして公式に戻るが
Windows Build, step by step
に 「Windows SDK 6.1 shell」を開いてとあるが
私の環境は違うので、私のスタートメニューの中には
「Windows SDK 7.1 Command Prompt」というのがあって、
これが該当のコマンドプロンプトになる。

そのコマンドプロンプトから
setenv /x86 /xp /release
を実行しないといけないらしいのだが、私の環境では動かなかった。

理由は環境変数に
C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
が通っていなかった為、SetEnv.Cmd が動いていない。

なので環境変数でパスを通す必要がある。

コンピューターのプロパティ、Windows 7 ではシステムとセキュリティ>システム
(PauseBraak キー + Windows キー でも行けます)
画面にある、設定の変更ボタン=>詳細設定タブ=>環境変数ボタン

こちらのシステム環境変数の中の変数がPath になっている、
※既存のPath の内容を消さない様に※、追加で ; で区切って
;C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin
を最後の部分に追加します、それでPC 再起動。

これで、C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd
が動きました。

ちょっと余談、setenv がなんでWindows のコマンドなんだ!!!とか思って、
とりあえず調べてみた、あと引数が/xp とか /release とか何だ?!!!とかも
ここに載っていた
http://msdn.microsoft.com/en-us/library/ff660764(v=vs.100).aspx


続いて
  1. bin\phpsdk_setvars.bat
    bin\phpsdk_buildtree.bat phpdev
を行い
ディレクトリにphpdev などを作ります、
.bat の中身は、一時的に変数をセットしたりディレクトリを作る内容などでした。

次に
  1. Now extract the PHP source code to C:\php-sdk\phpdev\vcXX\x86 with your favorite unpacker (7-zip should handle it) where vcXX is the compiler version you are using. For example C:\php-sdk\phpdev\vc11\x86\<php-source-directory>
とあり、これは、
ソースのダウンロード先
http://windows.php.net/downloads/php-sdk/
で7-zip 形式(解凍は、参照① などで)のものをダウンロードしてくる。
私の場合には、
Monday, September 15, 2014 10:00 PM 20574717 deps-5.3-vc9-x86.7z
というのをダウンロードしてきた。

これを展開するとdeps というフォルダが出来るので、
今回本当は、VC10 だけど、VC9 であると擬似的に変えるので、
それをVC9 のx86 である
C:\php-sdk\phpdev\vc9\x86\
deps-5.3-vc9-x86.7z の中身をdeps というフォルダにコピーした。

その時に、見本みたいな、deps が元々あるが
これは多分必要ないのでリネームしてdeps_ にしておいた。

というかリネームしたが、要らないので上書きでもいい。

次に、私のPHP のバージョンが、PHP5.3.5 であったので、
これに合わせて
http://php.net/releases/
もしくは
http://php.net/downloads.php
だと思ってたら、リンクのアンカーはある物の、リンク切れ・・・
This service is unavailable at the moment. Please try again in a day
と表示される・・・

よく読んだら
Get PHP via git or a snapshot (do not extract yet!)
と書いてあったので、このgit か snapshot 
から持ってくるみたい?です。

でもってでもって、
snapshot  も、
This service is unavailable at the moment. Please try again in a day
もリンク切れ・・・

git  からだけなんだ???
該当のファイルを探してダウンロードします。

私の場合は でした。

ポチッ!っとダウンロード
This service is unavailable at the moment. Please try again in a day
いい加減にしてくれ^w^;
そもそも
http://museum.php.net/xxxxxx ってもう
This service is unavailable at the moment. Please try again in a day
なサーバーorz

色々いじってて分かったwwww
結果的に何処かのリンクには乗ってない、現状のリンク先のディレクトリを探ってみると
今は
http://windows.php.net/downloads/releases/
からしかダウンロードできない@w@#

でもって、PHP5.3.5 は節目のバージョンじゃなかったのか
http://windows.php.net/downloads/releases/archives/
アーカイブに該当のソースを見つけました!

      Tuesday, March 22, 2011  1:58 PM     20281963 php-5.3.5-src.zip

よく見ると、コンパイル済みの方は
      Tuesday, March 22, 2011  1:57 PM     24996864 php-5.3.5-nts-Win32-VC6-x86.msi
Tuesday, March 22, 2011 1:57 PM 13763420 php-5.3.5-nts-Win32-VC6-x86.zip
Tuesday, March 22, 2011 1:58 PM 28206592 php-5.3.5-nts-Win32-VC9-x86.msi
Tuesday, March 22, 2011 1:58 PM 15691368 php-5.3.5-nts-Win32-VC9-x86.zip

      Tuesday, March 22, 2011  1:59 PM     25115648 php-5.3.5-Win32-VC6-x86.msi
Tuesday, March 22, 2011 1:59 PM 13908109 php-5.3.5-Win32-VC6-x86.zip
Tuesday, March 22, 2011 1:59 PM 28335616 php-5.3.5-Win32-VC9-x86.msi
Tuesday, March 22, 2011 1:59 PM 15833206 php-5.3.5-Win32-VC9-x86.zip
があるのですが、nts とインストーラー形式の違い以外に、VC6 とVC9 の
コンパイルが選べた事に気がついたのですが、自分がVC6 でコンパイルされた物を
使っているのは分かっています。

しかし、XAMPP のxampp-win32-1.7.1.zip
は、
PHP 5.2.9 (cli) (built: Feb 25 2009 15:52:24)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technol
ogies
    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
となるので、PHP5.2.9 そうすると、以下の様に
      Tuesday, March 22, 2011  1:43 PM     17531904 php-5.2.9-nts-Win32-VC6-x86.msi
Tuesday, March 22, 2011 1:43 PM 10411799 php-5.2.9-nts-Win32-VC6-x86.zip
Tuesday, March 22, 2011 1:43 PM 17705984 php-5.2.9-Win32-VC6-x86.msi
Tuesday, March 22, 2011 1:43 PM 10512387 php-5.2.9-Win32-VC6-x86.zip
VC6 でコンパイルしたものしか無いんですよね

ならば自分がVC6 でコンパイルされたPHP5.3.5 を使っているので
メッセージを見る限り、
Module compiled with module API=20060613
PHP    compiled with module API=20090626
These options need to match
でmodule の違いはコンパイラの違いだと思っていましたが、
このAPI とは、PHP のバージョンの違いもやはり示しているという考えが
正しいのかもしれません。

話は少しそれますが、不思議なディレクトリを見つけましたのでディレクトリメモ・・・・w
http://windows.php.net/downloads/php-sdk/deps/vc9/x86/
うーん・・・SDK???? まぁいいや、後回し^^;

それで話は戻って、先ほどダウンロードしたphp-5.3.5-src.zip
これを解凍すると、php-5.3.5-src\php-5.3.5 というディレクトリ階層で
php-5.3.5 が出来るので、これを
C:\php-sdk\phpdev\vc9\x86\ にコピー
このディレクトリには、
C:\php-sdk\phpdev\vc9\x86\deps\
があるディレクトリである、つまり、
C:\php-sdk\phpdev\vc9\x86\php-5.3.5\
が出来ます。


ここで色々ネットで調べた情報によると、PHP本体のコンパイルには、calendarの拡張フォルダにある
jewish.c というソースにヘブライ語が含まれているみたいで、
これがコンパイルを失敗させるそうです。

yoyaのメモ - PHPソース中のヘブライ語
ISO-8859-8 のヘブライ文字の領域が MSB が立ってて SJIS の1byte目と誤解されてる件の対処なので、8bit スルーさせれば解決する。はず。
と書いてあって、具体的にPHPで変換するスクリプトの一部があった。



その先に結果があったので、それを自身の変数char *JewishMonthHebName[14] 
の部分に貼ることにした。

内容は書いておかないとメモにならないので頂いてきました@x@;
ご自身で変換するのならば、PHPスクリプト一部は上記のyoyaさんのページで見て下さい。
char *JewishMonthHebName[14] =
{
    "",
    "\xfa\xf9\xf8\xe9",
    "\xe7\xf9\xe5\xef",
    "\xeb\xf1\xec\xe5",
    "\xe8\xe1\xfa",
    "\xf9\xe1\xe8",
    "\xe0\xe3\xf8",
    "'\xe0\xe3\xf8 \xe1",
    "\xf0\xe9\xf1\xef",
    "\xe0\xe9\xe9\xf8",
    "\xf1\xe9\xe5\xef",
    "\xfa\xee\xe5\xe6",
    "\xe0\xe1",
    "\xe0\xec\xe5\xec"
};

yoyaさんに感謝!

それで私の場合、該当箇所は
C:\php-sdk\phpdev\vc9\x86\php-5.3.5\ext\calendar\jewish.c
です。元のjewish.c はとりあえず、jewish - ヘブライ語を直す前.c とかにして
中身をVisualStudion2010 で開くと保存形式が変わるからどうとか言ってきて
信用ならないので、私はNotepad++(参考: ) で開いて該当箇所を直しました。

では続き
Change directory to the location of your PHP source code:
  1. cd C:\php-sdk\phpdev\vcXX\x86\php-source-directory
とあるので、私の場合は
C:\php-sdk\phpdev\vc9\x86\php-5.3.5
になるので、
cd C:\php-sdk\phpdev\vc9\x86\php-5.3.5
をしてカレントディレクトリを変える

Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.1
\.
Targeting Windows XP x86 Release

C:\Program Files\Microsoft SDKs\Windows\v7.1>cd c:\php-sdk\

c:\php-sdk&gt;bin\phpsdk_setvars.bat

c:\php-sdk>REM phpsdk.bat

c:\php-sdk>bin\phpsdk_buildtree.bat
phpdev c:\php-sdk>cdC:\php-sdk\phpdev\vc9\x86\php-5.3.5

C:\php-sdk\phpdev\vc9\x86\php-5.3.5>
続きからだと上記になる


出続きを見ると
Run:
  1. buildconf
とりあえす、buildconf.bat を実行するらしい。
やってみたら、

Rebuilding configure.js
Now run 'configure --help'
あれ?
なんか、buildconf じゃなく、configure のヘルプを見ろと出るっぽい
そして次の項目は
To get an overview of the compiling flags:
  1. configure --help
おんなじw
先に見ればよかったんじゃないの?これw


configure --help
やってみた
Options that enable extensions and SAPI will accept 'yes' or 'no' as a
parameter. They also accept 'shared' as a synonym for 'yes' and request a
shared build of that module. Not all modules can be built as shared modules;
configure will display [shared] after the module name if can be built that
way.
 
~~~~略~~~~

いやもう、多すぎたので略しましたw
何を含めてコンパイルするかって言われてもなぁw
PHP のマニュアルをネットで探した方が良さそう^^;

一番初め、とりあえず
configure
だけしてみたけどダメで
C:\php-sdk\phpdev\vc9\x86\php-5.3.5>configure --disable-all --enable-cli
したら、かなり長いので載せないですが、チェックとか、
Enabled extensions とかでMode がstatic なのかとか
SAPI はcgi とcli が名前に入っているから有効だなとか
コンパイルのバージョンとかが出てきた。


最後の行で
Type 'nmake' to build PHP
と出たので、
とりあえず、nmake してみたら、

warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
だらけwwwwwwwwwwwww

でもとりあえず、
出来上がってるっぽい!!!!
C:\Users\classic>C:\php-sdk\phpdev\vc9\x86\php-5.3.5\Release_TS\
を見るとphp.exe やら、php-cgi.exe やらあります;w;

やった!

とりあえず、普通にコマンドプロンプトでテストしてみる
C:\Users\xxxxx>C:\php-sdk\phpdev\vc9\x86\php-5.3.5\Release_TS\php.exe -r "echo
 'はろーわぁーるど';"
はろーわぁーるど
C:\Users\xxxxx>C:\php-sdk\phpdev\vc9\x86\php-5.3.5\Release_TS\php.exe -v
PHP 5.3.5 (cli) (built: Nov  4 2014 09:34:27)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

うっ、動いてる・・・!!!!!

わっ、私のしたい事は、PHP をコンパイルしたかった訳じゃない^w^;

拡張の、php_bcompiler.dll

を、どのバージョンでも作れる様になって、
とりあえず自分が使っている、PHP5.3.5 で使える様にしたかったのだ・・・

まだ道のりは遠い@@;

半分くらい。。。

後半の2/2(まだありません! 少々お待ちを・・・・orz)に続く

拍手[0回]

PR


  • 2014/11/02 09:05

コメント一覧

  • お名前
  • Email

  • コメント

  • Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  • パスワード
[PR]