1

我正在使用 Joomla 2.5.8 并安装了一个自定义组件,该组件从数据库中获取数据并使用 TCPDF 生成自定义 PDF 文件。

根据用户的请求,模型从数据库加载一堆数据,这没问题,没有超时,请求需要几秒钟,之后没有更多的查询发送到数据库。根据接收到的数据,进行处理以生成 PDF 文件,并将生成的 PDF 文件列表重新调整到要在布局中显示的视图。

一切似乎工作正常并且处理正确完成,但可能是由于模型中完成的长时间处理,菜单模块未加载并返回以下错误:

MySQL 服务器已经消失

SQL:

SELECT m.id, m.title, m.module, m.position, m.content, 
  m.showtitle, m.params, mm.menuid 
FROM jos2_modules AS m LEFT JOIN 
  jos2_modules_menu AS mm ON mm.moduleid = m.id LEFT JOIN 
  jos2_extensions AS e ON e.element = m.module AND e.client_id = m.client_id 
WHERE m.published = 1 AND e.enabled = 1 AND 
  (m.publish_up = '0000-00-00 00:00:00' OR m.publish_up <= '2013-10-31 15:42:00') AND
  (m.publish_down = '0000-00-00 00:00:00' OR m.publish_down >= '2013-10-31 15:42:00') AND 
  m.access IN (1,1,2,3,4) AND m.client_id = 0 AND 
  (mm.menuid = 101 OR mm.menuid <= 0) 
ORDER BY m.position, m.ordering

请注意,如果我删除 PDF 文件处理,则没有错误。我无法控制在此处理中花费的时间,但也许我没有在正确的地方进行。

我还从以前的帖子中了解到,MySQL 配置中有一些参数可以在 MySQL ini 文件中进行调整,但这不是我可以做的,因为 SQL 服务器由我的提供商托管。此外,发生错误时我无法访问数据库。

有没有人已经遇到过这种问题?

4

1 回答 1

0

这可能是超时问题。

您是否正在运行用于创建许多 pdf 文件的单个查询?如果是这样,它可能会超时,或者 pdf 文件的创建可能会关闭查询(更有可能)。

您应该尝试为要创建的每个文档重新运行查询,开销很小,如果查询相同,它们将被缓存。

您发布的查询似乎很快,因为所有查询都确保存在索引以保持快速。(不是解决方案,但可以解决您的问题)。最后,如果查询真正超时,您可以一次创建一个文档并使用 ajax 调用显示结果,因此您的服务器一次只生成一个文档并且可能不会超时。这也将使网站更快地出现在用户面前。

您也可以尝试增加 php 脚本的数量set_time_limit(200);,但我不确定这是否有效,如果他们必须等待三分钟才能看到页面,这将是一个糟糕的用户体验,他们只会在之前点击重新加载超时。

于 2013-11-19T08:32:27.477 回答