• ベストアンサー

複雑なHTMLを出力するとタグが途切れます。

複雑なHTMLだと、全く同じページを表示しても、 10回に1回ぐらいHTMLが途切れて表示される場合があります。 どのような原因が考えられるでしょうか? Smartyというテンプレートクラスを使用していて、 LinuxサーバでPHPからHTMLを表示しています。

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

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

どうしてもと言うならバッファリングしてから 一気に出力をかければ少しは改善されるかも。 http://www.php.net/manual/ja/ref.outcontrol.php

php4
質問者

お礼

やってみましたが改善しませんでした。 Smartyのバグかもしれませんねぇ・・

php4
質問者

補足

解決しました。 ob_start();ob_end_flush();ではダメで、 php.iniで、バッファリングOnにしたら上手く表示されました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Smartyで出力したHTMLコードが改行されない

    PHPのテンプレートエンジンであるSmaryについて教えてください。 SmartyテンプレートをUTF-8、かつ改行コードLFで作成しました。 (テキストエディタでちゃんと上記の通りなってるかも確認) ◯◯.tplとし、Webサーバを介して描画したところ、出力結果のHTMLのソースが改行されないで出力されてしまいました。 (ブラウザでのHTML自体の描画はできているので、HTMLから改行のみ消えてHTMLがみにくい状態) なぜか<script>タグで区切ったJavascriptのコードの部分だけはちゃんと改行されています。 HTML部分も改行したいのですが、なにか設定が必要なのでしょうか。 (以前、Smarty2.x系を使ったときは出力されたHTMLは改行されていました。) 【環境】 OS:MaxOSX Lion Webサーバアプリ:ZendServerCE5.3.5 Smarty:バージョン3.1.4 テンプレート:UTF-8、改行LFで作成 以上、よろしくお願いします。

    • 締切済み
    • PHP
  • PHPが出力したHTMLにinclude文を

    PHP4.3で、HTMLファイルをテンプレート出力する方式の掲示板を使っているのですが、テンプレートのHTMLファイル内に別のPHPスクリプトで出力した表示を貼り付けようと思い、 <?include("hoge.php");?> とinclude文を書き込んだのですが、これが反映されずにソース内に<?include("hoge.php");?>という記述がそのまま出て来てしまいます。 これが出来ない原因は、PHP実行→HTML表示→HTML内のPHP実行という二度のPHP実行が出来ないのか、<?include~を「文字列」として認識してしまっているのかのどちらかだと思うのですが、、 PHPファイルには一切手が加えられない状況なので、テンプレートHTMLに手を加えるだけで別のPHPスクリプトを読みこませたいのですが、何かいい方法は無いでしょうか?

    • ベストアンサー
    • PHP
  • 制御文がHTMLのコメントのテンプレートクラスってないですか?

    PHPには、ロジックとデザインの完全分離が行えて、ブラウザで開いてもIF文などの制御文がHTMLのコメント<!-- -->になっていて、デザインが崩れないSmarty等の素晴らしいテンプレートクラスがたくさんあるのですが、JavaにはVelocity等テンプレートクラスはたくさんあっても制御文がHTMLのコメントでない仕様の物しかないようです。どこかにブラウザで開いても綺麗に見えるJavaのテンプレートクラスはないでしょうか? 基本的には、IF、LOOP、LOOPのネスト、LOOP内のIFぐらいの機能があれば十分です。よろしくお願いします。

  • smartyとHTML_QuickFormの連携

    いまさらながらですがsmartyとHTML_QuickFormの連携を勉強しようと 思いいろんなサイトを見てみたのですが応用の方法はみつかるものの 最初の設定に関する説明などがなかったので教えて下さい。 自分でやったことは以下の手順です。 1:Smarty-2.6.18を下記urlからダウンロード http://smarty.php.net/download.php 2:HTML_QuickForm-3.2.10を下記urlからダウンロード http://pear.php.net/package/HTML_QuickForm/ これ以上どのようにすればいいのかがわかりません・・・ HTML_QuickForm-3.2.10をどこのフォルダにいれればいいのか ファイルがこれだけで十分なのかすらわからない状態です^^; 使用するレンタルサーバーはsmarty使用可能なのですが使う場合は 自分でインストールしなければならないので最初にどのような ファイル構成でアップすればいいのかでつまづいております。 わかりづらい文章化とは思いますが是非ご教授下さい!

    • 締切済み
    • PHP
  • PHPで動的にHTMLを出力したときの現象

    サーバは自分で立てたcentOS5.4(i386版)を使用しており、そこでホームページの作成をしております。 ホームページは、PHP5+XHTML+CSS+JavaScriptを使用しており、それぞれ別ファイルで作成してあります。 アクセス先はPHPで、そのPHP内にテンプレートを表示する処理を記述してあるのですが、PHPで動的に表示した状態のソースを見ると、生のHTMLの内容と違った状態で表示されてしまいます。 生のHTMLと動的に出力したHTMLのソースは下記の通りです。 生のHTML ================= <?xml version="1.0" encoding="utf-8"?> <!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" lang="ja" dir="ltr"> <head> ・ ・ ・ 動的のHTML ================= ?????????<?xml version="1.0" encoding="utf-8"?> <!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" lang="ja" dir="ltr"> ・ ・ ・ 動的に出力した状態ですと、ソースの最初に"?????????"という文字が表示されてしまいます。 PHPやHTMLなど、全てのファイルは 文字コード:UTF-8 で、HTMLとCSSは 改行コード:CRLF で、その他のPHPやJavaScriptは 改行コード:LF で作成しております。 php内では、 まずテンプレートを"openFile"で開き、 文字列置換($bodyはテンプレートファイル) $body = str_replace("\\", "\\\\", $body); $body = str_replace("\"", "\\\"", $body); eval("\$body = \"$body\";"); をして、最後に mb_http_output("UTF-8"); header("Content-type: text/html;charset=UTF-8"); print($body); としてあります。 文字コードの関係で文字化けを起こしているため、最初に"?????????"とソースに表示されてしまっているのかと思うのですが、どこが原因なのか分かりません。 原因がお分かりになる方、同じ現象になったことのある方いらっしゃいましたら、ご教授のほどお願い致します。

    • ベストアンサー
    • HTML
  • サーバー引越し

    Smartyをつかって運営しているサイトの サーバーを移しました。 旧サーバーは PHP 4.4.8 MySQL 4.0.27 ↓ 新サーバーは PHP 5(4 に対応せず) MySQL 5.1 テスト的にうつしてみたいんですが Smartyのテンプレートが表示されず、 真っ白な状態になってしまいます。 具体的な問題はソースの開示が必要になるかと 思いますので、そこまではできませんが、 どのような原因が考えられるでしょうか。 アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • SmartyでHTMLソースの変更が反映されません

    お世話になります。 先日、デザイナーと全てのサイト及びフォーム関連を完全にテンプレート化しようという 話になり、Smartyを導入しフォーム関連に取り掛かっていたところ、テンプレートファイルの 内容を書き換えてリロードしても最新の内容がブラウザへ反映されませんでした。 PHPファイルをサーバへ上書きアップロードをすると最新の内容が反映されます。 しかし、デザイナーからしてみると細部の調整等を行う際にその都度PHPファイルも アップロードするのが非常に面倒くさいので、テンプレートファイルのみをアップした タイミングで最新の内容が反映する方法を1週間ほど調べてみたのですが、 上手く行かずに難儀しております。 この現象が発生するのは、セッションを使用したフォーム関連のページのみです。 「 templates_c 」ディレクトリのキャッシュファイルを削除しても変更されません。 Smartyの設定自体はデフォルトのままです。「 caching 」も0のままで、特に変更は しておりません。 検証を手順として説明させていただくと、 1、テンプレートファイルのHTMLソースを変更してアップロード。 2、ブラウザで確認すると、変化無し。 3、「 templates_c 」のキャッシュファイルは更新されていて、中身を確認すると正常にコンパイルされている。 4、大元のPHPファイルを上書きアップロードしてブラウザをリロードすると、HTMLソースの変更内容が正常に反映される。 以上の事から、PHPのスクリプトに問題があるのかと思いましたので、勝手ながらスクリプトの 大まかな内容を記載させていただきます。 --- ■ ココから------------------------------------------- // セッションの開始 session_cache_limiter("public"); session_start(); require("Smarty.class.php"); define("DEF_ACT", "entry"); // 初期アクセスしたページ define("MAIL_TO", "アカウント@ドメイン"); // 送信先 define("subject", "テスト送信"); // 件名 // Smartyを走らせる $smarty = new Smarty(); $smarty->template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; // データをPOSTメソッドで if ($_SERVER["REQUEST_METHOD"] == "POST") { $param = cnv_formstr($_POST); } // 各ページの判別処理を行い $act = isset($param["act"]) ? $param["act"] : DEF_ACT; $screen_function_name = "screen_" . $act; if (!function_exists($screen_function_name)) { exit(); } call_user_func($screen_function_name, $param); $temp_name = $act . ".html"; // テンプレートを表示する $smarty->assign("url", $_SERVER["PHP_SELF"]); $smarty->display($temp_name); // ========================================================= // 入力画面( 初期アクセスしたページ ) // ========================================================= function screen_entry($param) { ~ 処理内容 ~ return TRUE; } // ========================================================= // 確認画面( 入力チェックが通った場合 ) // ========================================================= function screen_conf($param) { global $smarty; ~ 処理内容 ~ return TRUE; } // ========================================================= // 送信完了画面 // ========================================================= function screen_submit($param) { global $smarty; ~ 処理内容 ~ return TRUE; } // ========================================================= // 入力データチェック( 未入力等があった場合 ) // ========================================================= function screen_data($param) { global $smarty; ~ 処理内容 ~ } // ========================================================= // 配列を一括変換する // ========================================================= function cnv_formstr($array) { ~ 処理内容 ~ } --- ■ ココまで------------------------------------------- PHPのバージョンは、5.3.3です。 因みにこのスクリプトでは、データベースは使用しておりません。 同様の経験をされて解決された方がおられましたら、ご教示の程 どうぞよろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 改行を除いてHTML表示

    PHP4 Smartyにてコンテンツ作成しております。 デザイン部分であるHTMLはタグ等綺麗にインデントされておりますが、最後の処理としてブラウザーに表示する際に、改行を取り除きたいのですが、どのような方法がありますか。 Smartyを用いない場合の方法でも結構です。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • HTML_QuickForm_Renderer_ArraySmartyの動作について

    こんにちわ。 今SMARTYの勉強をしており、色々サンプルスクリプトを動かしたりしているのですが、PHPからHTML_QuickFormを動かす分には全く問題ないのですが(http://pear.php.net/manual/en/package.html.html-quickform.tutorial.phpのサンプルスクリプトは動作します)、テンプレート上で使おうと思うと動きません。SMARTYはインストールされていますし、HTML_QuickForm_Renderer_ArraySmartyの存在も確認しました。どこか設定する箇所があるのでしょうか?PEARとSMARTYの連携について書かれている書籍やサイトも少なく、苦戦しております。アドバイスの程よろしくお願いいたします。

    • 締切済み
    • PHP
  • キャリア別のHTMLを出力する

    PHPにてモバイル用のサイトを作ろうと思っています。 如何せん共通化されていないので(昔ほどでは無いですが)まだまだキャリア別のページを作る必要があるのかなと思っています。 リダイレクトでページを分けるとそれぞれ作らないといけないので良い方法を模索しているのですがどのような方法が良いか。 以下のような方法を考えましたが如何でしょうか。 HTMLクラス(基盤)  DoCoMoHTMLクラス(HTMLクラスを継承)  AuHTMLクラス(HTMLクラスを継承)  SoftBankHTMLクラス(HTMLクラスを継承) ページにアクセス時にキャリアごとのHTMLクラスを生成する。 HTMLクラスにはspanタグやdivタグ等のメソッドがあり、それを利用してHTMLとして表示する部分を作っていく。 作ったHTMLを出力する。 $html = Common :: getHTML(); // getHTMLでキャリア判別して new DoCoMoHTML();等を返す // このメソッドはDoCoMoHTMLクラス // <div style="color:#000000;">あいうえ print $html -> div ( "#000000", "あいうえ" ); // </div> print $html -> div(); // <hr>このメソッドはHTMLクラス print $html -> hr(); 基本的な共通タグはHTMLクラスにもって共通では適用できないタグはサブクラスにて実装するようにする。 こうすることによって1ソースでキャリアを意識せずに作ることが可能と思っています。 (細かいところは調整が必要になるかと思いますが) 方法はいろいろありそうですが何か良い案はありませんでしょうか。

    • 締切済み
    • PHP
このQ&Aのポイント
  • 実力の全くいらない世界ってどこの業界なんでしょうか?
  • 歌舞伎や政治家など、父親の世襲によって実力が求められない業界もありますが、他の業界でも実力が必要な場面があります。
  • スポーツ選手に対して実力がどうのと言われることが多いですが、他の業界でも実力が重要なポイントとなっています。
回答を見る