Here is my source code:

/*******worked on php 5.3********/
#define PHP_COMPILER_ID  "VC9"

#include<iostream>
#include <string>

#include <stdio.h>

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

#include "php.h"
#include "php_ini.h"

ZEND_FUNCTION(my_function);
PHP_FUNCTION(ig_reverseString);
PHP_FUNCTION(ig_parseString);
PHP_FUNCTION(ig_connect_to_database);
PHP_FUNCTION(get_global_server_variable);

zend_function_entry ig_functions[] =
{
ZEND_FE(my_function, NULL)
 PHP_FE(ig_reverseString, NULL)
PHP_FE(ig_parseString, NULL)
PHP_FE(ig_connect_to_database, NULL)
 PHP_FE(get_global_server_variable, NULL)
{NULL, NULL, NULL}
};

zend_module_entry my_function_module_entry =
{
STANDARD_MODULE_HEADER,
"my_function_License",
 ig_functions,
NULL, NULL, NULL, NULL, NULL,
"4.2.29",
 STANDARD_MODULE_PROPERTIES
};



ZEND_GET_MODULE(my_function);

ZEND_FUNCTION(my_function)
{
 bool my_functionLicense;

 if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b",
&my_functionLicense) == FAILURE)
 {
 E_ERROR;
 return;
 }

 if(my_functionLicense)
 {
 php_printf("license is OK!<br/>");
 }
 else
 {
 php_printf("an error occure!!! please contact my_function admin<br/>");
 }

 return;
}


PHP_FUNCTION(ig_reverseString)
{
char *input = NULL;
int argc = ZEND_NUM_ARGS();
int input_len;
 char* workstr;
int index;

if(zend_parse_parameters(argc TSRMLS_CC, "s", &input, &input_len) ==
FAILURE)
 return;
 workstr = (char*) emalloc(input_len + 1);
 memset(workstr, 0, input_len + 1);
for(index=0; index < input_len; index++)
 {
workstr[index] = input[input_len - (index + 1)];
}
 RETVAL_STRING( workstr, 1 );
efree( workstr );
}
char* ig_parseString(char* input);

char* ig_parseString(char* input)
{
char* replace = "Im parsed into source code";
char* output;
//char* find;
int j=0, i=0, k=0, f=0, c=0;
int replaceLenght;
 replaceLenght = strlen(replace);
 output = (char*) emalloc(strlen(input) + strlen(replace) + 1);
memset(output, 0, strlen(input) + strlen(replace) + 1);
 /*find = (char*) emalloc(strlen(find) + 1);
memset(find, 0, strlen(find) + 1);*/

int lenght;
lenght = strlen(input) + strlen(replace);

 for(c; c < lenght; c++){
 if(input[i] == '\0')
 break;//very important line. get 2H of my best time!!!--->[if remove this
line, extension fall on unlimited loop on second run]
output[j] = input[i];
 i++;j++;
if(input[i] == '#' && input[++i] == '#')
 {//k--;
for(k; k < replaceLenght; k++)
{
 if(replace[k] == '\0'){
break;//very important
}
 output[j] = replace[k];
j++;
//}
 }
k=1;
do{
 i++;
if(input[i] == '\0')
break;
 }while(input[i] != '#');
i++;
output[j] = input[i];
 j++;i++;
}
}

  return output;
  efree(output);

}
PHP_FUNCTION(ig_parseString)
{
char* input;
 int argc = ZEND_NUM_ARGS();
int input_len;
if(zend_parse_parameters(argc TSRMLS_CC, "s", &input, &input_len) ==
FAILURE)
 return;

if(ZEND_NUM_ARGS() != 1) WRONG_PARAM_COUNT;

 RETURN_STRING(ig_parseString(input), 1);
efree(input);
}

PHP_FUNCTION(ig_connect_to_database)
{
zval fname, *args[3], dbLink;
zval selectDB, *args_selectDB[1], retval;
 long selectDB_status;
 ZVAL_STRING(&fname, "mysql_connect", 0);

MAKE_STD_ZVAL(args[0]);
ZVAL_STRING(args[0], "localhost", 1);

MAKE_STD_ZVAL(args[1]);
ZVAL_STRING(args[1], "root", 1);

MAKE_STD_ZVAL(args[2]);
ZVAL_STRING(args[2], "", 1);


if (call_user_function(EG(function_table), NULL, &fname, &dbLink, 3, args
TSRMLS_CC) == FAILURE) {
 RETURN_STRING("fail to connect to database", 1);
}
else
 {
zval_ptr_dtor(&args[2]);
zval_ptr_dtor(&args[1]);
 zval_ptr_dtor(&args[0]);
 /****now! I want to select a database on success****/
 ZVAL_STRING(&selectDB, "mysql_select_db", 0);

 MAKE_STD_ZVAL(args_selectDB[0]);
ZVAL_STRING(args_selectDB[0], "clickbartarir", 1);
 if (call_user_function(EG(function_table), NULL, &selectDB, &retval, 1,
args_selectDB TSRMLS_CC) == SUCCESS)
 {
/* I successfully selected database */
convert_to_long(&retval);
 selectDB_status = Z_LVAL(retval);
 if(selectDB_status == 1)
{
/****now! I want to exceute query!****/
 zval query, *args_query[1], query_resource;
ZVAL_STRING(&query, "mysql_query", 0);

MAKE_STD_ZVAL(args_query[0]);
ZVAL_STRING(args_query[0], "SELECT * FROM memberplans WHERE userID = 3", 1);
 if (call_user_function(EG(function_table), NULL, &query, &query_resource,
1, args_query TSRMLS_CC) == SUCCESS)
 {
int resource;
 resource = Z_RESVAL(query_resource);

if(resource == 0)
 {
zend_error(E_ERROR, "wrong query!");
}
 zval_ptr_dtor(&args_query[0]);

/****now! query syntax is ok, I will do fetching...****/
 zval fetch_query, *args_fetch_query[1], fetch_query_resource;
ZVAL_STRING(&fetch_query, "mysql_fetch_assoc", 0);

MAKE_STD_ZVAL(args_fetch_query[0]);
ZVAL_RESOURCE(args_fetch_query[0], resource);
 if (call_user_function(EG(function_table), NULL, &fetch_query,
&fetch_query_resource, 1, args_fetch_query TSRMLS_CC) == SUCCESS)
 {
*return_value = fetch_query_resource;

}
 }
else
 {
zval_ptr_dtor(&args_query[0]);
zend_error(E_ERROR, "wrong mysql query!");
 }

zval_ptr_dtor(&args_query[0]);
}
 else
{
zend_error(E_ERROR, "failed to select database!");
 }
 zval_ptr_dtor(&args_selectDB[0]);

}
else
 {
zend_error(E_ERROR, "database problem");
zval_ptr_dtor(&args_selectDB[0]);
 }
}

}


PHP_FUNCTION(get_global_server_variable)
{
// This code makes sure $_SERVER has been initialized
if (!zend_hash_exists(&EG(symbol_table), "_SERVER", 8)) {
 zend_auto_global* auto_global;
if (zend_hash_find(CG(auto_globals), "_SERVER", 8, (void **)&auto_global)
!= FAILURE) {
 auto_global->armed = auto_global->auto_global_callback(auto_global->name,
auto_global->name_len TSRMLS_CC);
}
 }

// This fetches $_SERVER['PHP_SELF']
zval** arr;
 char* script_name;
if (zend_hash_find(&EG(symbol_table), "_SERVER", 8, (void**)&arr) !=
FAILURE) {
 HashTable* ht = Z_ARRVAL_P(*arr);
zval** val;
if (zend_hash_find(ht, "PHP_SELF", 9, (void**)&val) != FAILURE) {
 script_name = Z_STRVAL_PP(val);
}
}

}


when I removed last two functions, it compiled successfully.

my full error:

1>php_my_function.obj : error LNK2001: unresolved external symbol
__imp__executor_globals_id
1>php_my_function.obj : error LNK2001: unresolved external symbol
__imp__compiler_globals_id
1>C:\Users\user\Documents\Visual Studio
2008\Projects\php_IG\Release\php_my_function.dll : fatal error LNK1120: 2
unresolved externals



On Sat, Dec 15, 2012 at 1:33 PM, Pierre Joye <pierre....@gmail.com> wrote:

> hi,
>
> On Sat, Dec 15, 2012 at 10:51 AM, Amir <ad...@ecdcconference.org> wrote:
> > I did it but have error  still
> > note: I compile none thread safe and got error when using some user
> function
> > in my c++ code.
>
> Not sure what you do in your code but this is typically the error
> while trying to link/build TS objects while working with a NTS
> configuration.
>
> Does it happen in PHP or in your ext? Please show the full error message.
>
> Cheers,
> --
> Pierre
>
> @pierrejoye | http://blog.thepimp.net | http://www.libgd.org
>

Reply via email to