Php 从外部FTP站点导入csv文件

Php 从外部FTP站点导入csv文件,php,mysql,import,ftp,Php,Mysql,Import,Ftp,我有下面的脚本从服务器上的csv文件导入数据,该脚本工作正常 我需要将文件的位置从我的服务器更改为需要身份验证的FTP服务器。FTP服务器上的csv文件名将根据其生成的时间戳进行标记。导入MySQL数据库后,需要删除FTP服务器上的文件 然后,我需要将此作业与cron作业一起安排为每5分钟运行一次 任何协助都将不胜感激 谢谢 这就是你要找的吗 我想我应该发布解决我问题的代码;它将csv文件从外部FTP站点下载到我的本地服务器上。然后将csv文件导入本地mysql数据库表。导入后,ftp服务器上

我有下面的脚本从服务器上的csv文件导入数据,该脚本工作正常

我需要将文件的位置从我的服务器更改为需要身份验证的FTP服务器。FTP服务器上的csv文件名将根据其生成的时间戳进行标记。导入MySQL数据库后,需要删除FTP服务器上的文件

然后,我需要将此作业与cron作业一起安排为每5分钟运行一次

任何协助都将不胜感激

谢谢



这就是你要找的吗


我想我应该发布解决我问题的代码;它将csv文件从外部FTP站点下载到我的本地服务器上。然后将csv文件导入本地mysql数据库表。导入后,ftp服务器上的文件将被删除。我用cronjob在cpanel中安排此作业

我不能为这个脚本负责,我刚刚修改了另一个网站上的一个脚本。我相信有更好的方法可以通过一些错误检查来实现这一点。然而,这是我用有限的技能所能做到的最好的

我希望这有助于未来的访问者解决同样的问题。感谢所有帮助我的人。 以下是我使用的代码:

<?php

$source = "DespGoods.csv";
$target = fopen("DespGoods.csv", "w");
$conn = ftp_connect("ftp.server.com") or die("Could not connect");

ftp_login($conn,"ftpusername","ftppassword");
ftp_fget($conn,$target,$source,FTP_ASCII);

echo "file downloaded.\n";

/********************************/
/* Code at http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/* Edit the entries below to reflect the appropriate values
/********************************/
$dbhost = "localhost";
$dbname = "dbname";
$dbtable = "despgoods";
$dbusername ="dbusername";
$dbpassword = "dbpassword";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "DespGoods.csv";
/********************************/
/* Would you like to add an ampty field at the beginning of these records?
/* This is useful if you have a table with the first field being an auto_increment 
/* integer and the csv file does not have such as empty field before the records.
/* Set 1 for yes and 0 for no. ATTENTION: don't set to 1 if you are not sure.
/* This can dump data in the wrong fields if this extra field does not 
/* exist in the table.
/********************************/
$addauto = 0;
/********************************/
/* Would you like to save the mysql queries in a file? If yes set $save to 1.
/* Permission on the file should be set to 777. Either upload a sample file 
/* through ftp and change the permissions, or execute at the prompt: 
/*     touch output.sql && chmod 777 output.sql
/********************************/
$save = 0;
$outputfile = "output.sql";
/********************************/

if(!file_exists($csvfile)) {
    echo "File not found. Make sure you specified the correct path.\n";
    exit;
}

$file = fopen($csvfile,"r");
if(!$file) {
    echo "Error opening data file.\n";
    exit;
}

$size = filesize($csvfile);
if(!$size) {
    echo "File is empty.\n";
    exit;
}

$csvcontent = fread($file,$size);
fclose($file);

$con = @mysql_connect($dbhost,$dbusername,$dbpassword) or die(mysql_error());
@mysql_select_db($dbname) or die(mysql_error());

$lines = 0;
$queries = "";
$linearray = array();

foreach(split($lineseparator,$csvcontent) as $line) {
    $lines++;
    $line = trim($line," \t");
    $line = str_replace("\r","",$line);

    /************************************
    /* This line escapes the special character. 
    /* Remove it if entries are already escaped in the csv file
    /************************************/
    $line = str_replace("'","\'",$line);
    /*************************************/

    $linearray = explode($fieldseparator,$line);
    $linemysql = implode("','",$linearray);

    if($addauto) {
        $query = "insert into $dbtable values('','$linemysql');";
    }
    else {
        $query = "insert into $dbtable values('$linemysql');";
    }
    $queries .= $query . "\n";
    @mysql_query($query);
}

@mysql_close($con);
if($save) {
    if(!is_writable($outputfile)) {
        echo "File is not writable, check permissions.\n";
    }
    else {
        $file2 = fopen($outputfile,"w");

        if(!$file2) {
            echo "Error writing to the output file.\n";
        }
        else {
            fwrite($file2,$queries);
            fclose($file2);
        }
    }
}

echo "Found a total of $lines records in this csv file.\n";

$source = "DespGoods.csv";
$target = fopen("DespGoods.csv", "w");
$conn = ftp_connect("ftp.server") or die("Could not connect");

ftp_login($conn,"ftpusername","ftppassword");
ftp_delete($conn,$source);
ftp_close($conn);

echo "file deleted";
mysql_close($con);

?>

只是一个随机点,可能值得研究fgetcsv和fputcsv PHP函数。
<?php

$source = "DespGoods.csv";
$target = fopen("DespGoods.csv", "w");
$conn = ftp_connect("ftp.server.com") or die("Could not connect");

ftp_login($conn,"ftpusername","ftppassword");
ftp_fget($conn,$target,$source,FTP_ASCII);

echo "file downloaded.\n";

/********************************/
/* Code at http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/* Edit the entries below to reflect the appropriate values
/********************************/
$dbhost = "localhost";
$dbname = "dbname";
$dbtable = "despgoods";
$dbusername ="dbusername";
$dbpassword = "dbpassword";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "DespGoods.csv";
/********************************/
/* Would you like to add an ampty field at the beginning of these records?
/* This is useful if you have a table with the first field being an auto_increment 
/* integer and the csv file does not have such as empty field before the records.
/* Set 1 for yes and 0 for no. ATTENTION: don't set to 1 if you are not sure.
/* This can dump data in the wrong fields if this extra field does not 
/* exist in the table.
/********************************/
$addauto = 0;
/********************************/
/* Would you like to save the mysql queries in a file? If yes set $save to 1.
/* Permission on the file should be set to 777. Either upload a sample file 
/* through ftp and change the permissions, or execute at the prompt: 
/*     touch output.sql && chmod 777 output.sql
/********************************/
$save = 0;
$outputfile = "output.sql";
/********************************/

if(!file_exists($csvfile)) {
    echo "File not found. Make sure you specified the correct path.\n";
    exit;
}

$file = fopen($csvfile,"r");
if(!$file) {
    echo "Error opening data file.\n";
    exit;
}

$size = filesize($csvfile);
if(!$size) {
    echo "File is empty.\n";
    exit;
}

$csvcontent = fread($file,$size);
fclose($file);

$con = @mysql_connect($dbhost,$dbusername,$dbpassword) or die(mysql_error());
@mysql_select_db($dbname) or die(mysql_error());

$lines = 0;
$queries = "";
$linearray = array();

foreach(split($lineseparator,$csvcontent) as $line) {
    $lines++;
    $line = trim($line," \t");
    $line = str_replace("\r","",$line);

    /************************************
    /* This line escapes the special character. 
    /* Remove it if entries are already escaped in the csv file
    /************************************/
    $line = str_replace("'","\'",$line);
    /*************************************/

    $linearray = explode($fieldseparator,$line);
    $linemysql = implode("','",$linearray);

    if($addauto) {
        $query = "insert into $dbtable values('','$linemysql');";
    }
    else {
        $query = "insert into $dbtable values('$linemysql');";
    }
    $queries .= $query . "\n";
    @mysql_query($query);
}

@mysql_close($con);
if($save) {
    if(!is_writable($outputfile)) {
        echo "File is not writable, check permissions.\n";
    }
    else {
        $file2 = fopen($outputfile,"w");

        if(!$file2) {
            echo "Error writing to the output file.\n";
        }
        else {
            fwrite($file2,$queries);
            fclose($file2);
        }
    }
}

echo "Found a total of $lines records in this csv file.\n";

$source = "DespGoods.csv";
$target = fopen("DespGoods.csv", "w");
$conn = ftp_connect("ftp.server") or die("Could not connect");

ftp_login($conn,"ftpusername","ftppassword");
ftp_delete($conn,$source);
ftp_close($conn);

echo "file deleted";
mysql_close($con);

?>