【问题标题】:Maximum execution time of 30 seconds exceeded while exporting pdf导出 pdf 时超过 30 秒的最大执行时间
【发布时间】:2016-07-20 13:13:42
【问题描述】:

我正在使用 wkhtmltopdf 导出 pdf,当我尝试在本地或从同一网络中的其他计算机导出 pdf 时,它工作正常 但是当我尝试从另一台电脑而不是同一网络中导出 pdf 时,我收到此错误消息

FatalErrorException in WindowsPipes.php line 207: 
Maximum execution time of 30 seconds exceeded

【问题讨论】:

标签: php xampp laravel-5.2 wkhtmltopdf


【解决方案1】:

这是为了确保错误的脚本不会消耗太多资源。为了让您的 PHP 脚本运行更长时间,您需要使用以下任何一种方法来增加 PHP 脚本的最大执行时间限制; - 查看更多信息:https://www.simplified.guide/php/increase-max-execution-time

编辑你的 php.ini 文件并找到这一行:

max_execution_time

将其值更改为 300:

max_execution_time = 300

否则,你需要在你的 php 页面的头部添加这一行:

ini_set('max_execution_time', 300); //seconds

【讨论】:

  • 我已经这样做了,但没有解决问题,我现在收到此错误消息:Process.php 第 1226 行中的 ProcessTimedOutException:进程“C:\xampp\htdocs\caleadmin\wkhtmltopdf\bin\ wkhtmltopdf.exe --lowquality --footer-html "C:\Windows\TEMP\knp_snappy578f7b86ab0667.13821126.html" --header-html "C:\Windows\TEMP\knp_snappy578f7b86add965.96288464.html" "C:\Windows\ TEMP\knp_snappy578f7b86a925d7.06923634.html" "C:\Windows\TEMP\knp_snappy578f7b86a98471.73130018.pdf"" 超过了 60 秒的超时时间。
  • 是的,我已经通过了那个话题,问题是当我生成 pdf localy 时它工作得很好,但是当我尝试从外部 pc 导出相同的 pdf 时,我得到了那个错误
  • 查看是否没有两个 php.ini:第一个用于“php-fpm”,第二个用于“cli”。 php-fpm 这边的配置一定是坏的。如果找到此文件,请添加相同的配置。你的php和server是什么版本的?
  • 我正在使用 xamp 和 php 版本 5.6.12
【解决方案2】:

您的循环可能是无止境的。你需要在php页面的顶部添加这个

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

添加这一行

ini_set('max_execution_time', 0);

【讨论】:

  • 如果你是对的并且有一个无限循环,这只会让它运行更长时间!
  • 我已经这样做了,但没有解决问题,我现在收到此错误消息:Process.php 第 1226 行中的 ProcessTimedOutException:进程“C:\xampp\htdocs\caleadmin\wkhtmltopdf\bin\ wkhtmltopdf.exe --lowquality --footer-html "C:\Windows\TEMP\knp_snappy578f7b86ab0667.13821126.html" --header-html "C:\Windows\TEMP\knp_snappy578f7b86add965.96288464.html" "C:\Windows\ TEMP\knp_snappy578f7b86a925d7.06923634.html" "C:\Windows\TEMP\knp_snappy578f7b86a98471.73130018.pdf"" 超过了 60 秒的超时时间。
【解决方案3】:

您必须最大化您的执行时间。

如果您在 Live 服务器上工作,请创建一个名为 user.ini 的文件并编写以下代码。 (将 user.ini 文件保存在 同一文件夹

max_execution_time = 600 // 600 seconds

如果你在 localhost 上工作,那么你可以像这样使用 ini_set() 函数,

ini_set('max_execution_time', 600); //600 seconds 

【讨论】:

  • 我已经这样做了,但没有解决问题,我现在收到此错误消息:Process.php 第 1226 行中的 ProcessTimedOutException:进程“C:\xampp\htdocs\caleadmin\wkhtmltopdf\bin\ wkhtmltopdf.exe --lowquality --footer-html "C:\Windows\TEMP\knp_snappy578f7b86ab0667.13821126.html" --header-html "C:\Windows\TEMP\knp_snappy578f7b86add965.96288464.html" "C:\Windows\ TEMP\knp_snappy578f7b86a925d7.06923634.html" "C:\Windows\TEMP\knp_snappy578f7b86a98471.73130018.pdf"" 超过了 60 秒的超时时间。
【解决方案4】:

执行此操作的最可取的方法是您不必添加它即可将这些代码添加到所有页面。转到 C://xampp/php/php.ini 中的 php.ini 并转到看起来像这样的行 max_execution_time = 30 将值更改为您喜欢的所需秒数保存并重新启动 XAMPP 服务器

【讨论】:

  • 我已经这样做了,但没有解决问题,我现在收到此错误消息:Process.php 第 1226 行中的 ProcessTimedOutException:进程“C:\xampp\htdocs\caleadmin\wkhtmltopdf\bin\ wkhtmltopdf.exe --lowquality --footer-html "C:\Windows\TEMP\knp_snappy578f7b86ab0667.13821126.html" --header-html "C:\Windows\TEMP\knp_snappy578f7b86add965.96288464.html" "C:\Windows\ TEMP\knp_snappy578f7b86a925d7.06923634.html" "C:\Windows\TEMP\knp_snappy578f7b86a98471.73130018.pdf"" 超过了 60 秒的超时时间。
【解决方案5】:

您提到的问题与PHP的max_execution_time ini参数无关。

通过查看您添加到问题中的标签,您似乎正在使用 PHP Laravel 框架。您可能正在使用一个 PHP 库,该库使用 wkhtmltopdf 生成 PDF(例如,从 HTML 内容),即 KnpLabs/KnpSnappyBundle

这样的库不使用exec 函数,它会阻塞PHP 脚本,直到它及时完成或超过max_execution_time。相反,它使用proc_open 函数,该函数将执行wkhtmltopdf 命令并打开文件指针以进行输入/输出并因此立即返回(因此max_execution_time 将无效)。

如果是这种情况,那么您的Maximum execution time of 30 seconds exceeded 的原因与您正在使用的库密切相关。

如果您的库使用流程驱动的类来执行wkhtmltopdf 命令,那么您所描述的问题可能与使用 KnpSnappy 库的人所描述的原因相同。如果是这种情况,请检查这些链接,它可能会有所帮助:

在我的情况下,问题与 PHP 会话和 cookie 参数有关,因此我配置了我的库,以便将 --cookie 参数传递给 wkhtmltopdf 命令。查看wkhtmltopdf manual了解更多信息。

【讨论】:

    【解决方案6】:

    在某些情况下,这种缓慢是由一些缺失的项目引起的,例如:图像、字体和链接。
    尝试检查某些图像是否指向无效路径。

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 2019-04-07
      • 2018-08-01
      • 2014-01-20
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多