使用 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
这很奇怪,以下代码(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