php excelダウンロード

このQ&Aのポイント
  • phpによるExcel形式でのダウンロードプログラムを作っているのですが、IE6では問題が発生しています。
  • IE6でphpによるExcel形式でのダウンロードがブラウザに表示されてしまう問題の解決方法を教えてください。
  • WindowsXPの環境で、phpによるExcel形式でのダウンロードを実装中ですが、IE6で正しく動作しません。
回答を見る
  • ベストアンサー

php excelダウンロード

phpによるExcel形式でのダウンロードプログラムを作っているのですが、どうしても分からない部分があり、質問させて頂きます。 下記のphpコードでExcel形式でのダウンロードを試みているのですが、Firefoxでは問題なく動作するのですが、IE6だと普通に htmlとしてブラウザに表示されてしまいます。 最初は他のヘッダーが出力されてしまっているのかと思い、 header("Content-Type: application/vnd.ms-excel")の前に headers_sent()関数を挿入してチェックしてみたのですが、 falseが返ってきており、問題はなさそうでした。 php.iniでもsession.auto_startは0で設定しています。 原因が分かる方、どなたかご教示お願いできませんでしょうか。 宜しくお願いします。 環境:WindowsXP IE6sp2 ---hogehoge.php----------- <?php header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=hoge.xls"); $aaa = '<html><head><title>hogehoge</title></head><body>'; $aaa .= '<table border="1"><tr><td>aaaaabb</td></tr>'; $aaa .= '<tr><td>aaaaacccc</td></tr></table></body></html>'; print $aaa; exit; ?>

  • kmayo
  • お礼率71% (5/7)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

#これをダウンロードしてExcelファイルになるんでしょうか? ブラウザに返しているContent-TypeはExcelですが、中身はhtmlですよね?IEはContent-Typeを重視しないので中身がhtmlだとhtmlで扱ってしまうと思います。 普通は   <?php   header("Content-Type: application/vnd.ms-excel");   header("Content-Disposition: attachment; filename=hoge.xls");   readfile("hoge.xls");   ?> といった書き方になると思いますが・・

kmayo
質問者

補足

ご回答ありがとうございます。 プログラムは↓ http://www.bricklife.com/weblog/000051.html のサイトにあった方法を参考に書いてみました。 それで、結果的にはアパッチの再起動をしたところ IE6でも今現在は問題なくphpで書いたtableを、Excelで保存して、 開くことが出来ました。が、何故アパッチの再起動をしたら解決したのかが分からないのと、IE7では動作が不安定("開く" or "保存"のダイアログは開くが、保存を実行すると待機状態になり、一度キャンセルし、 再度実行すると今度はうまく行きます。2回目以降はずっと何度やってもうまく行く。。。)という状況であります。 やはり、Excelのhtml読み込み機能を使って、htmlをExcelで見るのは 無理があるのでしょうか?

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

#正直なんでそんな無理をしないといけないのかがわかりません。 「Excelにhtmlのテーブルを読み込ませる」というのは、かなり閲覧環境を選びませんか?イントラ環境であればいいでしょうけど・・ひょっとしてイントラ向けのスクリプトでしょうか?(でもそれならIEやOfficeのバージョンは固定でしょうしねぇ・・)。 動的に作成しないといけないのであればCSV、そうでなければ普通のExcelファイルという「間違いなく動作する」方法を選択すべきだと思います。

kmayo
質問者

お礼

ご回答ありがとうございます。 おっしゃる通りイントラでのスクリプトなんですが、対象ブラウザーが IE6,IE7なんですよね。要望がCSVではなくセルに色を付けたり、 簡単な罫線を表示させたいということだったので、 何か方法はないかと試していたんですが。 まあ、ExcelWriterモジュールとかを使用すれば動的に作成する ことは可能なんですけど、あれはバグがあったりするので、 あまり使いたくはないなと思っていたので。 確かに、間違いなく動作する方法を選択するべきですね。 これで、この質問を閉じたいと思います。 ありがとうございました。

関連するQ&A

  • phpのダウンロード画面が出てしまう

    IE6からphpにアクセスするとダウンロード画面が出てきてしまいます。 ダウンロード画面を出さないようにするにはどうすればいいでしょうか。httpd.confは編集できない環境です。 .htaccessは下記のどちらにしてもDL画面が出てきます。 AddType application/x-httpd-php .xhtml AddType application/xhtml+xml .php index.php; <?php header("Content-Type: application/xhtml+xml"); echo "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" > <head> <meta http-equiv="ContentType" content="application/xhtml+xml" /> <meta content="i-mode7_FOMA" /> <title>タイトル</title> </head> <body> <?php readfile("./numbers3/n3temp.txt"); ?> </body> </html>

    • ベストアンサー
    • CSS
  • PHP にて ロック状態でのWord 保存

    PHP にて ロック状態でのWord 保存 PHPにて下記のコードを入れ、データをMS word保存しています。 header("Pragma: public"); header("Content-Type: application//vnd.ms-word"); header("Content-Disposition: attachment; filename=data.doc"); これを、ダウンロードしたユーザーに編集させないようにロックさせ保存させたいのですが、何か方法はありますでしょうか? ※1)PDFでのダウンロードはしません。 ※2)一般の方々が編集できないロック程度で十分です。 以上、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでCSVファイルのデータを表示したところ日本語が表示されません

    PHPで、CSVファイルの中身を表示させようと思ったのですが、一部の日本語が正しく表示されません。 問題のPHPとCSVファイルの内容を明記します。アドバイスお待ちしております。 PHP <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>tokuten</title> </head> <body> <TABLE border="1"> <TBODY> <TR> <TD>ID</TD> <TD>名前</TD> <TD>点数</TD> </TR> <?php $fname = "name.csv"; $fp = fopen($fname, "r"); while (list($id, $name, $point) = fgetcsv($fp, 100, ",")) { echo"<TR>"; echo"<TD>".$id; echo"</TD>"; echo"<TD>".$name; echo"</TD>"; echo"<TD>".$point; echo"</TD>"; echo"</TR>"; } fclose($file); ?> </TBODY> </TABLE> </body> </html> CSV 1,a,50 2,b,70 3,c,100 55,松井,55 530000,フリーザ,530000

    • 締切済み
    • PHP
  • PHP4対応のサーバーではincludeは使えないのか

    HTMLファイルにPHPファイルを読み込ませようとして下記のようにしてみました。 【HTMLファイル(index.html)】 <html> <head> <title>HTMLファイルにPHPファイルを読み込む</title> </head> <body> <table border="3" cellpadding="25" bordercolor="#795B00" bgcolor="#ffffff"> <tr> <td> <?php include('sample.php'); ?> </td> </tr> </table> </body> </html> 【PHPファイル(sample.php)】 <? echo <<< HTML <table> <tr> <td>あいうえお</td> </tr> </table> HTML; ?> 現在PHP4対応のサーバーを使っているのですが、サーバーにアップしても表示されません。 これはPHP4のせいなのでしょうか? それともアップするときのパーミッションの設定のせいなのでしょうか? ちなみにどちらのファイルも705や777その他にもいろいろな組み合わせで試してみたのですが表示されません。 ソースが間違えているせいなのか、サーバーがPHP4対応のせいなのか、パーミッションの設定のせいなのか原因が分からず困っています。 分かる方どうか宜しくお願い致します。

    • 締切済み
    • PHP
  • PHPのheader()について

    OS:freebsd4.8 PHP:php-4.3.2 apache2 を使用しております。 ドキュメントルートに <HTML> <HEAD> <TITLE>検索エンジン</TITLE> </HEAD> <BODY> <CENTER><H1> 検索エンジン </H1></CENTER> <FORM METHOD= post ACTION = search.php> <TABLE BORDER = 4 WIDTH = 250 ALIGN = CENTER> <TR BGCOLOR = "#CCCCCC"> <TH>検索キーワード</TH> <TD><INPUT TYPE= text NAME= keywd size = 20 /></TD> </TR> <TR> <TH>エンジン</TH> <TD> <SELECT NAME = ENG> <OPTION VALUE = "yahoo">Yahoo!</OPTION> <OPTION VALUE = "google">google</OPTION> <OPTION VALUE = "goo">goo</OPTION> </SELECT> </TD> </TR> <TR> <TD COLSPAN ="2"><CENTER><INPUT TYPE="submit" value="検索" /><CENTER></td> </TR> </TABLE> </FORM> </BODY> </HTML> というtest.htmlをおいてます。 phpスクリプトとして <?php $stringkey = urlencode($keywd); switch($ENG){ case "yahoo": $url = "http://www.yahoo.co.jp/bin/search?p="; break; case "goo": $url = "http://www.goo.ne.jp/default.asp?MT="; break; case "yahoo": $url = "http://www.google.co.jp/search?q="; break; } header("Location: ".$url.$stringkey); header("HTTP/1.1"); ?> search.phpにパラメータを渡していますが 白いページしか表れません。 header()関数の記述が悪いのでしょうか? apache2の設定でしょうか? ちなみに2ファイルともドキュメントルートに配置してます。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPの問題を解いているのですが…

    昨日からずーと悩んでいるのですがfor文で *実際はテーブルを使ってます 値1 44 値2 55 値3 66 値4 77 件数 4件 平均 60.5 と出したいのですが下のプログラムでは出ませんなぜでしょうか? <HTML> <HEAD> <TITLE>for文例問題1</TITLE> </HEAD> <BODY> <table border> <?php $ary1 = array(44,55,66,77); for($i=0;$i<4;$i++) { $a = 44+55+66+77/4; <tr><th>値 $i</th>    <td>44</td></tr> <tr><th>値 $i</th>    <td>55</td></tr> <tr><th>値 $i</th>    <td>66</td></tr> <tr><th>値 $i</th>    <td>77</td></tr> <tr><th>件名</th> <td> $i件</td></tr> <tr><th>平均</th> <td> $a件</td></tr> </table> } ?> </BODY> </HTML> ご存知の方どうか助言お願いします

    • ベストアンサー
    • PHP
  • ボタンを押下するとダウンロードのダイアログが表示されてしまいます…

    ご教授お願いします。 PC&PHP初心者です。 参考書に沿ってPHPの勉強をしているのですが、以下のプログラムが思うように動作しません。 ***************************************************** addressbook.html <html> <head><title>addressinput.html</title></head> <body> 入力フォーム <form action = "addressinput.php" method = "post"> <table border = "1"> <tr> <td>名前</td> <td><input type = "text" name = "name"></td> </tr> <tr> <td colspan = "2" align = "center"> <input type = "submit" value = "入力"></td> </tr> </table> </form> </body> </html> ***************************************************** addressinput.php <html> <head><title>addressinput.php</title></head> <body> <?php $name = $_POST[ 'name' ]; print( "次のデータを受け取りました。<br />" ); print( "名前:" . htmlspecialchars($name)."<br />" ); ?> </body> </html> ***************************************************** addressbook.htmlにある「入力」ボタンを押下するとaddressinput.phpに入力したデータが渡されて、入力したデータを表示させるというものですが、何故かボタンを押下するとダウンロードのダイアログが表示されてしまい困っています。 これってなにか設定が必要なのでしょうか?

    • ベストアンサー
    • PHP
  • PHPで出力したhtmlに外部CSSを適用したい

    PHPで出力したhtmlに、外部CSSファイルを適用させたいと考えています。 <?php header('Content-Type: text/html; charset=UTF-8'); ob_start(); echo '<table>'; echo '<tr>'; echo '<td>テスト1</td>'; echo '<td>テスト2</td>'; echo '</tr>'; echo '</table>'; ?> 上記のように、echoでhtmlを出力させているのですが、 これに外部CSSファイルを適用させることは可能でしょうか? 最初の header('Content-Type: text/html; charset=UTF-8'); ob_start(); の部分で、出力後のhtmlファイルの文字セットを指定することが出来たので、 同じような要領でCSSファイルの設定も出来るかなと思ったのですが、 ネットで検索しても出てこず・・・ ご教授いただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPのEOMについて

    <?php function h($a) { return htmlspecialchars($_SESSION["$a"], ENT_QUOTES, "UTF-8"); } $uname = h("uname"); $email = h("email"); $message = h("message"); $to = "akiko.nishizawa@nifty.com"; $title = "(メールフォームより)"; $ext_header = "From: {$email}"; $body = <<<EOM (Webサイトからのメール) お名前:{$uname} メールアドレス:{$email} メッセージ:{$message} EOM; $rc = mb_send_mail($to, $title, $body, $ext_header); if (!$rc) exit; else $_SESSION = NULL; ?> <p>メールを送信しました</p> <table border = "1"> <tr> <td>お名前</td> <td width = "300"><?php echo $uname; ?></td> </tr> <tr> <td>メールアドレス</td> <td width = "300"><?php echo $email; ?></td> </tr> <tr> <td>メッセージ</td> <td width = "300"><?php echo nl2br($message); ?></td>  //なぜかここでエラー </tr> </table> シンタックスエラーが出るのは最後から3行目なのですが、 EOMの部分をはずすとシンタックスエラーがなくなります。 ググってもどこが悪いのか全然わかりませんでした。 回答よろしくおねがいします!!

    • ベストアンサー
    • PHP
  • サーバにあるエクセルファイルをダウンロード

    サーバ内にあるエクセルファイルをダウンロード画面からsubmitして、ダウンロードしたいのですが、ダウンロードしたファイルの内容が文字化けします。またなぜかダウンロード画面のhtml内容が張り付いてたりします。 XML形式で保存したエクセルファイルは問題なく保存→表示できるのですがどうしたらいいのか原因がわかりません。 ダウンロードのソースは、以下のようになっています。 <?php $out_path = mb_convert_encoding($file_path,"SJIS","UTF-8"); $out_file_name = basename($out_path); $file_size = filesize($out_path); header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"" .     $out_file_name . "\""); header("Content-Length: ".$file_size); readfile($out_path); ?> ちなみに環境は以下のようになっています。 OS :XP 文字コード:UTF-8 framework :symfony 原因をご存知の方、ご教授よろしく御願いします。

    • 締切済み
    • PHP

専門家に質問してみよう