我有一个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
答案 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作为脚本语言时。