2014-04-17 7 views
5

PHP/curl का उपयोग करके मैं एक वेबसाइट में लॉग इन करता हूं और फ़ाइल अपलोड करने का प्रयास करता हूं। यह त्रुटि संदेश देता है, "त्रुटि: फ़ाइल अपलोड संसाधित नहीं है। कृपया सुनिश्चित करें कि निर्दिष्ट टेम्पलेट प्रारूप में लागू एक्सेल फ़ाइल अपलोड के लिए चुना गया है।" यह त्रुटि संदेश से अलग है यदि मैं ब्राउज़र से अपलोड करता हूं और इसे गलत प्रारूप (जैसे .jpg) की फ़ाइल देता हूं।जेएसपी स्क्रिप्ट पर अपलोड PHP cURL फ़ाइल विफल रहता है। ब्राउज़र के माध्यम से अपलोड की गई एक ही फ़ाइल

यदि मैं फ़ायरफ़ॉक्स के माध्यम से एक ही एक्सेल फ़ाइल अपलोड करता हूं तो यह सर्वर द्वारा काम करता है और स्वीकार किया जाता है।

तो मैं फ़ायरफ़ॉक्स के साथ PHP/curl के माध्यम से यह काम कैसे कर सकता हूं?

मैंने अपनी खुद की PHP स्क्रिप्ट पर एक ही अपलोड की कोशिश की और यह भी ठीक काम करता है। मैंने यहां कुछ प्रासंगिक प्रश्नों की भी समीक्षा की और विभिन्न चीजों की कोशिश की, जिनमें से कोई भी कोई फर्क नहीं पड़ता। मैंने MIME प्रकार के साथ और बिना विकल्पों के साथ और बिना CURLOPT_SSL_VERIFYPEER और CURLOPT_HTTPHEADER के प्रयास किए।

वेबसाइट का मालिक विशेष रूप से सहायक नहीं था, केवल मुझे बता रहा था कि अन्य लोग इसे कर रहे हैं।

$url = 'https://www.example.com/uploadController_u.jsp'; 

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0"); 
curl_setopt($ch, CURLOPT_REFERER, $curl_referer); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Added based on another StackOverflow question 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); // Added based on another StackOverflow question 

// Tried with and without the MIME type 
$post_vars = array( 
'file' => "@/home/someuser/private/eapis-test/mx/Template-test.xls;type=application/vnd.ms-excel", 
'submit' => 'Upload file' ); 

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vars); 
$response = curl_exec($ch); 

नीचे दिए गए फॉर्म मैं करने के लिए पोस्ट कर रहा हूँ:

नीचे मेरी कोड है। मुझे जावास्क्रिप्ट में फॉर्म 1 के लिए कोई संदर्भ नहीं मिला।

<table border="0" cellspacing="0" cellpadding="0"> 
    <form action="uploadController_u.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    <tr> 
     <td align="left"> 
      <p> 
       <h2>Upload Flight:</h2> 
      </p> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <b style="font-size: 90%;">To add a new flight from spreadsheet, </b> 
     </td> 
     <td align="left"> 
      <input name="file" type="file" id="file" align="left" size="36"> 
     <td> 
    </tr> 
    <tr> 
     <td> 
     </td> 
     <td align="left"> 
      <p> 
       <input type="submit" name="Submit" value="Upload file"/> 
      </p> 
     </td> 
    </tr> 
    </form> 
</table> 

मैं इन हेडर की कोशिश की बेहतर एक ब्राउज़र अनुकरण करने के लिए है, लेकिन कोई लाभ नहीं हुआ:

$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; 
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
$header[] = "Cache-Control: max-age=0"; 
$header[] = "Connection: keep-alive"; 
$header[] = "Keep-Alive: 300"; 
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
$header[] = "Accept-Language: en-us,en;q=0.5"; 
$header[] = "Pragma: "; 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
+0

खैर त्रुटि है कि आप प्राप्त सुंदर जानकारीपूर्ण है: 'त्रुटि: फ़ाइल संसाधित नहीं अपलोड करें। कृपया सुनिश्चित करें कि निर्दिष्ट टेम्पलेट प्रारूप में एक लागू एक्सेल फ़ाइल अपलोड के लिए चुना गया है। '। तो मुझे लगता है कि जेएसपी अपलोड की गई फाइल पर परीक्षण का एक सेट कर रहा है। क्या आप वाकई एक्सेल फ़ाइल भेज रहे हैं जो वास्तव में आप जो भी टेम्पलेट चाहते हैं उसके अनुरूप है? – fvu

+0

हां, मैं एक ही फाइल को ब्राउज़र के माध्यम से अपलोड कर सकता हूं और यह काम करता है। – George

+0

एचटीएमएल से '<फॉर्म ...' दिखाएं। अपना प्रश्न अपडेट करें। –

उत्तर

0

"कृपया सुनिश्चित करें कि किसी लागू उत्कृष्टता कि निर्दिष्ट टेम्पलेट स्वरूप में फ़ाइल अपलोड करने के लिए चयन किया जाता है"

शायद आपकी स्क्रिप्ट के साथ कुछ भी नहीं करना है। यदि गंतव्य सर्वर सत्य बता रहा है, तो आप जिस फ़ाइल को अपलोड कर रहे हैं वह "निर्दिष्ट टेम्पलेट प्रारूप" नहीं है।

यदि यह है, और आप पूरी तरह से सुनिश्चित हैं, तो त्रुटि संदेश गलत है, और केवल एक ही कार्यवाही है जो किसी भी सर्वर को फिर से प्रशासित करता है।

+0

ब्राउज़र के माध्यम से एक ही फाइल अपलोड करना एक" अपलोड सफल "संदेश देता है। फिर भी सुझाव के लिए धन्यवाद। मैं फिर से व्यवस्थापक से संपर्क करूंगा। मैंने अभी तक अपनी संवेदना खो दी है, लेकिन मैं जल्द ही इस समस्या के साथ! – George

+0

आह हाँ। फिर, कम से कम आप जानते हैं कि यह उनका मुद्दा है, न कि आपका! सौभाग्य। – Alex

+0

मैं अभी भी इस पर अटक गया हूँ। वेब साइट के स्वामी को मदद करने के लिए पर्याप्त तकनीकी प्रतीत नहीं होता है। यदि मैं एक ब्राउज़र के माध्यम से एक ही फाइल अपलोड कर सकता हूं, तो मुझे इसे curl के माध्यम से काम करने में सक्षम होना चाहिए। – George

0

वास्तव में कोई समाधान नहीं है क्योंकि आपका सभी कोड सही लगता है, लेकिन सर्वर व्यवस्थापक की सहायता के बिना समस्या निवारण के बारे में कुछ सलाह।

  1. स्वयं एक साधारण अपलोड स्क्रिप्ट बनाएं और फ़ाइल को अपने सर्वर पर पोस्ट करने के लिए अपनी स्क्रिप्ट का उपयोग करें। दो बार जांचें कि आपके द्वारा प्राप्त की जाने वाली फ़ाइल 100% बराबर है जिसे आप भेजते हैं।

  2. यद्यपि आपका सामग्री प्रकार सही है, तो यह है कि अगर कुछ भी बदलता है

  3. देखने के लिए अपने पहले से ही नहीं हैं, तो अपने कर्ल स्क्रिप्ट चलाने के लिए एक स्थानीय php सर्वर चलाने की कोशिश application/octet-stream या कुछ भी नहीं का उपयोग करके देखें, वहाँ सुनिश्चित करने के लिए कोई आईपी चेक नहीं है जो त्रुटि को प्रभावित करता है।

  4. चूंकि जेपीजी के साथ फ़ाइल प्रकार गलत होने पर आपको एक अलग त्रुटि प्राप्त होती है, तो यह देखने के लिए जेपीजी को अपनी स्क्रिप्ट के साथ अपलोड करने का प्रयास करें कि क्या आपको वही त्रुटि मिलती है या नहीं। अगर आपको एक्सेल फ़ाइल के समान त्रुटि मिलती है, तो सर्वर की तरफ इसकी सुरक्षा जांच सबसे अधिक होती है।

  5. भेजे गए वास्तविक शीर्षलेख/आदि का निरीक्षण करने के लिए BURP suite जैसे टूल का उपयोग करें और उन्हें कर्ल के साथ नकल करने का प्रयास करें। Firebug रूप में अच्छी तरह काम कर सकते हैं, लेकिन व्यक्तिगत रूप से मैं बर्प पसंद करते हैं जब मैं अटक कर रहा हूँ :)

0

जब से तुम राज्य है कि स्क्रिप्ट अपनी खुद की वेबसाइट के लिए अच्छी तरह से काम कर रहा है और मैं कोड मेरा अनुमान में किसी भी त्रुटि नहीं दिख रहा है यह है कि शायद आप पर्याप्त डेटा या सही नहीं भेज रहे हैं।

जब मैंने yahoo.com लॉगिन स्क्रिप्ट बनाई, तो मैंने फ़ायरफ़ॉक्स के लिए Tamper Data फ़ायरफ़ॉक्स के लिए विशिष्ट वेबपृष्ठ पर भेजे गए सभी डेटा को देखने के लिए प्रॉक्सी के रूप में उपयोग किया, यह देखने के लिए कि क्या कुछ भेजा गया डेटा है जिसे आप नहीं जानते थे।

इसके अलावा मैं ब्राउज़र से कुछ विशिष्ट विशेषताओं को हटाने की कोशिश करता हूं, जैसे कुकीज या रेफरर को हटाने और अपलोड करने की कोशिश कर रहा हूं, यह समझने के लिए कि क्या गलत/गायब चीज "त्रुटि: फ़ाइल अपलोड संसाधित नहीं होती है। कृपया सुनिश्चित करें कि निर्दिष्ट टेम्पलेट प्रारूप में एक लागू एक्सेल फ़ाइल अपलोड के लिए चुना गया है। " त्रुटि।

मैं आमतौर पर उपयोग करने HackBar (Firefox) रेफरर दूर करने के लिए और Web Developer Toolbar कुकीज़ को निष्क्रिय करने, जावास्क्रिप्ट, ...

0
<?php 
    $target_url = 'http://127.0.0.1/file.php'; 
     $file_name_with_full_path = realpath('./sample.jpeg'); 
     $post = array('extra' => '123456','file'=>'@'.$file_name_with_full_path); 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL,$target_url); 
     curl_setopt($ch, CURLOPT_POST,1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
     $result=curl_exec ($ch); 
     curl_close ($ch); 
     echo $result; 
?> 
संबंधित मुद्दे