一个关于用php输出文件的问题(急)
16lz
2021-01-22
我是要做一个播放MP3音频文件的功能,但我不想我的文件地址被别人看到,所以我用PHP打开文件并输出,
然后我在页面上用播放器就播放这个PHP文件,PHP文件是带参数的,参数里包括MP3的编号,以及随机码(使得这个地址只能打开一次,下次打开就是另一参参数了,这一参数就不能用了,参数放在COOKIE里)
现在实现了这个效果,但有两个问题:
页面打开后,点击播放,这时用JS把地址传给播器,播器开始播放,这时如果再点一次,播放器就会停止,也不会从头播放,我的想法就是再点击时就会还从头播放
而且这时不关掉当前的IE页面,在当前IE页面内打开任何本站点的页面,或是点击本站点内的任何连接,都会出现打不开的情况,就是那种浏览器在请求地址,但长时间请求不到,我怀疑是不是根我输出文件的那个PHP程序写的有问关,
页面上还有其它歌曲,我只要点了一首歌,再点其它歌也是不行了,
PHP输出文件的地方如下:
functiongetfile($file_dir,$file_name){
$file_path=$file_dir;
if(!file_exists($file_path))
{
echo'对不起,你要下载的文件不存在。';
returnfalse;
}
$file_size=filesize($file_path);
/*
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Accept-Length:$file_size");
header("Content-Disposition:attachment;filename=".$file_name);
*/
header('Pragma:public');
header('Last-Modified:'.gmdate('D,dMYH:i:s').'GMT');
header('Cache-Control:no-store,no-cache,must-revalidate');
header('Cache-Control:pre-check=0,post-check=0,max-age=0');
header('Content-Transfer-Encoding:binary');
header('Content-Encoding:none');
header('Content-type:application/octet-stream');
header('Content-Disposition:attachment;filename="'.$file_name.'"');
header("Content-length:$file_size");
$fp=fopen($file_path,"r");
$buffer_size=1024;
$cur_pos=0;
while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
{
$buffer=fread($fp,$buffer_size);
echo$buffer;
$cur_pos+=$buffer_size;
}
$buffer=fread($fp,$file_size-$cur_pos);
echo$buffer;
fclose($fp);
}
第二个问题,我在PHP输入页面时对COOKIE里的东西进行判断,和传来的参数进行比较,一样的话就把COOKIE清除掉,然后输入文件,如果不一样就提示错误
这时又出现问题了,我直接用带参数的地址可以打开文件,并且都能下载,但我在播放器里就是放不了这个文件,如果我把清除COOKI那一步去掉的话,则可以播放,我想请问下这是什么原因,有什么好的解决办法,
该回复于2015-05-26 12:58:17被管理员删除
然后我在页面上用播放器就播放这个PHP文件,PHP文件是带参数的,参数里包括MP3的编号,以及随机码(使得这个地址只能打开一次,下次打开就是另一参参数了,这一参数就不能用了,参数放在COOKIE里)
现在实现了这个效果,但有两个问题:
页面打开后,点击播放,这时用JS把地址传给播器,播器开始播放,这时如果再点一次,播放器就会停止,也不会从头播放,我的想法就是再点击时就会还从头播放
而且这时不关掉当前的IE页面,在当前IE页面内打开任何本站点的页面,或是点击本站点内的任何连接,都会出现打不开的情况,就是那种浏览器在请求地址,但长时间请求不到,我怀疑是不是根我输出文件的那个PHP程序写的有问关,
页面上还有其它歌曲,我只要点了一首歌,再点其它歌也是不行了,
PHP输出文件的地方如下:
functiongetfile($file_dir,$file_name){
$file_path=$file_dir;
if(!file_exists($file_path))
{
echo'对不起,你要下载的文件不存在。';
returnfalse;
}
$file_size=filesize($file_path);
/*
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Accept-Length:$file_size");
header("Content-Disposition:attachment;filename=".$file_name);
*/
header('Pragma:public');
header('Last-Modified:'.gmdate('D,dMYH:i:s').'GMT');
header('Cache-Control:no-store,no-cache,must-revalidate');
header('Cache-Control:pre-check=0,post-check=0,max-age=0');
header('Content-Transfer-Encoding:binary');
header('Content-Encoding:none');
header('Content-type:application/octet-stream');
header('Content-Disposition:attachment;filename="'.$file_name.'"');
header("Content-length:$file_size");
$fp=fopen($file_path,"r");
$buffer_size=1024;
$cur_pos=0;
while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
{
$buffer=fread($fp,$buffer_size);
echo$buffer;
$cur_pos+=$buffer_size;
}
$buffer=fread($fp,$file_size-$cur_pos);
echo$buffer;
fclose($fp);
}
第二个问题,我在PHP输入页面时对COOKIE里的东西进行判断,和传来的参数进行比较,一样的话就把COOKIE清除掉,然后输入文件,如果不一样就提示错误
这时又出现问题了,我直接用带参数的地址可以打开文件,并且都能下载,但我在播放器里就是放不了这个文件,如果我把清除COOKI那一步去掉的话,则可以播放,我想请问下这是什么原因,有什么好的解决办法,
11 个解决方案
#1
该回复于2015-05-26 12:58:17被管理员删除
更多相关文章
- php中的文件包含
- 使用php浏览文件时,编写文件的完整路径
- composer不能生成sf2 autoload文件。
- include一个php文件,经常会失败,请问需要注意些什么?
- nginx + fastcgi php配置下,安全的文件上存路径设置
- 使用“.html”链接到.html.php文件 - 这有什么神奇之处?
- php清理当前目录下的指定文件和空目录(源码),建议服务器端执行
- 如何从其他文件调用数组
- 用于上传多个文件的PHP代码