ユーザーエージェントを追加し、要求に応じてすべてのMIMEタイプを受け入れるようにしてください。
// Get parameter form html page
if(isset($_GET['file_name'])) $file_name = $_GET['file_name'];
$file_name = str_replace('"', '\\"', $file_name);
$file_url = 'http://mypath/uploads/' . $file_name;
header('Content-Type: application/octet-stream');
header("Content-disposition: attachment; filename=\"".$file_name."\"");
header("Content-Transfer-Encoding: Binary");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $file_url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0');
$headerData[] = 'Accept: */*';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
$error = curl_error($ch);
curl_close($ch);
echo $data;
exit;
ない答えが、あなたのスクリプトのための提案:あなたがサニタイズする必要があり、あなたの '$ _GETのようなものを渡して誰かを避けるために[ 'file_nameに']' '../ passwd' –
PHP以外の方法でPHPスクリプトが実行されているサーバーからリモートサーバーから.msgファイルをダウンロードできますか? 'wget http:// mypath/uploads/test.msg'で?私はあなたのスクリプトをローカルファイルでテストしました。 '$ file_url = 'test.msg';'、これはここで働いているので、リモートサーバから取得するのに問題があると思われます。 'readfile'の戻り値をチェックすることもできます。もし' false'であれば、ファイルを読み込む際にエラーが発生します。 –
スクリプトをテストしましたが、リモート 'msg'ファイルをダウンロードします。 nginx + php 5.6。スクリプトがファイルをダウンロードするためのアクセス権を持っていますか?もしそれが 'mypath'のサーバであれば' .msg'ファイルは与えられません。 –