投稿者 |
投稿 |
|
#1 2010 年 2 月 17 日(水) 10:18
|
会員
登録者: 2 2010
返信数: 7
|
はじめまして。yoccoと申します。 宜しくお願いします。
windows2008 SP1サーバーでPHP5.2.11を使用しています。 そこでGD2のライブラリを使ってJPEGファイルサムネイルやそのものを表示するプログラムを作りました。 そこで、以下のような現象が起こり困っています。 どなた様か、解決方法を知っている方いませんでしょうか?
現象 Windows2008をインストールした最初の段階では動いていました。 サーバOSのUPDATEをしたら、ブラウザの画像の表示が×になり表示できなくなりました。
調査した事 うまく画像を表示できるケースはあり、PHPソースファイルのキャラクターコードで動作が変わります。 ANSI(メモ帳で指定)の場合はOKでした。 UTF-8の場合はNGでした。
どちらのコードにしろ、画像のデータをブラウザに転送しているようですが、 その内容がおかしなデータになっているようです。 壊れているのか?中身が変な風に変換されていそうです。
知りたいこと OSのパッチファイルが原因であることは間違いないと思いますが、 何かPHPや他の設定で解決する方法はありませんでしょうか?
PHPファイルはライブラリなどいくつか共通のものがありUTF-8で保存しておきたい内容です。
テストプログラム <?php $jpeg = "d:/test.jpg"; $image = imagecreatefromjpeg($jpeg); header("Content-type: image/jpeg"); imagejpeg($image); ?>
宜しくお願いします。
|
|
#2 2010 年 2 月 17 日(水) 11:12
|
会員
登録者: 8 2009
返信数: 103
|
こんにちは。
<?php
mb_http_output("pass"); $jpeg = "d:/test.jpg"; $image = imagecreatefromjpeg($jpeg); header("Content-type: image/jpeg"); imagejpeg($image); imagedestroy($image);
?>
よくわかりませんが、変換しないようにしてみてはどうでしょうか。
|
|
#3 2010 年 2 月 17 日(水) 12:39
|
会員
登録者: 2 2010
返信数: 7
|
nullaさん 返信いただきありがとうございます。 出力を変換しない命令を入れて(php.iniの設定もpass)やってみましたが、状況かわらずでダメでした。 何かおかしな変換が入るスイッチが入っちゃった感じで、なんとかならないかなぁ。 レジストリとかポリシーとかかな(悩
|
|
#4 2010 年 2 月 17 日(水) 14:04
|
会員
登録者: 8 2009
返信数: 103
|
<?php
$jpeg = "d:/test.jpg"; $image = file_get_contents($jpeg, FILE_BINARY); header("Content-type: image/jpeg"); print $image;
?>
このスクリプトは動作するでしょうか?
本当にパッチが影響してるのならアンインストールすれば解決しそうですけどそうはいきませんよね。
|
|
#5 2010 年 2 月 17 日(水) 14:56
|
会員
登録者: 2 2010
返信数: 7
|
nullaさん たびたび有難うございます。 結果は同じでした。PHPファイルの保存キャラクターコードで結果がOK/NGになりました。 パッチに関して、あてた状態の他のサーバーで試したら動作するマシンもありました。 それに、納品機なのでパッチを外すのはちょっとですね。 WebサーバーはApache2.0ですが、これが何か変換する事はないですよね(悩
|
|
#6 2010 年 2 月 17 日(水) 15:43
|
会員
登録者: 8 2009
返信数: 103
|
もしかしてメモ帳からUTF-8で保存してますか? もしもそうならメモ帳でANSI保存したあとTeraPadから読み込みUTF-8Nで保存してください。 今さっきメモ帳のUTF-8保存をバイナリでみたらBOM付でしたので。 TeraPadでなくてもBOMなしUTF-8保存できるテキストエディタならどれもいいです。
|
|
#7 2010 年 2 月 17 日(水) 16:11
|
会員
登録者: 2 2010
返信数: 7
|
nullaさん そそそ、それ正解でした。 BOMなし保存で、テストプログラムは動作しました! この問題はPHPの世界では常識ですか?(私はどちらかというと初心者です) LINUXで構築したPHPソースをwindowsへ移植していてこの問題にぶつかりました。 全ソースをUTF-8BOMなしへ変換してテストを進めていと思います。 まずは、第一段階クリア。有難うございました。
|
|
#8 2010 年 2 月 17 日(水) 16:49
|
会員
登録者: 8 2009
返信数: 103
|
> この問題はPHPの世界では常識ですか? phpの世界というより「プログラムやスクリプトを書くときはメモ帳を使わない」ですね。
phpの場合(webアプリ全般ですが)httpヘッダ送る前にデータを送ってはいけないが常識になります。 今回BOMというデータが送られていました。
|
|
#9 2010 年 2 月 17 日(水) 17:49
|
会員
登録者: 2 2010
返信数: 7
|
メモ帳の落とし穴は初めて知りました。 まさかPHPファイルそのものについているデータが送られていたとは、ちょっと驚きです。 LINUXでもそうなるのでしょうかね。 大変勉強になりました。 nullaさん、有難うございました。
|