下载XML并添加到数据库

时间:2018-10-31 11:05:10

标签: php mysql xml

我需要编写一个脚本,该脚本将从FTP复制的文件中下载XML到服务器,该脚本将把它添加到数据库中。问题是我不知道是否可以连接到放置数据库的服务器并将文件复制到可以从中下载文件的文件夹中?

该数据库已安装在synology MariaDB 10(通过UNIX套接字的localhost)上。

<?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 :(得分:0)

当在LOCAL命令中使用LOAD DATA LOCAL INFILE关键字时,它将从运行MySQL客户端的主机上加载文件,如https://dev.mysql.com/doc/refman/8.0/en/load-data.html所述:

  

如果指定了LOCAL,则文件由客户机主机上的客户机程序读取并发送到服务器。可以将文件指定为完整路径名以指定其确切位置。如果指定为相对路径名,则该名称将相对于启动客户端程序的目录进行解释。

您所使用的MySQL客户端将是运行php脚本的主机。该路径必须由那个主机访问,并将自动传输到MySQL服务器。