Hatena::Groupphpext

tetsunosuke meets PHP extension

2008-01-22勉強会当日...

make testが失敗する件

20:50 |  make testが失敗する件 - tetsunosuke meets PHP extension を含むブックマーク はてなブックマーク -  make testが失敗する件 - tetsunosuke meets PHP extension  make testが失敗する件 - tetsunosuke meets PHP extension のブックマークコメント

PHP_EXECUTABLEをいじったらだめかなあ・・・?

実は自分の環境では失敗しない。っていうかextension_dir=./になっている。

おかげでこっちでコケる。

$ php -dextension=study1.so -r 'study1_greeting();'
PHP Warning:  PHP Startup: Unable to load dynamic library './study1.so' - (null) in Unknown on line 0
PHP Fatal error:  Call to undefined function study1_greeting() in Command line code on line 1

Fatal error: Call to undefined function study1_greeting() in Command line code on line 1

ここにはいってるからなんだろうけど・・・・あれー。

Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20060613/

VeronicaVeronica2013/02/14 22:03Hi, Humming Bird. I just wanted to say thank you so much for taikng the time to tell others about what is going on and being a warrior for God. I am a Police Officer and I am able to drive around and patrol while listening.I know God will bless you for all your hard work. Thanks so much ! God Bless, Malinda

hyxxxqhyxxxq2013/02/16 12:22izXpMG <a href="http://uqchatgkpwpq.com/">uqchatgkpwpq</a>

yujozjyujozj2013/02/18 16:31G2zltY , [url=http://cdsznttrnvsl.com/]cdsznttrnvsl[/url], [link=http://qfawecxakucq.com/]qfawecxakucq[/link], http://hpncdcmfbrzn.com/

gsxuaahwaygsxuaahway2014/03/19 00:53sefgeqiqfyu, <a href="http://www.gwdwqgfrqv.com/">lzevceobcp</a> , [url=http://www.fqigrioism.com/]kvzzfmlccm[/url], http://www.fckwmrlgdg.com/ lzevceobcp

2008-01-20

ぼそ

00:50 |  ぼそ - tetsunosuke meets PHP extension を含むブックマーク はてなブックマーク -  ぼそ - tetsunosuke meets PHP extension  ぼそ - tetsunosuke meets PHP extension のブックマークコメント

環境を用意して動作を確認までしてくる人は何割くらいいるかしら?

NurNur2012/03/17 10:11You've hit the ball out the park! Incriedble!

ltusifjclltusifjcl2012/03/18 04:43hbFsXL <a href="http://tgkevvvaogcm.com/">tgkevvvaogcm</a>

hroknsjhroknsj2012/03/18 09:23ky5nbs , [url=http://lgfyrevqogkh.com/]lgfyrevqogkh[/url], [link=http://peaeeactkapg.com/]peaeeactkapg[/link], http://nfasfkazterm.com/

jchxorujchxoru2012/03/20 03:451IIuAZ , [url=http://qwbccnrbvbib.com/]qwbccnrbvbib[/url], [link=http://wqqplxpjlmkb.com/]wqqplxpjlmkb[/link], http://qkvqcrjbovuc.com/

2008-01-18環境設定。(もうむしろPHPの知識いっさい関係無し)

さてインストールだ

01:31 |  さてインストールだ - tetsunosuke meets PHP extension を含むブックマーク はてなブックマーク -  さてインストールだ - tetsunosuke meets PHP extension  さてインストールだ - tetsunosuke meets PHP extension のブックマークコメント

Macに入れようと思いました。

$ sudo pear install CodeGen_PECL

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 50 bytes) in /usr/share/pear/PEAR/Registry.php on line 1049

あうちっ・・・。


PEARで使っているphp.iniってどこなんだろ。


よくわかんないから、とりあえずRegistry.php

ini_set('memory_limit', '64M');

とかしといた。

$ sudo pear install CodeGen_PECL
downloading CodeGen_PECL-1.1.0.tgz ...
Starting to download CodeGen_PECL-1.1.0.tgz (91,997 bytes)
.....................done: 91,997 bytes
install ok: channel://pear.php.net/CodeGen_PECL-1.1.0

おーいえー。

よくわかんないんだけど

pearで使うphpphp.iniの方でmemory_limitを設定するべきだと思うのですよね。

それって

$ php -i | grep 'php.ini'
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini

ここのpathのものだと思うのですが、こちらを設定しても有効にならず。Apache経由とかならApache再起動とか必要なのはわかるのですが、特にいらないと思うんですよねえ。


id:rskyさんにアドバイスもらった

/usr/bin/pearは/usr/bin/phpを使うようになっています。

確認しておいた。

$ pear config-get php_bin
/usr/bin/php

なるほど。

ってことで

$ /usr/bin/php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /private/etc/php.ini

続編。

02:18 |  続編。 - tetsunosuke meets PHP extension を含むブックマーク はてなブックマーク -  続編。 - tetsunosuke meets PHP extension  続編。 - tetsunosuke meets PHP extension のブックマークコメント

というわけで

$ pecl-gen --extname=sample

READMEを読むと、

To compile your new extension, you will have to execute the following steps:

1.  $ ./phpize
2.  $ ./configure [--enable--sample]
3.  $ make
4.  $ make test
5.  $ [sudo] make install

ってことらしいので、やってみたが、まずmakeの時にMakefileの名前がMakefile.globalとかになっていたのでリネーム(またはいちいちmake -f Makefile.global)

make testがエラー。

$ make test

Build complete.
Don't forget to run 'make test'.

ERROR: Cannot run tests without CLI sapi.
aries:sample tetsu$ 

Noooo!!

これから調べる

Makefileの中を読んでみる

test: all
	-@if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \
		TEST_PHP_EXECUTABLE=$(PHP_EXECUTABLE) \
		TEST_PHP_SRCDIR=$(top_srcdir) \
		CC="$(CC)" \
			$(PHP_EXECUTABLE) $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -U -d extension_dir=modules/ $(PHP_TEST_SHARED_EXTENSIONS) tests/; \
	elif test ! -z "$(SAPI_CLI_PATH)" && test -x "$(SAPI_CLI_PATH)"; then \
		INI_FILE=`$(top_builddir)/$(SAPI_CLI_PATH) -r 'echo php_ini_loaded_file();'`; \
		if test "$$INI_FILE"; then \
			$(EGREP) -v '^extension[\t\ ]*=' "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \
		else \
			echo > $(top_builddir)/tmp-php.ini; \
		fi; \
		TEST_PHP_EXECUTABLE=$(top_builddir)/$(SAPI_CLI_PATH) \
		TEST_PHP_SRCDIR=$(top_srcdir) \
		CC="$(CC)" \
			$(top_builddir)/$(SAPI_CLI_PATH) $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -c $(top_builddir)/tmp-php.ini -U -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \
	else \
		echo "ERROR: Cannot run tests without CLI sapi."; \
	fi

およ?

とりあえず

export PHP_EXECUTABLE=/usr/local/bin/phpしてみたんだけど、TEST_PHP_SRCDIRがからっぽ。

Could not open input file: /run-tests.php
make: *** [test] Error 1

っていうか

$ ./configure 
checking for egrep... grep -E
checking for a sed that does not truncate output... /usr/bin/sed
checking for gcc... gcc
checking for C compiler default output file name... configure: error: C compiler cannot create executables
See `config.log' for more details.

よく見たらconfigureでエラー出てるじゃん・・・・。うわあ・・・この辺はもう意味わからんぽ。

どうやらgccがダメだったらしい。

Leopardにしてからその辺入れ直してなかった。XCODE TOOLSを入れ直したら治った。

でけたでけた。

test.xmlを書いてみる

<?xml version="1.0" ?>
<extension name="test" version="1.0.0">
 <function name="foo">
  <proto>string foo()</proto>
  <code>
   RETURN_STRING("OK", 1);
  </code>
  <test>
   <code>
    echo foo();
   </code>
  </test>
 </function>
</extension>

こいつでpecl-gen test.xmlする

$ pecl-gen test.xml 
Creating 'test' extension in './test'

Your extension has been created in directory ./test.
See ./test/README and/or ./test/INSTALL for further instructions.
$ cd test
$ phpize
$ ./configure
$ make
$ make test

これでmodules/test.soができるので、それを読み込んでみるphpファイルを作ってみる。

caller.php

<?php
dl("modules/test.so");

if (extension_loaded("test")) {
    echo foo() . PHP_EOL;
}

実行

$ php caller.php 
OK

わーい。

rskyrsky2008/01/19 01:54PHPは後からインストールしたもので、PEARははじめから入っているものではないですか?
/usr/bin/pearは/usr/bin/phpを使うようになっています。

kidd-number5kidd-number52008/01/19 01:58rskyさんありがとうございます。そっちは確かに/etc/php.iniで内容もmemory_limit = 8Mでした。

クリーンな環境を用意するべきではありますね・・・。

CarolineCaroline2012/03/19 14:30I had no idea how to apropach this before-now I'm locked and loaded.

ghurrqkghurrqk2012/03/20 10:11pKNCHx , [url=http://jvzirzpfyolt.com/]jvzirzpfyolt[/url], [link=http://tvpxhwwqvtkw.com/]tvpxhwwqvtkw[/link], http://kxiodphmresh.com/

npgehmvnpgehmv2012/03/21 10:167ZVsby <a href="http://hcvitzmypgae.com/">hcvitzmypgae</a>

xmrdwzmsaxmrdwzmsa2012/03/22 07:49yn3uxj , [url=http://mzokfbzetosn.com/]mzokfbzetosn[/url], [link=http://ercximipwhlc.com/]ercximipwhlc[/link], http://gbmiokmakhmv.com/

qqdvdfzmwiqqdvdfzmwi2013/11/23 19:13wqkwrqiqfyu, <a href="http://www.fzmrcyrfrf.com/">syrtttnrbg</a> , [url=http://www.jxlaxujhxz.com/]imuzzihujz[/url], http://www.ycenoympgh.com/ syrtttnrbg

2008-01-15 このエントリーを含むブックマーク このエントリーのブックマークコメント

サイボウズラボの場所を知らない俺って遅れてる

MinaMina2011/11/24 12:37Normally I'm agansit killing but this article slaughtered my ignorance.

wxbngxbyvbzwxbngxbyvbz2011/11/24 21:10ZiqcCL <a href="http://wenhoobfncfv.com/">wenhoobfncfv</a>

faulekmgszffaulekmgszf2011/11/28 23:09th0d0t , [url=http://isijbzqdmqgi.com/]isijbzqdmqgi[/url], [link=http://erayujpugspw.com/]erayujpugspw[/link], http://vhxmtnlvlrqj.com/

yifurhyifurh2011/12/01 03:46btFy2t <a href="http://tjhkeunfwrkx.com/">tjhkeunfwrkx</a>

wlpjznwlpjzn2011/12/06 01:229mY3YC , [url=http://yxyfofzdxdvp.com/]yxyfofzdxdvp[/url], [link=http://igqbfbxayvib.com/]igqbfbxayvib[/link], http://qbzrfmrvlfxo.com/