我最近用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);
即可解決