Загрузка файла на FTP-сервер без сохранения его в файловой системе с использованием PHP - PullRequest
0 голосов
/ 27 марта 2009

Я безуспешно пытался загрузить зашифрованный файл на 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')); 
}
?> 

Я надеюсь, что кто-то может помочь или предложить какие-либо улучшения или альтернативные методы.

Спасибо

Phil

Ответы [ 2 ]

1 голос
/ 27 марта 2009

Никогда не доверяй администратору сервера!

Приведенный выше код работает и не требует использования tmpfile.

Спасибо

Phil

0 голосов
/ 27 марта 2009

Почему вы не хотите создавать файл? Это просто потому, что у вас нет альтернативы, соображений безопасности или чего-то еще?

Обычно я загружаю на FTP файлы, которых еще нет в файловой системе, tmpfile :

<?php

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

  // do upload

  fclose($fh);

?>

Использование временного файла делает довольно чистым; вы пишете все, что вам нужно, загружаете, затем закрываете файл, и он волшебным образом исчезает после того, как вы это сделаете.

Теперь я не знаю, можете ли вы загрузить на сервер FTP другие вещи, кроме файлов (например, данные из памяти) ... по крайней мере, я пытался найти способ, но не смог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...