• ベストアンサー

php単体では表示されるが他のページから呼ぶと文字化けをします。

/img/のフォルダーの中から画像を取得し他のページで表示させようと思ったのですがphp単体では画像が表示されるのですが、require、include もしくは直接そのソースを貼って表示させると画像が文字化けし表示されません。 書いたソース define("TEST_READDIR", "./img/"); $handle = opendir(TEST_READDIR); rewinddir($handle); while (($entry = readdir($handle))) { $file = TEST_READDIR . $entry; if(is_file($file)) { $key = filemtime($file); $keys[] = $key; $data[$key] = $file; } } closedir($handle); if ( isset($keys) ) { rsort($keys); $fp = fopen($data[$keys[0]], "rb") or die(); print fread($fp, filesize($data[$keys[0]])); fclose($fp); } exit(0); なぜ他から呼び出すと表示されないのでしょうか? よろしくお願い致します。

  • melll
  • お礼率50% (114/227)
  • PHP
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
  • unimentai
  • ベストアンサー率70% (34/48)
回答No.3

他の方も回答されていますが、画像がテキスト変換されてる為に起きている現象と思われます。 呼び出し側を以下のようにされては如何でしょうか? ----<< ここから >>----- <html> <head> <title>画像呼び出しテスト</title> </head> <body> <img src="さっきのソース.php" alt="今日の一枚"> </body> </html> ----<< ここまで >>---- 現在環境がないので実証は行っておりませんが、恐らくこれで上手く表示されると思います。

その他の回答 (3)

回答No.4

確認できました。 (いや、私は質問者じゃないけど。^^) <p><img src="./img.php"> </p> こんな簡単な事で、できるんですね。 応用力というか、きちんとした理解をしてい なかった気分です。^^ 質問者様には、お力になれず、勉強不足でした。^^

回答No.2

少し調べてみましたが、分かりませんでした。 Content-Type: text/html の途中で、phpから画像だけど、データーで直に引き だしてるから、文字化けするのですが、。 コンピュータ的には、画像も文字も同じデーターなので。 JavaScript のようにMIMEタイプをimage/jpgするのは、 うまくいかないし。 ただ、どうやって利用するかは分かりませんが、 <img src="./○○.jpg" alt="○○.jpg"> と、した方がわかりやすいし、処理も一つ少ないかと。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

Content-Type: text/htmlなものから、requireやincludeしようとしているとか。 そういう状況で、image/gifやapplication/octet-streamみたいなデータが現れてるから、化けてるのでは。

melll
質問者

お礼

osamuy様 ご返信ありがとうございます。 元のページにはこちらのソースを追加しているのですがこれではダメなのでしょうか? header("Content-type: image/jpeg"); 例  <?php header("Content-type: image/jpeg"); ?> <HTML> <BODY> <?php require("さっきのソース.php"); ?> </BODY> </HTML>

関連するQ&A

  • PHP 画像の表示

    プログラミング初心者です。 PHPでブラウザに画像を表示したいのですが映らなくて 以下のソースコードは間違っているでしょうか? <?php $fileName = "img/test.jpg"; //ファイル名 if (file_exists($fileName)) { header('Content-type: image/jpeg'); header('Content-Length: '.filesize("http://localhost:8080/test.jpg")); //あった方が良い readfile("http://localhost:8080/test.jpg"); //ファイルを読み込んで標準出力に書き出し exit; } ?>

    • ベストアンサー
    • PHP
  • PHP 全角文字が文字化けまたは表示されない

    PHPでエクセルで作成したcsvファイルから商品一覧を表示させたいのですが。 一覧ページで日本語や大文字英数が含まれるデータが表示されません。 エンコードはいろいろ試してみたのですが、utf-8だと文字化け、EUC_JPやSJISだと表示されなくなってしまいます。 csvから呼び出す際に mb_convert_variables('utf-8', 'sjis-win', $tmp); としても文字化けします。 ちなみに、$dataでprintすると問題なく表示されます。 $data1では上手く表示されません。 なので、for($i=$start;$i<$end;$i++){ 以降でおかしいんだろうなとは思うのですが。 1ページに数件ずつで、次へ次へで移りたいので、ここの部分が必要です。 商品詳細ページで、同じcsvファイルを読みだしてますが、 while ($data = fgetcsv($fp, 10000)) { if($atai==$data[0]){ ・・・・ と書いてこちらは問題なく表示できています。 何が原因か見つけられずに困っています。 お分かりになる方、教えてください。 初心者レベルですので、なるべく具体的に書いていただけると助かります。 よろしくお願いします。 //ファイルからデータを読み込む処理 function inst_view($page=0) { //読み込むファイル名 $filename = FILE_PATH; //データ数をカウントする $row = 0; $data = array(); //CSVファイルの中身をすべて読み込む $handle = fopen($filename, "r"); while (($tmp = fgetcsv($handle, 1000, ",")) !== FALSE) {    if (!empty($choice1) && $choice1 == "4") { $num = count($tmp); if( $tmp[0] == "" ){ }else{ $data[$row]["no"] = $tmp[0]; $data[$row]["hito"] = $tmp[1]; $data[$row]["kuni"] = $tmp[2]; $data[$row]["tochi"] = $tmp[3]; $data[$row]["nen"] = $tmp[4]; $data[$row]["size"] = $tmp[5]; $data[$row]["cm"] = $tmp[6]; $row++; } } } fclose($handle); //降順にする rsort($data); //1ページに表示するデータ数を読み込む $page_length = PAGE_LENGTH; //全ページ数を求める処理 $maxpage = $row/$page_length; $tmp = (int)$maxpage; if($maxpage>$tmp){$maxpage=$tmp+1;} $maxpage--; //現在のページ数からデータ開始と終わりを求める $start = $page * $page_length; $end = ($page * $page_length) + $page_length; //データを格納する配列と、その指標 $cnt=0; $data1 = array(); //データ格納処理(スタートからエンドまで繰り返す。 for($i=$start;$i<$end;$i++){ //最大データ数を超えたら取得終了する。 if($i >= $row){break;} $data1[$cnt]["no"] = $data[$i]["no"]; $data1[$cnt]["hito"] = $data[$i]["hito"]; $data1[$cnt]["kuni"] = $data[$i]["kuni"]; $data1[$cnt]["tochi"] = $data[$i]["tochi"]; $data1[$cnt]["nen"] = $data[$i]["nen"]; $data1[$cnt]["size"] = $data[$i]["size"]; $data1[$cnt]["cm"] = $data[$i]["cm"]; $cnt++; } return $data1; } 別のファイルからinst_viewを呼び出しています。

    • 締切済み
    • PHP
  • PHP 1ページあたりの表示制限に関して

    <?php require_once('test/common.php'); $Data=file("test/item.csv"); $ID=$_GET[id"]; if($P>0){ $Prev=$ID-1; $PrevPage="<a href='index2.html?id={$Prev}'>前の10件</a>"; } $Size=sizeof($Data); if($Size/1-1>$ID){ $Next=$ID+1; $NextPage="<a href='index2.html?id={$Next}'>次の10件</a>"; } ?> 全<?=$Size?>件 | <?=$PrevPage?> <?=$NextPage?> 「次の10件」「前の10件」のところを文字じゃなく画像を用いたいのですが、<img src="img/next.png" width="100px" />を入れてみるとページがエラーになってしまいます。文字じゃなく画像を使うにはどのようにすればいいのですか? 教えてください。

    • 締切済み
    • PHP
  • データ受け取り

    チェックボックスよりデータを送信し、次ページで受け取りたいのですが、データは送信されているようですが、データを受け取って表示することができません。 <プログラム(一部省略)> <?php if ($handle = opendir('.')) {     while (($file = readdir($handle))!=false) {         if ($file != "." && $file != "..") {             print "<tr><td><input type=checkbox name=fp[$i] value=$file></td>";             <<省略>>             $i++;        }     } } ?> ↓次ページ(一部省略)↓ <?php for($i=0;$i<$n;$i++){ $fp[$i]=$_GET{"fp[$i]"}; print "$fp[$i]<br>"; } ?>

    • ベストアンサー
    • PHP
  • PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラム

    PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラムで「test」というディレクトリ内のファイル一覧(ディレクトリ名とファイル名)を表示するようにしているのですが、この中からディレクトリ名のみ表示させたいのですがどのようにすればいいのでしょうか? よろしくお願いします。 <?php if ($dir = opendir("test/")) { while (($file = readdir($dir)) !== false) { if ($file != "." && $file != "..") { echo "$file<br>\n"; } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • 同一ディレクトリの連番ファイルの一番大きな数字のものをindex.phpに表示する

    お手上げで、困っています。 ご教教授いただければ幸いです。 現在、以下のような連番のファイルとindex.phpが1つのディレクトリに格納されている状態で、 この中から、数字の一番大きなものをphpで表示させたいのですが、 どうすれば良いか、ご教授お願い致します。 index.php 01.jpg 02.jpg 03.jpg 04.jpg 05.jpg 06.jpg 07.jpg 08.jpg 09.jpg 10.jpg . . . more 今の状態は、ディレクトリ内のファイルを見るまでです。 その先がお手上げ状態です。 <?php define("dirfile", "."); header("Content-Type: text/plain; charset=utf-8"); $handle = opendir(dirfile); while (($entry = readdir($handle))) { if(is_file(dirfile . "/" . $entry)) { echo $entry . "\n"; } } closedir($handle); ?> よろしくお願い致します。

    • ベストアンサー
    • PHP
  • ディレクトリ内の最新の画像のみ表示したい。

    ディレクトリファイルから画像ファイルの更新日時を取得して、 拡張子を問わず、最新の画像のみ表示させたいのですが、 うまく出来ません。ご教授お願いします。 ~・~・~・~・~・~・~ <?php $dir = @opendir("****"); while($file = readdir($dir)) { $kaku = substr($file, -3, 3); if($kaku=="jpg" || $kaku=="gif" || $kaku=="png"){ $cnt++; $last = date("ymdHis", filemtime($file)); $img="$last$file"; $filename[$cnt]=$file; } } closedir($dir); } arsort($img); $img_file= substr($img, 12); $cnt=0; foreach($img_file as $value){ $cnt++; if ($cnt<=1){ echo "<img src=\"$value\">"; } } ?>

    • ベストアンサー
    • PHP
  • 日本語が文字化けしないよう読み込み

    特定ファイルにある複数行の日本語文章を 「fgets」や「file_get_contents」などで画面に読み込む時は、 単純に「mb_convert_encoding」を使えば 良いと思ったのですが 下記のようには文法的にも使えませんでした。 -------------------------------------- <?php $fp = fopen("sample.txt", "r"); $fp = mb_convert_encoding($fp, "UTF-8"); ←※間違い if($fp){ flock($fp, LOCK_SH); while(!feof($fp)){ $data = fgets($fp); echo "$data<br>"; } flock($fp, LOCK_UN); } fclose($fp); ?> -------------------------------------- すでに書き込んである 日本語が複数行書かれたファイルから 文字化けしないようにデータを読み込んで表示するには どのような処理をしたら良いのでしょうか? 複雑な処理はまだ理解できないので 簡単な処理方法があれば お教えください。 よろしくお願いいたいます。

    • ベストアンサー
    • PHP
  • 文字化けを直したい

    visual stadio C++ で、テキストファイルを読み込み、それをウインドウに表示するというプログラムを作っているのですが、表示すると文字化けしてしまいます。 原因がわかりません。 教えてください。 VC++ 2010です。 サイトを見て設定でマルチバイトに変えてあります case IDB_SELECT:{ HDC hDC; errno_t error; static LPCTSTR TEST_STR ;//= _T("左ボタンが押されました"); // ファイルを開くコモンダイアログを作成 if( !GetOpenFileName( &ofn ) ){ MessageBox( hWnd, _T("エラー"), _T("エラー"), MB_OK ); SendMessage( hWnd, WM_CLOSE, 0, 0 ); return 0; } // 選択されたファイル名を表示 MessageBox( hWnd, filename_full, _T("OK"), MB_OK ); int k=0; fp = fopen( "test.txt", "r" ); if( fp == NULL ) /* 関数が失敗していないか */ { MessageBox( hWnd,"読み込み失敗", _T("bad"), MB_OK ); return 1; /* 異常終了は0以外を返す */ } MessageBox( hWnd,"読み込み成功", _T("good"), MB_OK ); hDC = GetDC( hWnd ); while (fgets(file, 80, fp) != NULL){ TEST_STR = &file[k]; TextOut( hDC, 50, k*15+50, TEST_STR, (int)_tcslen(TEST_STR) ); k++; } fclose(fp); } return 0L; } InvalidateRect(hWnd, NULL, TRUE); // 再描画命令発 return 0L;

  • readdirで文字化け

    Smartyでファイル情報を取得するシステムを作ろうと思ってます。 まずあるフォルダ直下のフォルダ、ファイルを取得しようと思い、 下のようなものを作りました。 $dir = "./"; $data = array(); if(($dh = opendir($dir)) == true){  while(false !== ($file = readdir($dh))){   $data[] = $file;  }  closedir($dh); } $this->set('data',$data); このような感じで、tplのdataに配列の結果を出力しようと思ってますが、 $dir直下のフォルダまたはファイルが日本語だと文字化けしてしまいます。 どこかで、文字コードの設定が必要なのかな?と思ってますが それをどこですべきなのか?どのようにすべきなのかがわかりません。 わかる方がいらっしゃいましたら、どうぞ教えていただきたいと思います。

    • ベストアンサー
    • PHP

専門家に質問してみよう