php - interview - उपयोगकर्ता द्वारा डाउनलोड करने के बाद किसी फ़ाइल को हटाना



php in hindi (5)

connection_aborted () ने मेरे लिए कभी काम नहीं किया। लेकिन ob_clean () ठीक उसी तरह काम करता है जैसा उसे करना चाहिए। आशा है कि यह दूसरों की भी मदद करेगा

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $file . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
ob_clean();
flush();
if (readfile($file))
{
  unlink($file);
}

https://ffff65535.com

मैं उपयोगकर्ता के लिए फ़ाइल भेजने के लिए इसका उपयोग कर रहा हूं

header('Content-type:  application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.zip"');
readfile($file);

मैं उपयोगकर्ता द्वारा डाउनलोड करने के बाद इस फ़ाइल को हटाना चाहता हूं, मैं यह कैसे कर सकता हूं?

संपादित करें: मेरा परिदृश्य ऐसा है, जब उपयोगकर्ता डाउनलोड बटन दबाता है, तो मेरी स्क्रिप्ट एक अस्थायी ज़िप फ़ाइल बनाएगी और उपयोगकर्ता इसे डाउनलोड करेगा, फिर उस अस्थायी ज़िप फ़ाइल को हटा दिया जाएगा।

EDIT2: ओके बेस्ट तरीका लगता है कि एक क्रॉन जॉब चल रही है जो एक घंटे में एक बार अस्थायी फाइलों को साफ करेगी।

EDIT3: मैंने अपनी स्क्रिप्ट को unlink साथ परीक्षण किया, यह तब तक काम करता है जब तक उपयोगकर्ता डाउनलोड को रद्द नहीं करता। यदि उपयोगकर्ता डाउनलोड को रद्द करता है, तो ज़िप फ़ाइल सर्वर पर रहती है। इतना अब के लिए पर्याप्त है। :)

EDIT4: वाह! connection_aborted() ने चाल बना दी!

ignore_user_abort(true);
if (connection_aborted()) {
    unlink($f);
}

यदि उपयोगकर्ता डाउनलोड को रद्द करता है तो भी यह फ़ाइल को हटा देगा।


मुझे कुछ ऐसा नहीं मिला जो मेरे लिए काम करता हो, इसलिए मैं इसके साथ आया, जो मेरे लिए अच्छा काम करता है:

header('Content-type: application/zip'); //this could be a different header 
header('Content-Disposition: attachment; filename="'.$zipName.'"');

ignore_user_abort(true);

$context = stream_context_create();
$file = fopen($zipName, 'rb', FALSE, $context);
while(!feof($file))
{
    echo stream_get_contents($file, 2014);
}
fclose($file);
flush();
if (file_exists($zipName)) {
    unlink( $zipName );
}

मुझे उम्मीद है कि किसी की मदद करता है


मैं हमेशा निम्नलिखित समाधान का उपयोग करता हूं:

register_shutdown_function('unlink', $file);

यह पता लगाने का कोई सही तरीका नहीं है कि फ़ाइल पूरी तरह से उपयोगकर्ता द्वारा डाउनलोड की गई थी या नहीं।
तो निष्क्रियता के कुछ समय बाद फ़ाइल को हटाने का सबसे अच्छा तरीका होगा।


unlink($filename);

इससे फाइल डिलीट हो जाएगी।

इसे ignore_user_abort()Docs के साथ संयोजित करने की आवश्यकता है ताकि unlink को अभी भी निष्पादित किया जाए, यहां तक ​​कि उपयोगकर्ता ने डाउनलोड को रद्द भी कर दिया।

ignore_user_abort(true);

...

unlink($f);




php