-3

サーバーに配置したい、現在ローカルで動作している PHP スクリプトがあります。

現在、ユーザーが .txt ファイルを選択すると、PHP スクリプトがそのファイルで動作し、ファイルで読み取った内容に基づいて新しいファイルを出力します。問題は、スクリプトを含むフォルダー内のファイルのみを選択でき、他の場所では選択できないことです。ファイル名を取得するために a を使用しますが、絶対パスではなく、ファイルの名前のみを示します。

私が読んだことから、ファイルをサーバーにアップロードし、スクリプトで処理してからユーザーに返す必要があると思います。ただし、これが正しい方法かどうかはわかりません。

また、サーバーへのファイルのアップロードに関する多くの情報を見つけましたが、スクリプトによって作成された新しいファイルを元のファイルがあるフォルダーに配置する方法がわかりません。

4

2 に答える 2

2

クライアントのマシンでファイルを直接読み書きすることはできません。クライアントはブラウザでファイルを選択してアップロードする必要があり、サーバーはデータを受信し、データを処理してデータを返します。この返されたデータは、適切な HTTP ヘッダーを設定することにより、ファイル ダウンロードの形式で表示できます。クライアントは、ファイルのダウンロードを確認し、選択した場所に保存する必要があります。

サーバーは、クライアントのマシン上のファイルやフォルダーについて何も知りません。HTTP プロトコルを介してのみ通信し、データを送受信できます。

于 2013-07-02T13:40:55.217 に答える
1

ダウンロード可能なファイルとして、ファイルをクライアントに返す必要があります。いくつかのヘッダーを設定することで、ユーザーに「書き込む」ことができます。見てみましょう:

<?php
$file = 'random_text_file.txt';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

これにより、ユーザーにファイルのダウンロードが促されます。

于 2013-07-02T13:41:04.420 に答える