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