दिलचस्प पोस्ट
अप्रचलित चेतावनी: पल निर्माण जेएस दिनांक पर वापस गिर जाता है .htaccess में एक विशिष्ट फ़ोल्डर तक पहुंच से इनकार करते हैं अजगर में "अप्रत्याशित इंडेंट" के साथ क्या करना है? पायथन 3 और MySQL जांचें कि छवि जावास्क्रिप्ट का उपयोग कर सर्वर पर मौजूद है या नहीं? Node.js में process.env.port का मूल्य कैसे बदल सकता है? क्या सीएमडी.एक्सए के लिए उपयोगिता है? PowerShell और ऑपरेटर ऑपरेटर अंगुलियस सीओआरएस मुद्दे वस्तु गुणों की तुलना सी # में पायथन में बाहरी कमांड कॉल करना डिफ़ॉल्ट: सीएसएस के साथ लक्ष्य आईफोन – घटनाओं के लिए मतदान के लिए पृष्ठभूमि जावा में एक बूलियन पर एक बिटवे ऑपरेटर का प्रभाव इन-लाइन सीएसएस के बारे में क्या बुरा है?

कर्ल का उपयोग कर एक बड़ी फ़ाइल डाउनलोड करना

मुझे कर्ल का उपयोग करके दूरस्थ फ़ाइल डाउनलोड करने की आवश्यकता है I

यहां मेरे पास नमूना कोड है:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $st = curl_exec($ch); $fd = fopen($tmp_name, 'w'); fwrite($fd, $st); fclose($fd); curl_close($ch); 

लेकिन यह बड़ी फ़ाइलों को संभाल नहीं सकता, क्योंकि यह पहले मेमोरी में पढ़ता है

क्या फ़ाइल को सीधे डिस्क पर स्ट्रीम करना संभव है?

वेब के समाधान से एकत्रित समाधान "कर्ल का उपयोग कर एक बड़ी फ़ाइल डाउनलोड करना"

 <?php set_time_limit(0); //This is the file where we save the information $fp = fopen (dirname(__FILE__) . '/localfile.tmp', 'w+'); //Here is the file we are downloading, replace spaces with %20 $ch = curl_init(str_replace(" ","%20",$url)); curl_setopt($ch, CURLOPT_TIMEOUT, 50); // write curl response to file curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // get curl response curl_exec($ch); curl_close($ch); fclose($fp); ?> 

मैं इस काम का उपयोग करता हूँ:

इसे 4094 बाइट चरण के साथ डाउनलोड करके यह आपकी स्मृति को पूरा नहीं करेगा

 function download($file_source, $file_target) { $rh = fopen($file_source, 'rb'); $wh = fopen($file_target, 'w+b'); if (!$rh || !$wh) { return false; } while (!feof($rh)) { if (fwrite($wh, fread($rh, 4096)) === FALSE) { return false; } echo ' '; flush(); } fclose($rh); fclose($wh); return true; } 

उपयोग:

  $result = download('http://url','path/local/file'); 

आप तब जांच सकते हैं यदि सब कुछ ठीक है:

  if (!$result) throw new Exception('Download error...'); 

नीचे दिए गए कोड का पता लगाएं यदि आप निर्दिष्ट यूआरएल की सामग्री डाउनलोड करना चाहते हैं, तो उसे फाइल में सहेजना है।

 <?php $ch = curl_init(); /** * Set the URL of the page or file to download. */ curl_setopt($ch, CURLOPT_URL,'http://news.google.com/news?hl=en&topic=t&output=rss'); $fp = fopen('rss.xml', 'w+'); /** * Ask cURL to write the contents to a file */ curl_setopt($ch, CURLOPT_FILE, $fp); curl_exec ($ch); curl_close ($ch); fclose($fp); ?> 

यदि आप FTP सर्वर से फ़ाइल डाउनलोड करना चाहते हैं तो आप php FTP एक्सटेंशन का उपयोग कर सकते हैं। कृपया नीचे कोड खोजिए:

 <?php $SERVER_ADDRESS=""; $SERVER_USERNAME=""; $SERVER_PASSWORD=""; $conn_id = ftp_connect($SERVER_ADDRESS); // login with username and password $login_result = ftp_login($conn_id, $SERVER_USERNAME, $SERVER_PASSWORD); $server_file="test.pdf" //FTP server file path $local_file = "new.pdf"; //Local server file path ##----- DOWNLOAD $SERVER_FILE AND SAVE TO $LOCAL_FILE--------## if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { echo "Successfully written to $local_file\n"; } else { echo "There was a problem\n"; } ftp_close($conn_id); ?> 

जब एक बड़ी फ़ाइल डाउनलोड करने के लिए curl का उपयोग किया जाता है तो CURLOPT_TIMEOUT एक मुख्य विकल्प है जिसे आपको सेट करना है।

CURLOPT_RETURNTRANSFER सच होना चाहिए अगर आप पीडीएफ / सीएसवी / इमेज जैसी फाइल प्राप्त कर रहे हैं।

आप यहां पर और विस्तार से (सही यूआरएल) कर्ल डॉक देख सकते हैं

उस पृष्ठ से:

 curl_setopt($request, CURLOPT_TIMEOUT, 300); //set timeout to 5 mins curl_setopt($request, CURLOPT_RETURNTRANSFER, true); // true to get the output as string otherwise false 

आप इस फ़ंक्शन का उपयोग कर सकते हैं, जो फाइलसिस्टम में एक tempfile बनाता है और डाउनलोड की गई फ़ाइल का पथ देता है यदि सब कुछ ठीक काम करता है:

 function getFileContents($url) { // Workaround: Save temp file $img = tempnam(sys_get_temp_dir(), 'pdf-'); $img .= '.' . pathinfo($url, PATHINFO_EXTENSION); $fp = fopen($img, 'w+'); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $result = curl_exec($ch); curl_close($ch); fclose($fp); return $result ? $img : false; }