如何解决如何在php8.0中编译曾经在php7中使用TSRMLS_CC但在php8.0中已弃用的php模块
我有一个为 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,
我有很多使用这个 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,&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.log 中。我从所有使用 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 源代码的 UPGRADING.INTERNALS 文件中始终可以找到内部更改的摘要。
您遇到的两个变化是不相关的:
-
TSRMLS_CC
是线程安全资源管理器的一部分,这是线程本地存储的实现,用于为多线程环境构建 PHP。它已被删除,因为有更新的机制可以更透明地做同样的事情。除非您需要保留 PHP 5 支持,否则您可以安全地从扩展程序中删除所有对TSRMLS_*
的使用。 -
arginfo
是用于反射的函数参数名称和类型的信息。它曾经是可选的,但现在是必需的,部分原因是使所有函数都可以使用新的命名参数语法进行调用。生成它的最简单方法是编写“存根”PHP 定义 - 具有正确签名但没有实现的空 PHP 函数,类似于您可能定义的在 IDE 中进行自动完成工作的内容。然后,您可以将该 PHP 文件传递给 gen-stub.php 脚本。这就是现在管理所有捆绑 PHP 扩展的arginfo
的方式,因此如果您查看源代码(包括 the skeleton extension 中的代码),您可以找到很多示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。