プロが教えるわが家の防犯対策術!

何度か同様の質問をしていたのですがどうしもて解決せず、今日自分でいじっていて一部原因が分かりました。

やりたいことは単純にphpで画像を表示したい・・というだけだったのですが、初心者サイトを見て
以下の通りにやってみても必ず画像が文字化けします。
原因がまったく分かりませんでしたが、どうも"<?php"の前に文字や空欄や改行があると文字化けするみたいです。<?phpの後ろは特に改行などあっても文字化けしないようです。
つまり一行目の一マス目に"<?php"があれば問題なく画像が表示されるのですが
私はhtmlサイトの中でphpを使いたいのでこれで困ります。

phpの本など見ましたがこのような現象は載っていません。
どうしてこのような現象が起きるか分かる方いますでしょうか??

<?php
$img = file_get_contents("aaa.jpeg'");
header('Content-type: image/jpeg');
echo $img;
?>

<?php
header('Content-type: image/jpeg');
readfile('aaa.jpeg');
?>

A 回答 (3件)

http://php.net/manual/ja/function.header.php

> 覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。
> 頻出するエラーとして、(略)空白または空行があり、header() の前に出力が 行われてしまうというものがあります。

マニュアルにちゃんと書いてあります。


> 私はhtmlサイトの中でphpを使いたいのでこれで困ります。

すみません、これは意味不明です。

もし

ここに「画像<?php 〜readfile〜?>」を入れる

みたいな使い方をしたい、ということならできません。
    • good
    • 0

案1



-- aaa.php
HTMLページの中で画像タグ <img src="aaa_sub.php?p=12345" type="image/jpeg"> を挿入
--- aaa_sub.php
<?php
// aaa.jpeg の画像表示
// 必要ならパラメーター p を読み取る

案2

HTMLページの中で画像タグ <img src='data:image/jpeg;base64,<?php
// aaa.jpeg を Base64 形式で表示
?>'> を挿入
    • good
    • 0

画像ファイルを readfile などで直接取り込む場合は、画像専用のスクリプトを用意してください。


でないと、画像と認識されず、うまく出力されません。

たとえば
[image.php]
<?php
header('Content-type: image/jpeg');
readfile('aaa.jpeg');
?>

image.php にはこれ以外にはもう何も書いてはいけません。せいぜいファイルの存在チェックとかくらいです。とりあえず気にしないでください。
では、どのように表示させるかというと、img 要素を使います。

[test.html]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
<head>
<title>test</title>
<meta charset="UTF-8" />
</head>
<body>
<p><img src="image.php" alt="" width="10" height="10" /></p>
</body>
</html>

単純な HTML ファイルですが、これで画像が表示されると思います。

画像とHTMLは完全に別にしないと動作しないので気を付けてください。とりあえずそういうものだと思ってください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!