SpyLOG
PHP-Nuke ��-������    �������
���������
��������
 ����
�������
����
 �������
������������
�������
 ������
�������
������
 �����
�������
��������
 �����
������������
�������
 �����
������
���������
������� ���
����� �����

���������� 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.


����� ���������� �����
�������� �������������� ����� ���������������� �������

RigaNet - Internet studio
For Web site issues, contact the Web master.

Rambler's Top100 �������@Mail.ru SpyLOG RigaNet