質問: null; ```
回答: 500エラーはサーバー内部エラーです。 ほとんどの場合がプログラムの構文ミスにより起きます。 例えばEclipseのような高機能エディタでも良いですし、Web上で単体実行確認できるサービス(例)でもいいです。 構文チェックを自動で行ってくれるものを使いましょう。それだけで実行前に半分以上の問題が解決できます(ロジック的なところでのミスは全体の3割あるかないかだと思っていいです) ということで 上記EclipseとOnlinePHPEditor両方で確認すると同じエラーが出ていますね。 **構文エラー, unexpected 'EOF'** EOFは end of file 要は終端です。 何かきちんと閉じられていないときに起きやすいです。 フォーマッターを利用してきちんと整形してみると分かりやすいです。 ``` //CSV書き込み出力 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; ?> ``` if(touch($file_path)){ の閉じ } がありません。 もちろんこれで「mysqlに接続し、データベースをcsvダウンロード」が正常に動くかどうかは別問題です。 ひとまずコードは綺麗に書きましょう。 閉じ忘れで動かない 良くあることです。 追記を受けて ======= SplFileObjectを$fileという変数で受けていますが、 質問者さんが閉じられた場所では$fileが宣言されずに使われる可能性があります。 せめて$fileを利用しているところも全て囲ってください。 例: ``` 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); } } //←ifここまで ``` ※というかそもそもif(touch($file_path))がtrueじゃなくfalseになっていてSplFileObject()取得できてないということでは? あと、異常検知したほうがいいかもしれません。 try-catchを利用してみてください。 ※未検証 実装イメージのみで捉えてください。 ``` try{ 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); } } }catch(RuntimeException $e){ echo $e->getMessage(); } ``` * SplFileObject::__construct > > エラー / 例外 > > filename がオープンできない場合、RuntimeException がスローされます。 > > > 蛇足: 画面表示を伴わないPHPプログラムであれば最後の?>は必要ありません。 あくまでその後に画面出力を伴うときにのみ利用します。 ※今時ほとんどフレームワークにより構築されるので?>を書くことは稀と思います。 * モダンPHPアンチパターン#ファイルの最後に?>を書く