Home  >  Article  >  Backend Development  >  php5调用外部C库,解决思路

php5调用外部C库,解决思路

WBOY
WBOYOriginal
2016-06-13 10:09:09871browse

php5调用外部C库,急!
---------外部c函数 hello.c----------
#include
#include
#include
#include
#include
int hello_cc(char * dbg)
{
  syslog(LOG_DEBUG, "hello_cc %s\n", dbg);
  if(dbg==NULL) return -1;
  if(strlen(dbg)>1024) return -1;
  printf("%s\n", dbg);
  syslog(LOG_DEBUG, "hello_CC return\n");
  return 0;
}
---------php5扩展函数 hello.c-----------
const zend_function_entry hello_functions[] = {
  PHP_FE(confirm_hello_compiled, NULL) /* For testing, remove later. */
  PHP_FE(hello, NULL)
  PHP_FE_END /* Must be the last line in hello_functions[] */
};
PHP_FUNCTION(confirm_hello_compiled)  
{
  char *arg = NULL;
  int arg_len, len;
  char *strg;

  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
  return;
  }

  len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "hello", arg$
  RETURN_STRINGL(strg, len, 0);  
}
PHP_FUNCTION(hello){
  char *dbg = NULL;  
  int dbg_len, len;
  int result;  

  if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &dbg, &dbg_len) == FAILURE){
  return;
  }
  res_cc = hello_cc(dbg);
  RETURN_LONG(res_cc);
}
------------php5 调用-------------
if (!extension_loaded("hello")) {
print "skip";
} else {
//dl('hello.so'); //php5中dl()被屏蔽,直接在php.ini中添加hello.so
echo hello("ssssssssqqqqqqqqqqqq");
}

//输出-->> 空白页,估计崩掉了。
求解正确的 PHP_FUNCTION(hello) ,急用!!!

------解决方案--------------------
如果 hello_cc 定义没有错误的话,放在一起编译就可以了

不过你在 hello_cc 中直接 printf 似违反了 php 扩展的约定了吧

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn