繁体   English   中英

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

[英]Create CSV File in PHP and Save to SFTP using phpseclib

我需要从MySQL查询生成CSV文件,然后将文件保存到SFTP服务器。 我尝试了下面的代码。 CSV文件已创建,但为空。 我还在浏览器中收到一条Warning: is_file() expects parameter 1 to be a valid path, resource given消息, Warning: is_file() expects parameter 1 to be a valid path, resource given为此行提供的Warning: is_file() expects parameter 1 to be a valid path, resource given $sftp->put($fileName, $fp, NET_SFTP_LOCAL_FILE); 如果我移动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);

第二个参数不是句柄,而是直接的内容。

我认为您可以做到: 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(假设您使用的是足够新的版本)将检测到第二个参数是流资源,并将尝试从中读取相应的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM