2011-08-09 61 views
5

我使用卷曲从一台服务器传输图像文件到另一个使用PHP。这是我的卷曲代码:多文件上传与卷曲

// 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]); 
     } 
    } 
} 

一切似乎从一个小逻辑错误的工作,除了。只有一个文件正在保存在我转移到的服务器上。这可能是因为我在我的post字段数组中调用了两个图像upload[],但我不知道该怎么做。我试图模仿这样做:

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

任何人都知道我能如何得到这个工作?谢谢!

回答

0

代码本身看起来不错,但我不知道你的举动()目标目录。您正在使用客户端提供的原始文件名(这是您的curl脚本)。您正在使用原始上传的文件名(如curl脚本中指定的)作为移动的目标,没有覆盖检查和路径数据。如果两个上传的文件具有相同的文件名,则您将覆盖第一个处理后的图像,其中任何一个被PHP处理。

尝试把一些调试周围移动()命令:

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]; 
} 

(I回波分离到多条线路的可读性)。

+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

考虑改变你的盐,现在你已经发布了它... –