2

外部サーバーからのreadfile()に問題があります。ダウンロードしたファイルは常に壊れており、サイズは約3,4kbです。ローカルホストで動作しています。

1位:

$file_name = $_POST['myname'];
readfile("http://www.ftj.eu/.../3n.pdf");
header("Content-Disposition: attachment; filename=$file_name" .date("m-d-y") . ".pdf");

2番目:

ローカルホストでも機能しない理由を知っていますか?:

readfile("3n.pdf");
header("Content-Disposition: attachment; filename=$_POST['myname']" .date("m-d-y") . ".pdf");

解析エラー:構文エラー、予期しないT_ENCAPSED_AND_WHITESPACE、T_STRINGまたはT_VARIABLEまたはT_NUM_STRINGが必要です

私を助けてください。

編集:

外部URLからのreadfileを機能させるのを手伝ってください。

4

2 に答える 2

3

readfile()@Will が既に述べたように、問題ではなく、構文エラーがあります。

これを置き換えます:

header("Content-Disposition: attachment; filename=$_POST['myname']" .date("m-d-y") . ".pdf");

これで(中括弧を追加$_POST['myname']):

header("Content-Disposition: attachment; filename={$_POST['myname']}" .date("m-d-y") . ".pdf");
                                                  ^                ^

編集:

readfile()外部 URL からの場合、PHP マニュアルには次のように書かれています。

fopen ラッパーが有効になっている場合は、この関数で URL をファイル名として使用できます。ファイル名の指定方法の詳細については、fopen()を参照してください。さまざまなラッパーが持つ機能、使用方法に関する注意事項、提供される定義済み変数に関する情報へのリンクについては、サポートされているプロトコルとラッパーを参照してください。

つまり、で有効allow_url_fopenにするphp.iniか、curl を使用してサーバーにファイルをダウンロードし、それをクライアントに提供する必要があります。

curl を使用した例:

<?php 
    $remote_file_url = 'http://www.ftj.eu/.../3n.pdf';
    $downloadedFileName = "your_pdf_file.pdf";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $remote_file_url);
    $downloadedFile = fopen($downloadedFileName, 'w+');
    curl_setopt($ch, CURLOPT_FILE, $downloadedFile);
    curl_exec ($ch);

    curl_close ($ch);
    fclose($downloadedFile);

    readfile($downloadedFileName);
    header("Content-Disposition: attachment; filename={$_POST['myname']}" .date("m-d-y") . ".pdf");
于 2012-10-14T14:00:22.917 に答える
1

おそらく、サーバーはリモート ファイルを開かないように設定されているため、構成を変更しない限り、fopen、readfile、および同様のコマンドをサーバーで使用することはできません。

于 2012-10-14T14:22:00.213 に答える