我想将文件上传到FTP服务器,但文件内容保存在变量中,而不是实际的本地文件中.我想避免使用文件; 这是为了避免在(可能)不那么安全的系统(*)上处理敏感数据时的安全风险,以及最小化文件处理(已经很低)的开销.
但PHP的FTP API仅提供通过函数从本地文件上传文件ftp_put
或(当文件已作为文件句柄打开时)ftp_fput
.
目前,我将此函数与临时文件一起使用,我在上传之前编写内容:
$tmpfile = tmpfile();
fwrite($tmpfile, $content);
fseek($tmpfile, 0);
ftp_fput($ftp, $filename, $tmpfile, FTP_BINARY);
Run Code Online (Sandbox Code Playgroud)
有没有在本地(PHP)网站上使用文件的简单方法?
有ftp_raw
可以用来发送任意命令,所以我可以PUT
手动发出命令,但是我没有看到在数据通道上手动写入数据的方法......
我不知道它是否重要,但FTP连接是用SSL(ftp_ssl_connect
)保护的.
(*)考虑攻击者对整个文件系统具有只读控制的情况.
lee*_*mes 17
这可能不是最终的解决方案,但我想仍然比原来的方法更好:
您可以使用PHP内存流来避免文件系统上的临时文件.它基本上是一个文件句柄包装器(幕后)不使用实际文件,而是使用一些内存块.
所以几乎你仍然使用文件句柄(所以ftp_fput
很高兴),但没有实际的文件(所以没有文件写入磁盘,开销保持最小).
$tmpfile = fopen('php://memory', 'r+');
fputs($tmpfile, $content);
rewind($tmpfile); // or fseek
Run Code Online (Sandbox Code Playgroud)
请注意,在上载多个文件时,您可以通过为所有文件重复使用相同的文件句柄来进一步减少开销(当然,除非您并行化过程).在这种情况下,还要回滚文件ftp_fput
以及使用截断文件ftruncate($tmpfile, 0)
.
归档时间: |
|
查看次数: |
5095 次 |
最近记录: |