在linux下php要如何调用一个.so得扩展

解决方案 »

  1.   

    dl('ext.so');或者 在配置 文件中加载一样的方式
      

  2.   

    正解,详细信息:http://cn.php.net/manual/zh/function.dl.php
      

  3.   

    .so文件得目录呢,需要放到ext目录下么。
    我找了很久都没找到ext目录...
      

  4.   

    我用c写了个php得扩展,编译过程没有任何错误,但在调用时就提示undefined funciton***,大概意思就是函数没定义..
      

  5.   

    直接就是写路径,不要放在ext目录的,Linux我没试过用dl函数,呵呵
      

  6.   

    8楼的意思是让楼主把扩展编译到PHP里面(Linux安装PHP是这样的,把扩展库也编译进去),如果楼主不是在php文件里面调用,那就在PHP安装时,编译进去就可以了
      

  7.   

    在编译的时候没有加了,如果看目录你可以看下php.ini里面了,
      

  8.   

    php -i|grep extension 可看到扩展目录连扩展的调用规则都不知道就去写扩展。我估计你也还没弄明白MINIT,RINIT的区别,没弄明白zval的结构,没弄明白zts。切忌眼高手低阿。
      

  9.   

    搬把凳子挺楼上的大牛给我讲TSRMLS.
      

  10.   

    php的启动过程:1. MINIT:  php执行所有extension的PHP_MINIT_FUNCTION方法(模块初始化程序),这使得每个扩展可以初始化内部变量、分配资源、注册资源处理器,以及向ZE注册自己的函数,以便于脚本调用这其中的函数时候ZE知道执行哪些代码。
    2. PHP等待SAPI层请求要处理的页面
    3. RIMIT:  php建立symbol table,用于保存所有的变量,将所有extension还原成以前的值,放入symbol table(全局的)。
    4. 执行脚本。scan->parse->compile->excute.如任一操作码需要调用扩展的函数,ZE将会把参数绑定到该函数,并且临时交出控制权直到函数运行结束。当执行一个函数或一个对象时,会为它们新建一个symbol table.并且标记为活动表.当执行完毕时,全局symbol table又指定为活动表.
    5. RSHUTDOWN: 当文件执行完毕,或出现die(),exit(),php调用每个extension的RSHUTDOWN方法,开始清理工作。含蓄的使用unset()清理所有保存于symbol table中的变量.
    6. MSHUTDOWN: 直到所有请求完成,执行所有extension的PHP_MSHUTDOWN_FUNCTION方法,释放内存
            zend_uint refcount; /* reference count (copy on write) */zval的结构更好理解:
    struct _zval_struct {
            /* Variable information */
            zvalue_value value;     /* value */        zend_uchar type;        /* active type */
            zend_uchar is_ref; /* is reference (change on write) */
    };
    希望楼上的大牛一起讨论PHP的一些内核知识,以上是我个人理解的,如果有错,请大家指出.