我一直在尝试将加密文件上传到FTP服务器,而不先将其写入文件系统(具有安全隐患)
我一直在尝试使用proc_open
然后使用ftp_fput
,但无济于事,我猜是因为proc_open
中创建的流不是fstat
能
这是代码
<?php
$ciphertext = 'sadfasfasdf90809sf890as8fjwkjlf';
//The Descriptors
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w") // error
);
$process = proc_open('cat', $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], $ciphertext);
fclose($pipes[0]);
//Debug test to proce that $pipes[1] is a valid stream
//while(!feof($pipes[1])) {
// $content .= fgets($pipes[1],1024);
//}
//FTP connection etc etc OMMITTED to save space.
$upload = @ftp_fput($conn_id,$dir."/".$ftp_file.$extenstion,$pipes[1],FTP_BINARY);
fclose($pipes[1]);
// Check upload status
echo ('upload '. ($upload ? 'true':' false'));
}
?>
我希望有人可以帮助或建议任何改进或替代方法。
谢谢,
菲尔
答案 0 :(得分:1)
永远不要相信服务器管理员!
上面的代码有效,不需要你使用tmp文件。
谢谢,
菲尔
答案 1 :(得分:0)
为什么你不想创建文件?是因为你没有替代,安全原因或其他任何原因吗?
我通常将文件上传到FTP但尚未在文件系统中的方式是使用tmpfile:
<?php
$fh = tmpfile();
fwrite($fh, data);
// do upload
fclose($fh);
?>
使用临时文件非常干净;你写下你需要写的东西,上传,然后关闭文件,你就会神奇地消失。
现在,我不知道你是否可以上传到FTP服务器以外的其他东西(即内存中的数据)...至少我试图找到一种方法,但不能。