※ ChatGPTを利用し、要約された質問です(原文:PHP CSV 出力)
PHPでCSV出力してHTMLが先頭に入ってしまう問題の解決方法
このQ&Aのポイント
PHPで指定したパスに置いてあるCSVを出力する際に、HTMLが先頭に入ってしまう問題が発生しています。HTMLファイルに設置したボタンに対してPHPファイルで処理をしているため、何かおかしい部分がある可能性があります。この問題の解決方法についてご教授いただきたいです。
PHPを使ってCSVファイルを出力する際に、HTMLが先頭に挿入されてしまうという問題が発生しています。HTMLファイルに設置したボタンからPHPファイルを呼び出して処理をしているのですが、どこかに間違いがあるのかもしれません。この問題の原因と解決策について教えてください。
PHPで指定したパスにあるCSVファイルを出力する際に、HTMLが先頭に挿入されてしまうという問題が発生しています。HTMLファイル内でボタンをクリックするとPHPファイルが処理され、CSVファイルが出力される仕組みですが、何かおかしい部分があるようです。この問題の原因と解決方法について教えてください。
失礼します。
現在PHPで指定したパスに置いてあるCSVを出力したいのですが、
CSVは出力できているのですが、HTMLが先頭に入ってしまいます。
htmlファイルに設置したボタンに対して
phpファイルで処理をしています。
どこかおかしい部分があればご教授頂きたいです。
HTMLファイル
<?php $self = $_SERVER["SCRIPT_NAME"]; ?>
<form method='POST' action='<?php $self ?>'>
<input type='submit' value='CSV出力' name='get_csv'>
</form>
PHPファイル
function This_Month(){
$filepath = 'hoge.csv'; //ダウンロードしたいファイルパス
$filename = 'test.csv'; //ダウンロードした際のファイル名
if(!file_exists($filepath)){
die("Error:File(".$filepath.") does not exist");
}
//オープンできるか確認
if(!($fp = fopen($filepath,"r"))) {
die("Error:Cannot open the file(".$filepath.")");
}
fclose($fp);
//ファイルサイズの確認
if(($content_length = filesize($filepath)) == 0){
die("Error:File size is 0.(".$filepath.")");
}
//ファイルの処理方法
header('Content-Disposition: attachement; filename="'.$filename.'"');
//ファイルタイプ指定
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding:binary');
//ファイルサイズ
header('Content-Length: '.filesize($filepath));
mb_convert_encoding($filepath,'utf-8','shift-jis');
readfile($filepath);
exit();
}
//ボタンに合わせて条件を変えていく
if(isset($_POST["get_csv"])){
//ユーザーから来たデータをエスケープする
$csv_output = htmlspecialchars($_POST["get_csv"], ENT_QUOTES, "UTF-8");
switch ($csv_output) {
case "CSV出力": ”This_Month();
break;
default: echo "エラー"; exit;
}
}
お礼
失礼しました。どうやら他に原因があったみたいです。失礼しました。
補足
ご回答ありがとうございます。 はい、phpとhtmlは分けているのでそのようにはなってはいないです。 また、先ほど <?php $self = $_SERVER["SCRIPT_NAME"]; ?> <form method='POST' action='<?php $self ?>'> <input type='submit' value='CSV出力' name='get_csv'> </form> のhtmlファイルの部分を <form method='POST' action='upload-file.php'> <input type='submit' value='CSV出力' name='get_csv'> </form> と直接action部分にphpファイルを指定しましたら、htmlの内容は吐かなく なりました。 しかしA1列だけが文字化けを起こしている状態です。