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

时间:2014-12-16 15:40:55

标签: php csv terminal sftp

我有一个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

1 个答案:

答案 0 :(得分:0)

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

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

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


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

只需使用file_put_contents()

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

请参阅How to write into a file in PHP?


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

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

虽然显然不是" SFTP上传"了。


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