E. PHP

PHP

PHP

:
void php3_foo(INTERNAL_FUNCTION_PARAMETERS) {
     
}

, .

pval. /union, . , , :

E-1.
pval *arg1, *arg2;
if (ARG_COUNT(ht) != 2 || getParameters(ht,2,&arg1,&arg2)==FAILURE) {
   WRONG_PARAM_COUNT;
}
: .   &(pval *) getParameters. , n- , ParameterPassedByReference(ht,n). 1 0.

, , , pval_destructor , , ARRAY, , , , internal_functions.h return_value ARRAY.

, IS_STRING, estrdup()' IS_STRING. , IS_STRING IS_ARRAY, pval_destructor.

. 2 3 , :

E-2.
pval *arg1, *arg2, *arg3;
int arg_count = ARG_COUNT(ht);

if (arg_count < 2 || arg_count > 3 ||
    getParameters(ht,arg_count,&arg1,&arg2,&arg3)==FAILURE) {
    WRONG_PARAM_COUNT;
}

() pval. :

E-1. PHP
IS_STRING
IS_DOUBLE
IS_LONG
IS_ARRAY
IS_EMPTY None/
IS_USER_FUNCTION ??
IS_INTERNAL_FUNCTION ?? ( - - )
IS_CLASS??
IS_OBJECT ??

, , :
convert_to_long(arg1);
convert_to_double(arg1);
convert_to_string(arg1); 
convert_to_boolean_long(arg1); /*    ""  "0",   0,
			           1 */
convert_string_to_number(arg1);  /*    LONG  
				 DOUBLE,     */

/in-place. .

union; :

  • IS_STRING: arg1->value.str.val

  • IS_LONG: arg1->value.lval

  • IS_DOUBLE: arg1->value.dval

emalloc() estrdup(). , malloc() strdup(). efree().

: , , , . , , emalloc() estrdup(). , ( ).

/ , /, : emalloc(), estrdup() efree(). , -. emalloc() estrdup(), efree() , ; . " , -" : efree() , emalloc()' estrdup()', . , , .

"-DDEBUG", PHP , emalloc() estrdup(), efree(), .

, :

  • SET_VAR_STRING(name,value)

  • SET_VAR_DOUBLE(name,value)

  • SET_VAR_LONG(name,value)

SET_VAR_STRING. value , . SET_VAR_STRING.

PHP -. &symbol_table '/main' , active_symbol_table ( , , , ).

'active_symbol_table'. &symbol_table, 'main' . , .

E-3. $foo
if (hash_exists(active_symbol_table,"foo",sizeof("foo"))) { exists... }
else { doesn't exist }
E-4.
hash_find(active_symbol_table,"foo",sizeof("foo"),&pvalue);
check(pvalue.type);

PHP -, . , .

, :

hash_exists() hash_find().

:

E-5.
pval arr;

if (array_init(&arr) == FAILURE) { failed... };
hash_update(active_symbol_table,"foo",sizeof("foo"),&arr,sizeof(pval),NULL);

$foo . .

:

E-6.
pval entry;
  
entry.type = IS_LONG;
entry.value.lval = 5;
  
/*  $foo["bar"] = 5 */
hash_update(arr.value.ht,"bar",sizeof("bar"),&entry,sizeof(pval),NULL); 

/*  $foo[7] = 5 */
hash_index_update(arr.value.ht,7,&entry,sizeof(pval),NULL); 

/*      $foo[],
 * $foo[8],  5 (  php2)
 */
hash_next_index_insert(arr.value.ht,&entry,sizeof(pval),NULL);

, , . , pval ** add , pval *- , . NULL ( ) - .

hash_next_index_insert() , "$foo[] = bar;" PHP 2.0.

, , :

if (array_init(return_value) == FAILURE) { failed...; }

... :

add_next_index_long(return_value,long_value);
add_next_index_double(return_value,double_value);
add_next_index_string(return_value,estrdup(string_value));

, , :
pval *arr;
  
if (hash_find(active_symbol_table,"foo",sizeof("foo"),(void **)&arr)==FAILURE)
{ can't find... }
else { use arr->value.ht... }

, hash_find pval, pval.

SUCCESS FAILURE ( hash_exists(), ).

return- .

RETURN_* return- :

  • RETURN

  • RETURN_FALSE

  • RETURN_TRUE

  • RETURN_LONG(l)

  • RETURN_STRING(s,dup)  dup TRUE,

  • RETURN_STRINGL(s,l,dup)  (s), (l)

  • RETURN_DOUBLE(d)

RETVAL_* , , return-.

  • RETVAL_FALSE

  • RETVAL_TRUE

  • RETVAL_LONG(l)

  • RETVAL_STRING(s,dup)  dup TRUE,

  • RETVAL_STRINGL(s,l,dup)   (s), (l)

  • RETVAL_DOUBLE(d)

estrdup() 's', , , .

success/error, RETURN_TRUE RETURN_FALSE, .

, /object /array.

:

  1. object_init(return_value).

  2. . , , .

  3. , . , "this" active_symbol_table. IS_OBJECT, (.. .value.ht). :
    add_method( return_value, function_name, function_ptr );

:

  • add_property_long( return_value, property_name, l ) - 'property_name', long, 'l'

  • add_property_double( return_value,property_name, d ) - , double

  • add_property_string( return_value,property_name, str ) - , string

  • add_property_stringl( return_value,property_name, str, l ) - , string 'l'

:

  1. array_init(return_value)

  2. . .

:

  • add_assoc_long(return_value,key,l) - /entry 'key' long- 'l'

  • add_assoc_double(return_value,key,d)

  • add_assoc_string(return_value,key,str,duplicate)

  • add_assoc_stringl(return_value,key,str,length,duplicate) -

  • add_index_long(return_value,index,l) - 'index' long- 'l'

  • add_index_double(return_value,index,d)

  • add_index_string(return_value,index,str)

  • add_index_stringl(return_value,index,str,length)-

  • add_next_index_long(return_value,l) - long- 'l'

  • add_next_index_double(return_value,d)

  • add_next_index_string(return_value,str)

  • add_next_index_stringl(return_value,str,length) -

PHP . PHP 2.0.

:

  • php3_list_insert(ptr, type) - 'id'

  • php3_list_delete(id) - id

  • php3_list_find(id,*type) - id, 'type'

SQL-, ; , .

:

E-7.
RESOURCE *resource;

/* ...      ... */
/*      */
return_value->value.lval = php3_list_insert((void *) resource, LE_RESOURCE_TYPE);
return_value->type = IS_LONG;
E-8.
pval *resource_id;
RESOURCE *resource;
int type;

convert_to_long(resource_id);
resource = php3_list_find(resource_id->value.lval, &type);
if (type != LE_RESOURCE_TYPE) {
    php3_error(E_WARNING,"resource index %d has the wrong type",resource_id->value.lval);
    RETURN_FALSE;
}
/* ... ... */
E-9.
pval *resource_id;
RESOURCE *resource;
int type;

convert_to_long(resource_id);
php3_list_delete(resource_id->value.lval);

php3_list.h, enum list_entry_type. , shutdown- list.c's list_entry_destructor() ( /shutdown , case).

PHP (.. , ). MySQL, mSQL, , , mysql.c. :
php3_mysql_do_connect
php3_mysql_connect()
php3_mysql_pconnect()

:

  1. , (9).

  2. connect-, , . , ( 1., ). , , , , ,   . (, LE_MYSQL_LINK LE_MYSQL_PLINK - ).

mysql.c, , , connect, .

, 'list' 'plist':

  • php3_plist_insert(ptr, type) - 'id'

  • php3_plist_delete(id) - id

  • php3_plist_find(id,*type) - id, 'type'

, , . , -. , MySQL/mSQL, pconnect() ( connect), host/user/passwd, , SQL- /key. pconnect() host/user/passwd, key, SQL- .

, mysql.c msql.c, - plist'.

: , ** PHP, .. emalloc(), estrdup(), etc.
malloc(), strdup(), etc.
- ( ) , PHP, . , PHP , .

, , , . . , (, SQL- etc). , ** , . : emalloc() , efree() .

/runtime

PHP . php3.ini, - Apache- - Apache .conf-. Apache .conf- , . , safemodeexecdir, , - . , .

:

  1. php3_ini_structure mod_php3.h.

  2. main.c php3_module_startup cfg_get_string() cfg_get_long().

  3. , php3_commands mod_php3.c. restrictions/. RSRC_CONF , Apache .conf-. OR_OPTIONS , .htaccess-.

  4. php3take1handler() php3flaghandler() .

  5. /configuration _php3_info() functions/info.c .

  6. - , , -. php3_ini.directive.


php

: 3119 .

: - |  -