• 締切済み

X-SERVERでのCSVダウンロードについて

閲覧ありがとうございます。 現在、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 ----------

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>通常のhttp環境下では正常にCSVダウンロードができている これはX-SEVERのPHPから何らかの関数で外部サーバーにhttpsで接続すると データが受け取れないということですね? 当該のX-SEVER上のクライアントになるブラウザからならダウンロードできる のでしょうか? ファイアウォールかプロクシの問題のような気がしますが PHPの関数はなにを利用していますか?

mookun2007
質問者

お礼

自己解決しましたので一応ご報告させていただきます。 いろいろ試した結果、理由はわかりませんが、Content-Lengthヘッダーを出力しないようにしたら正常にダウンロードできるようになりました。 この度はご回答いただきありがとうございました。

mookun2007
質問者

補足

ご回答ありがとうございます。 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)); } }

関連するQ&A

  • Firefox google検索結果でソース表示になってしまう

    WindowsXPでFirefox3.0.1です。Googleで検索し、結果ページの一番下にある「次へ」(次の検索ページに飛ぶため)をクリックすると、以下のような表示(ソース?)になってしまうことがあります。この状態で再読込をすれば結果ページが表示できるのですが面倒です。これを防ぐ方法はないでしょうか? HTTP/1.1 200 OK X-TR: 2 Cache-Control: private, max-age=0 Date: Mon, 01 Sep 2008 06:49:07 GMT Expires: -1 Content-Type: text/html; charset=UTF-8 Set-Cookie: SS=Q0=RmlyZWZveOOAgGdvb2dsZeOAgOOCveODvOOCueOBjOihqOekuuOBleOCjOOCiw; path=/search Server: gws Content-length: 33823

  • CSVファイルのダウンロードについて

    サーバー上にアップしたcsvファイルにアクセスすると ダウンロードの確認ダイアログが出ずに 画面上にテキストベースで表示されてしまいます。 フォルダオプションの設定で ダウンロード後に開くを確認するのチェックボックスを チェックしましたがうまくいきません。 宜しくお願いします。 ※Webサーバー・・・JRUN4 <-- sample.jsp --> <% response.setContentType("application/octet-stream-dummy; charset=iso-2022-jp"); %> <% response.setHeader("Content-Disposition","inline; filename=aaa.csv"); %> top.location.href=~aaa.csv ← ファイルのフルパス

    • ベストアンサー
    • Java
  • CSVファイルのダウンロードができたりできなかったり・・

    ASPで、サーバー側で動的に作成したCSVファイルをクライアント側にダウンロードさせたいと思っていますが、 ダウンロードできるときとできないときがあり困っています。 「ファイルのダウンロード」ダイアログが表示され、うまくダウンロードできるときと、 「Internet Explorer では、[サイト名]-[aspファイル名]をダウンロードできません。このインターネットのサイトを開くことができませんでした。要求されたサイトがしようできないか、見つけることができません。後でやり直してください。」のメッセージが表示され、ダウンロードできない場合があります。 どちらもサーバー上にダウンロードすべきCSVファイルは作成されているので、ダウンロード部分に問題があると思うのですが、原因がわかりません。 ひとつ気づいたのが、csvファイルの容量が4.0MBを超えるとダウンロードできないような気がするのですが、関係ありますでしょうか? よろしくお願い致します。 --------出力のためのスクリプト----------------- Response.ContentType = "application/octet-stream" Response.AddHeader "Content-Disposition", "attachment; filename = " & CSVファイル名 Set fs = Server.CreateObject("Scripting.FileSystemObject") CSV_DATA = Server.MapPath(CSVファイル名) If fs.FileExists(CSV_DATA) Then Set ts = fs.OpenTextFile(CSV_DATA, 1) Do Until ts.AtEndOfStream Response.Write ts.ReadLine() & vbCrLf Loop ts.Close End If Response.End -----------------------------------------------

  • csvファイルのダウンロード

    phpでサーバーにあるCSVファイルをダウンロードさせる処理で、ファイルをダウンロードするとHTML部分のソースがファイルに書きこまれてしまっています。調べてみたのですが、解決出来ませんでした。お願いします まずサーバーにあるCSVファイルにsqLの結果を書き込み、その後 header ("Content-Disposition: attachment; filename=ファイル名"); header ("Content-type: application/x-csv"); readfile (ファイル名); という処理でダウンロードさせようとしています。 サーバーのCSVはデータの書き込みが成功しているのですが、 そのファイルをローカルにダウンロードして中身を確認すると、 XXX,XXX,XXX XXX,XXX,XXX <html> <head> ・・・ のような内容のファイルになっていました。

    • 締切済み
    • PHP
  • 共有サーバーSSL環境下でのクッキー取得方法

    こんにちは。 共有サーバーSSL環境下の「A.html」というページでクッキーを取得して、それを同じサーバーのSSL環境下の「B.html」というページで呼び出すことはできるのでしょうか? Set-Cookieの部分のdomainの指定は無し、path=/cgibin/としてありますが、読み込むことができなかったので、domain=sslserver.netなどのようにSSLサーバーを指定してみましたが無理でした。 そもそも、SSL環境下では例え同じSSLサーバーで保存したページでも読み出すページが違うとクッキーの読み込みができないのでしょうか? どなたか、教えてください。<m(__)m>

    • ベストアンサー
    • Perl
  • 複数のCSVを一度にダウンロード

    いつもお世話になります。 WebサーバーのCSVをダウンロードするのに次のようなCCGIを使っています。 ***************************************** #! /usr/bin/perl open FH, "./data.csv"; print <<__EOH__; Content-Type: text/download; name="data.csv" Content-Disposition: inline; filename="data.csv" __EOH__ print <FH>; close FH; ***************************************** 1つだけならこれでOKなんですが、例えばdata1.csv、data2.csv、data3.csvという3つのCSVをダウンロードさせるにはどのようにコーディングすればよいのでしょう?

    • ベストアンサー
    • Perl
  • IE6でダウンロードさせたい【PHP】

    IE6でダウンロードさせたい【PHP】 現在、PHPからのヘッダ出力を使って ファイルダウンロードさせるプログラムを作成しています。 (PHPスクリプトが呼ばれると、 ダウンロードダイアログが出現する) FireFoxでは問題なく動作するのですが、 IE6だと動作しません。(ダイアログが出ない) ※ちなみに、SSLは使ってません。 --↓ソース------------------- header("Content-Disposition: inline; filename=\"".basename($path_file)."\""); header("Content-Length: ".$content_length); header("Content-Type: application/octet-stream"); readfile($path_file) ---------------------------------- -IE6のHTTPヘッダ(デバッガで抽出)-- HTTP/1.1 200 OK Date: Thu, 20 May 2010 07:35:19 GMT Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 X-Powered-By: PHP/5.2.9 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Disposition: inline; filename="20100520_133719_irai_1.txt" Content-Length: 2415 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: application/octet-stream ---------------------------------- どなたか解決策に心当たりのある方、ご教授宜しくお願いします!

    • ベストアンサー
    • PHP
  • CSVファイルのダウンロード

    <環境> PHP4.3.2 Windows2000 PostgreSQL RedHat Linux <求めていること> DBのデータをCSVファイルに書き出し、 ダウンロードボタン押下で ダイアログがアップしファイル保存ディレクトリ選択、保存。 <現在のソース> サーバーにtest.csvファイル作成後、 現在HTMLでダウンロードボタン押下でdownload.phpを呼び出し <input type=button value="ダウンロード" onClick="location.href='download.php'"> ---------------- download.php ------------------- <?php // 1.ディレクトリ指定 //$filename="/test/test.csv"; // 2.ディレクトリ指定なし $filename = "test.csv"; header("Content-disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); ?> ---------------- download.php ------------------- 現在、 1番のディレクトリ指定だと downloadというファイルがダウンロードされるダイアログがアップし ダウンロードされます。 2番のディレクトリ指定なしだと もちろん空のtest.csvファイルがダウンロードされます。 実現したいのは/test/test.csvのファイルをダウンロードすることです。 色々なサイトで探してみて試しているのですが 初心者なもので、行き詰まってしまいました。 申し訳ありませんが ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルダウンロードの開くで、CSVファイルが開けない

    表記の件についてかなり困っています。 教えてください。 【環境】  Windows2000 SP4 + ASP 【内容】  現在CSVファイルをダウンロードする仕組みをASPで作成しています。 とりあえず、ダウンロードダイアログがでてくるところまではでき、保存ボタンでも正常に保存できるところまではできたのですが、開くボタンをクリックすると、EXCEL(CSVをEXCELに関連付けしているため)が起動された後に、 ”出力ファイル名[1].csv”が見つかりません。という エラーとなり表示されません。 この原因は何なのでしょうか? 宜しくお願いします。 【ロジック】 ダウンロードロジックは以下のようにしています。 Response.ContentType = "application/octet-stream" Response.AddHeader "content-disposition","attachment; filename=光彩.csv" strFilePath = "C:\Inetpub\wwwroot\CoreSt\光彩.csv" Set objStream = Server.CreateObject("ADODB.Stream") objStream.Open objStream.Type = adTypeBinary objStream.LoadFromFile strFilePath Response.BinaryWrite objStream.Read objStream.Close Set objStream = Nothing

  • サーバー上のファイルをブラウザからダウンロード

    お世話になります。 サーバ上のファイルをブラウザからダウンロードさせるため、下記のようなコードを書いています。 // ダウンロードさせる元ファイル $source = '/home/hogehogel/output.csv'; // 保存時のファイル名(デフォルト) $filename = 'csv_output.csv'; // HTTPヘッダ送信 header("Content-type: application/csv"); header("Content-Disposition: attachment; filename=\"{$filename}\""); // ファイルを読み込んで出力 readfile($source); しかし、ダイアログボックスが表示されず、画面上にデータが表示されてしまいます。 いろいろなサイトや書籍等のコードを真似してもダメでした。 サーバはさくらのスタンダードを使っています。 原因として何が考えられるでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう