使用 TCPDF 时 PHP 页面生成的 QR 代码的 imagecreatefrompng 错误

imagecreatefrompng error for QR Code produced by PHP page when using TCPDF

这很奇怪,以下代码(TCPDF - PDF 创建代码)的第一行有效,但有时无缘无故不起作用。我讨厌间歇性错误。当它失败时,错误消息与下面显示的第 3 行相同。

第二行工作正常。我相信这是更好的编码方式,但不确定为什么。

第三行不起作用,但我认为如果它起作用会更稳定。

错误说:

Warning: imagecreatefrompng(/var/www/vhosts/path-to-file/tcpdf/../../path/includes/php/phpqrcode.php?text=textforqrcode): failed to open stream: No such file or directory.

../../ 用于到达正确的目录,我知道这是正确的,因为它与第 2 行相同,包括和图像在目录结构中处于同一级别。

关键是路径是正确的。我猜这是行不通的,因为它是由 php 文件生成的文件,但这确实在第 1 行工作,它是作为一种 http 对象生成的。

这是我目前试过的代码:

$pdf->Image('http://' . $serverHost . '/includes/php/phpqrcode.php?text='.$random, 15, 77, 30, 30, 'PNG', '', '', true, 150, '', false, false, 0, false, false, false);

$pdf->Image(__DIR__ . '/../../path/images/template/refunded.gif', 15, 77, 30, 16, 'GIF', '', '', true, 150, '', false, false, 0, false, false, false);

$pdf->Image(__DIR__ . '/../../path/includes/php/phpqrcode.php?text='.$random, 12, 250, 20, 20, 'PNG', '', '', true, 150, '', false, false, 0, false, false, false);

我也试过这个但是不喜欢,类似的错误信息:

$pdf->Image( K_PATH_IMAGES . '../../../../path/includes/php/phpqrcode.php?text='.$random, 12, 250, 20, 20, 'PNG', '', '', true, 150, '', false, false, 0, false, false, false);

(../../../../ 因为相对路径改变了).

我觉得我的头在撞墙......

您不能使用查询字符串参数引用本地文件。如果 phpqrcode.php 期望 text 参数来自 GET 参数,则必须通过服务器加载它。如果您直接引用该文件,它不会 运行 PHP 代码,而是直接给您 PHP 文件。在这种情况下,它甚至找不到文件,因为它正在寻找一个名为 phpqrcode.php?text=asd 的文件,而不是 phpqrcode.php.

据我所知,第一种方法是正确的,但如果您遇到问题,那么我们需要知道您使用哪个库来生成二维码。

正如评论中所建议的那样,我使用 copy() 将图像保存到服务器上,在 PDF 中使用了来自服务器的图像,然后在脚本末尾删除了图像。简单!谢谢@onik