我最近用PHP开源程序做了一个网站,发现添加ftp文件下载时会出错,于是看了一下plus/download.php 逐段排除,最后发现是倒数第二行代码出错。
header("location:{$softUrl}"); exit();
我没有系统学过PHP,所以不是很了解,搜索了一下,知道了header函数的在这里的作用,就是有来转向的,又搜索了一下关于php header ftp 出错网页,找到了一个类似的问题http://topic.csdn.net/t/20060415/12/4688825.html
于是参考了他的做法,使用
echo " <META HTTP-EQUIV=REFRESH CONTENT= '0;URL={$softUrl} '>";
作为下载,但这时http://文件的又出错,但ftp的可正常下载了,于是我结合两者,做了一个判断
if(preg_match("#^thunder:\/\/|^ftp:\/\/|^flashget:\/\/#i", $softUrl)) { echo " <META HTTP-EQUIV=REFRESH CONTENT= '0;URL={$softUrl} '>"; exit(); } header("location:{$softUrl}"); exit();
这样经测试都可以下载了,如果有更好的方法的,欢迎大家交流一下,谢谢,本人是PHP的菜鸟中的菜鸟,有什么地方不对,欢迎指出。
phpcms v9也有似的问题,解决方法一样:
找到文件modules/content/down.php
找到代码:
//远程文件 if(strpos($fileurl, ':/') && (strpos($fileurl, pc_base::load_config('system','upload_url')) === false)) { header("Location: $fileurl"); } else { if($d == 0) { header("Location: ".$fileurl); } else { $fileurl = str_replace(array(pc_base::load_config('system','upload_url'),'/'), array(pc_base::load_config('system','upload_path'),DIRECTORY_SEPARATOR), $fileurl); $filename = basename($fileurl);
修改为:
//远程文件 if(strpos($fileurl, ':/') && (strpos($fileurl, pc_base::load_config('system','upload_url')) === false)) { if(preg_match("#^thunder:\/\/|^ed2k:\/\/|^ftp:\/\/|^flashget:\/\/#i", $fileurl)) { echo " <META HTTP-EQUIV=REFRESH CONTENT= '0;URL=$fileurl '>"; exit(); } header("location:$fileurl"); exit(); } else { if($d == 0) { header("Location: ".$fileurl); } else { $fileurl = str_replace(array(pc_base::load_config('system','upload_url'),'/'), array(pc_base::load_config('system','upload_path'),DIRECTORY_SEPARATOR), $fileurl); $filename = basename($fileurl);
即可解决