如何在Magento中使用Varien_Io_FTP将文件上载到远程FTP服务器?
我有csv文件,想上传到远程FTP服务器。我看到Magento有Varien_Io_Ftp类,但我找不到任何好的文档或使用示例。有人能帮我举个好例子吗?下面的例子向您展示了如何创建文件夹,通过一些外部SFTP获取数据,解析/导入,然后解析/导出,最后将数据推送到一些外部SFTP 定义可用的文件/文件夹路径等如何在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
$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,你能帮我一下吗?