2

下面的代码是一个带有调用下载页面的 IF 语句的页面。

if ($currentpdt<$updatedpdt)

  echo "updatedpdt is greater than currentpdt.";

else
  echo "updatedpdt is not greater than currentpdt";
  require("dlfile.php");

?>

上面的页面还有其他内容,主要是用于定义变量的 SQL 连接。请注意,如果 IF 语句为假,则需要“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%s1­4³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¬"œ(­:ì&amp;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 中的代码放入原始文件并获得相同的输出。

怎么了?

4

4 回答 4

3

其实不是。如果没有大括号,您的代码将被解释为:

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 的内容。

于 2011-11-27T00:58:13.410 回答
2

您有悬空 else 问题,如果您不使用括号,则在 else 块中只考虑紧随其后的行。

http://en.wikipedia.org/wiki/Dangling_else

于 2011-11-27T01:00:10.070 回答
2

除了其他人正确评论的语法问题外,调用文件有echo()调用,它包含的文件require()header()调用。但是header(),如果它们跟随页面的任何输出,调用将不起作用。所以你需要摆脱那些echo()电话。这可能是您得到的古怪输出的来源。

于 2011-11-27T01:01:06.783 回答
1

嗯......回声是问题所在。尝试在代码开头添加这两行,您会看到问题:

error_reporting(E_ALL);
ini_set('display_errors',1);
于 2012-05-16T22:25:48.487 回答