人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPを使ってHTMLで画像表示させるようにしたいのですが・・・
PHP側は、どのような記述にしたよいのでしょうか?
例えば、こんなファイルなのですが・・・
?http://chartpark.net/wti-dow.php?

このPHPの内側のプログラムはどんな形になっているのでしょうか?
自分でも同じように画像を呼び込みたいのですが、その記述がどうして良いか分からず困っています^^;

●質問者: idetuyo
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:HTML PHP ファイル プログラム 画像
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● GoldenDawn
●50ポイント

他から既存の画像を読み込む場合の例。

<?php
$img_path = 'http://q.hatena.ne.jp/images/logo_hatena.gif' ;
$img = file_get_contents($img_path) ;

header('Content-type: image/gif') ;
echo $img ;
?>

自分で画像を作る場合の例 (要 GD 関数)

<?php
$img = imagecreatetruecolor(300, 300) ;
imagefill($img, 0, 0, 0xffffff) ;
imagefilledrectangle($img, 50, 50, 250, 250, 0xff0000) ;

header('Content-type: image/png') ;
imagepng($img) ;
?>

http://q.hatena.ne.jp

◎質問者からの返答

ありがとうございます!

私の場合は、外部から画像を読み込むので上の記述の形になりますが

$img_path = 'http://q.hatena.ne.jp/images/logo_hatena.gif' ;

$img = file_get_contents($img_path) ;

header('Content-type: image/gif') ;

echo $img ;

?>

この記述のPHPファイルを生成してサーバーにアップロードしたのですが

うまくいきませんでした^^;

phpプログラムも、HTMLと同じように<body>タグのように前後のタグを生成する必要があるのでしょうか?

全くPHPを利用した事がなくてどうしたら良いかもわからない状態です^^;

おそらくサーバー側でもPHPを利用するならば、パーミッション設定や

PHPのインストールなどをしなければならないような

気がしているのですが・・・

初歩的なことですみません。


2 ● pahoo
●100ポイント

コメント欄に書き込めないので、回答欄にて確認することをお許しください。

この記述のPHPファイルを生成してサーバーにアップロードしたのですが

うまくいきませんでした^^;

どのように、うまくいかなかったのでしょうか。

以下の点をお知らせください。


  1. うまくいかなかったということですが、どんなエラーメッセージは表示されましたか? それとも、PHPソースプログラムそのものが表示されましたか?
  2. そのサーバはPHPを利用できますか?
  3. PHPを利用できるディレクトリが制限されていませんか?
  4. 利用できるPHPのバージョンは何ですか?

URLはダミーです。 http://q.hatena.ne.jp/

◎質問者からの返答

ありがとうございます。

具体的なご質問でとても助かります!

下記のようなエラーメッセージが出ています。

Warning: file_get_contents(http://q.hatena.ne.jp/images/logo_hatena.gif ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /virtual/w-stock/public_html/www.w-stock.biz/cmechart1.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /virtual/w-stock/public_html/www.w-stock.biz/cmechart1.php:4) in /virtual/w-stock/public_html/www.w-stock.biz/cmechart1.php on line 6


サーバーは、PHPが利用できます。

以下のバージョンが利用可能のようですPHP3/4/5

またサーバーのファイルのパーミッションは

705になっております。

3.PHPを利用できるディレクトリが制限されていませんか?

これについては、どのような意味か良く理解できていないのですが

パーミッションの設定という事でしょうか?

サーバーの利用環境は、このような形となっております。

●ディスクスペース:50?300メガバイト(申請制)・複数アカウント可

●CGI/SSI(Perl・Ruby・Python・C・PHP3/4/5)が利用可能

●データベースが利用可能(MySQL/PostgreSQL)

●SSH(TELNET代替)が使用可能

●安全な通信:SSL対応(当社ドメインの正式証明書使用)

●パスワード制限可能:.htaccess利用可能

●サーバーログ統計が閲覧可能:参照元・アクセス回数などがわかる


3 ● pahoo
●100ポイント

エラー情報をありがとうございます。

対策を記します。


1.allow_url_fopenの問題

以下のスクリプトを実行してください。

<?php
phpinfo();
?>

ブラウザの画面に php の設定情報が表示されます。

Configuration - PHP Core - allow_url_fopen の値が On になっていますか?

もし Off になっているとすると、関数 file_get_contents を使って外部サーバのデータを読み込むことができません。Onにするためにはサーバ管理者権限が必要ですので、サーバ管理者にご相談ください。


2.HTTPヘッダの問題

次に、そのサーバは自動的に広告を表示したり、アクセス情報収集をしていませんか?

エラーメッセージから推測すると、PHPスクリプトとは別にHTTPヘッダを送信しているようです。

もしそうだとすると、読み込んだ画像をそのまま表示させるのは困難です。

この点についてもサーバ管理者にご確認ください。


代替案

以上2点の問題がクリアされない場合の代替案として、単純にHTMLを発生させているだけですが、下記をご紹介します。

<?php
$img = 'http://www.hatena.ne.jp/users/pa/pahoo/profile.gif'; //表示させたい画像

echo <<< EOF
<html>
<body>
<img src="$img" />
</body>
</html>

EOF;
?>
◎質問者からの返答

pahooさま

ご丁寧にありがとうございます。

早速、導入してみました。

http://www.w-stock.biz/test.php

どうやらallow_url_fopenはOnになっています。

こちらは、問題ないようです。

また2についてですが・・・

有料のサーバーを利用しておりますので、自動的に広告が出る事はないです。

またアクセス解析は別に忍者ツールを導入しておりますので、アクセス解析のジャバスクリプトの

ソースを貼り付けているだけです。

HTTPヘッダーの送信しているかもしれない点については

どのような事なのかまだ理解できておりませんが

ただ今、状況を学習中です。

ありがとうございます。

サーバー側にも障害や問題がないか確認してみます。

また大体案での画像表示はできたのですが

目的としているチャート図を外部から引っ張ってくる事については

現状のHTMLで直接画像表示させているのと同じ形のようですね^^;

どうやらサイトのURLがチャート提供会社から嫌われているみたいなので

PHPでローカルから引っ張った画像を表示させたいと思っております。

アクセスが多いサイトなので、恐らくHTML上に直接表示させていたのでは

おそらく負荷が多くなっていた為に、URLがチャート提供会社から

嫌われているのではないかと思います。

なんとかphpにして画像を表示させられるようにしたいと考えています。

以下のサイトで同じデータの引き出し先から

HTML直接リンクにより画像が引き出せなくなりました^^;

なんとかこの状況を打開すべくPHPファイルでの画像引き出しが

良いだろうと考えております。


4 ● pahoo
●120ポイント

ということは、GoldenDawn さんが示した1番目のスクリプトは、エラーが出ずに実行できているということですか?


下記のスクリプトに何の手も加えず(JavaScriptを追加することなどせずに、$infnameのURLも変更せずに)実行した場合に、エラーは出ますか?

<?php
$infname = 'http://www.hatena.ne.jp/users/pa/pahoo/profile.gif';
$infp = fopen($infname, 'rb');
$img = '';
while (($ss = fread($infp, 10000)) != FALSE) {
 $img .= $ss;
}
fclose($infp);

header('Content-type: image/gif') ;
echo $img;
?> 
◎質問者からの返答

いえ、GoldenDawn さんが示した1番目のスクリプトは、エラーが出ます。

以下のようなエラーメッセージです。

Warning: file_get_contents(http://www.hatena.ne.jp/users/pa/pahoo/profile.gif ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /virtual/w-stock/public_html/www.w-stock.biz/cmechart1.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /virtual/w-stock/public_html/www.w-stock.biz/cmechart1.php:4) in /virtual/w-stock/public_html/www.w-stock.biz/cmechart1.php on line 6

しかし、pahooさんの提案してくださった

代替案はエラーは出ずに表示されます。

そして、今ご紹介いただいたスクリプトもエラーは出ません。

http://www.w-stock.biz/cmechart3.php

しかしながら・・・

この動作ならばと思って、http://www.hatena.ne.jp/users/pa/pahoo/profile.gif この部分を表示させたいチャート図のURLに変更してみた所、これはエラーが出てしまいます^^;

以下のようなエラーメッセージです。

Warning: fopen(http://charts.quote.com/ifs/ifs?cont=NKD+1%21&period=V&varminute...) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 500 Internal Server Error in /virtual/w-stock/public_html/www.w-stock.biz/cmechart4.php on line 3

Warning: fread(): supplied argument is not a valid stream resource in /virtual/w-stock/public_html/www.w-stock.biz/cmechart4.php on line 5

Warning: fclose(): supplied argument is not a valid stream resource in /virtual/w-stock/public_html/www.w-stock.biz/cmechart4.php on line 8

Warning: Cannot modify header information - headers already sent by (output started at /virtual/w-stock/public_html/www.w-stock.biz/cmechart4.php:3) in /virtual/w-stock/public_html/www.w-stock.biz/cmechart4.php on line 10


挿入したいURLになんらかなの問題があるのかもしれませんが直リンクだと表示されるので、なぜ、これで表示できないのか不思議でなりません。

これは参考になるかわかりませんが、同じチャートをうまく表示させる事に成功しています。

pngファイルからの引き出しになっているみたいですが・・・う?ん。

ご親切にご検討くださり本当に感謝しております。


5 ● pahoo
●150ポイント

件のサイトを調べてみると、User-Agentを求めることと、画像データ本体がChunked形式で送信されていることが分かりました。

そこで、関数 fsockopen を使って、以下のようなスクリプトを組み立ててみました。

<?php
$type = 'Content-type: image/png'; //画像データのMIME-type
$host = 'charts.quote.com'; //目的のホスト
$path = '/ifs/ifs?cont=NKD+1%21&period=V&varminutes=5&size=560x384&bartype=CANDLE&bardensity=high&headerbackground=9,50,165&headerforeground=255,255,255&headerdatacolor=255,255,255&studyheaderbackground=9,50,165&random=7595'; //目的のパス

$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (! $fp) {
 echo "$errstr ($errno)<br />\n";
} else {
 $out = "GET $path HTTP/1.1\r\n";
 $out .= "Host: $host\r\n";
 $out .= "User-Agent: Mozilla/5.0\r\n";
 $out .= "Connection: Close\r\n\r\n";
 fwrite($fp, $out);
 //HTTPヘッダを読み飛ばす
 while (! feof($fp)) { 
 $headers = fgets($fp, 8192);
 if (trim($headers) == '') { 
 break; 
 } 
 } 
 //画像を読み込む(chunked形式)
 $img = ''; 
 while (! feof($fp)) { 
 $ss = fgets($fp);
 $cnt = intval($ss, 16);
 while ($cnt > 0) {
 $bb = fread($fp, $cnt);
 $cnt -= strlen($bb);
 $img .= $bb;
 }
 fread($fp, 2); //\r\nをスキップ
 }
 fclose($fp);
 header($type) ;
 echo $img;
}
?> 
◎質問者からの返答

スクリプトを組み立ててくださったのですか(大汗)

試しに導入してみましたが・・・

なんとこれで動作するではないですか!!!!

http://www.w-stock.biz/

ばっちり表示されるようになりました。

なんとお礼を良いやら・・・

ただ今、全ての部分にこのPHPスクリプトを導入中です。

本当にありがとうございます。

はてなポイント以外に何か別途お礼をしたいのですが・・・

どのようにしたら良いのでしょうか^^;

本当に助かりました。

ありがとうございます。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ