如何在IE(PHP)中下载服务器文件的更新版本?

时间:2012-06-14 09:39:04

标签: php internet-explorer caching csv download

Internet Explorer给我带来了严重的麻烦......

我想要做的是 - 在点击.csv文件下载到客户端时创建一个按钮。此.csv文件包含存储在我在页面上生成的结果表之一的信息。

在创建此按钮之前,我调用内部函数来根据当前显示的表创建.csv文件。我在服务器上创建了这个.csv文件。为了以防万一,我将在这里介绍这个功能,但我认为它没有任何帮助。就像我说我在创建按钮之前创建了这个文件。

/*
/ Creates a .csv file including all the data stored in $records
/   @table_headers  - array storing the table headers corresponding to $records
/   @records        - two dimensional array storing the records that will be written into the .csv file
/   @filename       - string storing the name of the .csv file created by this from
*/
public function export_table_csv( $table_headers, $records, $filename )
{       
    // Open the $filename and store the handle to it in $csv_file
    $csv_file = fopen( "temp/" . $filename, "w" );

    // Write the $table_headers into $csv_file as a first row
    fputcsv( $csv_file, $table_headers );       
    // Iterate through $records and write each record as one line separated with commas to $csv_file
    foreach ( $records as $row )
        fputcsv( $csv_file, $row );

    // Close $csv_file 
    fclose( $csv_file );
} // end export_table_csv()

我的工作正常。我得到了“导出”按钮,我正在使用它的onClick()事件,我使用的是单行:

window.open( 'temp/' . $export_filename );

现在,除了IE之外,它在所有浏览器中都能正常运行。该文件仍然被下载,但是当我在页面上显示的表上执行一些过滤时(每当应用新过滤器时页面都会重新加载),然后再次按“导出”按钮,它会以某种方式下载旧版本应用旧过滤器的.csv文件,而不是当前的过滤器,即使每次应用新过滤器并重新加载页面时都会重写此.csv文件。

好像我导出的.csv文件存储在IE的缓存中或其他东西......这真的很烦人,因为导出在所有其他浏览器中运行良好... Chrome和FF总是下载最新版本的来自服务器的文件,IE随机更新文件,有时只有在我用不同的过滤器提交页面几次后......

我没有包含太多的代码行,因为我觉得我只是缺少某种元标记或代码中的某些东西,而不是在我已编写的行中有一个逻辑错误。

我真的对此感到困惑,并且至少可以说...我现在真的开始不喜欢IE了......

我很欣赏有关此事的任何建议。

1 个答案:

答案 0 :(得分:3)

您可以使用'cache buster'来阻止IE缓存资源。

如果你向URL添加一个GET参数(每次加载页面时都会改变一个值),IE(或者更确切地说:任何浏览器)会认为它是一个不同的文件,所以做这样的事情: / p>

window.open( 'temp/" . $export_filename . "?cachebuster=" . uniqid(true) . "' );

如果每次点击(而非页面加载)时需要更改值:

window.open( 'temp/" . $export_filename . "?cachebuster="' + Math.random() );