2011-08-09 49 views
5

PHPを使用して、あるサーバーから別のサーバーに画像ファイルを転送するのに、cURLを使用しています。これは私のcURLのコードです:複数のファイルをcURLでアップロードする

// Transfer the original image and thumbnail to our storage server 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_VERBOSE, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, 'http://' . $server_data['hostname'] . '.localhost/transfer.php'); 
curl_setopt($ch, CURLOPT_POST, true); 
$post = array(
    'upload[]' => '@' . $tmp_uploads . $filename, 
    'upload[]' => '@' . $tmp_uploads . $thumbname, 
    'salt' => 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q' 
); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
$resp = curl_exec($ch); 

これは私がアップロードしてるサーバー上transfer.phpのコードです:

if($_FILES && $_POST['salt'] == 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q') 
{ 
    // Save the files 
    foreach($_FILES['upload']['error'] as $key => $error) 
    { 
     if ($error == UPLOAD_ERR_OK) 
     { 
      move_uploaded_file($_FILES['upload']['tmp_name'][$key], $_FILES['upload']['name'][$key]); 
     } 
    } 
} 

すべての離れて一つの小さな論理エラーから、動作しているようです。転送先のサーバーに保存されるファイルは1つだけです。これはおそらく私の投稿フィールドの配列に両方の画像upload[]を呼び出しているからですが、それ以外の方法はわかりません。私はこれを模倣しようとしています:

<input type="file" name="upload[]" /> 
<input type="file" name="upload[]" /> 

私はこれを動作させる方法を知っていますか?ありがとう!

答えて

0

コード自体は大丈夫ですが、あなたのmove()ターゲットディレクトリについてはわかりません。クライアントが提供する生ファイル名(カールスクリプト)を使用しています。上書きのチェックやパスデータのない、移動のターゲットとしてオリジナルのアップロードされたファイル名(カールスクリプトで指定)を使用しています。アップロードされた2つのファイルのファイル名が同じ場合、最初に処理されたイメージをPHPで2番目に処理されたもので上書きします。

は、移動()コマンドの周りにいくつかのデバッグを入れてみてください:

if (!move_uploaded_file($_FILES['upload']['tmp_name'][$key], $_FILES['upload']['name'][$key])) { 
    echo "Unable to move $key/"; 
    echo $_FILES['upload']['tmp_name'][$key]; 
    echo ' to '; 
    echo $_FILES['upload']['name'][$key]; 
} 

(私は読みやすさのために複数行にエコーを分割します)。ここ

+0

これは何も吐き出さず、移動が大丈夫だったことを意味します。ターゲットディレクトリは、transfer.phpスクリプトと同じディレクトリです。これはディレクトリ構造を持たないストレージサーバです。 – Josh

+0

'print_r($ _ FILES)'を実行して、ファイル名などのために何が起こっているのかを正確に見てください。両側があなたの支配下にあっても、ファイル名をそのまま使用すると私は緊張します。 –

3

はカールの呼び出しであなたのエラーは、キーの文字列が同一であるので、あなたは$ポスト配列の配列エントリをつかうしている...

var_dump($post) 

です...

この変更

を作ります
$post = array(
    'upload[0]' => '@' . $tmp_uploads . $filename, 
    'upload[1]' => '@' . $tmp_uploads . $thumbname, 
    'salt' => 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q' 
); 
+4

あなたがそれを公開した時点であなたの塩を変更することを検討してください... –

関連する問題