Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php dompdf:base64图像无法在Google应用程序引擎上运行_Php_Google App Engine_Dompdf - Fatal编程技术网

Php dompdf:base64图像无法在Google应用程序引擎上运行

Php dompdf:base64图像无法在Google应用程序引擎上运行,php,google-app-engine,dompdf,Php,Google App Engine,Dompdf,我希望有人能告诉我这是我的代码的问题还是dompdf+GAE的错误 下面的代码使用Google App Engine SDK在我的本地开发服务器上工作,但不在live GAE项目上工作 其他基于文件的图像也可以工作,但我无法让任何base64图像(包括这个简单的示例图像)在线工作 输出给出一个带有X的框,表示“未找到图像或类型未知” 有什么想法吗 <?php require 'vendor/autoload.php'; $fullpage = ' <html> <hea

我希望有人能告诉我这是我的代码的问题还是dompdf+GAE的错误

下面的代码使用Google App Engine SDK在我的本地开发服务器上工作,但不在live GAE项目上工作

其他基于文件的图像也可以工作,但我无法让任何base64图像(包括这个简单的示例图像)在线工作

输出给出一个带有X的框,表示“未找到图像或类型未知”

有什么想法吗

<?php
require 'vendor/autoload.php';

$fullpage = '
<html>
<head>
<title>Base64 Test</title>
</head>
<body>
<h1>Title of Test Document</h1>
<img src="data:image/png;base64,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" />
<p>End of document.</p>
</body>
</html>
';

use Dompdf\Dompdf;
use Dompdf\Options;

$options = new Options();
$options->setDpi(96);
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true);
$options->set('debugKeepTemp', true);

$dompdf = new Dompdf($options);
$dompdf->loadHtml($fullpage);
$dompdf->setPaper('A4', 'portrait');

$dompdf->render();

$dompdf->stream("Report.pdf",  array( 'Attachment'=>0));

?>

我相信我已经找到了答案:

在dompdf的
Cache.php
中,base64图像首先被写入一个文件,在GAE上有两个问题

  • file\u put\u contents()
    只能与in GAE一起使用
  • tempnam()
  • 为了克服问题1,您需要设置一个临时目录,它是一个存储桶。在GAE环境中,使用问题的示例代码,如下所示:

    $options->set('tempDir', 'gs://myappname.appspot.com/mytempfolder/');
    
    关于问题2,
    tempnam()

    如果目录不存在或不可写,tempnam()可能会 在系统的临时目录中生成文件

    根据。我的假设是tempname无法正确处理存储桶。我的解决方案是在dompdf的
    \src\Image\Cache.php
    文件中找到这一行:

    $resolved_url = tempnam($tmp_dir, "ca_dompdf_img_");
    
    并将其替换为:

    $resolved_url = $tmp_dir . uniqid("ca_dompdf_img_") . ".tmp";
    
    注意:要使其正常工作,您的tempDir必须以
    /
    结尾,如我上面的示例所示。它也必须存在

    因此,我们实际上是告诉dompdf使用一个与GAE一起工作的临时目录,并绕过一个在GAE中不能正常工作的函数