• ベストアンサー

ファイル一覧を表示しその画面からダウンロードを行いたい

こんにちは。PHP5を勉強して約半年のものです。PHP5でフォルダ内のファイルを表示し、そこで選択したファイルをダウンロード、または保存用のダイアログを開くプログラムを作成するにはどうすればよいのでしょうか? フォルダ内のファイルの一覧を表示し、<a href>を利用して指定したファイルにアクセスすること、http://opqr.jp/2007/09/php.htmlのサイトなどを参考にクリックしてファイルの保存ダイアログを開いたり、単純な保存の仕方などはできるのですが、質問の通りファイル一覧表示からファイル名をクリックした際、その(クリックした)ファイルをダウンロードするにはどうすればよいのでしょうか?

  • PHP
  • 回答数5
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

つまり、管理用のphpなので生データが見えてもOKということですね? であればこんな感じで、パラメータとして渡してやればいいでしょう。 (仮に自分自身をhoge.phpとします) <?php $rep = 1; // 最終更新日(表示=1 非表示=0) $sze = 1; // ファイルサイズ(表示=1 非表示=0) $lst = "./list"; // 表示するリストの名前(パス) $f=$_GET["f"]; if(file_exists($f)){ header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($f)); $fp=fopen($f,"r"); while(feof($fp)===false){ print fread($fp,1024); } exit; } $drc=dir($lst); print("<OL>"); while($fl=$drc->read()) { $lfl = $lst."/".$fl; $din = pathinfo($lfl); if(is_dir($lfl) && ($fl!=".." && $fl!=".")){ print("<LI>".$din["basename"]."<FONT size='-1'> (ディレクトリ)</FONT></LI>"); } else if($fl!=".." && $fl!=".") { print("<LI>"); print("<a href=hoge.php?f=".urlencode($lst."/".$fl).">".$fl."</a>"); // ファイル更新日 if($rep == 1 || $sze == 1) print("<FONT size='-1'> ("); if($rep == 1) echo date("m/d",filemtime($lfl)); if($rep == 1 && $sze == 1) print(", "); // ファイルサイズ if($sze == 1) echo round(filesize($lfl)/1024)."KB"; if($rep == 1 || $sze == 1) print(")</FONT> "); print("</LI>"); } } print("</OL>"); $drc->close(); ?>

iwaki0430
質問者

お礼

疑問点がすっきり解決しました。プログラムも記述していただき、ありがとうございます。まさか自身(hoge.php)を<a href>で指定し、自身に値を受け渡すことで、できるとは思ってもいませんでした。今回記述していただいたプログラムのように自身にデータ(値)を送信する方法は他のプログラムでも利用できそうです。一つの解答で複数の課題が解決できるような、ピンポイントの解答、ありがとうございます。

その他の回答 (4)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.5

一覧を表示する時に、form内に一覧を入れて、radioボタンを各ファイル名の先頭に表示して、送信ボタンでダウンロード実行させる方法もあります。 <form action="dl.php" method="post"> <input type="radio" name="dlnumber" value="1">ff.ttt ... <input type="submit" value="一個ずつダウンロード"> </form> 複数ファイルを一遍にダウンロードするには、zipアーカイブなどを作成してからでないと、なりませんが、もしかしてそのこと?。 PEAR::File_Archive でzip を作成してダウンロードも、補足に提示されたサイトにありますね? form の複数指定の方ですか? それぞれinput要素のname にも連番つけちゃうか、 name="dl[]" とかすれば、$_POST['dl'][] のように配列に取得できますよ。 http://jp.php.net/manual/ja/language.variables.external.php

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

一覧の表示のしかたがわからないのですか? ダウンロードのしかたがわからないのですか? また、ダウンロードいっても、ソースのダウンロードをさせたいのか、 パース後のデータをダウンロードさせたいのかによってもだいぶ 違うと思います。 つまり、test.phpが <?PHP print "test"; ?> だったばあい、ソースならそのまま、パース後ならtestがファイルの 中身になります。 もし前者を希望とすると結構まずいことになると思いますが・・・

iwaki0430
質問者

お礼

すみません。この回答への補足の3行めに書いた通常のファイルのダウンロードとはhttp://d.hatena.ne.jp/litt/20070905/p1のようにファイル名を指定する基本的なダウンロードのやり方を知っているということです。ファイル一覧表示からダウンロードできるわけではありません。(むしろファイル一覧表示からダウンロードしたい)このような場所に記述して申し訳ありません。このような内容がわかりづらい質問に解答していただきありがとうございます。

iwaki0430
質問者

補足

すばやい解答ありがとうございます。そしてわかりづらい質問で申し訳ありません。自身がやりたいこととして、まずhttp://php.eweb-design.com/0206_di.phpのサイトと同様の方法でファイルの一覧をブラウザに表示する。(ここまではできます。)その一覧からユーザが欲しいファイルをダウンロードするにはどうすればよいのでしょうか?通常のファイルのダウンロードはできるのですが、ファイル一覧を確認してからユーザがいちいちプログラムを作成し、ダウンロードさせるのは手間がかかるので省略できないかと考えて、フォルダ内のファイル一覧の表示ページから、そのままファイルをダウンロードする方法を探しています。できればファイル一覧を表示してから​http://opqr.jp/2007/09/php.html​のようにクリックしてそのファイルがダウンロードできたらいいと思っています。また、ファイル管理システムなのでファイル内には50個ぐらいファイルが存在しています。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

#1です。度々すみません。 そちらの提示してあるサイトでやっている事を、回答としてあげてしまったようで、すみません。 ちょっと、そちらのやろうとしている事が自分の頭で把握できない為、#1は聞き流しでお願いします。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

ヒント : header(); http://php.net/manual/ja/function.header.php 以下、抜粋 コピペです。 PDF ファイルを生成した場合など、 それをダウンロードするかの確認ダイアログを表示させたいことがあるでしょう。 そんな場合は、» Content-Disposition ヘッダを使用してファイル名を指定すると、ブラウザ側でダイアログを表示させることができます。 <?php // PDFを出力します header('Content-type: application/pdf'); // downloaded.pdf という名前で保存させます header('Content-Disposition: attachment; filename="downloaded.pdf"'); // もとの PDF ソースは original.pdf です readfile('original.pdf'); ?>

関連するQ&A

  • 左クリックでファイルのダウンロード

    ディレクトリを指定し、その中に存在するファイルを表示してリンクをはって、 「右クリック→対象をファイルに保存」でファイルをダウンロードさせるプログラムを作ることができたのですが、 右クリックではなく、左クリックでダウンロードダイアログを表示してダウンロードさせるようにしたいです。 どのようにすれば良いのでしょうか? 使用言語はPHPです。

    • ベストアンサー
    • PHP
  • ダウンロード画面

    インターネットエクスプローラーでHP上でダウンロードしようとするとき、右クリックで通常「ファイルのダウンロード」のダイアログが表示するのですが、突然このダイアログが表示しなくなりました。 いままでは、「ファイルのダウンロード」が表示され「保存」を選んで保存するフォルダを選ぶことになるんですがそれができなくて困っています。 対応方法教えていただきたく、よろしくおねがいします

  • ファイルのダウンロードダイアログが表示されるが保存ができない

    PCのメーカーはDELL XPSでOSはWindows Vistaを使っております。 表題のとおり、ファイルのダウンロードができません。 詳しく説明すると、ファイルをダウンロードしようとすると 保存ダイアログが表示され、「開く」か「保存」を選択できるのですが どちらを押しても、クリックした瞬間にウインドウが閉じてしまいます。 また、右クリックで「対象をファイルに保存」を選択しても何も起こりません。 セキュリティソフトはマカフィーが入っていますが切って試しましたし インターネットオプションのセキュリティの詳細設定や保護のオンオフも試しましたがだめでした。 他の方々の質問と違って、「保存のダイアログが表示されない」や 「ダウンロードが完了したのに指定したフォルダにファイルが存在しない」のではなく 「ダウンロード自体がまったく始まらない」という状況で、解決策が見当たりません。。。 もし度どなたか同様の症状が起こり、解決された事があるなら教えていただけないでしょうか? よろしくお願いいたします。

  • 「ファイルのダウンロード」のダイアログを出さない方法

     HTMLファイルから「*.chm」(HTMLヘルプ形式)や「*.exe」などの実行ファイルを呼び出すと「ファイルのダウンロード」のダイアログが出て「ファイルによってはコンピュータに問題を起こす可能性があります…」と表示され「開く」「保存」…を選択する必要があります。  下はHTMLのプログラムの一例です。 〔例〕  <a href="example.chm">ヘルプ</a>  「□この種類のファイルであれば常に警告する」が選択無効(影表示)になっており、常に「ファイルのダウンロード」のダイアログが表示されます。  上の[例]でスクリーンに表示される[ヘルプ]をクリックすることで[example.chm]を開きたいのです。また、「*.exe」ファイルについても、選択ダイアログを表示せずに指定のファイルを実行したいのですが…方法を教えてください。  よろしくお願いします。

    • ベストアンサー
    • HTML
  • VB ファイル一覧表示について

    VB初心者です。 現在、指定したフォルダのサブフォルダを含むファイル名一覧を表示したものを作りたいと思い、試行錯誤しております。 ファイル名は、指定したフォルダ以下のパスで表示したものを作りたいと思っているのですが、どうしてもフルパスで表示されてしまいます。 現在、自分が書いているプログラムに拘ろうと思っていませんので、どなたかフルパスではないファイル名一覧表示方法を教えていただけないでしょうか。 環境は、Windows XP 、Microsoft Visual Studio 2008 Express Editionです。 ファイル名一覧表示は、ListViewかListBoxで考えています。 よろしくお願いいたします。

  • 音楽ファイルのダウンロードが出来ません

    http://www.yung.jp/index.php ↑こちらのホームページにある「今週の音楽」というところから「音楽を再生」をクリックしてファイルをダウンロードしようとすると、 ”ダウンロード中のプログラムは、既定のプログラムで開けません。壊れている か、正しくないファイルの種類が指定されていることが原因です。セキュリティ 保護のため、ダウンロードを取り消すことを推奨します。” というメッセージが出てきて保存が出来ません。 管理人さんにメールをしたのですが返ってこないのでこちらで質問させて頂きました。 これはパソコンの設定の問題なのでしょうか? ご教授お願いします。

  • CSVファイルのダウンロード

    <環境> PHP4.3.2 Windows2000 PostgreSQL RedHat Linux <求めていること> DBのデータをCSVファイルに書き出し、 ダウンロードボタン押下で ダイアログがアップしファイル保存ディレクトリ選択、保存。 <現在のソース> サーバーにtest.csvファイル作成後、 現在HTMLでダウンロードボタン押下でdownload.phpを呼び出し <input type=button value="ダウンロード" onClick="location.href='download.php'"> ---------------- download.php ------------------- <?php // 1.ディレクトリ指定 //$filename="/test/test.csv"; // 2.ディレクトリ指定なし $filename = "test.csv"; header("Content-disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); ?> ---------------- download.php ------------------- 現在、 1番のディレクトリ指定だと downloadというファイルがダウンロードされるダイアログがアップし ダウンロードされます。 2番のディレクトリ指定なしだと もちろん空のtest.csvファイルがダウンロードされます。 実現したいのは/test/test.csvのファイルをダウンロードすることです。 色々なサイトで探してみて試しているのですが 初心者なもので、行き詰まってしまいました。 申し訳ありませんが ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルのダウンロードダイアログの表示

    以前にも同じ質問がありましたらごめんなさい。 HPにて画像などを選択(クリック)したときに、 ファイルの保存ダイアログを表示させて、サー バー上にあるJPG画像などをローカルの場所へ 保存させたいのですが、どのように記載すれば いいのか、どの言語(Perl?PHP?)を使えば いいのかわかりません。 Script(javascript、VBscript)では、でき ないようですし…。<A HREF>を使用して圧縮 ファイル形式での保存方法は知っていますが、 チェックボックスを使用して複数ファイルを一 度にダウンロードできるようにするのが最終目 的なので、その方法では難しいのです。どなた かわかる方がいらしたら教えて頂けませんか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • ファイルが表示されない・・・

    先日Program Filesフォルダ内にインターネットからあるファイル( .java )をダウンロードしました。確認のためにエクスプローラで普通に同フォルダにアクセスしたところ、ファイルが表示されませんでした。 間違ったフォルダに保存したのかと思い検索をかけてみたら、そのファイルはちゃんとフォルダ内に表示されたのです。つまり検索ではひっかかるのですが、普通にアクセスする(エクスプローラで見る)と表示されないのです。もちろん隠しファイルではありません。 インターネットよりダウンロードしたファイルだけでなく、ほかにもProgram Filesフォルダ以下(他のフォルダにも起こっているかもしれませんが)で同様のファイル( .dllなど)が確認されました。ウイルスでしょうか?回答よろしくお願いします。 OSはWindows Vista Home Premiumです。

  • IEのダウンロードファイル保存場所を参照する方法

    IEで、ファイルダウンロードを実行すると、「名前を付けて保存」ダイアログボックスが表示されます。 「保存する場所」でフォルダ名を指定して保存すると、次回のファイルダウンロードのときに、指定したフォルダ名が表示されます。 これは、「保存する場所」のフォルダ名をどこかに記憶しているからだと思います。 EXCELマクロでダウンロードされたファイルを開いて処理したいのですが、この「保存する場所」のフォルダ名を参照してファイルを開くにはどうしたらよいのでしょうか。 よろしくご教授ください。

専門家に質問してみよう