php - 使用 PHP/Joomla 以编程方式将 MySql 数据库导出到 CSV

标签 php database csv joomla export

使用 PHP/Joomla,我正在尝试将数据库备份导出到 CSV/sql 文件以供下载。有些表有大量记录。当我开始导出时出现以下错误: fatal error :超过 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 中启动的,我们会使用实用程序方法来确保系统正确地 fork 它:

/**
 * 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_pa​​cket 值决定的,我们创建了一个 SQL 文件,其中包含符合此限制的语句,并为各种开销留有少量余地。您可能没有这些问题,但即使如此,您也应该将 SQL 分解为大小合理的 insert 语句。

一旦计划完成运行,我们就会压缩所有文件并将它们发送到存档。

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

相关文章:

sql - 在sql脚本中指定服务器

python - 读取 csv 文件时行包含空字节错误

php - 如何自动将(数据库上)的新更新反射(reflect)到用户页面

javascript - WordPress - fatal error : "Call to a member function get_var() on a non-object" but only if not as Template

php - 如何获取php系统函数的全部输出

php - 仅显示 MySQL future 的数据库记录

mysql - 使用相同的表更新表中的各个 ID 的列。

php - 如何避免/停止重复插入 php 和 html?

php - 导入在实际字段中有换行符的 CSV

python - 在 python 中从 CSV 获取特定时间间隔的数据