readfile() を使って画像を読み込んで表示したんですが、文字化けしてしまいまして、直すには Header を書くみたいなんですが、全く知識がなくわかりません。
教えてください。
###追記
コードは以下です。
php
1 public function usericon_read(){ 2 header("Content-Type: image/png"); 3 return readfile("./../users/icons/".$this->me()->id.".png"); 4 }
画像と同じ名前でtxtファイルを作ってみて表示してみると表示しました。画像だけが表示しない感じです。
###追記2
gallu さんの回答を元にコードを書いてみました。
php
1<?php 2 3namespace MyApp\Module; 4 5class read_iconfile{ 6 public function __construct(){ 7 header("Content-Type: image/png"); 8 readfile("./../../users/icons/hasegawaryou.png"); 9 } 10} 11
※hasegawaryou のところにユーザのIDが入るように後で改善します。
html
1<img src="./../lib/Module/read_iconfile.php" />
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
readfileを絶対に使わなければならないのでなければ、質問者さんが実現したい挙動は以下のように実現できると思いますが、いかがでしょうか?
また、finfo_*
という関数は、fileinfo
という拡張モジュールの関数で、場合によってはphp.ini
からphp_fileinfo.dll
を有効にしなければなりません。
PHP
1<?php 2function getImage($filepath) 3{ 4 $mimelist = ["image/gif", "image/jpeg", "image/jpg", "image/png"]; 5 6 if (file_exists($filepath)) { 7 $fileinfo = finfo_open(FILEINFO_MIME_TYPE); 8 $mime = finfo_file($fileinfo, $filepath); 9 if (in_array($mime, $mimelist, true)) { 10 $image = file_get_contents($filepath); 11 return "data:" . $mime . ";base64," . base64_encode($image); 12 } 13 } 14 return false; 15} 16?> 17<!DOCTYPE html> 18<html lang="ja"> 19<head> 20 <meta charset="UTF-8"> 21 <title>タイトル</title> 22</head> 23<body> 24<img src="<?= getImage("test.png"); ?>" alt="画像"> 25</body> 26</html>
投稿2017/04/25 14:24
編集2017/04/25 14:36総合スコア14731
0
「画像の出力」で「文字化け」でしょうか?
可能性としては
・本当は画像が出力されてほしい
・でも、実際には「よくわからない文字が出力されている」
という状況であるように思われましたが、如何でしょうか?
もし上述だとしますと、書かれている通り「headerを出力する」必要があります。
headerは色々な用途で使いますが、今回書く「Content-type」は、「これから**を出力するよ~」という、ブラウザに対する合図のようなものです。
デフォルトではPHPは「text/html(HTMLを出力するよ)」となっているので。
画像を出す場合は、明示的に記述して「画像を出力するよ」と、教えてあげる必要があります。
プログラムですが、おそらく
PHP
1<?php 2// ファイルから画像を読みだして出力する 3readfile( $ファイル名 );
と書いてあるかと思います。
この、readfileの前に、以下のようなコードをさしはさみます。
PHP
1<?php 2// ヘッダを出力する 3header('Content-Type: image/jpeg'); 4// ファイルから画像を読みだして出力する 5readfile( $ファイル名 );
上述は、出力するファイルが「Jpegである」と仮定した場合です。
もしgifの場合は、「image/jpeg」の所を「image/gif」に、pngであれば「image/png」に変更してください。
上述でおそらく画像が出力されると思うのですが、もしされない場合は、元のソースコードを、可能な範囲で書いていただくと、もう少し詳しく回答できるかもしれません。
投稿2017/04/25 13:27
総合スコア506
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/25 14:26
2017/04/26 14:12
2017/04/27 13:33
2017/04/28 12:56
2017/04/28 13:59
2017/05/05 01:39
0
ベストアンサー
添付された画像をじーっと見るとコンソールログになにやら "Resource interpreted as Document but ..." などとおかしなメッセージが出ていますね。
まずはブラウザの URL 欄に直接 "http://192.168.12.9:9000/" と打ち込んでみて下さい。
これで画像が出るなら html 側の問題。
出ないなら PHP 側かの問題。もしくは URL が間違っている。
コンソールログの内容からすると、ちゃんとPHP側でヘッダーを送っていないように見えます。
どんなコードを書いているか、質問に書いてください。
↑追記: ヘッダーはイメージなのに、内容がテキストなんじゃない? とブラウザさんがおっしゃっているので、ファイルがちゃんと読み込まれていないのかもです。
また、Chrome のデベロッパーツールの "Network" タブからどのようなデータがサーバから送られているか見ることが出来るので、そこでも想定通りのデータが送られているのか確認しましょう。
追記です。
超単純に書くと、
index.html
html
1<img src="getImage.php" />
getImage.php
php
1<?php 2header("Content-Type: image/png"); 3readfile("someImage.png");
同じディレクトリに上記2つのファイルと画像ファイルを入れてブラウザで index.html を表示すると画像が出ます。
投稿2017/04/25 14:19
編集2017/04/28 18:17総合スコア90
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/25 14:41
2017/04/25 14:45
2017/04/26 14:07
2017/04/26 16:02
2017/04/27 13:02
2017/04/29 09:26
2017/04/29 09:42
2017/04/29 14:16
2017/04/30 13:13 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。