PHP 画面にファイル名を入力してダウンロードする

PHPの画面にファイル名を入力してダウンロードするすサンプルです。
(確認環境:PHP 7,XAMPP 7.2.8,Windows 10)

目次

サンプル 画面にファイル名を入力してダウンロードする内容
  ファイル名を入力するファイル(index.php)
  ダウンロードを行うファイル(download.php)

画面にファイル名を入力してダウンロードする内容

やりたいこと

1.入力元(index.php)の画面にファイルのURLを入力しボタンを押します。

 

2.コードに指定したD:\workにファイルをダウンロードします。画面に成功のメッセージが表示されします。

 

ファイルの配置場所

D:\xampp\htdocsフォルダ配下にtestフォルダを作成しその中にファイルを配置しました。

http://localhost:180/test/を入力するとindex.phpが表示されます。

※index.phpをブラウザにドラッグアンドドロップしてブラウザ入力欄がfile:///D:/xampp/htdocs/・・・等のファイルのアドレスになっている場合はPHPの動作はしません。

ファイルの文字コードは、UTF-8にします。

 

ファイル名を入力するファイル(index.php)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>test</title>
  </head>
  <body>
    <form action="download.php" method="post">
      <p><label for="text1">URLを入力してください:</label></p>
      <input type="text" id="text1" name="text1" style="width:300px;">
      <button type="submit">ボタン</button>
    </form>
  </body>
</html>

8行目は、methodでpost方式を指定し、actionで送信先(download.php)を指定しています。
10行目は、テキストボックスです。画面から文字を入力します。
11行目は、送信ボタンです。type=submitのボタンを押すと値が送信されます。

 

ダウンロードを行うファイル(download.php)

<?php
error_reporting(E_WARNING);
set_error_handler(function($errno, $errstr, $errfile, $errline) {
  throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});

$url = $_POST['text1'];
$filename = basename($url);
$savePath = 'D:\work\\' . $filename;

try{
  $result = file_put_contents($savePath, file_get_contents($url));
  $moji = 'ダウンロードが成功しました。';
}catch(ErrorException $e){
  $moji = 'ダウンロードに失敗しました。';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>result</title>
</head>
<body>
<p><?= $moji ?></p>
</body>
</html>

2~5行目は、Warningを14行目のcatchで取得できるようにしています。
7行目の$_POST['text1']のtext1は、index.phpのinputタグのnameで指定された値です。
9行目は、D:workフォルダにファイルを配置します。

関連の記事

XAMPP インストールとHello Worldを表示
PHP フォームの値を別画面に渡す(GET/POST)

△上に戻る