2015-07-04 9 views
25

, अपने स्थानीय मशीन में एक फ़ाइल "/home/test.mp4" हैकर्ल के साथ लक्ष्य निर्देशिका में फ़ाइल कैसे अपलोड करें?

मैं (जब यह अपलोड नाम बदल) /var/www/ok.mp4 में अपलोड करना चाहते हैं। सभी स्रोत फ़ाइल और लक्ष्य फ़ाइल स्थानीय मशीन में हैं।

कुछ जोड़ने या कुछ बदलने के लिए मेरे आंशिक कोड को कैसे ठीक करें?

<?php 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); 
curl_exec($ch); 

?> 

शर्मा राम के बारे में सोचो, कोड निम्नलिखित के रूप में बदल गया था:

<?php 
$request = curl_init('http://127.0.0.1/'); 
curl_setopt($request, CURLOPT_POST, true); 
curl_setopt(
    $request, 
    CURLOPT_POSTFIELDS, 
    array(
     'file' => '@' . realpath('/home/test.mp4') 
    )); 
curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 
echo curl_exec($request); 
// close the session 
curl_close($request); 
?> 

एक त्रुटि संदेश होते हैं:

यह काम करता है!
यह इस सर्वर के लिए डिफ़ॉल्ट वेब पेज है।
वेब सर्वर सॉफ्टवेयर चल रहा है लेकिन अभी तक कोई सामग्री नहीं जोड़ा गया है।

मेरे पास ftp_put के साथ परीक्षण है, कोड 1 ठीक काम करता है।

code1:

<?php 
    set_time_limit(0); 
    $host = 'xxxx'; 
    $usr = 'yyyy'; 
    $pwd = 'zzzz'; 
    $src = 'd:/upload.sql'; 
    $ftp_path = '/public_html/'; 
    $des = 'upload_ftp_put.sql'; 
    $conn_id = ftp_connect($host, 21) or die ("Cannot connect to host"); 
    ftp_login($conn_id, $usr, $pwd) or die("Cannot login"); 
    $upload = ftp_put($conn_id, $ftp_path.$des, $src, FTP_ASCII); 
    print($upload); 
?> 

फ़ाइल d:/upload.sql अपने स्थानीय पीसी में code1 साथ my_ftp_ip/public_html/upload_ftp_put.sql में अपलोड किया जा सकता है।
अब मैं कोड 2 में कर्ल के साथ इसे फिर से लिखता हूं।

code2:

<?php 
    set_time_limit(0); 
    $ch = curl_init(); 
    $host = 'xxxx'; 
    $usr = 'yyyy'; 
    $pwd = 'zzzz'; 
    $src = 'd:/upload.sql'; 
    $ftp_path = '/public_html'; 
    $dest = 'upload_curl.sql'; 
    $fp = fopen($src, 'r'); 
    curl_setopt($ch, CURLOPT_URL, 'ftp://user:[email protected]/'.$ftp_path .'/'. $dest); 
    curl_setopt($ch, CURLOPT_UPLOAD, 1); 
    curl_setopt($ch, CURLOPT_INFILE, $fp); 
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($src)); 
    curl_exec ($ch); 
    $error_no = curl_errno($ch); 
    print($error_no); 
    curl_close ($ch); 
?> 

त्रुटि की जानकारी उत्पादन 6 क्यों कर्ल के साथ एफ़टीपी में अपने स्थानीय फ़ाइल अपलोड नहीं कर सकते हैं कैसे इसे ठीक करने के?

+1

यदि यह पहले से ही स्थानीय फाइल सिस्टम पर है, तो क्यों न केवल ['प्रतिलिपि ($ src, $ dest)'] (http://php.net/copy)? – mario

+0

वैसे भी '/ home /' HTTP प्रति पहुंच योग्य क्यों होगा? और '_POSTFIELDS' क्या करना चाहिए था? – mario

+0

अब मेरे पास कोड का परीक्षण करने के लिए कोई वीपीएस नहीं है, जब आप मुझे सही कोड देते हैं तो स्थानीय मशीन में सभी स्रोत और लक्ष्य फ़ाइल धारणा को बदला जा सकता है। –

उत्तर

3

की आवश्यकता होगी यह एक कम स्तर त्रुटि है ।

curl_setopt($ch, CURLOPT_URL, "ftp://$usr:[email protected]$host$ftp_path/$dest"); 
1

ऐसा कुछ करने का प्रयास करें और मुझे सर्वर निर्देशिका पथ की बजाय मुझे लगता है कि यह http url होगा।

// initialise the curl request 
$request = curl_init('http://example.com/'); 
// send a file 
curl_setopt($request, CURLOPT_POST, true); 
curl_setopt(
    $request, 
    CURLOPT_POSTFIELDS, 
    array(
     'file' => '@' . realpath('test.txt') 
    )); 

// output the response 
curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 
echo curl_exec($request); 
// close the session 
curl_close($request); 
8

उपयोग copy():

copy('/home/test.mp4', '/var/www/ok.mp4'); 

यह नेटवर्क ढेर के माध्यम से फ़ाइल (जो क्या cURL करता है) को चलाने के लिए किसी भी प्रोटोकॉल पर मतलब नहीं है (HTTP, FTP, ...), जब फ़ाइल सिस्टम के माध्यम से मैनिपुलेशन स्थानीय रूप से किया जा सकता है। नेटवर्क का उपयोग करना अधिक जटिल और त्रुटि-प्रवण है।

0

इस कोड को आपकी मदद कर सकते फ़ाइल के MIME प्रकार इस

curl_setopt(
    $request, 
    CURLOPT_POSTFIELDS, 
    array(
     'file' => '@' . realpath('/home/test.mp4') . ';type=video/mp4' 
    )); 
1

की तरह भेजा निर्दिष्ट करने के लिए प्रयास करें:

<?php 
    $rCURL = curl_init(); 
    curl_setopt($rCURL, CURLOPT_URL, 'http://www.google.com/images/srpr/logo11w.png'); 
    curl_setopt($rCURL, CURLOPT_HEADER, 0); 
    curl_setopt($rCURL, CURLOPT_RETURNTRANSFER, 1); 

    $aData = curl_exec($rCURL); 
    curl_close($rCURL); 
    file_put_contents('bla.jpeg', $aData); 
    // file_put_contents('my_folder/bla.jpeg', $aData); /*You can use this too*/ 
+0

मैं स्थानीय निर्देशिका से यूआरएल में कुछ डालना चाहता हूं, मेरी निर्देशिका में यूआरएल डाउनलोड न करें! –

0

कोड तुम्हें तैनात क्लाइंट साइड के लिए है। यदि आप HTTP का उपयोग करके एक फ़ाइल अपलोड करना चाहते हैं, तो आप HTTP सर्वर इस अपलोड अनुरोध को संभालने में सक्षम होना चाहिए और जहां आप चाहते हैं फ़ाइल को सहेजने में सक्षम होना चाहिए। "त्रुटि संदेश" शायद सर्वर का डिफ़ॉल्ट वेब पेज है।

नमूना PHP में सर्वर-साइड कोड, अपने संदर्भ के लिए:

<?php 
if ($_FILES) { 
    $filename = $_FILES['file']['name']; 
    $tmpname = $_FILES['file']['tmp_name']; 
    if (move_uploaded_file($tmpname,'/var/www/ok.mp4')) { 
     print_r('ok'); 
    } else { 
     print_r('failure'); 
    } 
} 
-3
curl -X POST -F "[email protected]" http://example.com/ 

तुम भी एक पेज है कि इस अनुरोध को पूरा कर सकते हैं (बाद का)

संबंधित मुद्दे