• 締切済み

PHPでファイルのダウンロードについて

お世話になります。ダウンロードボタンを付けてファイルのダウンロードを行う処理で困った事になってます。 (DL.php) $file_name=htmlspecialchars(@$_POST['file_name']); $file_name=addslashes($file_name); mb_convert_variables("SJIS-WIN","EUC-JP",$file_name); $file_to=htmlspecialchars(@$_POST['file_to']); $file_to=addslashes(@$_POST['file_to']); header ("Content-Disposition: attachment; filename=".$file_name); header ("Content-type: application/octet-stream"); require_once("dl_config.php"); readfile ($data_pas.$file_to); dl_config.php <?PHP $data_pas="/data/"; ?> この状態でテキストファイルをダウンロードすると、DLしたファイルの中に不要な改行ファイルが挿入されています。 またrequire_once("dl_config.php");を削除し readfile ($data_pas.$file_to);を readfile ("/data/".$file_to);とすると、改行は入らなくて、正常なファイルがダウンロードされます。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

dl_config.php のファイルをエディタで開いて、先頭や末尾の不要な改行を削除してやると、直るかもしれません。

関連するQ&A

  • PHPでのファイルのダウンロードについて

    お世話になります。 タイトルのとおりPHPでファイルのダウンロードを行いたいのですが、 ファイルを保存するというダイアログが出てくれません。 tesuto.php <?php $file="/work/tesuto.csv"; header ("Content-Disposition: attachment; filename=$file"); header ("Content-type: application/x-csv"); readfile ($file); ?> tesuto.phpを実行するとダウンロードされずに、ファイルの中身が表示されてしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでファイルのダウンロードすると開けません。

    PHPでファイルのダウンロードすると開けません。 文書を整理するために、アップロードして、必要に応じてダウンロードする仕組みを作っています。 PDFや画像のファイルは問題ないのですが、、 word文書(エクセルもダメでした)を、以下のファイルを作って、ダウンロードし開こうとすると 「ファイル******.docxは無いように問題があるため、開けませんでした。」となります。 ※エクセルでは、「Exelで****.xlsxを開くことが出来ません。ファイル形式またはファイルか拡張子が正しくありません。ファイル拡張子とファイル形式が一致していることを確認してください」  とダイアログが出てきます。 $file="アップロードしてある実ファイル名"; $file_name="ローカルに保存する際のファイル名"; ※ファイル名を変更しなくても同じなので、そこは関係ないと思います。 header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=$file_name"); header('Content-Length: '.filesize('$file')); readfile($file); リンクを張って開くのには何の問題もありません。 <a href="http://www.******.com/images/$file">$file_name</a> ダウンロードする際に名前を変更したいので、ダウンロード用のファイルを作ってダウンロードさせようとしています。 何か、ダウンロードをする前に処理が必要なのでしょうか? よろしくご教授お願いいたします。 ※ワード、エクセルは2010を使用しています。

    • ベストアンサー
    • PHP
  • PHPでのファイルダウンロードについて

    初めて質問させていただきます。 社内用でファイルのアップロード・ダウンロードができるシステムを開発しています。 PCからは問題なくアップロードもダウンロードも行えていたのですが、 スマホからアクセスしてダウンロードをすると失敗してしまいます。 下記のコードを使ってます。 ファイルの種類はいろいろなので、「application/octet-stream」にしてます。 が、それぞれのファイルタイプに合わせて変更させても状況は変わりませんでした。 -- header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); header('Content-Length: '.filesize($dl_file)); readfile($dl_file); exit; -- なにか解決策があるようでしたら、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP で動的ファイル出力

    PHP 猛勉強中です、またお世話になりますm( __ __ )m ドキュメントルート外に置いたイメージファイルを HP からリンクして表示できるように readfile 関数を使った PHP ファイルを作成しようと思っています。 readfile.php に対して URL クエリーでhttp://hoge/readfile.php?name=hage&ext=jpg のような感じで呼び出したいと思っています。 ※ name はファイル名、 ext は拡張子です。 [readfile.php] <?php $_name = ""; $_ext = ""; if(isset($_GET["name"]) === true && isset($_GET["ext"]) === true){ // null byte 対策 $_name = delete_nullbyte($_GET["name"]); $_ext = delete_nullbyte($_GET["ext"]); // ディレクトリトラバーサル対策 $_name = str_replace(".", "", @htmlspecialchars($_name, ENT_QUOTES, "UTF-8")); $_ext = str_replace(".", "", @htmlspecialchars($_ext, ENT_QUOTES, "UTF-8")); }else{ exit(); } $_file_path = "/home/xxx/img/" . $_name . "." . $_ext; // ファイル存在確認 if(file_exists($_file_path) === false){ exit(); } // MimeType 取得 $_ext_type = substr($_file_path, -3); $_mime_type = ""; if(strcasecmp($_ext_type, "jpg") === 0){ $_mime_type = "image/jpeg"; _out_file($_file_path, $_mime_type); }else{ exit(); } ///////////////////////////////////////////////// // ファイル出力 function _out_file($file_path, $mime_type) { // ファイル名取得 $_fname = @basename($file_path); // ファイルストリーム取得 header('Content-Type: ' . $mime_type); header("Content-Disposition: inline; filename='" . $_fname . "'"); readfile($file_path); } ///////////////////////////////////////////////// // null byte 除去メソッド function delete_nullbyte($str) { if(is_array($str) === true){ return ""; } return str_replace("\0", "", $str); } ?> 色々作業を進めるうちに「null byte 攻撃」や「ディレクトリトラバーサル攻撃」などの言葉が耳に入ってきてセキュリティ的に不安を感じています。 自分なりに調べて上記のようなコーディングをしましたが、果たして問題が無いのか、それとももっとたくさん考えなくてはならないのか、先輩方の意見が聞きたく質問させていただきました。 よろしくお願いしますm( __ __ )m

    • ベストアンサー
    • PHP
  • PHPについて質問です。

    PHP超初心者です。 初めて変数の変更プログラムを作ってみたのですが、 Warningエラーが出て、一部の機能が有効になりません。 henkou.php ↓↓↓↓ <?php $oldpass = $_POST["oldpass"]; $newpass = $_POST["newpass"]; $newpass2 = $_POST["newpass2"]; ?> <html> <head> <title>変数変更テスト</title> <meta name="robots" content="noindex,nofollow"> </head> <body> <form method="post" action="/henkou.php"> 古いパスワード:<input type="password" name="oldpass"><br> 新しいパスワード:<input type="password" name="newpass"><br> 新しいパスワード:<input type="password" name="newpass2"><br> <input type="submit" value="送信"> </form> <?php require "/conf/config.php"; if ("$oldpass != $password") { echo "パスワードが一致しません"; } else { echo "パスワード変更が完了しました。"; $password_file = file("/conf/config.php"); $password_file = str_reprace ("\"$password\" = \"$newpass\""); SaveFile("/conf/config.php"); } ?> </body> </html> config.php ↓↓↓ <?php $password = ""; // 設定前なので空白です ?> エラーは、 Fatal error: require() [function.require]: Failed opening required '/conf/config.php' (include_path='.:/usr/local/lib/php') in /home/***.net/henkou.php on line 21 と、 Warning: require(/conf/config.php) [function.require]: failed to open stream: No such file or directory in /home/***.net/henkou.php on line 21 ここからが本題ですが、 上のプログラムが正しいかどうか、確認していただきたいのです。 また、間違えている部分があったら、ご指導いただければと思います。 どなたか、手助けをお願いします!

    • ベストアンサー
    • PHP
  • PHPでファイルダウンロードの上限

    PHPを使ってファイルをダウンロードするプログラムを書きました。 header()で最後にreadfile()で出力する流れですが、htaccessで 「upload_max_filesize」「post_max_size」「memory_limit」を600Mとしましたが、 PHPでダウンロード出来る容量が約100MB程度しかダウンロード出来ません。 色々と調べましたが原因が分かりません。 お分かりになる方、教えていただけないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのテキストファイルを使った簡素な掲示板

    テキストファイルを使って 簡単な掲示板での書き込み、読み出しのサンプルを練習しています。 書き込み、書き出しは何とかできるようなのですが フォームに何も記入していない状態で送信ボタンを押したり 再読み込みをすると 「さん」の部分だけファイルに書き込まれ、 そして出力されてしまいます。 ------------------------------------------------------------- <div class="obi">このページに関するコメントをどうぞ</div> <div id="form"> <form method="post" action=""> <p><input type="text" name="name">【名前】</br> <textarea name="kakikomi" cols="60" rows="5"></textarea></br> <input type="submit" value="送信"></p> </form> </div> <?php $data = file_get_contents("keiji.txt"); $name = htmlspecialchars(@$_POST["name"]); $kakikomi = htmlspecialchars(@$_POST["kakikomi"]); if(isset($name)){ $name = "$name さん"; $data = '<strong>'.$name.'</strong>&nbsp&nbsp'.$kakikomi.'<hr><p>'.$data.'</p>'; file_put_contents("keiji.txt", $data); echo "<p>$data</p>"; }else{ exit; } ------------------------------------------------------------- フォームに何も記入しなかった場合 テキストファイルになにも書き込みされないようにするには どこを修正したらよいのでしょうか? 難しい構文ではなく初心者でも分かりやすい方法があれば お教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでファイルアップロードがうまくいきません

    PHP初心者なんで宜しくお願い致します。 ファイルアップロードのシステムを作っているんですが どうもうまくいきません。 <form action="<? $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 写真:<input type="file" name="file" size="40" /> <input type="submit" name="new_write" value=" 登録 "> </form> <? if(isset($_POST['new_write'])){ $filename = $_FILES['file']['name']; $updir = "./image/".$filename; if(move_uploaded_file($_FILES['file']['tmp_name'], $updir)){ print "OK"; }else{ print "NG"; } } ?> 上記の記述をしています。 そしてphpinfo()で情報を確認しても file_uploadsはONになっています。 そしてPHPのバージョンは4.4.2です。 単純なことかもしれませんが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPファイルでテキストファイルのデータを編集(読み書き)する方法について

    ホームページ内の部分的な文章をブラウザ上で編集できるようにしたいのです。 その文章をテキストファイルに保存して、PHPファイルから、文章を編集する方法について教えてください。 以下は、ネット上で調べて、設定ファイルを編集するソースを利用させて頂いたものです。 イメージは、これで問題ないのですが、以下の場合、改行が含まれる文章の場合は動作しないのです。 設定ファイルを編集するように作られているので仕方ないのかなと思いますが、改行を含んだ文章も利用できるようになりますでしょうか? ##edit.php <?php $ini = parse_ini_file('config.ini'); if ($HTTP_POST_VARS['data1']) $ini['data1'] = $HTTP_POST_VARS['data1']; if ($HTTP_POST_VARS['data2']) $ini['data2'] = $HTTP_POST_VARS['data2']; if ($HTTP_POST_VARS['data3']) $ini['data3'] = $HTTP_POST_VARS['data3']; $fp = fopen('config.ini', 'w'); foreach ($ini as $k => $i) fputs($fp, "$k=$i\n"); fclose($fp); ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <input type="text" name="data1" value="<?php print $ini['data1'] ?>"><br> data2の変更 - <input type="text" name="data2" value="<?php print $ini['data2'] ?>"><br> data3の変更 - <input type="text" name="data3" value="<?php print $ini['data3'] ?>"><br> <input type="submit" value="送信"> </form> </body> </html> ##config.ini の中身 data1=タイトルです。 data2=サブタイトルです。 data3=本文です。 ↑改行した文章も対応したい。。iniファイルをtxtファイルにしないとだめ?

    • ベストアンサー
    • PHP
  • PHPのファイルアップロード・ダウンロードに関して

    PHPを用いて作成したいプログラムの内容は以下の通りです。 1. htmlフォームよりファイルをアップロード(テキストファイル) 2. アップロードされたファイルの中のデータに対して別のPHPプログラムを実行 3. 2の結果をhtmlにて表示、且つ結果ファイルのダウンロード です。 行き詰まっているのは、htmlから<input type="file">を用いて送信されたファイルはPHPでは$_FILESにそのファイルに関する情報が格納されると思いますが、別のPHPプログラムを実行する際にこのグローバル変数($_FILES)は使用できません。一度、move_uploaded_fileにてどこかのディレクトリに保存したファイルを、fopenなどで読み込んで実行させするしか方法はないでしょうか?すなわち、move_uploaded_fileなしでアップロードファイル内のデータを別のPHPプログラムで実行させる方法はないでしょうか? ダウンロードに関しても同様で、PHPプログラムの実行結果が納められた変数($XXXX)をダウンロードしたい場合、どこかのディレクトリに保存せずにこれをダウンロードさせる方法はないでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう