[英]PHP - Force File Download Script - Not working in IF statement
波紋管代碼是一個帶有IF語句的頁面,用於調用下載頁面。
if ($currentpdt<$updatedpdt)
echo "updatedpdt is greater than currentpdt.";
else
echo "updatedpdt is not greater than currentpdt";
require("dlfile.php");
?>
上面的頁面上還有其他內容,主要是用於定義變量的SQL連接。 請注意,如果IF語句為false,則需要“dlfile.php”文件。 該文件如下
<?php
// local file that should be send to the client
$local_file = 'dl.zip';
// filename that the user gets as default
$download_file = 'your-download-name.zip';
// set the download rate limit (=> 20,5 kb/s)
$download_rate = 20.5;
if(file_exists($local_file) && is_file($local_file)) {
// send headers
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($local_file));
header('Content-Disposition: attachment; filename="'.$download_file.'"');
// flush content
flush();
// open file stream
$file = fopen($local_file, "r");
while(!feof($file)) {
// send the current file part to the browser
print fread($file, round($download_rate * 1024));
// flush the content to the browser
flush();
// sleep one second
sleep(1);
}
// close file stream
fclose($file);}
else {
die('Error: The file '.$local_file.' does not exist!');
}
?>
當我單獨運行dlfile.php文件時它工作正常,下載提示符應該出現。 但是當它被第一個文件調用時,這就是我得到的。
PKÇ`w?6J@T1popup.jsUT %DÍN%DÍNUxz{]’ÏNÃ0ÆÏÉSX»¬›ª¶š8 PÅ×Á¤©ÛÚ8ÊŸmíÝIX7MœâXŸþì¤ZzE™`:Ä6vÜÀ/·œ}8?(ÝUæ zÔh…G©‚£Ò-¡#Êã£Ò_î¦k9kæˆAxøÝÛÚƒ’XÀ{Lj1!P÷¯Ïœ< éÇ䌱›CÎ8º…™H¡!ü¹DÔbÔŽÑJ´éJÕÍË©äÍ% ,:Îöˆ0xožÊ2awŸ® Û—Q†§ÂæÅÕµ|[rÎÊœ·J÷÷èÿDÎÂÂ4_PÃÊ°µ¦|$)Òp)n•EéÉ*té:¡‹ÊIKc*qõŒ.w>².a$ªoÑŒ˜dGÕú¡~¬ª|@Õ¾~¨ªÕsZM\E'6¿ø+È Î >këeиËu~çt+UÙRÑ‘.~‚u¹g›3?ó_PKÇ`w?ÌmO‹jpreview.phpUT %DÍN%DÍNUxz{VmoÛ6þlýŠ«ÔöKq›]lÙh“¬/ȶ ñVÛ`Ðe3–I¤ì&AþûîHù-ΧmùDw÷<<ÝÝÃSXÎÊ Ž¥)7R%s14³BI0ÜZ!§&ÐüïJh>V2åfÎyöêÖŒ}p„Ív/ˆæ=·°dZ°IÁ äZ-@Ȳ²àÈèh ƒÄ£ñûËÑM´5ÿj·a»8ƒf³¥3& dÜÇxî%«Åmûg@È 2n3#ã>Ä[ÓE«ììê‰P:’Òɘå‡ìh|Âî,”½?ÀØû}=S<5ÄA˜ž‚Ðøæ,›ƒfvQ ȸò– ª²ùmûgØ´E3ž¨oc‘ ·®}‚]ûz&ÊÃV•OU¦ÛLÝ\Zn,äJÂ"ª2P*“jQZ°lÊM rh«KeZ4¬ÇÐì{ÿ ‰ôA£áRóéXó²`¨‡0nýY‡µ[Ñ÷Ãv«Æ´c#ÂcoÎ?¼ÁÅåÕåèò‚,D¢f™@ü¦%Êì¼µ–/(…ª¹å©…[¶du†·háYo'Jã?ÀdV³tŽ`(Ôª’f(‹ˆúѽ··a^Њ۸r¸ÞÛJK¤S²á à"Iš¬Ù†µ2P$D7©D‘AÉ4[`6°Vt61Ù‡úb€JÁ‘ªI¨k5³“󋄃Üëˆ(ð%¹ö|0©cOžF¢=!ç:Î¥ø\ 9ç^‡:Í>>«çÞ°RÝž%WâÖÁ¨U u:|mïôo"I¢ÏÓ’+që`×M0=·U _º>9óàD™ÜöÉ›/Ñ“]ØŽ‰ý°Æ$;AkvÞ³äeê¸/q J¯ZC÷$„ˆƒËTeÜÉ«–-Ñþ"Û‘T~ZÇÿ…Ósu¢‡ƒ 迸øõ|ôõú>Œ~¾‚ëßÞ]}<‡°Ç_^ŸÇñÅèÂ;N£“.Œ4“F+âøò—0€ú'œY[žÅñjµŠV¯#¥§ñèsL'Æ…R†G™ÍÂAÐw=,˜œ&!—ÎÀY6}Ú¼4uçÖµ} cƒ§3…×êŒÕ¡¼LB\º–KÛ±w%¡~JBË¿Yw|PCïÆ);o¾7Ò=/ðÂû¿¸…Q7o~ø±ÓÝ4†ôZVØ‚~Â6Áälך/_õcïÁBÈ9h^$¡±wø0ã܆0Ó<¯-ñ„‘v#œC¬"œ(:ì&xNµªdÖIU¡ôÙwyž÷ð¦×S!qW¿*¿õƒYào*|½œ-Dqw¿s1ÉŽá-~°ÇðKnEŠƒ}ï®EÞqÉ]=Q?.w´_ú›º!®m^øN‚ëër8ØmK}ïῬ–Å.èéµHèß©ú¾;añ–Â7¿z¦Žâš:‹+{üǹŸÿ¦!~¿>ž»Ú}qeñãà?œæ(P^ä‘«k«ºª©b<Ç=»¿ýØÏTß]hÿPKÇ`w?6J@T1 ¤popup.jsUT%DÍNUxPKÇ`w?ÌmO‹j ¤preview.phpUT%DÍNUxPK‰X
我認為瀏覽器正在嘗試將該文件作為Web文檔讀取,但我不確定。 我試圖取出dlfile.php中的標簽,我也切換了
header('Content-Length: '.filesize($local_file));
至
header('Content-Disposition: attachment; filename="'.$download_file.'"');
代碼仍然可以自行執行,但在原始文件調用時生成相同的奇怪輸出。
我試圖將dlfile.php中的代碼放入原始文件並獲得相同的輸出。
怎么了?
實際上並非如此。 沒有大括號,您的代碼被解釋為:
if ($currentpdt<$updatedpdt) {
echo "updatedpdt is greater than currentpdt.";
} else {
echo "updatedpdt is not greater than currentpdt";
}
require("dlfile.php"); //Is required no matter what
嘗試使用大括號來提高可讀性並解決此問題:
if ($currentpdt<$updatedpdt) {
echo "updatedpdt is greater than currentpdt.";
} else {
echo "updatedpdt is not greater than currentpdt";
require("dlfile.php"); //Now just included if the if is false
}
此外,如果您從第一個文件回顯了某些內容,則第二個文件將無法設置標題,並且將輸出文件的原始內容。 因此,您需要從第一個文件中刪除回聲,以便只輸出zip的內容。
你有Dangling else問題,如果你不使用括號,只在else塊中考慮緊跟的行。
除了其他人正確評論的語法問題之外,調用文件還有echo()
調用,並且通過require()
調用的文件包含header()
調用。 但是如果header()
調用跟隨頁面的任何輸出,它們將不起作用。 所以你需要擺脫那些echo()
調用。 這可能是你得到的古怪輸出的來源。
嗯......回聲是問題所在。 嘗試在代碼的開頭添加這兩行,您將看到問題:
error_reporting(E_ALL);
ini_set('display_errors',1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.