閲覧ありがとうございます。
現在、X-SERVERの共有SSL環境下でCSVダウンロードをすることができず困っております。
ダウンロードダイアログは出るのですが、ダウンロードしたファイルサイズが0バイトになってしまっている状態です。
ちなみに通常のhttp環境下では正常にCSVダウンロードができているため、SSLもしくは共有SSLが原因だと思っております。
どなたか原因お分かりになる方いましたらご教授頂ければと思います。
ちなみにFF32.0.2で検証していて、CSVダウンロードのレスポンスヘッダーは以下になっております。
----------
HTTP/1.1 200 OK
Date: Mon, 22 Sep 2014 15:23:01 GMT
Server: Apache
Cache-Control: public
Pragma: public
Content-Disposition: attachment; filename="reservations_20140923002302.csv"
Last-Modified: Mon, 22 Sep 2014 15:23:02 GMT
Content-Length: 8132;
Content-Type: application/octet-stream
Set-Cookie: RESERVEADMIN=deleted; expires=Sun, 22-Sep-2013 15:23:00 GMT; path=/
Set-Cookie: RESERVEADMIN=4ivlg2psk6flprpfeiilb2i6raq5v17d; path=/; secure; HttpOnly
Connection: close
----------
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>通常のhttp環境下では正常にCSVダウンロードができている
これはX-SEVERのPHPから何らかの関数で外部サーバーにhttpsで接続すると
データが受け取れないということですね?
当該のX-SEVER上のクライアントになるブラウザからならダウンロードできる
のでしょうか?
ファイアウォールかプロクシの問題のような気がしますが
PHPの関数はなにを利用していますか?
この回答への補足
ご回答ありがとうございます。
http://abc.com/csv.phpがCSVダウンロードを行うURLだったとします。
これをX-SERVERの共有SSLを設定すると、URLは以下になります。
https://abc-com.ssl.xserver.jp/csv.php
httpの方では正常にCSVダウンロードできるのですが、httpsの方だとダウンロードしたファイルサイズが0バイトになってしまいます。
httpsでCSVダウンロードする際、ダウンロードダイアログにはファイルサイズ8kbみたいな感じで空じゃないのが確認できているのですが、実際にダウンロードしたファイルは0バイト・・
ブラウザがキャッシュできてないのでしょうか?
> PHPの関数はなにを利用していますか?
CSVダウンロード自体は特に外部サーバに接続などはしておらず、DBから取得したデータをカンマ区切りの文字列に整形して標準出力しているだけです。
検索しても、
IE+SSL環境下だとCSVダウンロードがうまくいかないためキャッシュヘッダーを出力すればいい
という記事はよく見かけますが、キャッシュヘッダーは既に出力してますし、X-SERVERに問合せしてもとんちんかんな回答が返ってきて途方に暮れております。
一応該当部分のソース記載してみます。
cakephpで実装していますので、Modelからのデータ取得部分などcakephp特有の記述が入っております。
----- CSVダウンロードを行うアクションの該当部分 -----
$reservations = $this->Reservation->find(
'all',
array(
'contain' => array('ReservationReason', 'Event', 'Area', 'Pref'),
'conditions' => $conditions,
)
);
$result = '';
$csvData = array();
$csvData[] = implode(',', $this->convertCsv($csvHeader));
$filename = 'reservations_'. date('YmdHis') . '.csv';
foreach ($reservations as $v) {
$reason = array();
foreach ((array)$v['ReservationReason'] as $vv) {
$reason[] = $this->selectionConfig['reason'][$vv['reason_id']];
}
$row = array(
$v['Reservation']['id'],
$v['Reservation']['email'],
$this->selectionConfig['sex'][$v['Reservation']['sex']],
$v['Reservation']['name_last'],
$v['Reservation']['name_first'],
$v['Reservation']['birthday'],
$v['Reservation']['age'],
$v['Area']['name'],
$v['Pref']['name'],
$v['Reservation']['tel'],
implode("\n", $reason),
$v['Reservation']['reason_other'],
$this->selectionConfig['melmaga'][$v['Reservation']['melmaga']],
preg_replace("/\r\n|\r/is", "\n", $v['Reservation']['comment']),
$v['Reservation']['created'],
$this->selectionConfig['is_status'][$v['Reservation']['is_status']],
sprintf(
'%s %s %s',
date('n/j', strtotime($v['Event']['open_date'])),
$v['Event']['open_time'],
$v['Event']['meeting_place']
),
);
$csvData[] = implode(',', $this->convertCsv($row));
}
$result = mb_convert_encoding(implode("\r\n", $csvData), 'sjis-win', mb_internal_encoding());
$this->cacheHeader();
$this->attachmentHeader(
$filename,
strlen($result)
);
echo $result;
exit;
----- /CSVダウンロードを行うアクションの該当部分 -----
protected function convertCsv($value)
{
if (is_array($value)) {
$value = array_map(array($this, 'convertCsv'), $value);
} else {
$value = str_replace('"', '""', $value);
$value = sprintf('"%s"', $value);
}
return $value;
}
protected function cacheHeader($cache_control = 'public')
{
header(sprintf('Cache-Control: %s', $cache_control)); // HTTP/1.1
header(sprintf('Pragma: %s', $cache_control)); // HTTP/1.0
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
}
protected function attachmentHeader($filename, $filesize = 0)
{
header(sprintf('Content-disposition: attachment; filename="%s"', $filename));
header('Content-Type: application/octet-stream');
if (!empty($filesize)) {
header(sprintf('Content-Length: %d;', $filesize));
}
}
自己解決しましたので一応ご報告させていただきます。
いろいろ試した結果、理由はわかりませんが、Content-Lengthヘッダーを出力しないようにしたら正常にダウンロードできるようになりました。
この度はご回答いただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- クレジットカード PayPayカードはいつ頃CSVダウンロードに対応すると思いますか? 1 2022/10/16 02:59
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- その他(ネットショッピング・通販・ECサイト) CSVファイルのアップロードについて ネッシーのCSVファイルをアップロードしたら PCのWPSスプ 1 2022/06/17 20:35
- 仕事術・業務効率化 毎日業績データをCSVでダウンロードし、手動で綺麗にリスト化しています。 これをマクロにし自動化した 2 2023/05/24 12:03
- その他(OS) Windows Server評価版がダウンロードできない 1 2022/05/06 13:32
- Excel(エクセル) エクセルの文字化けを解除できる方法を教えてください。 5 2022/06/16 20:59
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Google Drive google スプレッドシート 挿入 手順 3 2022/12/06 21:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームページでファイルをダウ...
-
java_run.batがダウンロードで...
-
Webサイトから、txtファイルを...
-
ダウンロードしたファイルが「...
-
MP4をダウンロードしたので...
-
asp ダウンロード中にタイムア...
-
HTMLページが勝手にダウンロー...
-
bcpadのコンパイラのインストー...
-
アップロードしたファルダごと...
-
Excelのマクロについて教えてく...
-
IE操作時、ファイルのダウンロ...
-
XMLファイルのダウンロード
-
リッチテキスト入力した内容(ti...
-
ファイルをダウンロードすると...
-
C#のWPFでmidiを再生する方法が...
-
30Mの圧縮ファイルを置ける無料...
-
iPhoneです。 Adobeフラッシュ...
-
現在Javaをダウンロードしてい...
-
html&CSS&jsはどこにある?
-
音楽・動画ファイルをプレイヤ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Webサイトから、txtファイルを...
-
HTMLページが勝手にダウンロー...
-
【HTML】1クリックで複数ファイ...
-
VBA URLDownloadToFileについて
-
URLDownloadToFile でダウンロ...
-
java_run.batがダウンロードで...
-
ホームページでファイルをダウ...
-
Excelのマクロについて教えてく...
-
WEB上でPDF閲覧のみにしたいです。
-
ZIPの拡張子のついたURLがダウ...
-
複数のデータをダウンロードさ...
-
ファイルをダウンロードすると...
-
VBA IE操作でダイアログ表示後...
-
XMLファイルのダウンロード
-
iPhoneです。 Adobeフラッシュ...
-
イラストレーターのaiファイル...
-
ダウンロードサイト作成方法に...
-
エクセルのファイルのダウンロ...
-
rdfファイルをブラウザで表示さ...
-
ダウンロード完了後メッセージ...
おすすめ情報