Ignore:
Timestamp:
Feb 16, 2015, 10:45:52 PM (9 years ago)
Author:
djay
Message:

Add the PHP ZOO-API, fix issue if ZTS is not defined, correct loading of the PHP script depending of the ZOO-Kernel location, use a ZEND_HANDLE_FD rather than the ZEND_HANDLE_FP used before, correct location of the hello.php service.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/zoo-project/zoo-kernel/service_internal_php.c

    r580 r586  
    3232#include <zend_stream.h>
    3333
    34 #ifdef ZTS
    35 void ***tsrm_ls;
    36 #endif
    37 
    3834zval *php_Array_from_maps(maps* t);
    3935zval*  php_Array_from_map(map*);
    4036maps* php_maps_from_Array(HashTable* t);
    4137map* php_map_from_HasTable(HashTable* t);
     38
     39#ifdef ZTS
     40void ***tsrm_ls;
     41#endif
     42
     43ZEND_BEGIN_MODULE_GLOBALS(zoo)
     44long _SERVICE_SUCCEEDED;
     45long _SERVICE_FAILED;
     46ZEND_END_MODULE_GLOBALS(zoo)
     47
     48#ifdef ZTS
     49#define ZOO_G(v) TSRMG(zoo_globals_id, zend_zoo_globals *, v)
     50#else
     51#define ZOO_G(v) (zoo_globals.v)
     52#endif
     53
     54#define PHP_ZOO_VERSION "1.0"
     55#define PHP_ZOO_EXTNAME "ZOO"
     56
     57PHP_MINIT_FUNCTION(zoo);
     58PHP_MSHUTDOWN_FUNCTION(zoo);
     59PHP_RINIT_FUNCTION(zoo);
     60
     61PHP_FUNCTION(zoo_Translate);
     62PHP_FUNCTION(zoo_UpdateStatus);
     63PHP_FUNCTION(zoo_SERVICE_SUCCEEDED);
     64PHP_FUNCTION(zoo_SERVICE_FAILED);
     65
     66extern zend_module_entry zoo_module_entry;
     67#define phpext_zoo_ptr &zoo_entry
     68
     69ZEND_DECLARE_MODULE_GLOBALS(zoo)
     70
     71static zend_function_entry zoo_functions[] = {
     72  PHP_FE(zoo_Translate, NULL)
     73  PHP_FE(zoo_UpdateStatus, NULL)
     74  PHP_FE(zoo_SERVICE_SUCCEEDED, NULL)
     75  PHP_FE(zoo_SERVICE_FAILED, NULL)
     76  {NULL, NULL, NULL}
     77};
     78
     79zend_module_entry zoo_module_entry = {
     80#if ZEND_MODULE_API_NO >= 20010901
     81    STANDARD_MODULE_HEADER,
     82#endif
     83    PHP_ZOO_EXTNAME,
     84    zoo_functions,
     85    PHP_MINIT(zoo),
     86    PHP_MSHUTDOWN(zoo),
     87    PHP_RINIT(zoo),
     88    NULL,
     89    NULL,
     90#if ZEND_MODULE_API_NO >= 20010901
     91    PHP_ZOO_VERSION,
     92#endif
     93    STANDARD_MODULE_PROPERTIES
     94};
     95
     96ZEND_GET_MODULE(zoo)
     97
     98PHP_INI_BEGIN()
     99PHP_INI_END()
     100
     101static void
     102php_zoo_init_globals(zend_zoo_globals *zoo_globals)
     103{
     104  zoo_globals->_SERVICE_SUCCEEDED=3;
     105  zoo_globals->_SERVICE_FAILED=4;
     106}
     107
     108PHP_RINIT_FUNCTION(zoo)
     109{
     110  return SUCCESS;
     111}
     112
     113PHP_MINIT_FUNCTION(zoo)
     114{
     115  ZEND_INIT_MODULE_GLOBALS(zoo, php_zoo_init_globals,NULL);
     116  REGISTER_INI_ENTRIES();
     117  return SUCCESS;
     118}
     119
     120PHP_MSHUTDOWN_FUNCTION(zoo)
     121{
     122  UNREGISTER_INI_ENTRIES();
     123  return SUCCESS;
     124}
     125
     126PHP_FUNCTION(zoo_Translate)
     127{
     128  char *value;
     129  int value_len;
     130  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &value, &value_len) == FAILURE) {
     131    RETURN_NULL();
     132  }
     133  RETURN_STRING(_ss(value), 1);
     134}
     135
     136PHP_FUNCTION(zoo_UpdateStatus)
     137{
     138  zval *arr;
     139  char *message;
     140  int message_len;
     141  long pourcent;
     142  char *status=(char*)malloc(4*sizeof(char));
     143  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "asl", &arr, &message, &message_len,&pourcent) == FAILURE) {
     144    RETURN_NULL();
     145  }
     146  HashTable* t=HASH_OF(arr);
     147  maps* conf=php_maps_from_Array(t);
     148  setMapInMaps(conf,"lenv","message",message);
     149  sprintf(status,"%d",pourcent);
     150  setMapInMaps(conf,"lenv","status",status);
     151  _updateStatus(conf);
     152  freeMaps(&conf);
     153  free(conf);
     154  free(status);
     155  RETURN_NULL();
     156}
     157
     158PHP_FUNCTION(zoo_SERVICE_SUCCEEDED)
     159{
     160  RETURN_LONG(ZOO_G(_SERVICE_SUCCEEDED));
     161}
     162
     163PHP_FUNCTION(zoo_SERVICE_FAILED)
     164{
     165  RETURN_LONG(ZOO_G(_SERVICE_FAILED));
     166}
    42167
    43168/**
     
    62187
    63188  tmp=getMap(s->content,"serviceProvider");
     189  map* cwd=getMapFromMaps(m,"lenv","cwd");
     190  map* mp=getMap(request,"metapath");
     191  char *scriptName;
     192  if(mp!=NULL && strlen(mp->value)>0){
     193    scriptName=(char*)malloc((strlen(cwd->value)+strlen(mp->value)+strlen(tmp->value)+3)*sizeof(char));
     194    sprintf(scriptName,"%s/%s/%s",cwd->value,mp->value,tmp->value);
     195  }else{
     196    scriptName=(char*)malloc((strlen(cwd->value)+strlen(tmp->value)+2)*sizeof(char));
     197    sprintf(scriptName,"%s/%s",cwd->value,tmp->value);
     198  }
    64199  zend_file_handle iscript;
    65   iscript.type=ZEND_HANDLE_FP;
     200  iscript.type=ZEND_HANDLE_FD;
     201  iscript.opened_path=NULL;
    66202  iscript.filename=tmp->value;
    67   iscript.opened_path=NULL;
    68   //iscript.free_filname=0;
    69   if(!(iscript.handle.fp=fopen(iscript.filename,"rb"))){
     203  iscript.free_filename=0;
     204  FILE* temp=fopen(scriptName,"rb");
     205  if(temp==NULL){
    70206    char tmp1[1024];
    71     sprintf(tmp1,"Unable to load PHP file %s",tmp->value);
    72     map* err=createMap("text",tmp1);
    73     addToMap(err,"code","NoApplicableCode");
    74     printExceptionReportResponse(m,err);
    75     exit(-1);
    76   }
    77 
    78   php_embed_init(0,NULL,&tsrm_ls);
     207    sprintf(tmp1,_("Unable to load the PHP file %s"),tmp->value);
     208    free(scriptName);
     209    return errorException(m,tmp1,"NoApplicableCode",NULL);
     210  }
     211  iscript.handle.fd=fileno(temp);
     212
     213  php_embed_init(0,NULL PTSRMLS_CC);
    79214   
    80215  zend_try {
    81 
     216    zend_startup_module(&zoo_module_entry);
    82217    php_execute_script(&iscript TSRMLS_CC);
    83 
    84218    zval *iargs[3];
    85219    zval iret, ifunc,ifile;
     
    89223    iargs[1] = php_Array_from_maps(*real_inputs);
    90224    iargs[2] = php_Array_from_maps(*real_outputs);
    91    
    92     call_user_function(EG(function_table), NULL, &ifunc, &iret, 3, iargs TSRMLS_CC);
    93 
    94     HashTable* t=HASH_OF(iargs[2]);
    95     *real_outputs=php_maps_from_Array(t);
    96    
    97     char tmp1[1024];
    98 
    99     res=SERVICE_SUCCEEDED;
    100 
     225     
     226    if((res=call_user_function(EG(function_table), NULL, &ifunc, &iret, 3, iargs TSRMLS_CC))==SUCCESS){
     227     
     228      HashTable* t=HASH_OF(iargs[2]);
     229      HashTable* t1=HASH_OF(iargs[0]);
     230      *real_outputs=php_maps_from_Array(t);
     231      *main_conf=php_maps_from_Array(t1);
     232
     233      res=Z_LVAL(iret);
     234    }else{
     235      free(scriptName);
     236      fclose(temp);
     237      return errorException(m,"Unable to process.","NoApplicableCode",NULL);;
     238    }
    101239  } zend_catch {
    102     map* err=createMap("text","Unable to process.");
    103     addToMap(err,"code","NoApplicableCode");
    104     printExceptionReportResponse(m,err);
    105     exit(-1);
     240    free(scriptName);
     241    fclose(temp);
     242    return errorException(m,"Unable to process.","NoApplicableCode",NULL);;
    106243  } zend_end_try();
    107 
     244  free(scriptName);
     245  fclose(temp);
    108246  php_embed_shutdown(TSRMLS_C);
    109247
     
    216354    if(final_res==NULL)
    217355      final_res=cursor;
    218     else
     356    else{
    219357      addMapsToMaps(&final_res,cursor);
     358      freeMaps(&cursor);
     359      free(cursor);
     360    }
    220361#ifdef DEBUG
    221362    fprintf(stderr,"key : %s\n",key);
     
    289430  return final_res;
    290431}
    291 
    292 
    293 
    294 
    295 
    296 
    297 
    298 
    299 
    300 
    301 
    302 
    303 
    304 
Note: See TracChangeset for help on using the changeset viewer.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png