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

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

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

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

Q&A

解決済

2回答

1172閲覧

処理実行中の間だけメッセージを表示させたい

mokemoke

総合スコア52

PHP

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

0グッド

0クリップ

投稿2018/09/05 05:53

編集2018/09/05 08:31

データベースからデータを取り込み、PhpSpreadsheetを利用してエクセルのテンプレートを読み込み、
取込んだデータをセルにセットしてダウンロードする処理を作りました。
お客様からの要望で、利用環境により処理時間に差が出る事から、処理実行中の間、メッセージを
表示して下さいとの事で、単純に処理の先頭でメッセージを表示するよう見直ししましたが、
メッセージが表示されません。
PHPで初めて処理を組んでいるので、何か原因なのか判らない状況です。
アドバイス等を頂けると非常に助かりますので、よろしくお願い致します。

PHPのバージョンは、5.6.37、ブラウザはIE、Firefox、Google Chromeです。

PHP

1<?php 2 ini_set('display_errors', 1); 3 error_reporting(E_ALL | E_STRICT); 4 5 $bukken = '98765'; 6 $uketsuke = '12345'; 7 $shinsei = 'テスト 太郎'; 8 $kaisya1 = 'テスト建設株式会社'; 9 $kaisya2 = 'テスト施工株式会社'; 10 $sagyou = '2018-08-03 00:00:00'; 11 $syoriflg = '1'; 12 13 function nippou_all($uketsuke_no1, $kaoku_no1, $shinsei_no1, $ichiji_no1, $niji_no1) { 14 global $conn; 15 global $link; 16 global $reader; 17 global $book; 18 19 $sql = ""; 20 $sql .= "SELECT * FROM 日報;"; 21 22 $result = pg_query($link, $sql); 23 24 if (!$result) { 25 die('クエリーが失敗しました。'.pg_last_error()); 26 } 27 28 $cnt = pg_numrows($result); 29 30 for ($i = 0; $i < $cnt; $i++) { 31 $row = pg_fetch_array($result, NULL, PGSQL_NUM); 32 $book->setActiveSheetIndex(0); 33 $sheet = $book->getActiveSheet(); 34 35 $clonedWorksheet = clone $book->getSheetByName('Daily_Format'); 36 $clonedWorksheet->setTitle('Daily_'.date('Y年m月d日', strtotime(date($row[2])))); 37 $book->addSheet($clonedWorksheet); 38 39 $sheetIndex = $book->getIndex($book->getSheetByName('Daily_'.date('Y年m月d日', strtotime(date($row[2]))))); 40 41 $book->setActiveSheetIndex($sheetIndex); 42 $sheet = $book->getActiveSheet(); 43 44 if (is_null($niji_no1)) { 45 $sheet->setCellValue('C2', $ichiji_no1); 46 } else { 47 $sheet->setCellValue('C2', $ichiji_no1.'('.$niji_no1.')'); 48 } 49 $sheet->setCellValue('C4', $kaoku_no1); 50 $sheet->setCellValue('H4', $shinsei_no1); 51 $sheet->setCellValue('C5', $uketsuke_no1); 52 $sheet->setCellValue('K5', date('Y/m/d', strtotime(date($row[2])))); 53 $sheet->getStyle("K5")->getNumberFormat()->setFormatCode('"日付:"gggyy"年"mm"月"dd"日("aaa"曜日)"'); 54 $sheet->setCellValue('B9', $row[5]); 55 $sheet->setCellValue('B10', $row[6]); 56 $sheet->setCellValue('B11', $row[7]); 57 $sheet->setCellValue('B12', $row[8]); 58 $sheet->setCellValue('B13', $row[9]); 59 $sheet->setCellValue('B14', $row[10]); 60 $sheet->setCellValue('B15', $row[11]); 61 $sheet->setCellValue('H9', $row[12]); 62 $sheet->setCellValue('H10', $row[13]); 63 $sheet->setCellValue('H11', $row[14]); 64 $sheet->setCellValue('H12', $row[15]); 65 $sheet->setCellValue('H13', $row[16]); 66 $sheet->setCellValue('N9', $row[17]); 67 $sheet->setCellValue('N10', $row[18]); 68 $sheet->setCellValue('N11', $row[19]); 69 $sheet->setCellValue('N12', $row[20]); 70 $sheet->setCellValue('E18', $row[21]); 71 $sheet->setCellValue('E19', $row[22]); 72 $sheet->setCellValue('E20', $row[23]); 73 $sheet->setCellValue('E21', $row[24]); 74 $sheet->setCellValue('N18', $row[25]); 75 $sheet->setCellValue('N19', $row[26]); 76 $sheet->setCellValue('N20', $row[27]); 77 $sheet->setCellValue('N21', $row[28]); 78 $sheet->setCellValue('E28', $row[38]); 79 $sheet->setCellValue('F28', $row[39]); 80 $sheet->setCellValue('E29', $row[40]); 81 $sheet->setCellValue('F29', $row[41]); 82 $sheet->setCellValue('E30', $row[42]); 83 $sheet->setCellValue('F30', $row[43]); 84 $sheet->setCellValue('E31', $row[44]); 85 $sheet->setCellValue('F31', $row[45]); 86 $sheet->setCellValue('E32', $row[46]); 87 $sheet->setCellValue('F32', $row[47]); 88 $sheet->setCellValue('E33', $row[48]); 89 $sheet->setCellValue('F33', $row[49]); 90 $sheet->setCellValue('E34', $row[50]); 91 $sheet->setCellValue('F34', $row[51]); 92 $sheet->setCellValue('E35', $row[52]); 93 $sheet->setCellValue('F35', $row[53]); 94 $sheet->setCellValue('E36', $row[54]); 95 $sheet->setCellValue('F36', $row[55]); 96 $sheet->setCellValue('E37', $row[56]); 97 $sheet->setCellValue('F37', $row[57]); 98 $sheet->setCellValue('E38', $row[58]); 99 $sheet->setCellValue('F38', $row[59]); 100 $sheet->setCellValue('K28', $row[60]); 101 $sheet->setCellValue('K29', $row[61]); 102 $sheet->setCellValue('K30', $row[62]); 103 $sheet->setCellValue('K31', $row[63]); 104 $sheet->setCellValue('K32', $row[64]); 105 $sheet->setCellValue('K33', $row[65]); 106 $sheet->setCellValue('K34', $row[66]); 107 $sheet->setCellValue('K35', $row[67]); 108 $sheet->setCellValue('K36', $row[68]); 109 $sheet->setCellValue('P28', $row[69]); 110 $sheet->setCellValue('P29', $row[70]); 111 $sheet->setCellValue('P30', $row[71]); 112 $sheet->setCellValue('P31', $row[72]); 113 $sheet->setCellValue('P32', $row[73]); 114 $sheet->setCellValue('P33', $row[74]); 115 $sheet->setCellValue('P34', $row[75]); 116 $sheet->setCellValue('P35', $row[76]); 117 $sheet->setCellValue('P36', $row[77]); 118 $sheet->setCellValue('H42', $row[78]); 119 $sheet->setCellValue('H43', $row[79]); 120 $sheet->setCellValue('H44', $row[80]); 121 $sheet->setCellValue('P42', $row[81]); 122 $sheet->setCellValue('P43', $row[82]); 123 $sheet->setCellValue('P44', $row[83]); 124 $sheet->setCellValue('T9', $rui01); 125 $sheet->setCellValue('T10', $rui02); 126 $sheet->setCellValue('T11', $rui03); 127 $sheet->setCellValue('T12', $rui04); 128 $sheet->setCellValue('T13', $rui05); 129 $sheet->setCellValue('V9', $rui06); 130 $sheet->setCellValue('V10', $rui07); 131 $sheet->setCellValue('V11', $rui08); 132 $sheet->setCellValue('V12', $rui09); 133 $sheet->setCellValue('T18', $rui10); 134 $sheet->setCellValue('T19', $rui11); 135 $sheet->setCellValue('T20', $rui12); 136 $sheet->setCellValue('T21', $rui13); 137 $sheet->setCellValue('V18', $rui14); 138 $sheet->setCellValue('V19', $rui15); 139 $sheet->setCellValue('V20', $rui16); 140 $sheet->setCellValue('V21', $rui17); 141 142 $rui01 = $rui01 + $row[12]; 143 $rui02 = $rui02 + $row[13]; 144 $rui03 = $rui03 + $row[14]; 145 $rui04 = $rui04 + $row[15]; 146 $rui05 = $rui05 + $row[16]; 147 $rui06 = $rui06 + $row[17]; 148 $rui07 = $rui07 + $row[18]; 149 $rui08 = $rui08 + $row[19]; 150 $rui09 = $rui09 + $row[20]; 151 $rui10 = $rui10 + $row[21]; 152 $rui11 = $rui11 + $row[22]; 153 $rui12 = $rui12 + $row[22]; 154 $rui13 = $rui13 + $row[22]; 155 $rui14 = $rui14 + $row[23]; 156 $rui15 = $rui15 + $row[24]; 157 $rui16 = $rui16 + $row[25]; 158 $rui17 = $rui17 + $row[26]; 159 } 160 } 161 162 // 処理開始メッセージ 163 echo 'エクセル出力中です。しばらくお待ちください。'; 164 165 $conn = "host=localhost port=5432 dbname=postgres user=postgres password=hearts8411"; 166 $link = pg_connect($conn); 167 if (!$link) { 168 die('接続失敗です。'.pg_last_error()); 169 } 170 171 // PhpSpreadsheet読み込み 172 require_once 'c:\windows\system32\vendor\autoload.php'; 173 174 $reader = new PhpOffice\PhpSpreadsheet\Reader\Xlsx(); 175 $reader->setIncludeCharts(TRUE); 176 177 $book = $reader->load('nippou_template.xlsx'); 178 179 if ($処理情報['処理フラグ'] == '0') { 180 $dlfile = "日報・月報・総計_物件番号(".$bukken.")".date('Y年m月d日')."現在.xlsx"; 181 182 nippou_all($uketsuke, $bukken, $shinsei, $kaisya1, $kaisya2); 183 184 } 185 186 $close_flag = pg_close($link); 187 188 if (!$close_flag){ 189 print('切断に失敗しました。<br>'); 190 } 191 192 header("Content-Description: File Transfer"); 193 header('Content-Disposition: attachment; filename="'.$dlfile.'"'); 194 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 195 header('Content-Transfer-Encoding: binary'); 196 header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 197 header('Expires: 0'); 198 ob_end_clean(); //バッファ消去 199 $writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($book); 200 $writer->save('php://output'); 201 202?>

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

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

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

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

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

CHERRY

2018/09/05 08:25

PHP のバージョンと Web ブラウザは何ですか?
mokemoke

2018/09/05 08:29

PHPのバージョンは、5.6.37、ブラウザはIE、Firefox、Google Chromeです。
guest

回答2

0

ベストアンサー

php

1echo '出力したい文字列'; 2ob_flush(); 3flush(); 4 5// 処理

としてみてはどうでしょうか。

投稿2018/09/05 08:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mokemoke

2018/09/05 09:05

voeさん、こんにちは。 アドバイス頂いたコードで試してみたところ、上手く表示されました。 ありがとうございました。
mokemoke

2018/09/06 06:39

voeさん、こんにちは。 メッセージ自体は上手く表示出来たのですが、ダンウンードが正常に行われませんでした。 色々調べたところ、HTTPヘッダーの前にHTML等でメッセージ等を表示した場合、正常に 動作しない(メッセージを表示した時点でHTTPヘッダーが送られてしまう為)との事でした。 今回の様な処理の場合、処理中に何かメッセージを表示させる事は出来るのでしょうか?
退会済みユーザー

退会済みユーザー

2018/09/07 01:49

その場合はPHPのみでは無理だと思います。 JavaScriptでメッセージを出すなどが必要になると思います。
mokemoke

2018/09/07 01:54

voeさん、こんにちは。 アドバイス有難う御座います。 JavaScriptでメッセージを表示させる方法を考えます。 ありがとうございました。
guest

0

環境の詳細がわからないのですが、PHPのバッファリングでしょうか? (デフォルトは、0 だったような...)

プログラムの先頭で、

ini_set("output_buffering", 0);

したら、状況は変わるでしょうか?

投稿2018/09/05 08:09

CHERRY

総合スコア25171

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

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

mokemoke

2018/09/05 08:20

CHERRYさん、こんにちは。 アドバイス頂いたコードを追加して試してみましたが、状況は変わらずでした。 他に何か御座いましたら、アドバイスお待ちしております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問