【发布时间】:2021-02-14 10:39:40
【问题描述】:
我有一个为 php7 构建的 php 模块,我也认为是 php5,但是在 php8.0 中,当我尝试运行 make 时,我得到一个长长的错误列表,因为 TSRMLS_CC 已被弃用。
正在显示的错误如下所示:
/home/appie/Downloads/php-sweph/sweph.c: In function ‘zif_swe_calc_ut’:
/home/appie/Downloads/php-sweph/sweph.c:512:44: error: expected ‘)’ before ‘TSRMLS_CC’
512 | if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dll",
| ^~~~~~~~~
/home/appie/Downloads/php-sweph/sweph.c:512:6: error: too few arguments to function ‘zend_parse_parameters’
512 | if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dll",
我有很多使用这个 TSRMLS_CC 的函数,它们看起来都像这样:
PHP_FUNCTION(swe_calc_ut)
{
char *arg = NULL;
int rc;
long ipl, iflag;
double tjd_ut, xx[6];
char serr[AS_MAXCH];
int i;
if(ZEND_NUM_ARGS() != 3) WRONG_PARAM_COUNT;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "dll",
&tjd_ut, &ipl, &iflag) == FAILURE) {
return;
}
rc = swe_calc_ut(tjd_ut, (int)ipl, (int)iflag, xx, serr);
/* create an array */
array_init(return_value);
for(i = 0; i < 6; i++)
add_index_double(return_value, i, xx[i]);
add_assoc_string(return_value, "serr", serr);
add_assoc_long(return_value, "rc", rc);
}
我的第一个想法是,如果我删除 TSRMLS_CC 会发生什么。删除后编译完成,我可以将模块安装到 apache 中。基本上该模块现在可以正常工作,但是在 apache2 的日志中。我从所有使用 TSRMLS_CC 的函数中得到一长串警告。
它们看起来像:
PHP Warning: Missing arginfo for swe_calc() in Unknown on line 0
PHP Warning: Missing arginfo for swe_calc_ut() in Unknown on line 0
PHP Warning: Missing arginfo for swe_fixstar() in Unknown on line 0
我如何摆脱警告,TSRMLS_CC 是否有替代方案?我正在尝试理解它,但还没有解决它。
【问题讨论】:
标签: php php-extension php-8