使用php/joomla,我试图将数据库备份导出到csv/sql文件中下载。有些表格有大量的记录。当我启动导出时,它会给出以下错误:
致命错误:超过30秒的最大执行时间
注意:我不想使用“max_execution_time”或“set_time_limit()”或任何php.ini设置。因为我将在不同的客户端服务器上使用这个脚本&我不会告诉每个客户端更改设置。
我需要php/joomla脚本,而不是任何扩展。
请帮帮我。

最佳答案

鉴于你对我之前的回答的评论,我建议你考虑创建一个joomla!cli(查看joomla 2.5+安装的/cli目录)。
我们已经做了一件类似的事情,你是为我们的easystaging扩展的pro版本,我们开发的内部使用,以管理特定内容审批流程的客户网站。内部版本必须满足我们更大客户的需求。
我们有效地创建了继承自JApplicationCli的类,可以由cron或组件用户界面启动。
例如

class EasyStaging_PlanRunner extends JApplicationCli
{
    /**
     * Entry point for the plan funner (yes it's more fun)
     *
     * @return  void
     *
     * @since   2.5
     */
    public function doExecute()
    {
    }
}

如果它是由用户从joomla内部启动的,我们将使用一种实用方法来确保系统正确地将其分叉:
/**
 * Runs the script in the background by scheduling it with the `at` daemon and returns the result
 *
 * @param   string  $pathToScript  A path to the script to run e.g. "/path/to/my/cli/app.php"
 *
 * @return  int
 */
private function _runScriptInBackground($pathToScript)
{
    $cmdPath = "/usr/bin/php -q $pathToScript";

    // We need '2>&1' so we have something to pass back
    $cmd     = 'echo "' . $cmdPath . '" | at now 2>&1';
    $result = shell_exec($cmd);

    return $result;
}

由于这是作为命令行脚本有效运行的,所以很多限制都要宽松得多,但它们仍然不能让您绕过一个很大的表。(我们的一些客户有成千上万的文章或更糟的k2内容项目)。
为了解决这个问题,我们编写了一个从doExecute()的主分派循环调用的导出方法,以便以合理的批处理检索和导出表行。对于我们来说,合理是由远程数据库max_allowed_packet值决定的,我们创建了一个sql文件,其中包含符合此限制的语句,并为各种开销留出了一点空间。您可能没有这些问题,但即使如此,您也应该将sql分解成大小合理的insert语句。
一旦计划完成运行,我们将压缩所有文件并将它们发送到存档。

关于php - 使用PHP/Joomla以编程方式将MySql数据库导出到CSV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17327109/

10-13 02:59