我目前正在开发一个文件共享网站,遇到了一些小问题。我正在使用 uploadify 上传脚本,它运行得非常完美,但如果用户希望上传的文件被加密,则有一个工作代码可以实现此功能(如下所示)。但是,我的服务器只有1GB内存,并且使用 stream_copy_to_stream 看起来会占用实际文件大小的内存,而我的最大上传大小为256,因此我知道当该网站上线并且多个人同时上传大文件时,将会出现问题。基于我的下面的代码,是否有任何几乎不使用或根本不使用内存的替代选项?即使需要更长时间,我也不介意,我只需要这个功能运行。我已经可下载版本可以正常运行,因为我直接解密文件并立即通过浏览器传递,因此在下载时解密,这样效率很高,但这种上传问题看起来不太好。谢谢你的帮助。
$temp_file = $_FILES['Filedata']['tmp_name'];
$ext = pathinfo($_FILES['Filedata']['name'], PATHINFO_EXTENSION);
$new_file_name = md5(uniqid(rand(), true));
$target_file = rtrim(enc_target_path, '/') . '/' . $new_file_name . '.enc.' . $ext;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = substr(md5('some_salt' . $password, true) . md5($password . 'more_salt', true), 0, 24);
$opts = array('iv' => $iv, 'key' => $key);
$my_file = fopen($temp_file, 'rb');
$encrypted_file_name = $target_file;
$encrypted_file = fopen($encrypted_file_name, 'wb');
stream_filter_append($encrypted_file, 'mcrypt.rijndael_128', STREAM_FILTER_WRITE, $opts);
stream_copy_to_stream($my_file, $encrypted_file);
fclose($encrypted_file);
fclose($my_file);
unlink($temp_file);
temp_file是我看到的上传文件的第一个实例。