将文件上载到FTP服务器而不使用PHP将其存储在文件系统上

时间:2009-03-27 13:42:53

标签: php ftp

我一直在尝试将加密文件上传到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')); 
}
?> 

我希望有人可以帮助或建议任何改进或替代方法。

谢谢,

菲尔

2 个答案:

答案 0 :(得分:1)

永远不要相信服务器管理员!

上面的代码有效,不需要你使用tmp文件。

谢谢,

菲尔

答案 1 :(得分:0)

为什么你不想创建文件?是因为你没有替代,安全原因或其他任何原因吗?

我通常将文件上传到FTP但尚未在文件系统中的方式是使用tmpfile

<?php

  $fh = tmpfile();
  fwrite($fh, data);

  // do upload

  fclose($fh);

?>

使用临时文件非常干净;你写下你需要写的东西,上传,然后关闭文件,你就会神奇地消失。

现在,我不知道你是否可以上传到FTP服务器以外的其他东西(即内存中的数据)...至少我试图找到一种方法,但不能。