@yuicham (ゆいまーる)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

phpファイルでハイパーリンクテキストをクリックするとファイルがダウンロードされる方法

解決したいこと

PHPファイルのハイパーリンクテキストをクリックしたときに、エクセルファイルやワードのファイルなどがダウンロードできるコードが知りたいです。
作りたいイメージはこんな感じです。(クリックするとエクセルファイルがすぐにダウンロードできる)
https://www.city.nerima.tokyo.jp/dl/shussan/hoikuen.html

ネットで該当しているらしきコードを調べて打ち込んでみましたが、ページを開いた瞬間にファイルがダウンロードされてしまいました。

HTMLのdownload属性をphpファイルに置き換えてみましたが、できませんでした。

downloadフォルダの中のファイル(question.xlsx)をクリックしたときにダウンロードできるようにしたい。

<a href="/download/question.xlsx" download="question.xlsx">ダウンロード</a>

<a href="<?php bloginfo('url'); ?>/download/question.xlsx" download="question.xlsx">ダウンロード</a>

②に置き換えてphpファイルに書いてみましたが、「失敗ーファイルがありません」とエラーが出てしまいました。

0 likes

1Answer

最も単純にファイルをダウンロードさせたい場合、まずPHPは関係ありません。
基本的にこれで十分です。

<a href="/download/question.xlsx">ダウンロード</a>

①で試した結果はどうでしたか?

0Like

Comments

  1. @yuicham

    Questioner

    @blue32aさん
    さっそくご回答くださりありがとうございます!大変助かります。
    できる限りシンプルにコーディングできるととても嬉しいです。
    ①で試した結果、ハイパーリンクを押すことができ、押してダウンロードされる動きは出るのですが、「失敗ーファイルがありません」とエラーが出てしまいました。

    補足です。
    ファイル構想としては、
    同列にいくつかphpファイルが並んでおり、そこにdownloadフォルダも並んでいます。
    downloadフォルダの中にquestion.xlsxファイルを入れています。
  2. アプリケーションのディレクトリ構造と外から見える構造(URL)は必ずしも一致しません。
    直接URLでアクセスして、ファイルがありません、となった場合はURL(またはファイルを置く場所)が間違っているのだと思います。
    https://<domain>/download/question.xlsx

    まずドキュメントルートにあたるディレクトリを確認してください。
    基本的にはそこからのパスを指定することになります。
  3. @yuicham

    Questioner

    @blue32aさん
    さっそくご回答くださりありがとうございます!大変助かります。

    <a href="<?php bloginfo( 'stylesheet_directory' ); ?>/download/question.xlsx" download="question.xlsx">ダウンロード</a>と設定してみたところ、無事にダウンロードができました!ファイルも開くことができました!本当にありがとうございます!!

    アプリケーションのディレクトリ構造と外から見える構造(URL)は必ずしも一致しません。
    →構造について、まだ理解できておりませんでした。初歩的なところなのに、お恥ずかしいです。

    尚、現在ローカル環境で触っており、下記のように設定してみましたが・・・ダウンロードできませんでした。
    <a href="http://localhost/wordpress/download/question.xlsx" download="question.xlsx">ダウンロード</a>
    そのような仕様になっているのかな?と思いました。

    お早く、正確なご回答に本当に助けられました。
    ありがとうございました!
  4. 解決できたようで良かったです。

    <?php bloginfo( 'stylesheet_directory' ); ?>

    これの機能は次の通りです。

    >'stylesheet_directory' - アクティブなテーマディレクトリーの URL を表示します。

    https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/bloginfo

    これはスタイルシートディレクトリのURLを取得するだけなので、最終的に表示されているURLをそのまま直接書いてもダウンロードは可能なはずです。

    これを使う利点としては、スタイルシートのディレクトリが変わっても自動的にURLが変更されることにあります。
    ですので、テーマを変更するとURLが変わり、ダウンロード出来なくなってしまうのではないかと思います・・・
  5. @yuicham

    Questioner

    ご返答くださり、ありがとうございます!
    <?php bloginfo( 'stylesheet_directory' ); ?>のコードの理解も深めることができました。
    ローカル環境⇄本番環境を行き来する場合は、<?php bloginfo( 'stylesheet_directory' ); ?>を用いたほうが無難かもしれませんね。
  6. 名前の通りスタイルシート用のディレクトリなので、ダウンロード用のファイルを置くのは本来の用途ではないと思います。
    ひとまず目的が達成できたのであれば一旦それで良しとして、理解を深めつつ調整していけばいいと思います。
  7. @yuicham

    Questioner

    @blue32aさん
    ありがとうございます!確かに名前を見るとスタイルシート用のディレクトリなので、ダウンロード用のファイルを置くのは本来の用途ではなさそうですね‥。一旦はこれでよしとしますが、他にいい方法がありそうでしたらトライしてみたいと思います!

Your answer might help someone💌