通过readfile()更改文件的CRC

时间:2009-12-13 14:59:52

标签: php readfile

我设置了此代码,允许用户通过我们的服务器从他们指定的URL下载文件。该文件使用readfile()进行流式传输,因此它只使用我的带宽。

<?php

set_time_limit(0);

$urlParts = explode("/", $_SERVER['PHP_SELF']);
$file = $urlParts[3];

header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename=' . $file);
header("Content-Transfer-Encoding: binary\n");
readfile($file);

?>

此脚本有效,但不会更改下载文件的CRC哈希值。我想要它做的是将一些随机位附加到文件的末尾,以便它可以更改散列而不会破坏它。我尝试在脚本的末尾添加类似echo md5(rand() . time());的内容,但它不起作用。

如果可以使用像cURL这样的东西,我会很感激,如果有人可以提供一些代码示例,因为如果可能的话我会切换到cURL。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

嗯,你的代码适合我:

<强> test.php的:     

set_time_limit(0);

$urlParts = explode("/", $_SERVER['PHP_SELF']);
//$file = $urlParts[3];
$file = 'toread.txt';

header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename=' . $file);
header("Content-Transfer-Encoding: binary\n");
readfile($file);
echo md5(rand() . time());

?>

<强> toread.txt:

  

这是toread.txt的内容

现在使用curl,我得到以下结果:

>curl -i http://example.com/test.php
HTTP/1.1 200 OK
Date: Tue, 04 Mar 2014 07:09:39 GMT
Server: Apache
Cache-Control: public, must-revalidate
Pragma: hack
Content-Disposition: attachment; filename=toread.txt
Content-Transfer-Encoding: binary
Transfer-Encoding: chunked
Content-Type: application/force-download
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Age: 0

This is the content of toread.txt38d8a8009fad7315bdf5e823a06018e7

第二个:

>curl -i http://example.com/test.php 
HTTP/1.1 200 OK
Date: Tue, 04 Mar 2014 07:09:57 GMT
Server: Apache
Cache-Control: public, must-revalidate
Pragma: hack
Content-Disposition: attachment; filename=toread.txt
Content-Transfer-Encoding: binary
Transfer-Encoding: chunked
Content-Type: application/force-download
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Age: 0

This is the content of toread.txt3b87356ea9ee007b70cfd619e31da950