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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PHP

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

解決済

「名前を付けて保存」の挙動がサーバーによって異なる。

Take_it
Take_it

総合スコア356

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PHP

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

2回答

0リアクション

1クリップ

325閲覧

投稿2022/08/23 09:17

編集2022/08/23 10:41

本番環境とテスト環境の2つのサーバーで、全く同一のPHPを走らせてTCPDFでPDF帳票を出力しています。
サーバーは両方ともConohaのVPSで、イメージ保存→復元で複製したものになります。
(但しドメイン周り、SSLの情報は適宜変更をしています)

テスト環境では、

PHP

$tcpdf->Output('tag.pdf', 'I');

で出力したPDF上で右クリック→ファイル名を付けて保存 で、tag.pdfが問題なく保存できますが、

本番環境ではなぜか、同様に保存しようとすると tag.php(PDFを書き出しさせてるPHPのファイル名)の保存になってしまいます。
なお保存されたファイルを開いてみると.phpの中身ではなく、同スクリプトでPOST値がない場合に出力しているHTMLでした。

なおPDFの表示自体は本番環境でも問題なくブラウザ上でできており、印刷にも支障ありません。

原因がわからず困惑しております。。お知恵をお貸し下さい。

テスト環境側のサーバーでは正常にpdfが保存できます

本番環境では保存ができません。

以下、コード全文です。

PHP

<?php //---自作関数集 require_once __DIR__ .'/lib/function.php'; //---基礎設定ファイル require_once __DIR__ .'/lib/config.php'; if($_SESSION['login']['veryfy'] == true): if($_POST): if($_POST['数量']<=0): echo "<script>window.close();</script>";//新規タブで開いているので、有効な値がない場合はタブを閉じる exit; endif; $i=1; $row = 1; $col = 1; $p = 1; $i = 1; $pages = 0; $remain = $_POST['数量']; while($remain>0): if($remain>=$_POST['入数']): $data[$p][$row][$col]['page'] = $i; $data[$p][$row][$col]['入数'] = $_POST['入数']; else://最終ページ $data[$p][$row][$col]['page'] = $i; $data[$p][$row][$col]['入数'] = $remain; endif; $remain -=$data[$p][$row][$col]['入数']; ++$i; ++$pages; ++$col; if($col==3): $col = 1; ++$row; endif; if($row==5 AND $remain>=1): $row = 1; ++$p; endif; endwhile; if($col==2): $data[$p][$row][$col]['page'] = 'End'; endif; require_once __DIR__ .'/libs/tcpdf/tcpdf.php'; $tcpdf = new TCPDF(); $tcpdf->setPrintHeader(false); $tcpdf->setPrintFooter(false); $tcpdf->SetTitle($config['sys_name'].' 現品票'); $tcpdf->SetAuthor($config['sys_name']); $line_style = array(); $line_style['width'] = 0.2; foreach($data as $page_num=>$pagedata): $x = 5; $y = 5; $tcpdf->AddPage(); $tcpdf->SetAutoPageBreak(true, 5); $tcpdf->SetFont("kozgopromedium", "", 8); foreach($pagedata as $row_num=>$row): foreach($row as $col_num=>$tag): if($tag['page']!='End'): if($col_num==2): $x = $x+95+10; endif; //外枠 $tcpdf->SetXY($x,$y,true); $tcpdf->cell(95,64.25,'',1); //現品票 $tcpdf->SetXY($x,$y,true); $tcpdf->cell(23.75,22.5,'',1,0,'C',false,'',1,false,'T','T'); $tcpdf->SetXY($x,$y+1,true); $tcpdf->cell(23.75,20.5,'現品票',0,0,'C',false,'',1,false,'T','T'); //品名 $tcpdf->SetXY($x+23.75,$y,true); $tcpdf->cell(11.875,12.5,'品 名',1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetXY($x+23.75+11.875,$y,true); $tcpdf->SetFont("kozgopromedium", "", 25); $tcpdf->cell(59.375,12.5,$_POST['機種名'],1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetFont("kozgopromedium", "", 8); //品番 $tcpdf->SetXY($x+23.75,$y+12.5,true); $tcpdf->cell(11.875,10,'品 番',1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetXY($x+23.75+11.875,$y+12.5,true); $tcpdf->SetFont("kozgopromedium", "", 22); $tcpdf->cell(59.375,10,$_POST['品目コード'],1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetFont("kozgopromedium", "", 8); //製造日 $tcpdf->SetXY($x,$y+22.5,true); $tcpdf->cell(11.875,10,'製造日',1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetXY($x+11.875,$y+22.5,true); $tcpdf->cell(35.625,10,'',1,0,'C',false,'',1,false,'T','M'); //No $tcpdf->SetXY($x+47.5,$y+22.5,true); $tcpdf->cell(11.875,10,'',1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetXY($x+49,$y+22.5,true); $tcpdf->cell(10.375,10,'No.',0,0,'C',false,'',1,false,'T','M'); $tcpdf->SetXY($x+47.5+11.875,$y+22.5,true); $tcpdf->SetFont("kozgopromedium", "", 22.5); $tcpdf->cell(20,10,$tag['page'],'B',0,'R',false,'',1,false,'T','M'); $tcpdf->SetFont("kozgopromedium", "", 10); $tcpdf->SetXY($x+47.5+11.875+20,$y+22.5,true); $tcpdf->cell(15.625,10,'','B',0,'L',false,'',1,false,'T','M'); $tcpdf->SetXY($x+47.5+11.875+20,$y+22.5+4,true); $tcpdf->cell(15.625,4,'/'.$pages,0,0,'L',false,'',1,false,'T','M'); $tcpdf->SetFont("kozgopromedium", "", 8); //ハコガエ $tcpdf->SetXY($x,$y+32.5,true); $tcpdf->cell(23.75,5,'ハコガエ',1,0,'C',false,'',1,false,'T','M'); //検査 $tcpdf->SetXY($x+23.75,$y+32.5,true); $tcpdf->cell(23.75,5,'検 査',1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetXY($x+23.75,$y+37.5,true); $tcpdf->cell(23.75,19.75,'',1,0,'C',false,'',1,false,'T','M'); //入数 $tcpdf->SetXY($x+23.75+23.75,$y+32.5,true); $tcpdf->cell(23.75,5,'入 数',1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetXY($x+23.75+23.75,$y+37.5,true); $tcpdf->SetFont("kozgopromedium", "", 32); $tcpdf->cell(23.75,19.75,$tag['入数'],1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetFont("kozgopromedium", "", 8); $tcpdf->SetXY($x+23.75+23.75,$y+37.5,true); $tcpdf->cell(23.75,19,'/'.$_POST['入数'],0,0,'R',false,'',1,false,'T','B'); //備考 $tcpdf->SetXY($x+23.75+23.75+23.75,$y+32.5,true); $tcpdf->cell(23.75,5,'備 考',1,0,'C',false,'',1,false,'T','M'); $tcpdf->SetXY($x+23.75+23.75+23.75,$y+37.5,true); $tcpdf->cell(23.75,19.75,'',1,0,'C',false,'',1,false,'T','M'); //材料名 $tcpdf->SetXY($x+23.75,$y+57.25,true); $tcpdf->cell(71.25,7,'材料名:',1,0,'L',false,'',1,false,'T','M'); $x = 5; endif; endforeach; $y = $y + 64.25 + 10; endforeach; endforeach; $tcpdf->Output('tag.pdf', 'I');//生成したPDFをブラウザ上で表示させる exit; endif; $line_list = get_line_list($config); foreach($line_list as $sort=>$val): $line_code = $val['code']; $data[$sort] = get_product_list($line_code); endforeach; $smarty->assign('msg',$msg); $smarty->assign('line_list',$line_list); $smarty->assign('auth',$_SESSION['login']['auth']); $smarty->assign('data',$data); $smarty->display('tag.html'); else: $smarty->display('index.html'); endif; exit; ?>

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

退会済みユーザー

退会済みユーザー

2022/08/23 09:50

ダウンロードする場面は、pdf出力phpへのリンクになっているんでしょうか?
m.ts10806

2022/08/23 10:15

コードは一部過ぎると全体見えないので、 流れが分かる程度には提示してもらった方が良いです。 あと、開発環境と本番環境の設定などの違いも調べた方が良いかと。
Take_it

2022/08/23 10:58

>開発環境と本番環境の設定などの違い 目からうろこでしたが、本番環境は上位ディレクトリを含めて全体がPWA化していました。 テスト環境も本番環境と同様にserviceworker.jsを設置したところ、同じ挙動になったので、これが原因と見て間違いなさそうです。 serviceworker.jsで特定のディレクトリを除外することってできるのでしょうか? 無理そうならディレクトリ構造を変えるしかないかなと思っていますが・・・

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PHP

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