在 PHP 中创建 CSV 文件并使用 phpseclib 保存到 SFTP

Create CSV File in PHP and Save to SFTP using phpseclib

我需要从 MySQL 查询生成一个 CSV 文件并将该文件保存到 SFTP 服务器。我试过下面的代码。 CSV 文件已创建,但它是空的。我还在浏览器中收到一条错误消息,显示关于此行 $sftp->put($fileName, $fp, NET_SFTP_LOCAL_FILE);Warning: is_file() expects parameter 1 to be a valid path, resource given。如果我将 fclose($fp); 移动到最后一行,我没有得到错误,但数据仍然没有出现在文件中。有人可以告诉我如何将数据保存在创建的文件中吗?

$fileName = 'dataFiles/reports/Report Summary/Report Summary.csv';
$sql = mysqli_query($db, "
        SELECT *
        FROM   reports
        WHERE reportID = 1
");

$fp = fopen('php://output', 'w');
$first = true;

while($row = mysqli_fetch_assoc($sql)){
    if ($first) {
        fputcsv($fp, array_keys($row));
        $first = false;
    }
    fputcsv($fp, $row);
}
fclose($fp);
$sftp->put($fileName, $fp, NET_SFTP_LOCAL_FILE);

second argument不是句柄而是直接内容

我认为你可以在第二个参数中做:stream_get_contents($fp);

$content = stream_get_contents($fp);
fclose($fp);
$sftp->put($fileName, $content, NET_SFTP_LOCAL_FILE);

尝试这样的事情:

<?php
$fp = fopen('php://temp', 'r+');
// do stuff
rewind($fp);
$sftp->put($filename, $fp);

phpseclib(假设您使用的是足够新的版本)将检测到第二个参数是流资源,并会相应地尝试从中读取。