在PHP中从SFTP服务器打开CSV文件

在PHP中从SFTP服务器打开CSV文件,php,csv,sftp,phpseclib,Php,Csv,Sftp,Phpseclib,目前,我们从服务器上打开一个csv,然后对数据进行如下处理: $CSVfile = fopen('filename.csv', "r"); if($CSVfile !== FALSE) { $count = 0; while(! feof($CSVfile)) { $data = fgetcsv($CSVfile, 5000, ","); if ($count > 0 && !empty($data)) {

目前,我们从服务器上打开一个csv,然后对数据进行如下处理:

$CSVfile = fopen('filename.csv', "r");
if($CSVfile !== FALSE) {
  $count = 0;
  while(! feof($CSVfile)) {
    $data = fgetcsv($CSVfile, 5000, ",");
      if ($count > 0 && !empty($data)) {
        // Do something
      }
   }
}
include 'vendor/autoload.php';

$sftp = new \phpseclib\Net\SFTP('SERVER');
if (!$sftp->login('USERNAME', 'PASSWORD')) {
  exit('Login Failed');
} else {
  $file = $sftp->fetch('FILE_LOCATION');
}

$CSVfile = fopen($file, "r");
if($CSVfile !== FALSE) {
  $count = 0;
  while(! feof($CSVfile)) {
    $data = fgetcsv($CSVfile, 5000, ",");
    if ($count > 0 && !empty($data)) {
      // Do Something
    }
  }
}
我们需要更改系统,因为文件现在将托管在一个外部服务器上,所以我们需要将SFTP转换到它中以检索文件。我已经安装了phpseclib并使连接正常工作,但它只是在屏幕上不断回显文件内容。我把它设置成这样:

$CSVfile = fopen('filename.csv', "r");
if($CSVfile !== FALSE) {
  $count = 0;
  while(! feof($CSVfile)) {
    $data = fgetcsv($CSVfile, 5000, ",");
      if ($count > 0 && !empty($data)) {
        // Do something
      }
   }
}
include 'vendor/autoload.php';

$sftp = new \phpseclib\Net\SFTP('SERVER');
if (!$sftp->login('USERNAME', 'PASSWORD')) {
  exit('Login Failed');
} else {
  $file = $sftp->fetch('FILE_LOCATION');
}

$CSVfile = fopen($file, "r");
if($CSVfile !== FALSE) {
  $count = 0;
  while(! feof($CSVfile)) {
    $data = fgetcsv($CSVfile, 5000, ",");
    if ($count > 0 && !empty($data)) {
      // Do Something
    }
  }
}
如何让新系统读取文件内容并对其进行处理,而不仅仅是显示所有文件内容?

正如@verjas已经评论的那样,phpseclib中没有
fetch
方法

如果要将文件下载到字符串,请使用:

然后可以使用来解析内容。根据a,这应该做到:

$data = str_getcsv($contents, "\n"); // parse the rows
foreach ($data as $line) 
{
    $row_data = str_getcsv($line); // parse the items in rows
}

您使用的是哪个版本的phpseclib?我似乎在中找不到
->fetch
,你能检查方法吗?也许方法需要一些参数?例如->get('remote_path')将在屏幕上输出文件,但是->get('remote_path','local_path')将复制文件。就是这样。我现在可以用了,谢谢。似乎我必须在本地移动文件,然后使用->get方法从那里读取它