PHP Forums Archive

header problem with IE7

Tags: download, header, IE7

Olaf posted on 2007-12-31 11:44:52 #

While fixing the download function for the classes I noticed that in IE7 this header doesn't work:

header('Content-Type: application/zip');

actually this "general" header works fine:

header('Content-Type: application/force-download');

any idea why?

Comments / discussions

antepli posted on 2008-01-02 09:56:14 #

<?php

function dl_file($file){

    //First, see if the file exists
    if (!is_file($file)) { die("<b>404 File not found!</b>"); }

    //Gather relevent info about file
    $len = filesize($file);
    $filename = basename($file);
    $file_extension = strtolower(substr(strrchr($filename,"."),1));

    //This will set the Content-Type to the appropriate setting for the file
    switch( $file_extension ) {
          case "pdf": $ctype="application/pdf"; break;
      case "exe": $ctype="application/octet-stream"; break;
      case "zip": $ctype="application/zip"; break;
      case "doc": $ctype="application/msword"; break;
      case "xls": $ctype="application/vnd.ms-excel"; break;
      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpg"; break;
      case "mp3": $ctype="audio/mpeg"; break;
      case "wav": $ctype="audio/x-wav"; break;
      case "mpeg":
      case "mpg":
      case "mpe": $ctype="video/mpeg"; break;
      case "mov": $ctype="video/quicktime"; break;
      case "avi": $ctype="video/x-msvideo"; break;

      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
      case "php":
      case "htm":
      case "html":
      case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;

      default: $ctype="application/force-download";
    }

    //Begin writing headers
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Description: File Transfer");

    //Use the switch-generated Content-Type
    header("Content-Type: $ctype");

    //Force the download
    $header="Content-Disposition: attachment; filename=".$filename.";";
    header($header );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    @readfile($file);
    exit;
}

?>

This works in both IE and Firefox.

Olaf posted on 2008-01-02 10:08:37 #

Thanks for the example code, but try this content type

case "zip": $ctype="application/zip"; break;

in IE7 and you will see that it doesn't work (or at least with the dynamic zip file I have generated)

Olaf posted on 2008-01-02 13:18:05 #

don't get me wrong, the script I'm using is fine it's just the one header which is doing strange in IE7...

antepli posted on 2008-01-02 14:17:21 #

header("Content-Type: application/x-zip-compressed");

This İs ok

my Code Using

<?php
$url="db-1.0.4.zip" ;

$filename = "db-1.0.4.zip";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/x-zip-compressed");
header("Content-Type: application/zip");

$uagent = strtolower ($_SERVER["HTTP_USER_AGENT"]);
if(is_integer (strpos($uagent, "msie")) and is_integer (strpos($uagent, "win")))
header("Content-Disposition: filename=".basename($filename).";" ); else
header("Content-Disposition: attachment; filename=".basename($filename).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));

readfile($filename);
?>

Explorer IE7 Using

application/x-compressed
application/x-zip-compressed
application/x-gzip-compressed

Olaf posted on 2008-01-02 14:23:59 #

OK,

I think the problem is the class I'm using to create the zip files. It might be the same reason why the files can't be opened on a Mac system.

Thanks!

lucid999 posted on 2008-06-05 23:49:04 #

Hi,

No readfile function seems to work in IE for me. Does anyone have any idea why? The function I'm using is:

function DownloadFile($file) { // $file = include path header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
@readfile($file);
exit;
}

DownloadFile($fullpath);

The file will always be a zip around 30Mb. In firefox, the file will download perfectly. No issues. In IE 7, it will prompt to save or open and then download a file that is 0 bytes. Since others seems to be having success, is there a possible configuration issue?

Some mentioned putting "session_cache_limiter()" or "session_start()" before the function. That didn't work either.

Thanks for any help.

Olaf posted on 2008-06-06 04:56:43 #

@Lucid,

please open a new thread since your question is not related to this one (this one is just about one header)