
こんにちは。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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル一覧を表示しその画面...
-
GetFileでテンポラリが作られて...
-
CSVファイルをダウンロード時の...
-
HTTP_Requestで画像ファイルを...
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
PHPのif文でその処理を途中で抜...
-
フォントの色を変えるには?
-
バッチを用いたフォルダの自動移動
-
makefile でファイルをコピーす...
-
URLが.PHPってどういう...
-
PHPでフォルダ選択ダイアログを...
-
ループの中で mailItemObj.Disp...
-
「クラス関数」「メンバ関数」...
-
他の開発環境をインストしたらa...
-
VBAでJPGサイズ変更
-
さくらサーバーにて、phpからメ...
-
拡張子の無いアクセスには404エ...
-
バイナリーデータをGIFで表示さ...
-
rmdirでフォルダが消せません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
zip圧縮の種類について
-
PHPでファイルのダウンロードす...
-
生成したHTMLをボタンクリック...
-
ファイルシステム関数関係
-
PHPで複数ファイルのダウン...
-
PDF ダウンロード
-
ダウンロードすると画像が壊れ...
-
getfile.phpファイル?について
-
パスワードファイルの管理
-
PHPでダウンロードしたファイル...
-
PHPでファイルをダウンロードさ...
-
ファイル(PDF・エクセル・ワー...
-
VB.NETのFTPダウンロードについて
-
ブラウザでExcelをダウンロード...
-
fwrite~サーバ環境で、なぜか0...
-
eclipseでコメントアウトができ...
-
検索結果をCSVにダウンロードす...
-
ダウンロードが機能しない。
-
csvをダウンロードする際、いき...
-
PHPでBasic認証付HP...
おすすめ情報