質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

Q&A

解決済

2回答

4951閲覧

mysqlに接続し、データベースをcsvダウンロードできるphpが動作しません

uep3vjz9wp

総合スコア20

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

0グッド

0クリップ

投稿2018/06/27 06:37

編集2018/06/27 08:11

お世話になります。
phpへリンクを貼った箇所をクリックするとmysqlに接続し、データベースをcsvダウンロードできるものを
作成しておりますが「HTTP ERROR 500」と出て動作しません。ご教示お願いいたします。

php

1<?php 2/* 3 顧客管理データベース csv出力php 4 データベース hikitsugi_db1 5 テーブル  table_hikitsugi 6*/ 7//CSVのファイル名・ヘッダー名を定義 8$file_path = "customer.csv"; 9$export_csv_title = ["ID", "月", "日", "内容", "担当", "カテゴリ", "進行状況"]; 10$export_sql = "SELECT id, month,day,naiyou,tantou,category,shinkou FROM table_hikitsugi"; 11 12//データベースに接続する 13require_once 'db_config.php'; 14$dbh = new PDO('mysql:host=localhost;dbname=hikitsugi_db1;charset=utf8', $user, $pass); 15$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 16$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 17 18// 文字コードをSJIS-winにエンコード 19foreach ($export_csv_title as $key => $val) { 20 $export_header[] = mb_convert_encoding($val, 'SJIS-win', 'UTF-8'); 21} 22 23//CSV書き込み出力 24if (touch($file_path)) { 25 $file = new SplFileObject($file_path, "w"); 26 27 // write csv header 28 $file->fputcsv($export_header); 29 30 // query database 31 $sql = "SELECT * FROM table_hikitsugi"; 32 $stmt = $dbh->query($export_sql); 33 34 // create csv sentences 35 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 36 $file->fputcsv($row); 37 } 38} 39 40// close database connection 41$dbh = null;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/06/27 06:57

回答結果の対応を入れた後のコードで質問内容を更新してください。 少なくとも私の環境では500エラーになるようなエラーは出ていません。
uep3vjz9wp

2018/06/27 07:06

更新完了しました。HTTP ERROR 500 継続中です。
m.ts10806

2018/06/27 07:08

画面にエラーが出ないのであればエラーログを確認してください。
uep3vjz9wp

2018/06/27 08:19

ありがとうございます。フォルダ、ファイルのパミッションを777に変更、エラーログのファイル名、場所も変更したのですが、なぜか何も吐き出されておりません。引き続き確認してみます。環境はwin10にvmwareでcentos7です。 }の位置を修正してからは画面が真っ白になるようになりました。
uep3vjz9wp

2018/06/27 08:38

ありがとうございます。「 Warning: touch(): Unable to create file customer.csv because Permission denied in /var/www/html/phptry/backup.php on line 35 」と表示。この辺探ってみます。
m.ts10806

2018/06/27 08:41

ファイルの権限の問題ですね。やはりtouch()通ってなかったですね・・・。
uep3vjz9wp

2018/06/27 12:46

お世話になりました。ありがとうございました。
guest

回答2

0

ベストアンサー

500エラーはサーバー内部エラーです。
ほとんどの場合がプログラムの構文ミスにより起きます。
例えばEclipseのような高機能エディタでも良いですし、Web上で単体実行確認できるサービス()でもいいです。
構文チェックを自動で行ってくれるものを使いましょう。それだけで実行前に半分以上の問題が解決できます(ロジック的なところでのミスは全体の3割あるかないかだと思っていいです)

ということで
上記EclipseとOnlinePHPEditor両方で確認すると同じエラーが出ていますね。

構文エラー, unexpected 'EOF'

EOFは
end of file

要は終端です。
何かきちんと閉じられていないときに起きやすいです。

フォーマッターを利用してきちんと整形してみると分かりやすいです。

php

1//CSV書き込み出力 2 3if(touch($file_path)){ 4 $file = new SplFileObject($file_path, "w"); 5 6 // write csv header 7 $file->fputcsv($export_header); 8 9 // query database 10 $sql = "SELECT * FROM table_hikitsugi"; 11 $stmt = $dbh->query($export_sql); 12 13 // create csv sentences 14 while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 15 $file->fputcsv($row); 16 17 } 18 19 // close database connection 20 $dbh = null; 21 22 23 ?>

if(touch($file_path)){  の閉じ } がありません。

もちろんこれで「mysqlに接続し、データベースをcsvダウンロード」が正常に動くかどうかは別問題です。
ひとまずコードは綺麗に書きましょう。
閉じ忘れで動かない 良くあることです。

追記を受けて

SplFileObjectを$fileという変数で受けていますが、
質問者さんが閉じられた場所では$fileが宣言されずに使われる可能性があります。
せめて$fileを利用しているところも全て囲ってください。
例:

php

1 2if (touch($file_path)) { 3 $file = new SplFileObject($file_path, 'w'); 4 5 // write csv header 6 $file->fputcsv($export_header); 7 8 // query database 9 $sql = 'SELECT * FROM table_hikitsugi'; 10 $stmt = $dbh->query($export_sql); 11 12 // create csv sentences 13 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 14 $file->fputcsv($row); 15 } 16} //←ifここまで

※というかそもそもif(touch($file_path))がtrueじゃなくfalseになっていてSplFileObject()取得できてないということでは?

あと、異常検知したほうがいいかもしれません。
try-catchを利用してみてください。
※未検証 実装イメージのみで捉えてください。

php

1try{ 2 if (touch($file_path)) { 3 $file = new SplFileObject($file_path, 'w'); 4 5 // write csv header 6 $file->fputcsv($export_header); 7 8 // query database 9 $sql = 'SELECT * FROM table_hikitsugi'; 10 $stmt = $dbh->query($export_sql); 11 12 // create csv sentences 13 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 14 $file->fputcsv($row); 15 } 16 } 17}catch(RuntimeException $e){ 18 echo $e->getMessage(); 19}

エラー / 例外

filename がオープンできない場合、RuntimeException がスローされます。

蛇足:
画面表示を伴わないPHPプログラムであれば最後の?>は必要ありません。
あくまでその後に画面出力を伴うときにのみ利用します。
※今時ほとんどフレームワークにより構築されるので?>を書くことは稀と思います。

投稿2018/06/27 06:48

編集2018/06/27 07:15
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

if(touch($file_path))部分の閉じ括弧が無いような気がします。。。

投稿2018/06/27 06:40

mayoi_maimai

総合スコア1583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uep3vjz9wp

2018/06/27 06:49

早速のご指摘ありがとうございます。 }  を入れて見ましたが HTTP ERROR 500に変化ありません。他のphpへは問題なく飛んでいます。
mayoi_maimai

2018/06/27 07:15 編集

閉じる場所が違いますね。。 以下でどうですか? mts10806さんのアドバイスのようにちゃんと成形すると読みやすくなると思いますよ。 if(touch($file_path)){   $file = new SplFileObject($file_path, "w");   // write csv header   $file->fputcsv($export_header);   // query database   $sql = "SELECT * FROM table_hikitsugi";   $stmt = $dbh->query($export_sql);   // create csv sentences   while($row = $stmt->fetch(PDO::FETCH_ASSOC)){    $file->fputcsv($row);   } } // close database connection $dbh = null;
uep3vjz9wp

2018/06/27 08:23

ありがとうございます。閉じる箇所を再度変更したところ、エラーが出ずに画面が真っ白になるようになりました。今度はtry-catchを実施してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問