You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FPDF在PHP中生成含多图PDF时遇致命错误求解决

修复FPDF生成多图片PDF的常见错误

你遇到的错误提示如下:

Notice: Undefined index: gambarvk_image in C:\xampp\htdocs\login\laporan_vk\laporanVK.php on line 821
Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\login\laporan_vk\laporanVK.php on line 821
Notice: Undefined variable: gambarvk_image in C:\xampp\htdocs\login\laporan_vk\laporanVK.php on line 825
Fatal error: Uncaught Exception: FPDF error: Image file has no extension and no type was specified: ./uploaded_img/ in C:\xampp\htdocs\login\laporan_vk\laporanVK-fpdf\fpdf.php:267 Stack trace: #0 C:\xampp\htdocs\login\laporan_vk\laporanVK-fpdf\fpdf.php(881): FPDF->Error('Image file has ...') #1 C:\xampp\htdocs\login\laporan_vk\laporanVK.php(825): FPDF->Image('./uploaded_img/', 150, 25, 50, 20, '') #2 {main} thrown in C:\xampp\htdocs\login\laporan_vk\laporanVK-fpdf\fpdf.php on line 267.

手动修改路径后出现的错误:

Fatal error: Uncaught Exception: FPDF error: Unsupported image type: png/ in C:\xampp\htdocs\login\laporan_vk\laporanVK-fpdf\fpdf.php:267 Stack trace: #0 C:\xampp\htdocs\login\laporan_vk\laporanVK-fpdf\fpdf.php(889): FPDF->Error('Unsupported ima...') #1 C:\xampp\htdocs\login\laporan_vk\laporanVK.php(825): FPDF->Image('./uploaded_img....', 150, 25, 50, 20, 'png/') #2 {main} thrown in C:\xampp\htdocs\login\laporan_vk\laporanVK-fpdf\fpdf.php on line 267

问题根源

核心错误出在PDF生成的遍历逻辑:

  1. 错误依赖表单提交时的$_FILES变量,生成PDF时该变量不存在,导致Undefined index
  2. 未从数据库查询结果$row中获取图片文件名,误用了表单提交时的临时变量$gambarvk_image
  3. 手动修改路径时把扩展名错误加到了文件夹名称里,导致路径和图片类型识别失败

修复后的完整代码

include 'config.php';

// 表单提交处理逻辑(建议后续改用预处理语句防SQL注入)
if(isset($_POST['add_gambarvk']))
{
  $gambarvk_name = $_POST['gambarvk_name'];
  $gambarvk_image = $_FILES['gambarvk_image']['name'];
  $gambarvk_image_tmp_name = $_FILES['gambarvk_image']['tmp_name'];
  $size = getimagesize($gambarvk_image_tmp_name);
  $gambarvk_image_folder = './uploaded_img/' . $gambarvk_image;

  if(empty($gambarvk_name) || empty($gambarvk_image))
  {
    $message[] = 'please fill out all';
  }
  else 
  {
    // 注意:此处存在SQL注入风险,建议替换为预处理语句
    $insert = "INSERT INTO gambarvk(name, image) VALUES('$gambarvk_name', '$gambarvk_image')";
    $upload = mysqli_query($conn,$insert);
  
    if($upload) 
    {
      move_uploaded_file($gambarvk_image_tmp_name, $gambarvk_image_folder);
      $message[] = 'Gambar berjaya dimasukkan';
    }
    else
    {
        $message[] = 'Gambar tidak berjaya dimasukkan';
    }
  }
};

$select = mysqli_query($conn, "SELECT * FROM gambarvk");

// 修复后的PDF图片生成逻辑
while($row = mysqli_fetch_assoc($select))
{
  // 从数据库行中获取存储的图片文件名
  $image_filename = $row['image'];
  // 从文件名提取格式,不再依赖$_FILES变量
  $image_format = strtolower(pathinfo($image_filename, PATHINFO_EXTENSION));  

  // 拼接正确的图片路径:文件夹 + 完整文件名
  $image_path = './uploaded_img/' . $image_filename;

  // 调用FPDF的Image方法
  $pdf->Image($image_path, 150, 25, 50, 20, $image_format);
}

关键修改说明

  • 移除$_FILES依赖:生成PDF时,$_FILES仅在表单上传时存在,必须从数据库查询结果$row['image']获取已存储的文件名
  • 正确提取图片格式:通过数据库中的文件名解析扩展名,避免依赖临时变量
  • 修正路径拼接:路径格式为./uploaded_img/ + 完整文件名,不要将扩展名错误添加到文件夹名称中
  • 可选安全优化:原插入语句存在SQL注入风险,建议替换为mysqli预处理语句:
    $insert = $conn->prepare("INSERT INTO gambarvk(name, image) VALUES(?, ?)");
    $insert->bind_param("ss", $gambarvk_name, $gambarvk_image);
    $upload = $insert->execute();
    

内容的提问来源于stack exchange,提问作者thir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:56:07