2010-01-18 16 views
9

मैं एक संरक्षित ज़िप फ़ाइल की एक डाउनलोड (मैं लोगों को पहले प्रवेश किए बिना इसे उपयोग नहीं करना चाहते हैं के लिए मजबूर करने की कोशिश कर रहा हूँ चलाता है।डाउनलोड कोई दूषित फ़ाइल php

मैं समारोह बनाया है । login और इस तरह के लिए है, लेकिन मैं एक समस्या जहां डाउनलोड की गई फ़ाइल भ्रष्ट है में चल रहा हूँ

कोड यह मेरे पास है: Cannot open file: It does not appear to be a valid archive.

:

$file='../downloads/'.$filename; 
header("Content-type: application/zip;\n"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize($file).";\n"); 
header("Content-disposition: attachment; filename=\"".basename($file)."\""); 
readfile("$file"); 
exit(); 

यहाँ त्रुटि है

फ़ाइल अन्यथा ठीक डाउनलोड करती है, इसलिए यह कुछ ऐसा होना चाहिए जो मैं शीर्षकों के साथ गलत कर रहा हूं।

कोई विचार?

उत्तर

18

इस समस्या के कई कारण हो सकते हैं। हो सकता है कि आपकी फ़ाइल नहीं मिली है या इसे पढ़ा नहीं जा सकता है और इस प्रकार फ़ाइल की सामग्री केवल PHP त्रुटि संदेश है। या HTTP शीर्षलेख पहले ही भेजा जा चुका है। या आपके पास कुछ अतिरिक्त आउटपुट है जो तब आपकी फ़ाइल की सामग्री को दूषित करता है। इस तरह से निपटने के कुछ त्रुटि जोड़ने के लिए

कोशिश अपनी स्क्रिप्ट में:

$file='../downloads/'.$filename; 
if (headers_sent()) { 
    echo 'HTTP header already sent'; 
} else { 
    if (!is_file($file)) { 
     header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found'); 
     echo 'File not found'; 
    } else if (!is_readable($file)) { 
     header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden'); 
     echo 'File not readable'; 
    } else { 
     header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); 
     header("Content-Type: application/zip"); 
     header("Content-Transfer-Encoding: Binary"); 
     header("Content-Length: ".filesize($file)); 
     header("Content-Disposition: attachment; filename=\"".basename($file)."\""); 
     readfile($file); 
     exit; 
    } 
} 
+0

बहुत बढ़िया गम्बो! उसने इसका उत्तर दिया। वह था ... मुझे लगता है कि भेजे गए हेडर यही कारण है कि यह काम नहीं कर रहा था। – Troy

6

मैं दो बीयर शर्त लगाता हूं कि एक PHP त्रुटि होती है, और त्रुटि संदेश ज़िप फ़ाइल को गड़बड़ कर देता है। अनुरोधित फ़ाइल शायद मौजूद नहीं है।

ज़िप फ़ाइल को नोटपैड या एक समान टेक्स्ट एडिटर के साथ खोलें, और पता लगाएं कि क्या गलत है।

+6

+1 केवल दो बियर के शीर्ष पर निम्न जोड़ें – danielrsmith

+0

आईडी सहमत है कि मैं शर्त लगाता हूं कि 'readfile()' में अमान्य अनुमतियों की तरह कोई त्रुटि है, या यह पाया जा सकता है ... – prodigitalson

1

यहाँ समाधान कि में नाम .htaccess रेखा से नीचे लिखने साथ एक फ़ाइल बनाने setenv कोई gzip न-भिन्न हो

है

अपनी वेबसाइट पर फ़ाइल अपलोड करें। आप पहले से ही वहाँ फ़ाइल है, तो फिर उस

0

में ऊपर परिवर्तन करने के लिए कृपया इस कोशिश अगर कोई

error_reporting(0); 

त्रुटि हेडर लिखने से पहले कुछ भी प्रिंट मत है खोजने के लिए; अपनी स्क्रिप्ट के लिए एक ob_start() चलाने के लिए, के बाद कोड संपादित अपने हेडर और फिर ob_flush() और ob_clean()

1

देर जवाब लेकिन शायद उपयोगकर्ताओं के लिए उपयोगी force download काम करने में सक्षम नहीं किया जा रहा।
अपने php स्क्रिप्ट

<?php 
apache_setenv('no-gzip', 1); 
ini_set('zlib.output_compression', 0); 
संबंधित मुद्दे