Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过终端将PHP生成的CSV文件上传至SFTP服务器_Php_Csv_Terminal_Sftp - Fatal编程技术网

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

通过终端将PHP生成的CSV文件上传至SFTP服务器,php,csv,terminal,sftp,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

我有一个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 | sftpuser@example.com 如果您想在没有临时文件的情况下执行此操作,则不能仅使用OpenSSH sftp,因为它无法读取要从stdin上载的内容。OpenSSH和scp都不能

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

只需使用:

文件内容/tmp/file.csv,$csv\u输出; 看

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

php yourscript.php | sshuser@example.com'cat>file.csv' 虽然很明显这不再是SFTP上传了


生成文件时,不要使用。标题仅在Web服务器环境中才有意义,当您在shell中将PHP用作脚本语言时就没有意义了。

PHP yourscript.PHP | sshuser@host-c echo->file.csv?这将导致:未知密码类型“echo->file.csv”woops。很抱歉不知道我在想什么。sshuser@hostcat->file.csv。或者类似的。我想我需要去弄点咖啡。好吧,现在它问我密码,然后返回:0频道上的exec请求失败。如果我将ssh更改为sftp,它将运行整个文件,但尝试将每一行作为命令运行……这有帮助吗?抱歉,此响应花费了一些时间。使用代码导致通道0上的exec请求失败。如果我将ssh更改为sftp,它将提示登录,然后用remote open/file.csv响应:权限被拒绝,这是服务器问题吗?ssh:您需要shell访问该方法。你…吗?sftp:您的帐户是否已登录?如果不是,则/file.csv是指向根文件夹的路径,除非您使用root登录,否则您将无法对其进行写入访问。您可能需要使用文件的完整路径,如/home/user/file.csv?