通过终端将 PHP 生成的 CSV 文件上传到 SFTP 服务器


Uploading a PHP generated CSV file to SFTP server via terminal

我有一个PHP文件,它使用以下代码生成一个CSV文件:

$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
print $csv_output;

我没有包含创建内容的代码,因为它的工作很好。我需要做的是使用终端运行此文件并将结果上传到 sftp 服务器。我可以在终端中很好地连接到服务器。

我一直在终端中使用 php 命令来生成生成的 CSV。但是,这不会像在浏览器中运行时那样生成 CSV。它的作用是将CSV生成为字符串。

有没有办法像浏览器一样将CSV生成为文件,以便我可以在终端中抓取它并将其上传到SFTP服务器?或者,是否可以回显从 PHP 文件生成的字符串并使用此类命令自己创建 CSV:

echo "boo,to,you">file.csv

只需将php输出重定向到临时文件并上传文件即可。

php yourscript.php > /tmp/file.csv
echo "put /tmp/file.csv" | sftp user@example.com

如果你想在没有临时文件的情况下做到这一点,你不能只用(OpenSSH)sftp因为它无法读取要从标准上传的内容。(OpenSSH)scp都不能。


当然,您可以从PHP代码本身生成文件,如果这更适合您的任务。

只需使用file_put_contents()

file_put_contents("/tmp/file.csv", $csv_output);

请参阅如何在 PHP 中写入文件?


如果远程服务器是 *nix(理解cat)并允许 shell 访问,@MarcB的建议应该有效。

php yourscript.php | ssh user@example.com 'cat > file.csv'

虽然显然这不再是"SFTP 上传"。


生成文件时,请勿使用 header() 。标头仅在 Web 服务器环境中有意义,而不是当您在 shell 中使用 PHP 作为脚本语言时。