我正在尝试制作一个简单的表单,显示服务器上的数据库列表,允许用户选择一个数据库点击ok,然后开始下载一个.sql文件,该文件可以用于恢复数据库
<?php
ob_start();
// print_r($_POST);
$username = "dbselect";
$password = "PASSWORD";
$hostname = "SERVER";
$dbname = $_POST['db_select'];
if (isset($_POST['db_select'])) {
//echo "file created on " . date('mdy');
// $command = "mysqldump --add-drop-table --result-file=/var/www/db-dump/${dbname}.sql --host=" . $hostname . " --user=" . $username . " --password=". $password . " " . $dbname;
$command = "mysqldump --opt --add-drop-table --host=" . $hostname . " --user=" . $username . " --password=" . $password . " " . $dbname;
system($command);
file_put_contents("/var/www/db-dump/return");
$dump = ob_get_contents();
ob_end_clean();
// send dump file to the output
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" . date("Y-m-d_H-i-s").".sql"));
flush();
echo $dump;
exit();
//echo date('mdy');
} else {
$dbh = new PDO("mysql:host=hostname", username, password);
$dbs = $dbh->query('SHOW DATABASES');
?>
</head>
<body>
<header>
<h1> Databases</h1>
<p>on <b>d.uk</b></p>
</header>
<section class="databases">
<p>Select and download any production database from any app or site.</p>
<form method="POST" action="<?php $_SERVER['PHP_SELF']; ?>">
<select name="db_select" id="">
<?php
foreach ($dbs as $db) {
echo "<option value='" . $db['Database'] . "'>";
echo $db['Database'];
echo "</option>";
}
?>
</select>
<button type="submit">Download database</button>
</form>
</section>
</body>
</html>
<?php } ?>
我遇到的问题是只有一个空白。sql文件已创建。如果我更改它,只使用mysqldump命令,为转储指定一个文件位置,我会在文件中获得更多信息,但只是其中的一部分:
--主机:localhost数据库:
-- 服务器版本 5.5.35-0ubuntu0.12.04.2
/*!40101 设置 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT /;/!40101 设置@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS /;/!40101 设置@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION /;/!40101 设置名称 UTF8 /;/!40103 设置@OLD_TIME_ZONE=@@TIME_ZONE /;/!40103 设置 TIME_ZONE=' 00:00' /;/!40014 设置@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 /;/!40014 设置@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 /;/!40101 设置 @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' /;/!40111 设置 @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
数据库非常大(大约30MB),所以命令确实需要一点时间(大约10-15分钟),所以我认为这是一个超时问题。我唯一能找到的关于增加php发送命令的时间的set_the_limit但这没有帮助。
我使用GitHub上找到的mysqldump-php。
“这是终端'$ mysqldump -u username -p...'中Linux的mysqldump的php版本,没有依赖,输出压缩和理智的默认值。
开箱即用,MySQLDump-PHP支持备份表结构,数据本身,视图和触发器。
不确定,但我认为你可以用:
<?php
$password = "PASSWORD";
$hostname = "SERVER";
$dbname = $_POST['db_select'];
if (isset($_POST['db_select'])) {
//echo "file created on " . date('mdy');
// $command = "mysqldump --add-drop-table --result-file=/var/www/db-dump/${dbname}.sql --host=" . $hostname . " --user=" . $username . " --password=". $password . " " . $dbname;
$command = "mysqldump --opt --add-drop-table --host=" . $hostname . " --user=" . $username . " --password=" . $password . " " . $dbname;
if($result=system($command)){
$fp=fopen($dbname.'.sql','ab');
$fwrite($fp,$result);
$fclose($fp);
}
}
?>
我正在使用以下脚本来创建MySQL转储(我的达到57MB),也许你可以使用它(它并不完全好,就像全局变量一样):
$dbname = $db_database."-".date("Y-m-d G").'.sql';
$backupfile = $root."files/".$dbname;
function backup_tables($host, $user, $pass, $name, $tables = '*') {
global $dbname;
global $backupfile;
$link = mysql_connect($host, $user, $pass);
mysql_select_db($name, $link);
//get all of the tables
if ($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while ($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
} else {
$tables = is_array($tables) ? $tables : explode(',', $tables);
}
//cycle through
foreach ($tables as $table) {
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
$return .= 'DROP TABLE '.$table.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return .= "\n\n".$row2[1].";\n\n";
for ($i = 0; $i < $num_fields; $i++) {
while ($row = mysql_fetch_row($result)) {
$return .= 'INSERT INTO '.$table.' VALUES(';
for ($j = 0; $j < $num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace("\n", "\\n", $row[$j]);
if (isset($row[$j])) {
$return .= '"'.$row[$j].'"';
} else {
$return .= '""';
}
if ($j < ($num_fields - 1)) {
$return .= ',';
}
}
$return .= ");\n";
}
}
$return .= "\n\n\n";
}
//save file
$handle = fopen($backupfile, 'w+');
fwrite($handle, $return);
fclose($handle);
}
backup_tables('localhost', $db_login, $db_pass, $db_database);
问题内容: 这是我所拥有的信息: 我正在使用MySQL和PHP5在基于Linux的系统上工作。我需要能够从.php文件中生成一个,然后将该转储存储在服务器上我指定的位置的文件中。 因为我是PHP nooblet,所以我希望有人给我一些帮助,指导或代码,这些可以帮助我完成所需的工作。这将必须从Internet远程运行。 问题答案: 您可以使用该 功能执行外部命令。 注意:在和之间,我会选择第二个,它
我需要用DHL的数据自动化邮件发送过程。目前我们正在做的是:我们有一个DHL帐户,必须有人手动登录该帐户,下载包含订单跟踪详细信息的CSV转储文件,然后将其上载到服务器,从中导入数据并进行处理。 所以我想把整个过程自动化,这样只需要最少的人工干预。 1)我们是否可以从DHL自动下载过程? 注意:我使用的是Python
我必须在运行时动态生成一个xml文件。请帮助我使用PHP动态生成下面的XML文件。 null
我做了一个两个类,一个文本文件,和一个应该打印出来的代码,但无论我做什么,它仍然变成空?我试图通过使用InventoryTester中的Book类中的toString方法和Inventory类中的printInventory从文本文件中读取代码。 我的第一个代码是在应该打印的内容上派生的。我做了一个构造函数,我用setter和getter来做这个。然后用toString()方法结束它。我做了一个B
问题内容: 每次我的应用程序崩溃时,都不会生成核心转储文件。我记得几天前,它 是 在另一台服务器 上 生成的。我正在使用bash屏幕运行应用程序,如下所示: 如您所见,如果要生成核心转储,则在使用哪个选项很重要,但是当遇到分段错误时,它仍然不会生成。我该如何运作? 问题答案: 确保当前目录(崩溃时可能会更改目录)是可写的。如果服务器调用,则该目录必须是该用户可写的。 同时检查。这可能会将核心转储重
问题内容: 我正在尝试遵循Zed Shaw的《困难方法学习Python》指南。我需要在Powershell中使用python。我在中安装了Python 2.7.3 。每当我在Powershell中键入python时,都会出现一个错误,指出“ python”一词无法识别为cmdlet,函数,脚本文件或可操作程序的名称。我也输入了以下内容: 提供了建议的解决方案,但是在Powershell中输入pyt