, 난 여기에 내 자신의 함수에 zend_compile_file
을 수정 PHP 확장에서 가상 파일을 컴파일 할 수 없습니다,소스 코드 내가 PHP 확장을 코딩하고
FILE *bravery_ext_fopen(FILE *fp)
{
struct stat stat_buf;
char *datap, *newdatap;
int datalen, newdatalen;
char sign[] = "BRAVERY";
int cryptkey_len = sizeof(sign);
fstat(_fileno(fp), &stat_buf);
datalen = stat_buf.st_size - sizeof(sign);
datap = (char*)malloc(datalen);
fread(datap, datalen, 1, fp);
fclose(fp);
fp = tmpfile();
fwrite(datap, datalen-1, 1, fp);
free(datap);
rewind(fp);
return fp;
}
zend_op_array *bravery_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
{
FILE *fp;
char sign[] = "BRAVERY";
char buf[8];
char fname[128];
memset(fname, 0, sizeof fname);
if (zend_is_executing(TSRMLS_C)) {
if (get_active_function_name(TSRMLS_C)) {
strncpy(fname, get_active_function_name(TSRMLS_C), sizeof fname - 2);
}
}
if (fname[0]) {
if (strcasecmp(fname, "show_source") == 0
|| strcasecmp(fname, "highlight_file") == 0) {
return NULL;
}
}
fp = fopen(file_handle->filename, "r");
if (!fp) {
return org_compile_file(file_handle, type TSRMLS_CC);
}
fread(buf, 7, 1, fp);
if (memcmp(buf, sign, 7) != 0) {
fclose(fp);
return org_compile_file(file_handle, type TSRMLS_CC);
}
if (file_handle->type == ZEND_HANDLE_FP) fclose(file_handle->handle.fp);
if (file_handle->type == ZEND_HANDLE_FD) close(file_handle->handle.fd);
file_handle->handle.fp = bravery_ext_fopen(fp);
file_handle->type = ZEND_HANDLE_FP;
//file_handle->opened_path = expand_filepath(file_handle->filename, NULL TSRMLS_CC);
file_handle->opened_path = NULL;
return org_compile_file(file_handle, type TSRMLS_CC);
}
의 작품이 정상 PHP 파일에 좋은 하지만 그것은 나에게 Fatal error: Unknown: Failed opening required 'C:\php5411\1.php' (include_path='.;C:\php\pear') in Unknown on line 0
오류를 제공합니다. phpfile이 "BRAVERY"로 시작하면 (이것은 내 PHP 파일에 서명하는 데 사용됩니다).
여기 file_handle의 디버그 정보입니다. 아무도 도와 줄 수 있습니까? 나는이 PHP에 새로운 사람들이 가지고 일반적인 문제입니다 여기
미안 해요, 난 C++와 PHP 확장을 쓰고, PHP 코드를 작성하지. – zhzhwcn
그럴 경우, 명시 적으로 포함 시키거나 요구하지 않는 한, "C : \ php5411 \ 1.php"을 열지 못했습니다. 오해에 사과드립니다. –
내 확장 프로그램을 제거하면 정상적으로 작동합니다. 도와 줘서 고마워. – zhzhwcn