2016-11-08 9 views
1

私のPHPは、heroku dynoで実行されているので、私のAPIファイルをアップロードするユーザーを受け入れるビュー($ _FILES)アップロードされたファイルを私のftpサーバに転送して、herokuに保存領域がないので、アップロードしたファイルを保存します。私はphpでより信頼性の高いものですftp_connect対ファイル_put_content(ftp://)

私はこれを達成するための最良の方法を見つけるために周りGoogleで検索して二つの方法

コード例を見つけましたが、両方の方法

// common code: 
$tmp_file_path = $_FILES['image']['tmp_name']; 
$raw_filename = explode('.',$_FILES['image']['name']); 
$extention = array_pop($raw_filename); 
$filename = md5(implode('.',$raw_filename)).$extention; 

// 1st: ftp_put_content; 
$content = file_get_contents($tmp_file_path); 
// additional stream is required as per http://php.net/manual/en/function.file-put-contents.php#96217 
$stream = stream_context_create(['ftp' => ['overwrite' => true]]); 
$upload_success = file_put_content('ftp://username:[email protected]/'+$filename, $content, 0, $stream); 

// 2nd: ftp_put 
$conn_id = ftp_connect("ftp.simpleinformatics.com"); 
$login_result = ftp_login($conn_id, "username", "password"); 
ftp_pasv($conn_id, true); //for somereason my ftp serve requires this ! 
if (!$conn_id OR !$login_result) $upload_success = false; 
$ftp_upload_success = ftp_put($conn_id,'/'.$filename, $tmp_file_path); 

echo "file_put_content" . ($upload_success ? "upload success" : 'file upload failed'); 

echo "ftp_put" . ($ftp_upload_success ? "upload success" : 'file upload failed'); 

は私のftpサーバに対して2つのメソッドをテストし、両方のは、私が心配してまだ働きを示して信頼性については、2つの方法がどのように機能するかについての詳細についてのドキュメントはほとんどなく、カップルのことが分かりません。

  1. ftpファイルに入れるときにfile_put_contentフラグを使用できますか? FILE_APPENDやLOCK_EXのように?
  2. まだ存在しないフォルダにアップロードするとどうなりますか?
  3. どの方法が信頼性が高く、失敗しにくいのですか?
  4. file_put_contentsのほうが冗長ではありませんが、書き込み前にまずファイルの内容を読み取る必要があります。これはメモリの問題を引き起こす可能性がありますか?
+1

投稿のほとんどは読んでいませんでしたが、タイトルによって、これらのプロトコルのファイルラッパーを無効にすることができるので、 'ftp_ *'関数はより信頼できます。 –

+0

@JonStirlingはftp_ *を処理します。存在しない場合は、file_append/fileのロック/ディレクトリの作成を行いますか? – Zalaboza

答えて

関連する問題