2011-08-09 16 views
5

के साथ एकाधिक फ़ाइल अपलोड मैं PHP का उपयोग कर एक सर्वर से दूसरी फ़ाइलों में छवि फ़ाइलों को स्थानांतरित करने के लिए curl का उपयोग कर रहा हूं।कर्ल

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

सभी काम करने के लिए, के अलावा एक छोटा सा तर्क त्रुटि से लगता है:

// 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 में कोड मैं पर अपलोड कर रहा हूँ है: यह मेरा cURL कोड है। सर्वर पर केवल एक फ़ाइल सहेजी जा रही है जिसे मैं स्थानांतरित कर रहा हूं। ऐसा शायद इसलिए है क्योंकि मैं अपने पोस्ट फ़ील्ड सरणी में upload[] दोनों छवियों को कॉल कर रहा हूं, लेकिन मुझे नहीं पता कि यह और कैसे करें। मैं यह करने की नकल करने की कोशिश कर रहा हूं:

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

कोई भी जानता है कि मैं इसे कैसे काम कर सकता हूं? धन्यवाद!

उत्तर

0

कोड स्वयं ठीक दिखता है, लेकिन मुझे आपकी चाल() लक्ष्य निर्देशिका के बारे में पता नहीं है। आप क्लाइंट द्वारा प्रदान किए गए कच्चे फ़ाइल नाम का उपयोग कर रहे हैं (जो आपकी कर्ल स्क्रिप्ट है)। आप मूल अपलोड किए गए फ़ाइल नाम का उपयोग कर रहे हैं (जैसा कि आपके कर्ल स्क्रिप्ट में निर्दिष्ट है) चाल के लक्ष्य के रूप में, ओवरराइट चेकिंग और कोई पथ डेटा नहीं है। यदि दो अपलोड की गई फाइलों में एक ही फ़ाइल नाम है, तो आप पहली संसाधित छवि को ओवरराइट कर देंगे, जिसे किसी भी 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]; 
} 

(मैं स्पष्टता के लिए कई पंक्तियों पर गूंज विभाजित)।

+0

यह कुछ भी थूकता नहीं है, जिसका मतलब है कि चाल ठीक थी। लक्ष्य निर्देशिका ट्रांसफर.एचपीपी स्क्रिप्ट के समान निर्देशिका है। यह केवल एक स्टोरेज सर्वर है, जिसमें कोई निर्देशिका संरचना नहीं है। – Josh

+0

एक 'print_r ($ _ FILES) करें और देखें कि फ़ाइल नामों और इसी तरह के लिए क्या हो रहा है। यहां तक ​​कि यदि दोनों पक्ष आपके नियंत्रण में हैं, तो फ़ाइल नामों का उपयोग करके सीधे आप घबराएंगे। –

3

यहाँ कर्ल कॉल में अपने त्रुटि ...

var_dump($post) 

आप अपने $ पोस्ट सरणी के सरणी प्रविष्टियों clobbering कर रहे हैं के बाद से प्रमुख तार समान हैं ...

यह परिवर्तन करने के है

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

अब अपना नमक बदलने पर विचार करें कि आपने इसे प्रकाशित किया है ... –