看板 PHP 關於我們 聯絡資訊
※ 引述《MyNameIs5566 (我是5566)》之銘言: : ※ 引述《aleck945 (總是不知所措)》之銘言: : : 突然發現好像誤會你的意思了. : : 如果 user 直接在 browser 上輸入 http://127.0.0.1/temp/file1.zip : : 那麼就跟 tmpfile() 沒什麼關係. (自噓一下) : : 提出我的想法供參考: : : 使用 http server redirect 的功能, 並且將 $html_home 的 temp 目錄清空, : : 如果 user 直接在 browser 輸入 http://127.0.0.1/temp/file1.zip , : : 讓 http server redirect 到你的某個 php 程式, : : 再將 file1.zip 的正確所在位置餵給 client, : : 然後直接刪除該檔, 下次 user 再輸入 http://127.0.0.1/temp/file1.zip 時, : : php 就可以告訴 user : file not found. : 這樣的做法, : 是不是我每次檔案都必須叫 file1.zip ? : 而且都必須放在相同目錄呢? : 如果每次都不叫 file1.zip , : 是不是每新增一個這樣的檔案, : 就要去寫一次 redirect 呢? : ================================================================== : 其實我最初的懶人要求, : 是希望能有一隻程式, : 能直接 list 出該目錄下的檔案, : 並能直接用這隻程式將檔案下載, : 下載完後也能立即將我下載的檔案也一併刪除, : 請問,這樣該怎麼做到呢? : 謝謝討論! [list.php] ======= <ul> <?php $dirBase='./'; $d=opendir($dirBase); while(($f=readdir($d))!=false){ if($f=='.' || $f=='..')continue; else if(is_dir($f))continue; ?> <li><a href="download.php?f=<?php echo base64_encode($f); ?>"><?php echo $f; ?></a></li> <?php } close($d); ?> </ul> [download.php] ====== <?php if(!isset($_GET['f'])) die('go die d-five d-six'); $f=base64_decode($_GET['f']); if(strpos($f,'/')!==false) die('damn, don\'t try me'); if(!file_exists($f)) die('no reason'); $sub=substr($f,strrpos($f,'.')+1); header('Contnet-Type: unknow/unknow'); header('Content-Disposition: attachment; filename="downloaded.'.$sub.'"'); echo file_get_contents($f); @unlink($f); ?> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.158.15
MyNameIs5566:感謝分享,今晚再測試一下! 07/13 13:54
MyNameIs5566:^^" go die d-five d-six 07/13 22:35