2013-07-10 223 views
0

它編譯成無w/o問題的DLL。但是,當我在PHP中使用extension_loaded函數或在phpinfo列表中查找時,它不會被識別爲加載。我把這個DLL放到extensions文件夾中,然後把它添加到php.ini中。我認爲問題可能出現在代碼中。無法加載自定義PHP模塊

我錯過了什麼或做錯了什麼?

ZEND_FUNCTION(MyFunction) 
{ 

    char var1 = NULL; 
    char var2 = NULL; 
    char var3 = NULL; 
    char var4 = NULL; 
    char var5 = NULL; 
    char var6 = NULL; 
    int var7; 
    double *var8; 

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssssssla", &var1, &var2, 
           &var3, &var4, &var5, &var6, &var7, &var8) == FAILURE) { 
     RETURN_NULL(); 
    } 

    Cfunction(&var1,&var2,&var3,&var4,&var5, &var6, var7, var8); 

    RETURN_TRUE; 
} 

zend_function_entry MyExtension_functions[] = { 
    ZEND_FE(MyFunction, NULL) 
    {NULL,NULL,NULL} 
}; 


PHP_MINIT_FUNCTION(MyExtension) { 
    return SUCCESS; 
} 

PHP_MSHUTDOWN_FUNCTION(MyExtension) { 
    return SUCCESS; 
} 

PHP_MINFO_FUNCTION(MyExtension) { 
    php_info_print_table_start(); 
    php_info_print_table_header(2, "MyExtension v1.0", ""); 
    php_info_print_table_row(2, "PHP Extension", "enabled"); 
    php_info_print_table_end(); 
} 




zend_module_entry MyExtension_module_entry = { 
#if ZEND_MODULE_API_NO >= 20010901 
    STANDARD_MODULE_HEADER, 
#endif 
    "MyExtension", 
    MyExtension_functions, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    PHP_MINFO(MyExtension), 
    "1.0", 
    STANDARD_MODULE_PROPERTIES 
}; 

    ZEND_GET_MODULE(MyExtension) 
+0

你重新安裝擴展,將其添加爲php.ini後的Web服務器?你收到什麼錯誤信息? – Timothy

+0

是的,我重新啓動了Web服務器。從服務器或PHP的錯誤消息? –

+0

確定你正在修改正確的.ini文件?檢查'phpinfo()'的輸出,看看你應該改變哪一個。 –

回答

1

查看擴展加載錯誤的最佳方法是從命令行運行php.exe。的

Warning: PHP Startup: MyExtension: Unable to initialize module 
Module compiled with module API=20121212 
PHP compiled with module API=20090626 
These options need to match 
in Unknown on line 0 

這說明我的錯誤信息所以我找到了#define ZEND_MODULE_API_NO在zend_modules.h並改變它從20121212到20090626.

然後將它與抱怨:

Warning: PHP Startup: MyExtension: Unable to initialize module 
Module compiled with build ID=API20090626,NTS,VC10 
PHP compiled with build ID=API20090626,NTS,VC9 
These options need to match 
in Unknown on line 0 

所以我發現#define PHP_COMPILER_ID在config.w32.h中,並將其從「VC10」更改爲「VC9」。

在此之後它加載的模塊。我能夠打電話給我的功能,但它回來傳統500錯誤。我懷疑這與VC9/VC10不兼容有關。

這個故事的寓意是,我試圖用分機與VC10編譯時我用的是PHP與VC9編譯。這會導致各種錯誤。然後用VC10編譯PHP src。