如何在Magento中使用Varien_Io_FTP将文件上载到远程FTP服务器?

如何在Magento中使用Varien_Io_FTP将文件上载到远程FTP服务器?,magento,Magento,我有csv文件,想上传到远程FTP服务器。我看到Magento有Varien_Io_Ftp类,但我找不到任何好的文档或使用示例。有人能帮我举个好例子吗?下面的例子向您展示了如何创建文件夹,通过一些外部SFTP获取数据,解析/导入,然后解析/导出,最后将数据推送到一些外部SFTP 定义可用的文件/文件夹路径等 $baseDir = Mage::getBaseDir(); $varDir = $baseDir.DS.'var'; $timeOfImport = date('jmY_his'); $i

我有csv文件,想上传到远程FTP服务器。我看到Magento有Varien_Io_Ftp类,但我找不到任何好的文档或使用示例。有人能帮我举个好例子吗?

下面的例子向您展示了如何创建文件夹,通过一些外部SFTP获取数据,解析/导入,然后解析/导出,最后将数据推送到一些外部SFTP

定义可用的文件/文件夹路径等

$baseDir = Mage::getBaseDir();
$varDir = $baseDir.DS.'var';
$timeOfImport = date('jmY_his');
$importReadyDir = $varDir.DS.'import_ready'.DS.$timeOfImport;
$exportReadyDir = $varDir.DS.'export_ready'.DS.$timeOfImport;
$_fileToImportRemote = '/home/skv/customers.txt';
$_fileToExportRemote = '/home/skv/customers_export.txt';
$_fileToImportBaseName = 'customers.txt';
$_fileToImportLocal = $importReadyDir.DS.'customers.txt';
$_fileToExportLocal = $exportReadyDir.DS.'customers_parsed.txt';
然后我们将获取该文件并将其保存到magento安装中

$file = new Varien_Io_File();
//Create import_ready folder
$importReadyDirResult = $file->mkdir($importReadyDir);
if (!$importReadyDirResult) {
    //Handle error
}
$sftpPickupFile = new Varien_Io_Sftp();
try {
    $sftpPickupFile->open(
        array(
            'host'      => 'some.server.com',
            'username'  => 'skv',
            'password'  => 'MyPass',
            'timeout'   => '10'
        )
    );
    $_fileToImportRemoteTmp = $sftpPickupFile->read($_fileToImportRemote);
    if(!$_fileToImportRemoteTmp) {
        //Handle error
    }
    $sftpPickupFile->close();
    if (!$file->write($_fileToImportLocal, $_fileToImportRemoteTmp)) {
        //Handle error
    }
} catch (Exception $e) {
    //Handle error
}
现在,这是将一些数据发送到远程服务器的示例

$flocal = new Varien_Io_File();
$flocal->open(array('path' => $importReadyDir));
$flocal->streamOpen('customers.txt', 'r');
while (false !== ($csvLine = $flocal->streamReadCsv())) {
    //Parse the data and import it...
    //Zend_Debug::dump($csvLine, '$csvLine');
    /**
        $csvLine array(4) {
          [0] => string(13) "skv"
          [1] => string(16) "skv@email.com"
          [2] => string(2) "28"
          [3] => string(25) "Sample address for skv"
        }
     */
}
//Now we do reverse, grab some data from Magento and upload it to SFTP
$data = '"skv", "skv@email.com", "28", "Sample address for skv"
"skv", "skv@email.com", "29", "Sample address for Tomas"';
$sftpDumpFile = new Varien_Io_Sftp();
try {
    $sftpDumpFile->open(
        array(
            'host'      => 'some.server.com',
            'username'  => 'skv',
            'password'  => 'MyPass',
            'timeout'   => '10'
        )
    );
    //Make a local backup that will be send to SFTP
    $file->mkdir($exportReadyDir);
    $file->write($_fileToExportLocal, $data);
    //Upload to SFTP
    $_fileToExportRemoteTmp = $sftpDumpFile->write($_fileToExportRemote, $data);
} catch (Exception $e) {
    echo $e->getMessage();
}

这是我的解决办法。感谢@SKV

$ftp = new Varien_Io_Ftp();
$ftp->open(
        array(
                'host'      => $myhost,
                'user'  => $myuser,
                'password'  => $mypass,
            )
        );

$flocal = fopen(Mage::getBaseDir() . DS . 'test.csv', 'r');
$ftp->write('test.csv', $flocal);
$ftp->close();

在上一个示例中,$file是什么?是否应该改为$sftpDumpFile?好的,我发布了我的解决方案并加上了您的答案。非常感谢。看一看-我使用Varien_Io_Ftp,重要的是它使用“用户”,而不是“用户名”作为参数。为什么使用Varien_Io_文件而不是Varien_Io_Ftp?简单多了。但是你什么时候会丢失你的
$flocal
文件?对我不起作用。没有错误地失败。没有写入任何文件。您在何处指定您在FTP服务器上的保存位置?您可以自己关闭$flocal。在此示例中,文件将写入ftp服务器根文件夹。您应该对目录使用Varien_Io_Ftp::cd方法change@freento,我想在Magento 2中也这样做。但就我而言,它不起作用。我跟踪了网址:@freento,你能帮我一下吗?