Скачивание xml и добавление в базу данных

Мне нужно написать сценарий, который будет загружать XML из файлов, скопированных с FTP, на сервер, который будет добавлен в базу данных сценарием. Проблема в том, что я не знаю, можно ли подключиться к серверу, на котором размещена база данных, и скопировать файлы в папку, из которой их можно скачать?

База данных установлена ​​на Synology MariaDB 10 (локальный хост через сокет UNIX).

<?php
$ftp_serwer            = "xxx";
$ftp_nazwa_uzytkownika = "xxx";
$ftp_haslo             = "xxx";

// nawiązanie połączenia lub zakończenie działania skryptu
$conn_id = ftp_connect($ftp_serwer) or die("Nie można połączyć się z $ftp_serwer");

// próba logowania
if (@ftp_login($conn_id, $ftp_nazwa_uzytkownika, $ftp_haslo)) {
    echo "Połączony jako $ftp_nazwa_uzytkownika@$ftp_serwer\n";
} else {
    echo "Nie można zalogować się jako $ftp_nazwa_uzytkownika\n";
}


// nawiązanie połączenia z baza danych msql

$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "zlecenia";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname, 3307);
$conn->set_charset("utf8");
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 


// define some variables
$local_file = 'Z:\htdocs\phpmysql\TEST\CRM\localfile\yahootable.xml';
$server_file = '/TU WGRYWAC DANE/yahootable.xml';

// set up basic connection
$conn_id = ftp_connect($ftp_serwer);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_nazwa_uzytkownika, $ftp_haslo);

// try to download $server_file and save to $local_file
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
    echo "Successfully written to $local_file\n";
} else {
    echo "There was a problem\n";
}




$sql = "LOAD DATA LOCAL INFILE 
    'Z:/htdocs/phpmysql/TEST/CRM/localfile/yahootable.xml'
INTO TABLE 
    yahootable
CHARACTER SET 'utf8'
LINES STARTING BY '<row>' TERMINATED BY '</row>'
(@tmp)
SET
  id      = ExtractValue(@tmp, '//id'),
  various = ExtractValue(@tmp, '//various'),
  message = ExtractValue(@tmp, '//message')

";



// zamknięcie połączenia
ftp_close($conn_id);
mysqli_close($conn);

?>

Итак, мои вопросы:

  1. Куда мне нужно загрузить файл, чтобы сервер мог его загрузить с помощью LOAD DATA INFILE?
  2. Как скопировать файлы в эту папку с помощью скрипта?
1
0
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы используете ключевое слово LOCAL в своей команде LOAD DATA LOCAL INFILE, он загружает файл с хоста, на котором работает клиент MySQL, как описано в https://dev.mysql.com/doc/refman/8.0/en/load-data.html:

If LOCAL is specified, the file is read by the client program on the client host and sent to the server. The file can be given as a full path name to specify its exact location. If given as a relative path name, the name is interpreted relative to the directory in which the client program was started.

Клиент MySQL в вашем случае будет хостом, на котором выполняется скрипт php. Путь должен быть доступен хосту что и будет автоматически передан на сервер MySQL.

Другие вопросы по теме