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

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

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

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

3352閲覧

s ダウンロードボタンを押下したあとCSVをダウンロードできない

nabex

総合スコア66

CSV

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2016/07/28 05:24

編集2016/07/28 07:11

画面からダウンロードボタンを押下後、業務テーブルからSELECTでファイル名とパスを取得し、winscpにあるファイルをダウンロードさせる機能を実装させたいのですが、ダウンロードできない状態です。

ダウンロードしたいファイルはもちろんwinscpに置いてあります。

print_r($filename);のデバック部分で業務テーブルからファイル名とパスを取れていることと、
winscpから取得するために置いてあるファイル名とパスが業務テーブルにあるパスとファイル名と一致していることも確認済みです。

ファイル名とパスは業務テーブルから取れていて、winscpにも間違いなく指定のパスとファイル名となっていて取得するファイルが存在しているのにかかわらず、ダウンロードボタンを押下すると、ファイルが存在しません と表示されてダウンロード出来ません。

executeDownloadCheckの関数の部分でファイル名とパスを取得したあとreturnでjsonを返している部分が原因のような気がするのですが、具体的な改善方法がわかりません。どなたか教えてください。

lang

1<input id="dl_rireki_seqno[0]" class=" prts_btn_m" type="button" 2tabindex="" onclick="click_download_button({'dl_rireki_seqno':'267','dl_rireki_cdate':'20160728'});" value="ダウンロード" 3name="dl_rireki_seqno[0]">

lang

1/* 2CSV出力ボタン 3*/ 4function click_download_button(obj) 5{//console.log(obj); 6 7 //clearShw(); // Confirmウィンドウを閉じる 8 9 var dl_rireki_cdate = obj.dl_rireki_cdate; 10 var dl_rireki_seqno = obj.dl_rireki_seqno; 11 12 var postArray = new Object(); 13 postArray['dl_rireki_cdate'] = dl_rireki_cdate; 14 postArray['dl_rireki_seqno'] = dl_rireki_seqno; 15 16 $("dl_rireki_cdate").value = dl_rireki_cdate; 17 $("dl_rireki_seqno").value = dl_rireki_seqno; 18 19 var postJson = com_toJSONString(postArray); 20 //var postJson = JSON.stringify(postArray); 21 //console.log(postJson); 22 var url = $('base').value; 23 url += '/apedi3u120/DownloadCheck'; 24 25 // Ajaxを呼び出す (同期) 26 var ajax = new Ajax.Request( 27 url, 28 { 29 method : 'post', 30 //postBody : 'json=' + postJson, 31 postBody : 'param=' + postJson, 32 asynchronous : false, 33 onLoading : openLoadingWin(com_getMsg({'msgid':'IZ00005', 34 'msglist':comMsg})), 35 onSuccess : fileExistsSuccess, 36 onFailure : fileExistsFailure, 37 onException : fileExistsException 38 } 39 );

lang

1public function executeDownloadCheck() 2 { 3 $this->modelobj = new apedi3u120EntryModel($this->comobj); 4 //$json = json_decode($this->req); 5 6 $param = json_decode($this->req['param'], true); 7 //document.write($param); 8 $result = $this->modelobj->downloadCheck($this, $param['dl_rireki_seqno'], $param['dl_rireki_cdate']); 9 10 $this->output = json_encode($result); 11 12 return 'JSON'; 13 } 14}

lang

1 2 public function downloadCheck($actobj, $seqno, $crtdt) { 3 $this->actobj = $actobj; 4 5 $tblDlRirekiObj = new tblDlRirekiModel($this->comobj); 6 7 $param = $tblDlRirekiObj->getDetail( 8 array('dl_rireki_cdate' => $crtdt, 'dl_rireki_seqno' => $seqno), array('file_name', 'dl_kaisu', 'dl_rireki_cdate', 'dl_rireki_seqno', 'gyomu_kbn') 9 ); 10 11 //print_r($param); 12 // 業務テーブルから保存パスを取得 13 $gyomKbnObj = new gymModel($this->comobj); 14 $gyomParam = $gyomKbnObj->getDetailData(array('gymux' => $param['gyomu_kbn']), array('rireki_shokai_url')); 15 //print_r($gyomParam); 16 $dirname = DEF_BASE_ROOT_DATADIR . $gyomParam['rireki_shokai_url']; 17 $filename = $dirname . $param['file_name']; 18 print_r($filename); 19 if (!file_exists($filename)) { 20 return false; 21 } 22 23 return $filename; 24 }

lang

1protected function getDetail($p_parm, $p_columns = null) 2 { 3 // リクエストチェック 4 if (trim($p_parm['gymux']) == '') { 5 $this->setErrorInfo("EZ00005"); 6 return $this->getResult('result'); 7 } 8 9 $condition = array(); 10 $conditioncnt = 1; 11 12 $where = ''; 13 /* 2015/11/27 g.shimada update-start */ 14 $sql = " 15 SELECT 16 {$this->getCheckedColums($p_columns)} 17 FROM 18 mst_gyomu_kbn 19 WHERE 20 del_flg <> '1' AND 21 gyomu_kbn_cd = \${$conditioncnt} 22 $where 23 "; 24 /* 2015/11/27 g.shimada update-end */ 25 $condition[] = $p_parm['gymux']; 26 //echo "<pre>$sql</pre>"; 27 28 $result = $this->getOneRecordFromSql($sql, $condition); 29 // 該当データなし(チェック失敗) 30 if (!is_array($result)) { 31 $this->setErrorInfo("WZ00003"); 32 33 return $this->getResult('result'); 34 } 35 36 // 該当データあり 37 $result['status'] = true; 38 $result['msgid'] = ""; 39 $this->setResult('result', $result); 40 return $result; 41 }

lang

1 2function fileExistsSuccess(httpObj) 3{ 4 clearShw(); // Confirmウィンドウを閉じる 5 var dl_rireki_cdate = $("dl_rireki_cdate").value; 6 var dl_rireki_seqno = $("dl_rireki_seqno").value; 7 8 if(dl_rireki_cdate==0 && dl_rireki_seqno == '' ){ 9 clearShw(); // Confirmウィンドウを閉じる 10 //SHWcfmobj.close(); 11 12 setCfmobjFailure('E0083'); // 対象データがありません。 13 return false; 14 } 15 16 // リターンパラメータチェック 17 var jsonRetVal = httpObj.responseText; 18 19 //document(jsonRetVal); 20 if(!jsonRetVal){ 21 clearShw(); // Confirmウィンドウを閉じる 22 //SHWcfmobj.close(); 23 24 setCfmobjFailure('E0003'); // 処理が失敗しました 25 return false; 26 }if(jsonRetVal == 'true'){ 27 var form = document.forms['form_csv1']; 28 29 30 var length = form.children.length; 31 for (var i = 0; i < length; i++) { 32 form.removeChild(form.children[0]); 33 } 34 35 var clone = document.forms['form1'].children; 36 for (var i = 0; i < clone.length; i++) { 37 var newobj = clone[i].cloneNode(true); 38 form.appendChild(newobj); 39 setCloneValue(newobj, clone[i]); 40 } 41 42 var p_filename = $("param").value; 43 var p_action = $("p_action").value; 44 //var filename = $("p_filename").value; 45 46 var p_base = '/abl/apedi.php'; 47 var url = p_base + '/apedi3u120/' + p_action + '?param='+p_filename ; 48 49 //var ret = window.open(url, '_blank', COMDEF.DEF_WINDOW_OPTIONS); 50 51 form.module.value = "apedi3u120"; 52 form.action.value = "list"; 53 form.submit(); 54 }else{ 55 alert("ファイルが存在しません。"); 56 return; 57 } 58}

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

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

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

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

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

guest

回答1

0

ベストアンサー

ちょっと情報が多いような気がします

$filenameで存在するファイルを指定しているはずなのに
直後のfile_exists($filename)でファイルがないと判断されるということでしょうか?
まさかと思いますが日本語ファイル名など使っていないですよね?

投稿2016/07/28 05:30

yambejp

総合スコア114779

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

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

nabex

2016/07/28 05:34

ファイル名は日本語ではありません。trueで返ってきているのでfile_exists($filename)でfalseとなっていないと思います。
yambejp

2016/07/28 05:41

読み方が違ったらごめんなさい downloadCheckで戻ってくる$resultは存在の有無ですよね? それを json_encode($result)して何か出力しているのでしょうか?
nabex

2016/07/28 05:47

そうですね。function json_encode ($value, $options = 0, $depth = 512) {} とあるので、JSON 形式にして返してますね。
yambejp

2016/07/28 06:07

あれ?ちがうのかな? $resultに入っているのはtrueかfalseですよね? それでデータが取得できるのでしょうか?
nabex

2016/07/28 06:24

なるほど、そうですね!つまり、downloadCheck関数でテーブルからファイル名とパスを取得したのにreturnでtrueかfalseにしか返してないのが原因ですね。 そこの返り値でファイル名とパスを返すようにすれば良いということですか?
yambejp

2016/07/28 06:47

あとは実装しだいだと思いますが 適当なheaderを吐いたあと、file_get_contents($filename) したデータをreturnするとかですかね?
nabex

2016/07/28 07:05

ファイルの中身は空の状態でもとりあえずダウンロードできればOKですね。 何度かデバックをかけたのですがパスが2回取得できている状態になっていてまだダウンロードできていない状態ですね。 例えばC:\work\sample/test/a20160728114457.txt というパスだったらC:\work\sample/testC:\work\sample/test/a20160728114457.txt となっていてそれが原因で取得できてないと思われます。
nabex

2016/07/28 09:33

yambejpさん retuenの部分は気がつかなかったので教えていただいてありがとうございました。 こちらでもよく見直してみます。
nabex

2016/07/28 11:08

結局returnの部分をtrueからファイル名を持ってきている変数に変えたのがきっかけとなり無事に解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問