У меня на самом деле есть этот код create.php
<?php
//ENTER THE RELEVANT INFO BELOW
$mysqlUserName = "root";
$mysqlPassword = "admin";
$mysqlHostName = "localhost";
$DbName = "corporativostr_inventario";
$backup_name = "corporativostr_inventario.sql";
$tables = array("articulos","articulos_eliminados","categorias","conceptos","proveedores","registros","responsables","responsables_eliminados","usuarios","usuarios_eliminados");
//or add 5th parameter(array) of specific tables: array("mytable1","mytable2","mytable3") for multiple tables
Export_Database($mysqlHostName,$mysqlUserName,$mysqlPassword,$DbName, $tables=false, $backup_name=false );
function Export_Database($host,$user,$pass,$name, $tables=false, $backup_name=false )
{
$mysqli = new mysqli($host,$user,$pass,$name);
$mysqli->select_db($name);
$mysqli->query("SET NAMES 'utf8'");
$queryTables = $mysqli->query('SHOW TABLES');
while($row = $queryTables->fetch_row())
{
$target_tables[] = $row[0];
}
if($tables !== false)
{
$target_tables = array_intersect( $target_tables, $tables);
}
foreach($target_tables as $table)
{
$result = $mysqli->query('SELECT * FROM '.$table);
$fields_amount = $result->field_count;
$rows_num=$mysqli->affected_rows;
$res = $mysqli->query('SHOW CREATE TABLE '.$table);
$TableMLine = $res->fetch_row();
$content = (!isset($content) ? '' : $content) . "\n\n".$TableMLine[1].";\n\n";
for ($i = 0, $st_counter = 0; $i < $fields_amount; $i++, $st_counter=0)
{
while($row = $result->fetch_row())
{ //when started (and every after 100 command cycle):
if ($st_counter%100 == 0 || $st_counter == 0 )
{
$content .= "\nINSERT INTO ".$table." VALUES";
}
$content .= "\n(";
for($j=0; $j<$fields_amount; $j++)
{
$row[$j] = str_replace("\n","\\n", addslashes($row[$j]) );
if (isset($row[$j]))
{
$content .= '"'.$row[$j].'"' ;
}
else
{
$content .= '""';
}
if ($j<($fields_amount-1))
{
$content.= ',';
}
}
$content .=")";
//every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler
if ( (($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num)
{
$content .= ";";
}
else
{
$content .= ",";
}
$st_counter=$st_counter+1;
}
} $content .="\n\n\n";
}
//$backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').")__rand".rand(1,11111111).".sql";
$backup_name = $backup_name ? $backup_name : $name.".sql";
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"".$backup_name."\"");
echo $content; exit;
}
?>
который создает загружаемый файл .sql, когда я открываю файл .php на другом ПК с помощью веб-навигатора
Но когда я запускаю его на сервере Ubuntu, я вижу только содержимое БД.
Как я могу создать файл .sql в том же каталоге, где находится файл create.php?
Вы не можете создать файл .sql с этим кодом, этот код создает базу данных с именем prueba
Для создания файла .sql мы используем запросы командной строки (можно использовать и на уровне приложения).
mysqldump -u'user' -p'password' database_name > /path/filename.sql
Это создаст .sql
файл, и вы можете использовать тот же запрос на уровне приложения для создания базы данных .sql при условии, что использование базы данных имеет надлежащие права.
Вы можете использовать другие параметры, такие как —routines, если в вашей базе данных есть подпрограммы. Есть ряд необязательных параметров.
Других решений пока нет …