We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 18446
    • 6 Posts
    自作スニペット内に、GDを使用して画像ファイルを任意のサイズに表示する
    スクリプト(下記)を埋め込んで使おうとしてるのですが、謎の数十行の
    文字列が表示されて、画像が表示されません。

    スクリプトはこれ↓
    http://aki.adam.ne.jp/php/script/thumb.php
    (クラスとして使用)

    試しに存在しない画像ファイルのパスを指定してやると、クラス内のエラー
    メッセージが返ってきます。

    同じ内容のPHPファイルを作り、MODxをインストールしてあるディレクトリ
    にアップロードしてみましたが問題無く動作しました。

    スニペットからはGDを使えないのでしょうか?

    対処法等ご存じの方がいらっしゃいましたら、よろしくお願いします。
      • 6158
      • 224 Posts
      どんなメッセージが出てるのですか?

      私も経験ありますが、snippet を単独で動かす時と、documentParser クラスの
      中で eval() により動かす時とでは、動作が違いました。

      まずは症状をお聞きしましょう。
        • 18446
        • 6 Posts
        どんなメッセージが出てるのですか?

        以下のような感じなんですが、GDからリサイズ画像は出力されたもののテキストとして
        扱われているということでしょうか?
        1行目に "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality" とあるので

        �����JFIF���������>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ���C�    $.’ ",#(7),01444’9=82<.342���C  2!!22222222222222222222222222222222222222222222222222���,��"�������������� �������}�!1AQa"q2���#B��R��$3br�
        %&’()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz����������������������������������������������������������������������������������� ������w�!1AQaq"2�B���� #3R�br� $4�%�&’()*56789:

        この調子でずらずらと embarrassed

        ちなみに

        試しに存在しない画像ファイルのパスを指定してやると、クラス内のエラー
        メッセージが返ってきます。

        これは、正常にエラーが返ってきていますということです。

        よろしくお願いします。
          • 27086
          • 37 Posts
          こんにちは。

          GDの使用自体は問題ないはずです(gtextというスニペットが参考になります)。
          当てずっぽうですが、parse段階でスニペットの出力結果を展開されてるため、ということでしょうか。

          ご使用のコードは最終的にhttpヘッダを付けてイメージのデータを直接クライアント側へ返すのだと思いますが、ブラウザ側に最終データが渡るまでのMODxの処理がありますのでそこで引っかかるんじゃないでしょうか。
          前述のgtextの場合はimageディレクトリに画像ファイルを書き出してそのpathを返すようになっています。この方法に書き換えるのが正解でしょうか。。。
          もしかするとプラグインとしてOnWebPagePrerendeイベントで、何か適当な記述をトリガーにして使いたいコードを呼び出すような事をすれば対応可能なのかも。今思いついただけのことで根拠なしですが。
            • 33488
            • 429 Posts
            これって content-typeの問題じゃないですかねぇ??
            違うかなぁ・・・
            headerを出力してcontent-type: image/jpeg とか入れたら出たりとか

            ちなみに、phpThumbをMODxと切り離して呼び出すことはやったことはあります。
              • 18446
              • 6 Posts
              headerを出力してcontent-type: image/jpeg とか入れたら出たりとか

              これは元々してあるみたいです。

              とりあえずsnippetsディレクトリ下にディレクトリを作りスクリプトをアップして、
              スクリプトの配布元にあるようにスニペット内から以下をechoして使うことにしました。

              <img src="thumb.php?path=(ファイルへの相対パス)[&maxsize=(長辺の最大サイズ)]">
              http://aki.adam.ne.jp/php/script/thumb.php

              本当はスニペット内にクラスの定義を入れて使いたかったんですが・・・

              ありがとうございました。
                • 33488
                • 429 Posts
                スニペットでHeaderを出力しているとすると、それが実際に出力してないような・・・ロジック的に
                ドキュメントをパース(スニペットとか実行)した後にHeaderをコアが出しているようになっていたかと思います。

                wgetとかでチェックするといいかも知れませんが、、であれば、プラグインでヘッダだけ出すという手もありますが・・・。
                ドキュメント自体のcontent-typeをImageにしたら直るかもです
                  • 6158
                  • 224 Posts
                  どういう組み込み方や書き方をされたのかが気になります。

                  Quote from: Mart at Jun 18, 2007, 11:54 AM

                  自作スニペット内に、GDを使用して画像ファイルを任意のサイズに表示する
                  スクリプト(下記)を埋め込んで使おうとしてる

                  スニペットとそれを埋め込んだドキュメントを見せてもらえますか?
                    • 6158
                    • 224 Posts
                    snippet にしてしまうと、仰ってる現象は当然のだと思います。
                    thumb.php 内では、読み込んだ画像を echo で出力しているだけです。

                    ということは、snippet としてしまうと、echo() された内容を文字列として
                    変数に格納してしまいます。

                    で、それが出力されている (と思います)。



                    追記:

                    拡大縮小をするためのライブラリとして使いたいのが当初の目的でしょうから、どうするかなぁ。
                    - thumb.php を呼び出すラッパーをスニペットとして作成 [[thumb]]
                    - [[thumb]] は html 内に表示させる文字列だけを返す。例 thumb=sample.png
                    - ob_start(), ob_get_content() に捕まらないよう、スニペットとは別のリクエストとして実行させたい。
                    - まるで javascript の xmlhttprequest() ですな。
                      • 18446
                      • 6 Posts
                      ZeRoさん、custarさん、shobuさん

                      ありがとうございました。取りあえず上に書いた方法で動いてますので
                      先に進もうと思います。

                      スニペットとそれを埋め込んだドキュメントを見せてもらえますか?

                      配布されているものを、ほぼそのままペーストしただけです。
                      引数渡すところだけテスト用に書き直して。

                      今作っているのは、既存のDBから製品情報を抜き出して、既存のサイトと同様
                      のフォーマットで表示させようとしています。

                      今は、フレンドリーURLおよびmod_rewriteのところでハマってますが、もう少し
                      試行錯誤してみます。分からなかったらまた質問させてください。
                      mod_rewriteはまったく知らない状態からのスタートなので・・・