gpt4 book ai didi

php - 将文件放在 FTP 站点上,内容来自字符串变量(无本地文件)

转载 作者:可可西里 更新时间:2023-10-31 22:41:35 25 4
gpt4 key购买 nike

我想将文件上传到 FTP 服务器,但文件内容保存在一个变量中,而不是实际的本地文件中。我想避免使用文件;这是为了避免在(可能)不太安全的系统上处理敏感数据时出现安全风险(*),并尽量减少(已经很低的)文件处理开销。

但是 PHP 的 FTP API 只提供通过函数 ftp_put 从本地文件上传文件或(当文件已作为文件句柄打开时)ftp_fput .

目前,我将这个函数与一个临时文件一起使用,我在上传之前在其中写入内容:

$tmpfile = tmpfile();
fwrite($tmpfile, $content);
fseek($tmpfile, 0);
ftp_fput($ftp, $filename, $tmpfile, FTP_BINARY);

有没有更简单的方法,根本不使用本地 (PHP) 站点上的文件?

ftp_raw它可用于发送任意命令,因此我可以手动发出 PUT 命令,但是我看不到在数据通道上手动写入数据的方法...

我不知道这是否重要,但 FTP 连接是通过 SSL ( ftp_ssl_connect ) 保护的。


(*) 考虑攻击者对整个文件系统具有只读控制权的场景。

最佳答案

这可能不是最终的解决方案,但我想仍然比原来的方法更好:

您可以通过使用 PHP 内存流 避免文件系统上的临时文件。它基本上是一个文件句柄包装器,它(在幕后)不使用实际文件而是使用一些内存块。

所以实际上你仍然使用文件句柄(所以ftp_fput很高兴),但没有实际的文件(所以没有文件被写入磁盘和开销保持最小)。

$tmpfile = fopen('php://memory', 'r+');
fputs($tmpfile, $content);
rewind($tmpfile); // or fseek

请注意,当上传多个文件时,您可以通过对所有文件重复使用相同的文件句柄来进一步减少开销(当然,除非您并行处理该过程)。在这种情况下,还要在 ftp_fput 之后倒回文件,并使用 ftruncate($tmpfile, 0) 截断它。

关于php - 将文件放在 FTP 站点上,内容来自字符串变量(无本地文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31075417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com