- Использование файла .php для создания дампа MySQL
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- micc83 / mysqldump.php
- Backing up database to ` `
- Sql database dump php
- Фильтрация данных с помощью zend-filter
- Контекстное экранирование с помощью zend-escaper
- Подключение Zend модулей к Expressive
- Совет: отправка информации в Google Analytics через API
- Подборка PHP песочниц
- Совет: активация отображения всех ошибок в PHP
Использование файла .php для создания дампа MySQL
Вот информация, которой я располагаю:
Я работаю с системой на базе Linux, использующей MySQL и PHP5. Мне нужно иметь возможность генерировать mysqldump из файла .php, а затем сохранять этот дамп в файл на сервере в указанном мной месте. Поскольку я не разбираюсь в PHP, я бы хотел, чтобы кто-нибудь помог мне, подсказал или написал код, который сделает то, что мне нужно. Это должно быть запущено и удаленно из и нтернета.
Ответ 1
Вы можете использовать функцию exec() для выполнения внешней команды.
Примечание: между shell_exec() и exec() я бы выбрал вторую, которая не возвращает вывод PHP-скрипту , — нет необходимости, чтобы PHP-скрипт получил весь SQL дамп в виде строки. Вам нужно только записать его в файл, а это может сделать сама команда. Эта внешняя команда будет такой: вызвать mysqldump с нужными параметрам и и перенаправить вывод в файл. Например:
mysqldump —user=. —password=. —host=. DB_NAME > /path/to/output/file.sql
Это означает, что ваш PHP-код будет выглядеть следующим образом:
exec(‘mysqldump —user=. —password=. —host=. DB_NAME > /path/to/output/file.sql’);
Конечно, от вас зависит использование правильной информации о подключении.
Ответ 2
Если вы хотите создать резервную копию, чтобы загрузить ее через браузер, вы также можете сделать это без использования файла. php-функция passthru() будет напрямую перенаправлять вывод mysqldump в браузер. В данном примере он также будет заархивирован.
Плюс: Вам не придется иметь дело с временными файлами.
Минус: Не работает в Windows. Может иметь ограничения при работе с огромными наборами данных.
$DBUSER=»user»;
$DBPASSWD=»password»;
$DATABASE=»user_db»;
$filename = «backup-» . date(«d-m-Y») . «.sql.gz»;
$mime = «application/x-gzip»;
header( «Content-Type: » . $mime );
header( ‘Content-Disposition: attachment; filename=»‘ . $filename . ‘»‘ );
$cmd = «mysqldump -u $DBUSER —password=$DBPASSWD $DATABASE | gzip —best»;
passthru( $cmd );
exit(0);
?>
Ответ 3
Посмотрите здесь: https://github.com/ifsnop/mysqldump-php! Это нативное решение, написанное на php. Вы можете установить его с помощью composer, и это сделать очень просто:
use Ifsnop\Mysqldump as IMysqldump;
try
$dump = new IMysqldump\Mysqldump(‘database’, ‘username’, ‘password’);
$dump->start(‘storage/work/dump.sql’);
> catch (\Exception $e)
echo ‘mysqldump-php error: ‘ . $e->getMessage();
>
?>
Этот код создан для опытных пользователей и поддерживает большое количество опций, скопированных из оригинального mysqldump. Все опции описаны на странице github, но более или менее понятны и так:
$dumpSettingsDefault = array(
‘include-tables’ => array(),
‘exclude-tables’ => array(),
‘compress’ => ‘None’,
‘no-data’ => false,
‘add-drop-database’ => false,
‘add-drop-table’ => false,
‘single-transaction’ => true,
‘lock-tables’ => false,
‘add-locks’ => true,
‘extended-insert’ => true,
‘disable-foreign-keys-check’ => false,
‘where’ => »,
‘no-create-info’ => false
);
Ответ 4
В целях безопасности рекомендуется указывать пароль в конфигурационном файле, а не в команде (пользователь может выполнить команду ps aux | grep mysqldump и увидеть пароль):
// создание временного файла
$file = tempnam(sys_get_temp_dir(), ‘mysqldump’);
// сохранение опций конфигурации
file_put_contents($file, «[mysqldump]
user=
password=\»\»»);
// вы п олнение команды и вывод результата
passthru(«mysqldump —defaults-file=$file «);
// удаление временного файла
unlink($file);
Ответ 5
Здесь вы найдете комплексное решение для дампа структуры и данных mysql, как в PMA (и без использования exec, passthru и т . д .):
https://github.com/antarasi/MySQL-Dump-with-Foreign-keys
Это форк проекта dszymczuk с моими улучшениями. Использование простое:
// параметры соединения MySQL
$dbhost = ‘localhost’;
$dbuser = ‘dbuser’;
$dbpsw = ‘pass’;
$dbname = ‘dbname’;
// соед и нение с сервером mysql
$connessione = @mysql_connect($dbhost,$dbuser,$dbpsw);
// установка кодировки
mysql_query(«SET CHARSET utf8»);
mysql_query(«SET NAMES ‘utf8’ COLLATE ‘utf8_general_ci'»);
// подключение классов
require_once(‘FKMySQLDump.php’);
//Создает новый экземпляр FKMySQLDump: он экспортирует без сжатия и файла base-16
$dumper = new FKMySQLDump($dbname,’fk_dump.sql’,false,false);
$params = array(
//’skip_structure’ => TRUE,
//’skip_data’ => TRUE,
);
// создание дампа
$dumper->doFKDump($params);
?>
Ответ 6
Я нашел этот вариант, который следует подходу из предыдущего ответа и действительно работает.
$dir = «path/to/file/»;
$filename = «backup» . date(«YmdHis») . «.sql.gz»;
$db_host = «host»;
$db_username = «username»;
$db_password = «password»;
$db_database = «database»;
$cmd = «mysqldump -h -u —password= | gzip > «;
exec($cmd);
header(«Content-type: application/octet-stream»);
header(«Content-Disposition: attachment; filename=\»$filename\»»);
passthru(«cat «);
Ответ 7
Ни один из вышеперечисленных кодов не сработал для меня. Я использую W indows. Приведенный ниже код работает.
$sql = «SELECT * FROM $tableName WHERE yourclause»;
$result = $conn->query($sql);
if($result)
if ($result->num_rows > 0)
$myfile = fopen(«daily_events_$district.sql», «w») or die(«Unable to open file!»);
while($row = $result->fetch_assoc())
$rowToString = implode(«‘,'»,$row);
$writeToFile = «INSERT INTO $tableName VALUES(‘$rowToString’);». PHP_EOL;
fwrite($myfile,$writeToFile);
>
echo «Файл сохранен успешно»;
>
> else
echo «Ошибка – результат не определен»;
>
Этот код сохранит файл в папке вашего проекта в соответствии с вашим запросом и любыми данными, которые вы запросите.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
micc83 / mysqldump.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
ini_set( ‘display_errors’ , 1 ); |
ini_set( ‘display_startup_errors’ , 1 ); |
error_reporting( E_ALL ); |
$ database = ‘db’ ; |
$ user = ‘user’ ; |
$ pass = ‘pass’ ; |
$ host = ‘localhost’ ; |
$ dir = dirname(__FILE__) . ‘/dump.sql’ ; |
echo » Backing up database to ` `«; |
exec(» mysqldump —user= < $ user >—password= < $ pass >—host= < $ host > < $ database >—result-file= < $ dir >2>&1 «, $ output ); |
var_dump( $ output ); |
Excellent script. Thanks a lot ..
By the way, if you i want to just dump the tables structures of the DB. How to do that? thanks in advance.
Error occur while running above script please help me to solve this.
array (size=2)
0 => string »mysqldump’ is not recognized as an internal or external command,’ (length=65)
1 => string ‘operable program or batch file.’ (length=31)
You have to add MySQL_Installation_Path/bin to PATH. For example if you are using MariaDB and your installation path is:
Well you have to add C:/MariaDB/bin to system path.
Just use mysqldump-php within your php code. Check out the examples or the wiki, but it is as easy as:
error_reporting(E_ALL); require_once __DIR__ . '/vendor/autoload.php'; include_once(dirname(__FILE__) . '/vendor/mysqldump-php/src/Ifsnop/main.inc.php'); use Ifsnop\Mysqldump as IMysqldump; try < $dump = new IMysqldump\Mysqldump('mysql:host=localhost;dbname=testdb', 'username', 'password'); $dump->start('storage/work/dump.sql'); > catch (\Exception $e) < echo 'mysqldump-php error: ' . $e->getMessage(); >
Just use mysqldump-php within your php code. Check out the examples or the wiki, but it is as easy as:
error_reporting(E_ALL); require_once __DIR__ . '/vendor/autoload.php'; include_once(dirname(__FILE__) . '/vendor/mysqldump-php/src/Ifsnop/main.inc.php'); use Ifsnop\Mysqldump as IMysqldump; try < $dump = new IMysqldump\Mysqldump('mysql:host=localhost;dbname=testdb', 'username', 'password'); $dump->start('storage/work/dump.sql'); > catch (\Exception $e) < echo 'mysqldump-php error: ' . $e->getMessage(); >
If you’re in windows like me and don’t want create a ENVIRONMENT VARIABLE, you can use the mysql dir before the dump command
Backing up database to ` `"; exec(" --user= --password= --host= --result-file= 2>&1", $output); var_dump($output);
The script works well locally, now how can I use it externally?
Thanks a lot for this script.
I improved it with a bit of bash and a desktop launcher, it's written in French but this may interest someone:
first of all let me thank you for the amazing simple script.. it works great, but i needed to add some features to fit my project, such as save file from input form in php, where we select de name of the backup and post it to the execut backup script, and then download file in webrowser directly. attached below is a working example of the code.
And yeahhh keep up the good work lads.
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);include_once("conect-db.php");
$name_backup = $_REQUEST['name_backup'];
$command='mysqldump --opt -h' .$databaseHost .' -u' .$databaseUsername .' -p' .$databasePassword .' ' .$databaseName .' > ' .$name_backup;
exec($command,$output,$worked);$file_name = basename($name_backup);
//save the file by using base name
$fn = file_put_contents($file_name,file_get_contents($name_backup));
header("Expires: 0");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-type: application/file");
header('Content-length: '.filesize($file_name));
header('Content-disposition: attachment; filename="'.basename($file_name).'"');
readfile($file_name);switch($worked) case 0:
echo 'The database ' .$databaseName .' was successfully stored in the following path '.getcwd().'./' .$name_backup .'';
break;
case 1:
echo 'An error occurred when exporting ' .$databaseName .' zu '.getcwd().'/' .$mysqlExportPath .'';
break;
case 2:
echo 'An export error has occurred, please check the following information:
MySQL Database Name: | ' .$databaseName .' |
MySQL User Name: | ' .$databaseUsername .' |
MySQL Password: | NOTSHOWN |
MySQL Host Name: | ' .$databaseHost .' |
';
break;
>
?>
Sql database dump php
В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Совет: активация отображения всех ошибок в PHP
При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.