3

Webを2日間検索しましたが、答えが見つかりません。

自分が管理しているサイトのファイルを表示し、ユーザーが選択したファイルをローカルドライブにダウンロードできるようにするルーチンを作成しようとしています。

私は以下のコードを使用しています。echoステートメントのコメントを解除すると、正しいソースディレクトリと宛先ディレクトリ、正しいファイルサイズ、およびfclose後のエコーがTRUEと表示されます。

ソースファイル($ data)をエコーすると、正しいコンテンツが表示されます。

$ FileName変数には、.doc/.docxまたは.pdfのいずれかの正しいファイル名が含まれています。私は両方をテストしましたが、宛先ディレクトリやマシン上の他の場所には何も保存していません。

ソースパス($ path)はログインの背後にありますが、私はすでにログインしています。

これがファイルの書き込みに失敗する理由について何か考えはありますか?

ありがとう、ハンク

コード:

$path = "https://.../Reports/ReportDetails/$FileName";
/* echo "Downloading: $path"; */
$data = file_get_contents($path); /* echo "$data"; */
$dest = "C:\MyScans\\".$FileName; /* echo "<br />$dest"; */
$fp = fopen($dest,'wb');
if ( $fp === FALSE ) echo "<br />Error in fopen";
$result = fwrite($fp,$data);
if ( $result === FALSE ) echo "<br />Can not write to $dest";
/* else echo "<br />$result bytes written"; */
$result = fclose($fp); /* echo "<br />Close: $result"; */
4

2 に答える 2

2

あなたは少し混乱していると思います (!)。

あなたが言及した

ユーザーは、選択したファイルをローカル ドライブにダウンロードできます。

ただし、パス"C:\MyScans\\".$FileNamewebserver 上のパスであり、ユーザー自身のコンピューター上のパスではありません。

リモートWebサイトから目的のファイルを取得するために何かをした後:

  1. そこからファイルを作成し、次を使用してユーザーをファイルにリダイレクトしますheader('Location: /path/to/file.txt');

  2. 次のヘッダーを挿入します。

    header('Content-disposition: attachment; filename=path/to/file.txt');

It forces the user to download the file. And that's probably what you want to do

Note: I have used the extension txt, but you can use any extension

于 2012-07-06T22:33:52.850 に答える
1

php Curlを使用できます:

<?php
    $url  = 'http://www.example.com/a-large-file.zip';
    $path = '/path/to/a-large-file.zip';

    $fp = fopen($path, 'w');

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FILE, $fp);

    $data = curl_exec($ch);

    curl_close($ch);
    fclose($fp);
于 2012-07-06T22:25:15.687 に答える