C语言 PHP pdflib二进制文件不工作,并且在编译时显示错误

h22fl7wq  于 2023-08-03  发布在  PHP
关注(0)|答案(1)|浏览(112)

我想在阿尔马9或Ubuntu 22.04中使用pdflib for php 8.2。没有可用的pecl二进制文件。我下载了php_pdflib.so并将其添加到了php.ini中。所需功能现已可用。但PDF_new()pdf_new()不可用。我试着编译https://pecl.php.net/get/pdflib-4.1.4.tgzhttps://github.com/Distrotech/PDFlib-Lite的代码。但我面临着以下错误:

...
/var/tmp/pdflib/pdf.c:144:19: note: to match this _(_
  144 |     _pdf_exception(PDF_get_errnum(pdf), PDF_get_apiname(pdf), \
      |                   ^
/var/tmp/pdflib/pdf.c:925:7: note: in expansion of macro _pdf_catch_
  925 |     } pdf_catch;
      |       ^~~~~~~~~
/var/tmp/pdflib/pdf.c: In function _zim_PDFlibException_get_errmsg_:
/var/tmp/pdflib/pdf.c:929:1: error: expected declaration or statement at end of input
  929 | } /* }}} */
      | ^
/var/tmp/pdflib/pdf.c: In function _zim_PDFlibException_get_apiname_:
/var/tmp/pdflib/pdf.c:929:1: error: expected declaration or statement at end of input
make: *** [Makefile:210: pdf.lo] Error 1
ERROR: `make' failed

字符串
我知道我可以使用其他的库,但是大量的代码是用pdflib编写的,而且这些代码是在php5.4中运行的。我需要升级php。我按照this,但同样的错误。
如有任何帮助,我们将不胜感激。

q8l4jmvw

q8l4jmvw1#

PHP 8.2(2022年12月发布)仅支持PDFlib 10.0.1。在PDFlib 10中,已经删除了不推荐使用的函数式PHP Package 器。(2009年发布的PDFlib 8中标记为已弃用)。PDFlib 10迁移指南:x1c 0d1x的数据
这听起来像是一个很大的努力,但通常可以通过相对简单的搜索和替换来完成从不推荐的函数式PHP Package 器到PDFlib OOP Package 器的转换。

PDF_begin_document($p, "", "");

字符串
成为

$p->begin_document("", "");


PDF_$p->替换(作为PDFlib对象),第一个参数(PDFlib句柄)被省略。是的,每个调用都必须自定义,但这通常很简单。
但是,如果您仍然有非常旧的代码,则其他不推荐使用的函数可能会受到影响。因此,我要求您阅读PDFlib 10迁移指南,该指南包含在PDFlib 10包中,并在PDFlib网站上链接。如果您尝试从较旧的PDFlib版本升级,我建议您使用PDFlib 10迁移指南中推荐的路径:https://www.pdflib.com/products/pdflib-family/deprecated-api-methods-and-options/
如果您尝试从较旧的PDFlib版本升级,我建议您使用PDFlib 10迁移指南中推荐的路径:

  • 首先让PDFlib 9.4.0在你的开发系统上运行(这需要PHP 7.4-8.1)。
  • 然后您还可以启用PDFlib日志记录或PHP警告来查找弃用的代码,如PDFlib 10迁移指南所述。
  • 如果您的代码没有警告,您可以将PDFlib 10.0.1迁移到PHP 8.2。

这一步的好处还在于,可以让你的代码逐步为PHP 8和PDFlib 10做好准备。
PDFlib 7 Lite于2011年发布,10年前已达到产品生命周期结束,PDFlib GmbH不再支持。除此之外,您还应该了解PDFlib Lite许可条款,该条款只允许非常有限的生产性使用。https://github.com/Distrotech/PDFlib-Lite/blob/master/doc/pdflib/PDFlib-Lite-license.pdf
因此,我建议您使用PDFlib 10二进制版本,并花费少量精力准备好您的代码PDFlib 10。
通常是值得的!

相关问题