Do You PECL はてな RSSフィード

2008-08-29

[][]PHPのエラーをtwitterに投稿する拡張モジュール 16:24 はてなブックマーク - PHPのエラーをtwitterに投稿する拡張モジュール - Do You PECL はてな

via. I have nothing to say - but maybe PHP... - Johannes Schlüter

はてダにも書いたネタですが、akkyさんのエントリ

PHP拡張といっても、スクリプト側にデータを戻したりするものではないので、ソースは単純で短い。PHPのエラー処理を横取りするところや、php.iniで設定されたパスワードを読むところ、twitter.comにPOSTするところなどは参考になる。

秋元@サイボウズラボ・プログラマー・ブログ: PHPのエラーメッセージをtwitterに投げるPHP Extention

これこれ。良いサンプルになるなぁ、と思ってましたよ。

エラーに限らず「PHPの何らかのイベントを拾って、外部にPOSTする」みたいなのって、良いネタないかなぁ。。。

DonyellDonyell2011/11/22 10:59I'm not quite sure how to say this; you made it extrmeley easy for me!

mnwmflcmnwmflc2011/11/22 21:476aI3zd <a href="http://aroyqstjzdhv.com/">aroyqstjzdhv</a>

dpfgvpyghxdpfgvpyghx2011/11/23 02:37aTV2Y1 , [url=http://wpnhiqizxsxd.com/]wpnhiqizxsxd[/url], [link=http://krskgxlfipgw.com/]krskgxlfipgw[/link], http://rvppcmbkpcyr.com/

dczzmjgulpdczzmjgulp2011/11/30 22:52xuN2pz <a href="http://zpkmwkjzcncl.com/">zpkmwkjzcncl</a>

ddjbjcgddjbjcg2011/12/04 20:47yzejZ7 , [url=http://ixtxgvclzhnx.com/]ixtxgvclzhnx[/url], [link=http://dxohrfsslese.com/]dxohrfsslese[/link], http://kzptvqabbzks.com/

2008-03-27

[]Advanced PHP Programmingのサンプルにハンドラいっぱい付けてみた 01:19 はてなブックマーク - Advanced PHP Programmingのサンプルにハンドラいっぱい付けてみた - Do You PECL はてな

だいぶカオス。。。

/*
   +----------------------------------------------------------------------+
   | unknown license:                                                      |
   +----------------------------------------------------------------------+
   | Authors: Unknown User <unknown@example.com>                          |
   +----------------------------------------------------------------------+
*/

/* $ Id: $ */ 

#include "php_call_coverage.h"

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "zend.h"
#include "zend_extensions.h"
void statement_handler(zend_op_array *op_array)
{
  fprintf(stderr, "%s:%d\n", zend_get_executed_filename(TSRMLS_C),
          zend_get_executed_lineno(TSRMLS_C));
}

void message_handler(zend_op_array *op_array)
{
  fprintf(stderr, "message_handler\n");
}

void op_array_handler(zend_op_array *op_array)
{
  fprintf(stderr, "op_array_handler\n");
}

void fcall_begin_handler(zend_op_array *op_array)
{
  fprintf(stderr, "fcall_begin_handler\n");
}

void fcall_end_handler(zend_op_array *op_array)
{
  fprintf(stderr, "fcall_end_handler\n");
}

int call_coverage_zend_startup(zend_extension *extension)
{
  fprintf(stderr, "call_coverage_zend_startup\n");
  TSRMLS_FETCH();
  CG(extended_info) = 1;
  return SUCCESS;
}

int call_coverage_zend_shutdown(zend_extension *extension)
{
  fprintf(stderr, "call_coverage_zend_shutdown\n");
}

void activate()
{
  fprintf(stderr, "activate\n");
}

void deactivate()
{
  fprintf(stderr, "deactivate\n");
}

#ifndef ZEND_EXT_API
#define ZEND_EXT_API  ZEND_DLEXPORT
#endif
ZEND_EXTENSION();

ZEND_DLEXPORT zend_extension zend_extension_entry = {
  "Simple Call Coverage",
  "1.0",
  "George Schlossnagle",
  "http://www.schlossnagle.org/~george",
  "",
  call_coverage_zend_startup,
  call_coverage_zend_shutdown,
  activate,
  deactivate,
  message_handler,   // message_handler_func_t
  op_array_handler,   // op_array_handler_func_t
  statement_handler,   // statement_handler_func_t
  fcall_begin_handler,   // fcall_begin_handler_func_t
  fcall_end_handler,   // fcall_end_handler_func_t
  NULL,   // op_array_ctor_func_t
  NULL,   // op_array_dtor_func_t
  STANDARD_ZEND_EXTENSION_PROPERTIES
};

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */

実行すると、こんな感じ。

$ php -n -dextension_dir=./ -dzend_extension=`pwd`/.libs/call_coverage.so test.php
call_coverage_zend_startup
activate
op_array_handler
/home/shimooka/public_html/pear/CodeGen_PECL/zend_extension/call_coverage/test.php:2
/home/shimooka/public_html/pear/CodeGen_PECL/zend_extension/call_coverage/test.php:3
/home/shimooka/public_html/pear/CodeGen_PECL/zend_extension/call_coverage/test.php:4
/home/shimooka/public_html/pear/CodeGen_PECL/zend_extension/call_coverage/test.php:10
deactivate
$ 

定義は、

  • /usr/local/src/php-5.2.5/Zend/zend_execute.h
  • /usr/local/src/php-5.2.5/Zend/zend_extensions.h

辺りを見る、と。

[]Advanced PHP Programmingのサンプルを試してみた 01:00 はてなブックマーク - Advanced PHP Programmingのサンプルを試してみた - Do You PECL はてな

PHP: Modifying and Introspecting the Zend Engineの最後にあるZend Extensionのサンプルを試してみました。

コードの下に「You compile it as you would a regular PHP extension」とあったので、とりあえずCodeGen_PECLで雛形を作ってコードをペーストする安直な方法で。。。w

$ php -v
PHP 5.2.5 (cli) (built: Feb 18 2008 19:23:28)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    with Xdebug v2.0.2-dev, Copyright (c) 2002-2007, by Derick Rethans
    with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
$ cat call_coverage.xml
<?xml version="1.0" ?>
<extension name="call_coverage" version="0.0.1">
</extension>
$ pecl-gen call_coverage.xml
$ cd call_coverage
$ vi call_coverage.c
$ cat -n call_coverage.c
     1  /*
     2     +----------------------------------------------------------------------+
     3     | unknown license:                                                      |
     4     +----------------------------------------------------------------------+
     5     | Authors: Unknown User <unknown@example.com>                          |
     6     +----------------------------------------------------------------------+
     7  */
     8
     9  /* $ Id: $ */
    10
    11  #include "php_call_coverage.h"
    12
    13  #ifdef HAVE_CONFIG_H
    14  #include "config.h"
    15  #endif
    16
    17  #include "php.h"
    18  #include "php_ini.h"
    19  #include "ext/standard/info.h"
    20  #include "zend.h"
    21  #include "zend_extensions.h"
    22  void statement_handler(zend_op_array *op_array)
    23  {
    24    fprintf(stderr, "%s:%d\n", zend_get_executed_filename(TSRMLS_C),
    25            zend_get_executed_lineno(TSRMLS_C));
    26  }
    27
    28  int call_coverage_zend_startup(zend_extension *extension)
    29  {
    30    TSRMLS_FETCH();
    31    CG(extended_info) = 1;
    32    return SUCCESS;
    33  }
    34  #ifndef ZEND_EXT_API
    35  #define ZEND_EXT_API  ZEND_DLEXPORT
    36  #endif
    37  ZEND_EXTENSION();
    38
    39  ZEND_DLEXPORT zend_extension zend_extension_entry = {
    40    "Simple Call Coverage",
    41    "1.0",
    42    "George Schlossnagle",
    43    "http://www.schlossnagle.org/~george",
    44    "",
    45    call_coverage_zend_startup,
    46    NULL,
    47    NULL,
    48    NULL,
    49    NULL,   // message_handler_func_t
    50    NULL,   // op_array_handler_func_t
    51    statement_handler,   // statement_handler_func_t
    52    NULL,   // fcall_begin_handler_func_t
    53    NULL,   // fcall_end_handler_func_t
    54    NULL,   // op_array_ctor_func_t
    55    NULL,   // op_array_dtor_func_t
    56    STANDARD_ZEND_EXTENSION_PROPERTIES
    57  };
    58
    59  /*
    60   * Local variables:
    61   * tab-width: 4
    62   * c-basic-offset: 4
    63   * End:
    64   * vim600: noet sw=4 ts=4 fdm=marker
    65   * vim<600: noet sw=4 ts=4
    66   */
$ phpize
$ ./configure
$ make
$ vi test.php
$ cat -n test.php
     1  <?php
     2  $test = 1;
     3  if($test) {
     4    $counter++;
     5  }
     6  else {
     7    $counter--;
     8  }
     9  ?>
$ php -n -dextension_dir=./ -dzend_extension=`pwd`/.libs/call_coverage.so test.php
/home/shimooka/public_html/pear/CodeGen_PECL/zend_extension/call_coverage/test.php:2
/home/shimooka/public_html/pear/CodeGen_PECL/zend_extension/call_coverage/test.php:3
/home/shimooka/public_html/pear/CodeGen_PECL/zend_extension/call_coverage/test.php:4
/home/shimooka/public_html/pear/CodeGen_PECL/zend_extension/call_coverage/test.php:10
$ 

おお。動いた動いたww

あとでいろいろハンドラを足してみよう。

[]id:rskyのZendExtensionサンプル 00:25 はてなブックマーク - id:rskyのZendExtensionサンプル - Do You PECL はてな

「きぼん」と書けば、直に出てくることを期待w

先日の勉強会でも話が出てましたが、_zend_extension構造体

struct _zend_extension {
        char *name;
        char *version;
        char *author;
        char *URL;
        char *copyright;
        startup_func_t startup;
        shutdown_func_t shutdown;
        activate_func_t activate;
        deactivate_func_t deactivate;
        message_handler_func_t message_handler;
        op_array_handler_func_t op_array_handler;
        statement_handler_func_t statement_handler;
        fcall_begin_handler_func_t fcall_begin_handler;
        fcall_end_handler_func_t fcall_end_handler;
        op_array_ctor_func_t op_array_ctor;
        op_array_dtor_func_t op_array_dtor;
        int (*api_no_check)(int api_no);
        void *reserved2;
        void *reserved3;
        void *reserved4;
        void *reserved5;
        void *reserved6;
        void *reserved7;
        void *reserved8;
        DL_HANDLE handle;
        int resource_number;
};

のfcall_begin_handler_func_tとかfcall_end_handler_func_tでユーザー関数のコールバックを受け取るようにすると、AOP的な事がホントにできそうだなぁ、と勝手に妄想。間違ってるかも知れないけどw

「技量の問題」は別orz

[]Advanced PHP Programming 00:18 はてなブックマーク - Advanced PHP Programming - Do You PECL はてな

なんだか全文公開されてるみたいです。意外と内容が新しいッスね。

ぺくらーな方は「Part V: Extensibility」あたりからどうぞ。。。って、読書会やりながら訳しても良いのかも、とか思ったり。

JodiJodi2011/11/21 22:22If time is money you've made me a wealtiher woman.

avtbffoavtbffo2011/11/22 17:16CCP0zA <a href="http://nvhbvvannrqq.com/">nvhbvvannrqq</a>

fkozjhpiffkozjhpif2011/11/22 22:56lT8gSa , [url=http://xzyycpoctucf.com/]xzyycpoctucf[/url], [link=http://zxjjwbamaduo.com/]zxjjwbamaduo[/link], http://kbircshwqoam.com/

oiktjymghzoiktjymghz2011/12/04 03:45Z63xIb , [url=http://izbhcesunjmt.com/]izbhcesunjmt[/url], [link=http://rptpqdcilovz.com/]rptpqdcilovz[/link], http://zxnflibslmmf.com/

2008-01-23

[]第1回PHP拡張勉強会が開催された 09:59 はてなブックマーク - 第1回PHP拡張勉強会が開催された - Do You PECL はてな

id:i_ogiさん、参加された皆さん、お疲れさまでしたー。詳細は、はてダで。

次回から一気にPHP色が消えてC色が濃くなりそうな感じ。ワクワク。

VingVing2011/11/22 01:16Thought it wuodln't to give it a shot. I was right.

hslnyalwhslnyalw2011/11/23 01:27xoatAn , [url=http://ebzsmfbbekzr.com/]ebzsmfbbekzr[/url], [link=http://gyuqlboybpfq.com/]gyuqlboybpfq[/link], http://zcgpsxyvtcwr.com/

pbweyuicihkpbweyuicihk2011/11/30 19:468iVwqt <a href="http://lozlhryhhdit.com/">lozlhryhhdit</a>

fgmuloohfgmulooh2011/12/04 04:15Kpl2Sg , [url=http://syzgjbbayntx.com/]syzgjbbayntx[/url], [link=http://cntydyzxisiz.com/]cntydyzxisiz[/link], http://wcydsulljuwl.com/

2008-01-22

[]gihyo.jpのrsky講座(第2回)をやってみた 12:42 はてなブックマーク - gihyo.jpのrsky講座(第2回)をやってみた - Do You PECL はてな

via. 第2回 Hello, PHP Extension!:実例で学ぶPHP拡張モジュールの作り方|gihyo.jp … 技術評論社

とりあえず、ちゃんとPEAR::CodeGen_PECLが動作する事を確認w

テストは動かなかったなぁ。固まっちゃった。。。と思ったら、既存のiniファイルを読み込まないようにしたら、テスト動いた。

そうだっけか?そうだっけ。そうですか。

AbzalAbzal2013/02/14 22:59Super excietd to see more of this kind of stuff online.

dzaubmwskhdzaubmwskh2013/02/16 12:17Tln9XP <a href="http://ihgzxwsvvylo.com/">ihgzxwsvvylo</a>

lguqqblguqqb2013/02/18 16:28W7F3GS , [url=http://yrktjcicokub.com/]yrktjcicokub[/url], [link=http://gxnjsdhlemmc.com/]gxnjsdhlemmc[/link], http://yhalybiggllx.com/

2008-01-18

[]ますさんがパッチ書いてる 23:26 はてなブックマーク - ますさんがパッチ書いてる - Do You PECL はてな

via. 2008-01-18 - ます’s Diary - どうでもいい事100選

CLI/SAPIの判定の仕方。あの手の小ネタは好きw

sotaroksotarok2008/01/19 00:22デザインが..!w
一瞬普通にDYPH来たかとおもいましたw

shimookashimooka2008/01/19 00:33可能な限り近づけてみましたw
一覧の時のコメント欄を非表示にできないかな。。。

ますます2008/01/22 14:14うはっ、補足されてるっ。(w
あの記事では補足が抜けていたのですが、sapi_module構造体を使うにはSAPI.hファイルのインクルードが必要です。
よく触っているファイルでは殆どが定義済みだったので(空気のような存在だったので)、ちょっとだけハマりました。(x_x

JuanJuan2012/03/17 19:32That's way the betsest answer so far!

aaqphngaaqphng2012/03/19 23:52IRTFnS <a href="http://bsiuikmfcpux.com/">bsiuikmfcpux</a>

rldbiprldbip2012/03/20 22:086WpJ6s , [url=http://isvtukvlvnvp.com/]isvtukvlvnvp[/url], [link=http://soyfujfmmfms.com/]soyfujfmmfms[/link], http://mvpbrwlcsbfe.com/