Upload
y-uti
View
871
Download
0
Embed Size (px)
Citation preview
自己紹介内山雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味◦ プログラミング言語処理系
◦ 機械学習
2016-03-30 第100回 PHP 勉強会 2
PECL 拡張の導入二通りの方法1. バイナリをインストール
2. ソースコードをビルド
2016-03-30 第100回 PHP 勉強会 4
Linux Mac Windows
バイナリ yum, apt, ... DLLを直接取得
ソースコード phpize, make ?
OS 別の導入方法
◦ Mac は使ったことがないのでわかりません
ソースコードをビルドここを読む
◦ https://wiki.php.net/internals/windows/stepbystepbuild#building_pecl_extensions
2016-03-30 第100回 PHP 勉強会 6
◦ PHP のソースコードと同一階層に置いて buildconfして nmakeせよ
Windows で phpizeを使うここから php-devel-pack を取得
◦ http://windows.php.net/downloads/releases/
2016-03-30 第100回 PHP 勉強会 8
ビルド -環境設定Visual Studio 2015 開発者コマンドプロンプトで実行
2016-03-30 第100回 PHP 勉強会 10
C:¥Program Files (x86)¥Microsoft Visual Studio 14.0>cd VC
C:¥Program Files (x86)¥Microsoft Visual Studio 14.0¥VC>vcvarsall.bat amd64
C:¥Program Files (x86)¥Microsoft Visual Studio 14.0¥VC>cd ¥opt¥php-sdk
C:¥opt¥php-sdk>bin¥phpsdk_setvars.bat
◦ PHP のバージョンに応じた Visual Studio が必要です
◦ PHP 5.6 なら Visual Studio 2012
参照: "Supported compilers to build PHP on Windows"
◦ https://wiki.php.net/internals/windows/compiler
ビルド - phpize
Visual Studio 2015 開発者コマンドプロンプトで実行
2016-03-30 第100回 PHP 勉強会 11
C:¥opt¥php-sdk>cd ¥opt¥geospatial-master
C:¥opt¥geospatial-master>¥opt¥php-7.0.4-devel-VC14-x64¥phpize.bat
Rebuilding configure.jsC:¥opt¥php-7.0.4-devel-VC14-x64module ...
Now run 'configure --help'
ビルド - configure
Visual Studio 2015 開発者コマンドプロンプトで実行
2016-03-30 第100回 PHP 勉強会 12
C:¥opt¥geospatial-master>configure.bat --enable-geospatial
...
Enabled extensions:-----------------------| Extension | Mode |-----------------------| geospatial | shared |-----------------------
----------------------------------------------| | |----------------------------------------------| Build type | Release || Thread Safety | No || Compiler | MSVC14 (Visual C++ 2015) || Architecture | x64 || Optimization | PGO disabled || Static analyzer | disabled |----------------------------------------------
Type 'nmake' to build PHP
ビルド - nmake
Visual Studio 2015 開発者コマンドプロンプトで実行
2016-03-30 第100回 PHP 勉強会 13
C:¥opt¥geospatial-master>nmake
...
ライブラリ C:¥opt¥geospatial-master¥x64¥Release¥php_geospatial.lib とオブジェクト C:¥opt¥geospatial-master¥x64¥Release¥php_geospatial.exp を作成中
EXT geospatial build complete
◦ x64¥Release フォルダに DLL ファイルが出力される
動作確認東京 -札幌の距離
2016-03-30 第100回 PHP 勉強会 14
<?php
$tokyo = ['type' => 'Point', 'coordinates' => [139.69, 35.69]];$sapporo = ['type' => 'Point', 'coordinates' => [141.35, 43.06]];
var_dump(haversine($sapporo, $tokyo));
C:¥>php -d extension=C:¥opt¥geospatial-master¥x64¥Release¥php_geospatial.dll test.php
float(832715.80874697)
拡張を有効にして計算してみる
nmake install の罠デフォルトのインストール先は C:¥php
変更するには PECL 拡張を configure するときに指定
2016-03-30 第100回 PHP 勉強会 16
C:¥opt¥geospatial-master>configure.bat --with-prefix=C:¥opt¥php¥7.0.4 --enable-geospatial
◦ --with-prefix オプション
まぁ、指定しなくても手作業で DLL ファイルを置けば済む話
nmake test の罠Makefileに test ターゲットが存在しない
2016-03-30 第100回 PHP 勉強会 17
C:¥opt¥geospatial-master>nmake test
Microsoft(R) Program Maintenance Utility Version 14.00.23506.0Copyright (C) Microsoft Corporation. All rights reserved.
NMAKE : fatal error U1073: 'test' のビルド方法が指定されていません。
Stop.
まぁ、テストしなければ済む話
テストしたいPHP のソースまたは test-pack から run-tests.phpを持ってくる◦ ファイルを PECL 拡張のフォルダに置く
2016-03-30 第100回 PHP 勉強会 18
テストしたいrun-tests.phpを直接叩く
2016-03-30 第100回 PHP 勉強会 19
C:¥opt¥geospatial-master>php run-tests.php -p C:¥opt¥php¥7.0.4¥php.exe -n -d extension=C:¥opt¥geospatial-master¥x64¥Release¥php_geospatial.dll
◦ PHP 本体のMakefileを読むと、実際このように実行している
--enable-debug の罠--enable-debug を指定しても Release ビルドになる
2016-03-30 第100回 PHP 勉強会 20
C:¥opt¥geospatial-master>configure.bat --enable-geospatial --enable-debug
...
Enabled extensions:-----------------------| Extension | Mode |-----------------------| geospatial | shared |-----------------------
----------------------------------------------| | |----------------------------------------------| Build type | Release || Thread Safety | No || Compiler | MSVC14 (Visual C++ 2015) || Architecture | x64 || Optimization | PGO disabled || Static analyzer | disabled |----------------------------------------------
Type 'nmake' to build PHP
デバッグビルドしたいphpizeした後、configure.js スクリプトを修正する
2016-03-30 第100回 PHP 勉強会 21
// ARG_ENABLE('debug', 'Compile with debugging symbols', "no");
...
try {ARG_ENABLE('debug', 'Compile with debugging symbols', "no");} catch (e) {
STDOUT.WriteLine("problem: " + e);}
同じのがある
ここをコメントアウトする
◦ 行番号は PHP のバージョンによって異なる
◦ ファイルの末尾の方