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

Ubuntu20.04本地XAMPP中shell_exec与exec()无法执行问题求助

解决Ubuntu 20.04 XAMPP环境下PHP调用wkhtmltopdf无效果的问题

以下是针对性的排查和解决步骤:

  • 使用wkhtmltopdf的绝对路径
    终端用户的PATH环境变量和Apache进程(www-data用户)的PATH可能不一致,终端能找到的命令,PHP进程可能找不到。先在终端执行which wkhtmltopdf获取绝对路径(比如/usr/bin/wkhtmltopdf),然后修改代码:

    $wkhtmltopdfCommand = "/usr/bin/wkhtmltopdf --enable-local-file-access {$outputHtmlPath} {$pdfOutputPath}";
    
  • 修复文件/目录权限
    Apache运行用户(www-data)需要具备:

    1. 读取HTML输入文件的权限:执行chown www-data:www-data /path/to/your/output.html或chmod 644 /path/to/your/output.html
    2. 写入PDF输出目录的权限:执行chown www-data:www-data /path/to/pdf/output/dir或chmod 755 /path/to/pdf/output/dir
    3. 执行wkhtmltopdf的权限:确保文件有可执行权限,执行chmod +x /usr/bin/wkhtmltopdf
  • 捕获命令执行的错误信息
    shell_exec默认只返回标准输出,错误信息会被丢弃。修改命令重定向错误输出,方便排查具体问题:

    $wkhtmltopdfCommand = "/usr/bin/wkhtmltopdf --enable-local-file-access {$outputHtmlPath} {$pdfOutputPath} 2>&1";
    $result = shell_exec($wkhtmltopdfCommand);
    var_dump($result); // 打印输出,查看是否有错误提示
    
  • 检查PHP配置限制
    打开XAMPP的php.ini文件(通常在/opt/lampp/etc/php.ini):

    1. 查找disable_functions项,确保其中没有shell_exec和exec,如果有就删除这两个函数名
    2. 确认safe_mode已关闭(Ubuntu 20.04的PHP版本已移除该选项,可忽略)
      修改后重启XAMPP的Apache服务:sudo /opt/lampp/lampp restart apache
  • 解决无X环境的渲染问题
    wkhtmltopdf依赖X服务器渲染HTML,而Apache运行在无桌面环境下,需要安装虚拟X服务器xvfb:

    1. 终端执行sudo apt install xvfb安装
    2. 修改PHP中的命令为:
      $wkhtmltopdfCommand = "xvfb-run /usr/bin/wkhtmltopdf --enable-local-file-access {$outputHtmlPath} {$pdfOutputPath} 2>&1";
      
  • 处理路径中的空格
    如果HTML或PDF路径包含空格,需要用单引号包裹路径,避免命令被拆分:

    $wkhtmltopdfCommand = "/usr/bin/wkhtmltopdf --enable-local-file-access '{$outputHtmlPath}' '{$pdfOutputPath}' 2>&1";
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:42:34