2009-03-27 10 views
0

J'ai unsuccesfully essaie de télécharger un fichier crypté vers un serveur FTP, sans écrire au système de fichiers premier (qui a des implications de sécurité)Envoi d'un fichier à un serveur FTP sans l'enregistrer sur un système de fichiers en utilisant PHP

J'ai essayé d'utiliser proc_open puis ftp_fput mais en vain, je suppose que le flux créé en proc_open n'est pas en mesure fstat

Voici le code

<?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')); 
} 
?> 

J'espère que quelqu'un peut aider ou suggérer des améliorations ou des méthodes alternatives.

Merci,

Phil

+0

Pouvez-vous me aider ... S'il vous plaît expliquer ce code comment fonctionne-t-il? ... $ _POST, méthode $ _FILE? merci – bader

Répondre

1

Ne faites jamais confiance à un administrateur de serveur!

Le code ci-dessus fonctionne et ne nécessite pas l'utilisation d'un fichier tmp.

Merci,

Phil

+0

+1 pour ne pas faire confiance à un administrateur de serveur: P – Seb

0

Pourquoi est-ce que vous ne voulez pas créer un fichier? Est-ce juste parce que vous n'avez pas d'alternative, de raisons de sécurité, ou quoi que ce soit d'autre?

La façon dont je télécharge généralement des fichiers vers FTP qui ne sont pas déjà dans le système de fichiers utilise tmpfile:

<?php 

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

    // do upload 

    fclose($fh); 

?> 

L'utilisation d'un fichier temporaire fait est assez propre; vous écrivez tout ce dont vous avez besoin pour écrire, télécharger, puis fermer le fichier et il disparaît comme par magie après.

Maintenant, je ne sais pas si vous pouvez télécharger sur un serveur FTP d'autres choses que des fichiers (c'est-à-dire des données de la mémoire) ... au moins j'ai essayé de trouver un moyen mais je ne pouvais pas.

+0

Bonjour Seb, J'essaie de ne pas avoir à l'écrire dans le système de fichiers pour rendre le processus plus sécurisé. Le processus que je modifie l'a écrit dans le répertoire tmp, mais mon but est de l'améliorer. Ftp_fput vous permet d'utiliser un gestionnaire de fichiers ouvert, que proc_opne crée ... –

+0

C'est une excellente solution, alors ne tenez pas compte de ma réponse. Merci :) – Seb

Questions connexes