liexusong/php-beast

php 7.4.0 下编译错误

kakuilan opened this issue · 4 comments

/usr/local/src/php-beast-master/beast.c: In function 'cgi_compile_file':
/usr/local/src/php-beast-master/beast.c:660:20: error: 'ZEND_HANDLE_FD' undeclared (first use in this function)
     if (h->type == ZEND_HANDLE_FD) close(h->handle.fd);
                    ^
/usr/local/src/php-beast-master/beast.c:660:20: note: each undeclared identifier is reported only once for each function it appears in
/usr/local/src/php-beast-master/beast.c:660:51: error: 'union <anonymous>' has no member named 'fd'
     if (h->type == ZEND_HANDLE_FD) close(h->handle.fd);
                                                   ^
/usr/local/src/php-beast-master/beast.c:672:18: error: 'union <anonymous>' has no member named 'fd'
         h->handle.fd = default_file_handler->get_fd(default_file_handler);
                  ^
make: *** [beast.lo] Error 1
abxuz commented

对比了下PHP7.4的代码,里面zend_stream_type这个枚举类型跟以前不一样了,没有了ZEND_HANDLE_FD这个类型。我目前的解决方案是把beast.c里面

`
if (h->type == ZEND_HANDLE_FP) fclose(h->handle.fp);
if (h->type == ZEND_HANDLE_FD) close(h->handle.fd);

/*
 * Get file handler and free context
 */
switch (default_file_handler->type) {
case BEAST_FILE_HANDLER_FP:
    h->type = ZEND_HANDLE_FP;
    h->handle.fp = default_file_handler->get_fp(default_file_handler);
    break;
case BEAST_FILE_HANDLER_FD:
    h->type = ZEND_HANDLE_FD;
    h->handle.fd = default_file_handler->get_fd(default_file_handler);
    break;
}

`

注释掉了部分代码,变成以下的代码,编译过去了。准备测一下好不好用。

`
if (h->type == ZEND_HANDLE_FP) fclose(h->handle.fp);
//if (h->type == ZEND_HANDLE_FD) close(h->handle.fd);

/*
 * Get file handler and free context
 */
switch (default_file_handler->type) {
case BEAST_FILE_HANDLER_FP:
    h->type = ZEND_HANDLE_FP;
    h->handle.fp = default_file_handler->get_fp(default_file_handler);
    break;
//case BEAST_FILE_HANDLER_FD:
    //h->type = ZEND_HANDLE_FD;
    //h->handle.fd = default_file_handler->get_fd(default_file_handler);
    //break;
}

`

改下来好用吗?

abxuz commented

@shushenghong 目前一个线上项目用下来,没有发现什么问题。