
こんにちは。PHP5を勉強して約半年のものです。PHP5でフォルダ内のファイルを表示し、そこで選択したファイルをダウンロード、または保存用のダイアログを開くプログラムを作成するにはどうすればよいのでしょうか?
フォルダ内のファイルの一覧を表示し、<a href>を利用して指定したファイルにアクセスすること、http://opqr.jp/2007/09/php.htmlのサイトなどを参考にクリックしてファイルの保存ダイアログを開いたり、単純な保存の仕方などはできるのですが、質問の通りファイル一覧表示からファイル名をクリックした際、その(クリックした)ファイルをダウンロードするにはどうすればよいのでしょうか?
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();
?>
疑問点がすっきり解決しました。プログラムも記述していただき、ありがとうございます。まさか自身(hoge.php)を<a href>で指定し、自身に値を受け渡すことで、できるとは思ってもいませんでした。今回記述していただいたプログラムのように自身にデータ(値)を送信する方法は他のプログラムでも利用できそうです。一つの解答で複数の課題が解決できるような、ピンポイントの解答、ありがとうございます。

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.e …
No.3
- 回答日時:
一覧の表示のしかたがわからないのですか?
ダウンロードのしかたがわからないのですか?
また、ダウンロードいっても、ソースのダウンロードをさせたいのか、
パース後のデータをダウンロードさせたいのかによってもだいぶ
違うと思います。
つまり、test.phpが
<?PHP
print "test";
?>
だったばあい、ソースならそのまま、パース後ならtestがファイルの
中身になります。
もし前者を希望とすると結構まずいことになると思いますが・・・
この回答への補足
すばやい解答ありがとうございます。そしてわかりづらい質問で申し訳ありません。自身がやりたいこととして、まずhttp://php.eweb-design.com/0206_di.phpのサイトと同様の方法でファイルの一覧をブラウザに表示する。(ここまではできます。)その一覧からユーザが欲しいファイルをダウンロードするにはどうすればよいのでしょうか?通常のファイルのダウンロードはできるのですが、ファイル一覧を確認してからユーザがいちいちプログラムを作成し、ダウンロードさせるのは手間がかかるので省略できないかと考えて、フォルダ内のファイル一覧の表示ページから、そのままファイルをダウンロードする方法を探しています。できればファイル一覧を表示してからhttp://opqr.jp/2007/09/php.htmlのようにクリックしてそのファイルがダウンロードできたらいいと思っています。また、ファイル管理システムなのでファイル内には50個ぐらいファイルが存在しています。
補足日時:2010/02/15 10:36すみません。この回答への補足の3行めに書いた通常のファイルのダウンロードとはhttp://d.hatena.ne.jp/litt/20070905/p1のようにファイル名を指定する基本的なダウンロードのやり方を知っているということです。ファイル一覧表示からダウンロードできるわけではありません。(むしろファイル一覧表示からダウンロードしたい)このような場所に記述して申し訳ありません。このような内容がわかりづらい質問に解答していただきありがとうございます。
No.2
- 回答日時:
#1です。
度々すみません。そちらの提示してあるサイトでやっている事を、回答としてあげてしまったようで、すみません。
ちょっと、そちらのやろうとしている事が自分の頭で把握できない為、#1は聞き流しでお願いします。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) Excelで、社外秘(閲覧のみ)と表示され、共有者が編集出来ないのですが 4 2023/06/20 17:54
- 写真・ビデオ iphoneからPCへ写真をインポート、保存先がわかりません。 2 2022/09/29 02:06
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Windows 10 e-Gov 電子申請について 回答お願いします。 社会保険保険証加入手続きを電子申請しました。 返戻 3 2022/10/02 09:05
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
PDF ダウンロード
-
PHPでファイルのダウンロードす...
-
youtubeに音声のみのmp4ファイ...
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
ob_end_clean と ob_clean の違...
-
PHPの拡張子を見せない方法
-
【file_exists】ファイルが存在...
-
Subversionのリポジトリの削除
-
session_start();について
-
Windowsサーバーでメール送信プ...
-
SmtpMailクラスについて
-
Illustratorで文字と画像を流し...
-
FTP サーバーにある画像を表示...
-
トランザクションが原因?DBに...
-
phpでのログアウトについて
-
どうして送信されないのでしょ...
-
フォントの色を変えるには?
-
VBSの「MsgBox」について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ftp_getでローカルにファイルが...
-
zip圧縮の種類について
-
PHPでファイルのダウンロードす...
-
libxml2のインストール
-
PHPで複数ファイルのダウン...
-
生成したHTMLをボタンクリック...
-
ファイルのダウンロードのイベ...
-
VB.NETのFTPダウンロードについて
-
phpでzipファイルダウンロード...
-
PHPでダウンロードしたファイル...
-
複数ファイルを連続でダウンロード
-
eclipseでコメントアウトができ...
-
Excelファイルをダウンロード
-
ファイルに書き込む時の負荷に...
-
CSVファイルのダウンロード
-
ファイル一覧を表示しその画面...
-
ファイルアップロード・ダウン...
-
phpでEXCELファイルの編集
-
PDF ダウンロード
-
ダウンロードファイル名の文字...
おすすめ情報