もっとスッキリ書いてみたいのですが - PHPプロ!Q&A掲示板

379

  • 1000P

もっとスッキリ書いてみたいのですが

質問日時 / 2007年2月23日 18:52    回答数 / 15件

Questioner:  yumisaiki  このエントリーをはてなブックマークに追加 

キーワード / 配列の書き方   

こちらの 
 http://www.phppro.jp/qa/283

で教えていただいて、

 http://www.wgpw.jp/blog.php
 のように外部ブログのRSSを利用して情報を表示できるようになりました。
 
 これを http://www.wgpw.jp/
 にモジバケするので iframe を使って表示させています。
 
 それはもうしかたないのかもしれないのですが、
 左右の情報も、どうしても htmlで キレイに左右に並べることができず、左側が rss1.php 右側は rss2.php と2つを貼り付けています。

 それもカッコ悪いけど、そういうのもありかなとは思うのですが、

 疑問に思うのは、私の書いた rss1.php の書き方です。

  1. <?php
  2.  // RSSを取得する
  3. $content = file_get_contents("http://blog.wgpw.jp/index.rdf");
  4.  
  5. // 正規表現を用いてimgタグを抜き出す
  6.  $pattern = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/';
  7.  $pattern2 ='/<title>(.*)<\/title>/'
  8.  $pattern3 ='/ <link>(.*)<\/link>/';
  9.  $res = preg_match_all($pattern$content$matches);
  10.  $res1 = preg_match_all($pattern2$content$matches1);
  11.  $res2 = preg_match_all($pattern3$content$matches2);
  12.  
  13.  
  14.  if ($res) {
  15.      $tag_list  = $matches[0];
  16.     $name_list = $matches[1];
  17. } else {
  18.     $tag_list  = array();
  19.      $name_list = array();
  20.  }
  21.   if ($res1) {
  22.      $tag_list1  = $matches1[0];
  23.      $name_list1 = $matches1[1];
  24. } else {
  25.     $tag_list1  = array();
  26.     $name_list1 = array();
  27.  }
  28. if ($res2) {
  29.      $tag_list2  = $matches2[0];
  30.      $name_list2 = $matches2[1];
  31. } else {
  32.     $tag_list2  = array();
  33.     $name_list2 = array();
  34.  }
  35.  mb_convert_encoding($name_list"utf-8");
  36. print "$name_list1[1].<br>"
  37.  print "<a target=\"_parent\" href=\"$name_list2[1]\"><img border=\"0\" src=\"";
  38.        print "http://blog.wgpw.jp/images/"($name_list[0]) ;
  39.        print "\"alt=\"$name_list1[1]\" width=\"185\" height=\"247\"></a>";
  40.        
  41.  ?>

このように、 画像とタイトルとリンクにそれぞれにパターンをとり、まったく同じ IF else 構文を使って配列に入れるというだけのものです。
写真が配列[0]のときは、リンクと写真は[1] の配列になります。
単純にrss2.php は写真が配列[1]のときは、リンクと写真は[2] で書いてあるだけです。

このサイトのPHP講座を読みながら、なんとかもっとスッキリ書けるのではないかと思うのですが…。
ランダム関数とか使っていろんな写真をランダムに表示させることができたらおもしろいと思うのですが。
例えば name_list[a] のときは name_list1[a+1] name_list2[a+1] とか書けないものでしょうか?

これを私が考えると、 rss1.php から rss12.php まで全部書き、それをランダムで rss(ランダム).php
とかにしてしまいそうになります。 それでも確かにやりたいことはできますが、間違っていると思うのです。

アドバイスよろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01nakamuraya>>CODE <?php // RSSを取得する $content = file
┃┗A01-1yumisaiki大変参考になりました。 つくづく私の初心者ぶりを感
┣A02weekendphpやりたいことと違うかも知れませんが、 割と見やすく
┃┗A02-1yumisaiki前からいつか?で数字を書いて内容を変えるのをやって
┃ ┗A02-1-1weekendphp// すべてをエンコードし配列に入れる の所は、こち
┃  ┗A02-1-1-1yumisaikiご丁寧にありがとうございました。 まったく同じこ
┃   ┗A02-1-1-1-1weekendphpなかなか最初はどこでつまづいているのかが分からなか
┃    ┣A02-1-1-1-1-1yumisaikiこの意見は質問者によって削除されました。
┃    ┗A02-1-1-1-1-2yumisaiki作りなおしていただいたものをやってみたら、モジバケ
┣A03pascalとりあえずランダム版を作ってみました。 原型は残っ
┃┗A03-1yumisaikiありがとうございます。 ランダムはフラッシュに読込
┃ ┗A03-1-1pascal.phpファイルの文字コードは何ですか? 「http://w
┃  ┗A03-1-1-1pascal書いてから気づきましたが、「文字コード」ではなく「
┣A04yumisaiki>>CODE <?php // URLの指定 $rdf_url = "http://
┗A05signal>>CODE <?php { // これは Shift_JIS だよ @ 文字
 ┗A05-1yumisaikiなぜかエラーが出てしまいます。 unexpected $end

回答一覧

並び替え:

A01 参考になった
answerernakamuraya [2月23日 20:13]

  1. <?php 
  2. // RSSを取得する 
  3. $content = file_get_contents("http://blog.wgpw.jp/index.rdf")
  4.  
  5. // 正規表現を用いてimgタグを抜き出す 
  6. $pattern_img   = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/'
  7. $pattern_title = '/<title>(.*)<\/title>/';  
  8. $pattern_link  = '/<link>(.*)<\/link>/'
  9. $res_img   = preg_match_all($pattern_img,   $content$matches_img)
  10. $res_title = preg_match_all($pattern_title$content$matches_title)
  11. $res_link  = preg_match_all($pattern_link,  $content$matches_link)
  12.  
  13.  
  14. if ($res_img) { 
  15.         $img_list = $matches_img[1]
  16. } 
  17. if ($res_title) { 
  18.         $title_list = $matches_title[1]
  19. } 
  20. if ($res_link) { 
  21.         $link_list = $matches_link[1]
  22. } 
  23.  
  24. //print_r($img_list);
  25. //print_r($title_list);
  26. //print_r($link_list);
  27. //mb_convert_encoding($img_list, "utf-8"); 
  28. print "$title_list[1].<br>";  
  29. print "<a target=\"_parent\" href=\"$link_list[1]\"><img border=\"0\" src=\""
  30. print "http://blog.wgpw.jp/images/"($img_list[0]) ; 
  31. print " \"alt=\"$title_list[1]\" width=\"185\" height=\"247\"></a>"
  32.  
  33. ?>

上記のソースコードを試してみようと思ったのですが、変数名が分かりにくかったので、とりあえずそこを書き直してみました。


ランダム機能の作り方ですが、まずは乱数を発生させるrand関数のマニュアルを確認してみてください。
http://www.phppro.jp/phpmanual/php/function.rand.html

使い方としては、まずはランダムな数値を作成
  1. $random = rand(0, 最大値);

そしてそれを配列のキーとして使用する。
$img_list[$random]
$title_list[$random]
$link_list[$random]

こんな感じに使えば出来ると思います。
ここの最大値は $img_list の要素数にすればよいので、count関数を使ってみてください。


で、ここで、
  1. print_r($img_list);
  2. print_r($title_list);
  3. print_r($link_list);
を試してみて気づいたのですが、なぜか$title_listと$link_listだけ要素数が一つ多いようです。
このせいでimg_listと$title_list,$link_listのキーの数値がずれてしまっています。
これはRSSのトップにある、サイト自体の内容を表す、
  1. - <channel rdf:about="http://blog.wgpw.jp/index.rdf">
  2.   <title>WG+わんのブログ</title> 
  3.   <link>http://blog.wgpw.jp/</link> 
  4.   <description>・・・
↑ここの部分まで取得してきてしまっているからのようです。

これはarray_shift関数等を使って$title_listと$link_listから最初の余計な要素を取っ払ってみてください。

この意見に回答する

ツリーへ TOPへ

A01-1
replyeryumisaiki [2月23日 20:37] (最終編集:2月23日 21:02)

大変参考になりました。
つくづく私の初心者ぶりを感じます。 

 if if if というのは、要するに$res_img と$res_titleと$res_link にそれぞれ$matches_img[1] と 
$matches_title[1] と $matches_link[1] に入れろということなんでしょうか?
 だったら、if でカカナイといけないものでしょうか? 

 日本語で理解できないと 気になって前に行けない文系出身なんです。

 これは私にはできないかもという気持ちなってしまいましたが、ここで負けずにがんばってみたいと思います。
 数やったら わかるようになるのでしょうか? 

 やってもやっても壁があります。 

この意見に回答する

ツリーへ TOPへ

A02 満足
answererweekendphp [2月23日 20:19] (最終編集:2月23日 20:30)

やりたいことと違うかも知れませんが、
割と見やすく書き直してみました。

で、このphpにアクセスする際に、

http://何とか.jp/このphp.php?imgno=0
http://何とか.jp/このphp.php?imgno=1
http://何とか.jp/このphp.php?imgno=2

などとリストの何番目を指定するかを指定すれば、1つのPHPで流用できるかと思います。

詳細はコメントを多めにつけておいたので。。。
わからなければ、こちらで質問してください。

  1. <?php
  2.  
  3. // URLの指定
  4. $rdf_url = "http://blog.wgpw.jp/index.rdf";
  5.  
  6. // 正規表現を指定
  7. $pattern["img"]   = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/';
  8. $pattern["title"] ='/<title>(.*)<\/title>/'
  9. $pattern["link"]  ='/ <link>(.*)<\/link>/';
  10.  
  11. // RSSを取得
  12. $content = file_get_contents($rdf_url);
  13.  
  14. // 各リストを読み込み(やることが一緒なので、関数にまとめました)
  15. $imgs   = my_get_contents($pattern["img"]$content);
  16. $titles = my_get_contents($pattern["title"]$content);
  17. $links  = my_get_contents($pattern["link"]$content);
  18.  
  19. // 何番目のリストを読み込むか
  20. $num = $_GET["imgno"];
  21.  
  22. // HTMLの指定
  23. print $titles[$num] . "<br>";
  24. print "<a target=\"_parent\" href=\"" . $links[$num] . "\">";
  25. print "<img border=\"0\" src=\"http://blog.wgpw.jp/images/" . $imgs[$num];
  26. print "\"alt=\"" . $titles[$num] . "\" width=\"185\" height=\"247\"></a>";
  27.  
  28. // rdfからリストにするための関数
  29. function my_get_contents($pattern$content) {
  30.     // 変数の初期化
  31.     $result_array = array();
  32.  
  33.     // 抜き出し
  34.     preg_match_all($pattern$content$matches);
  35.  
  36.     // マッチしてれば
  37.     if (count($matches) > 0) {
  38.         // すべてをエンコードし配列に入れる
  39.         foreach($matches[1] as $value) {
  40.             $result_array[] = $value;//mb_convert_encoding($value, "utf-8");
  41.         }
  42.     }
  43.  
  44.     // 配列を返す
  45.     return $result_array;
  46. }  // 関数終わり
  47.  
  48. ?>

的を得てなければ失礼しました。

この意見に回答する

ツリーへ TOPへ

A02-1
replyeryumisaiki [2月23日 20:40] (最終編集:2月23日 23:10)

前からいつか?で数字を書いて内容を変えるのをやってみたかったので、とても嬉しいです。
ありがとうございました。 

また、同じ事はfunctionを使ってオリジナル関数を使うというのもこれだと思いました。

 上記にも指摘がありましたが、 

$titles と $links の数字がひとつずれるため、


  1. print $titles[$num+1] . "<br>";
  2. print "<a target=\"_parent\" href=\"" . $links[$num+1] . "\">";
  3. print "<img border=\"0\" src=\"http://blog.wgpw.jp/images/" . $imgs[$num];
  4. print "\"alt=\"" . $titles[$num] . "\" width=\"185\" height=\"247\"></a>";

として書きました。 
 http://www.wgpw.jp/rss.php?imgno=0

もじどおり スッキリ!しました。 いろいろ勉強になりそうです。

ただ、// すべてをエンコードし配列に入れる と書いていただきましたが、どういう理由でエンコードになるのですか? 教えてください。 

 それにしても、じっくり見ても 意味がわかるようで今ひとつスッキリとはわかっていない。
 苦しいです。

ついでに 例えば 更新するたびに 
http://www.wgpw.jp/rss.php?imgno=0 ~ http://www.wgpw.jp/rss.php?imgno=14
をランダムに表示させるのは… できるような気がして。

どうしたらいいでしょう。 またスレッド作りますが。

この意見に回答する

ツリーへ TOPへ

A02-1-1 満足
replyerweekendphp [2月25日 00:07]

// すべてをエンコードし配列に入れる
の所は、こちらの間違いで、コメントをしてしまっていた部分です。
エンコードする場合は、コメントを外してください。
失礼しました。

RDFの方がUTF-8なので、HTMLをUTF-8で書いておけば、
文字化けしないハズなのですが。。。

それぞれ別にiframeで読み込むなら、URLをランダムに生成すれば
いいのだと思いますが、ページを拝見したところ、
1つのHTMLにまとまっているようでしたので、
それで実現できるようにちょっと書いてみました。

$titles と $links の数字がずれる件にも対応していると思います。

今回も多めにコメントを書いておいたので、
不明な点があればここで聞いてくださいね。

PHPはいろんな書き方、実現方法がありますし、
いろんな人のコードを見るのは勉強になると思います。

どれか1つが答えなわけではないので、少しずつ試行錯誤して
頑張って身につけてくださいね。

  1. <?php
  2. // URLの指定
  3. $rdf_url = "http://blog.wgpw.jp/index.rdf";
  4.  
  5. // RSSを取得
  6. $content = file_get_contents($rdf_url);
  7.  
  8. // 文字列を変換
  9. $content = mb_convert_encoding($content"utf-8");
  10.  
  11. // rdfを解析する (下の関数で処理)
  12. $datas = analyze_rdf($content);
  13.  
  14. // ランダムな配列を取得
  15. $rnd = random_conts(count($datas));
  16.  
  17. // rdf ファイルを解析するための関数
  18. function analyze_rdf($cnt) {
  19.     // <item> ~ </item> を切り出す
  20.     $ptn = '/<item[^>]*>(.+)<\/item>/sU';
  21.     preg_match_all($ptn$cnt$matches);
  22.  
  23.     // マッチしてれば
  24.     if (count($matches) > 0) {
  25.         // 配列に入れる
  26.         $items = $matches[1];
  27.     } else {
  28.         return FALSE;
  29.     }
  30.  
  31.     // パターンの指定
  32.     $ptns["img"] = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/sU';
  33.     $ptns["title"] = '/<title>(.*)<\/title>/sU';
  34.     $ptns["link"] = '/<link>(.*)<\/link>/sU';
  35.  
  36.     $return_array = array();
  37.  
  38.     // 各 img / title / link の抜き出し
  39.     foreach ($items as $val) {
  40.         $res = array();
  41.  
  42.         preg_match($ptns["img"]$val$matches);
  43.         $res["img"] = $matches[1];
  44.         preg_match($ptns["title"]$val$matches);
  45.         $res["title"] = $matches[1];
  46.  
  47.         preg_match($ptns["link"]$val$matches);
  48.         $res["link"] = $matches[1];
  49.  
  50.         $return_array[] = $res;
  51.     }
  52.  
  53.     // 配列を返す
  54.     return $return_array;
  55. } // function analyze_rdf($content) 終了
  56.  
  57. // ランダムを生成するための関数
  58. function random_conts($count) {
  59.     $tmp_array = array();
  60.  
  61.     // $count 個分の配列を生成
  62.     for ($i = 0$i < $count$i++) {
  63.         $tmp_array[] = $i;
  64.     }
  65.  
  66.     // 配列をシャッフルして返す
  67.     shuffle($tmp_array);
  68.     return $tmp_array;
  69. }
  70.  
  71. // HTML に整形するための関数
  72. function make_html($data) {
  73.     $str = $data["title"] . "<br>\n";
  74.     $str .= "<a target=\"_parent\" href=\"" . $data["link"] . "\">";
  75.     $str .= "<img border=\"0\" src=\"http://blog.wgpw.jp/images/" . $data["img"];
  76.     $str .= "\"alt=\"" . $data["title"] . "\" width=\"185\" height=\"247\"></a>";
  77.  
  78.     return $str;
  79. } // function make_html($data) { 終了
  80.  
  81. ?>
  82. <html>
  83. <head>
  84. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  85. <title>。。。</title>
  86. </head>
  87. <body bgcolor="#FFFFCC">
  88. <div align="center">
  89. <table border="0" width="376" cellpadding="1">
  90.   <tr>
  91.     <td bgcolor="#739900">
  92.      <div align="center">
  93.  
  94.      <table border="0" width="375" cellspacing="0" cellpadding="0">
  95.   <tr>
  96.     <td bgcolor="#FFFFFF" align="center">
  97.       <?php
  98. print make_html($datas[$rnd[0]]);
  99.       ?>
  100.     </td>
  101.     <td bgcolor="#FFFFFF" align="center">
  102.       <?php
  103. print make_html($datas[$rnd[1]]);
  104.       ?>
  105.     </td>
  106.   </tr>
  107.  
  108. </table>
  109.      </div>
  110.     </td>
  111.   </tr>
  112. </table>
  113. </div>
  114. </body>

この意見に回答する

ツリーへ TOPへ

A02-1-1-1
replyeryumisaiki [2月26日 02:18]

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

まったく同じことなのに、カッコいいですね。 これだとファイルも少なくてすみ。スッキリします。
が、こういう前に条件がならんで、あとからズバズバと仕上がってしまうようなプログラムはまだまだ書けないなと思いました。 ランダムも重ならないようにするには、こういう風に書けるのかと思いました。

weekendでマスターできるものなのでしょうか?
だとしたら勇気が出てきます。 毎日ちょっとづつ頑張ろうと思います。

ありがとうございました。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1 満足
replyerweekendphp [2月26日 13:39] (最終編集:2月26日 13:39)

なかなか最初はどこでつまづいているのかが分からなかったり、
問題を解決する方法やどこで問題が起こっているのかを見つける方法が分からなかったりして、
思うようにはいかないことも多いと思います。

やはり、慣れの問題が大きいですから、いろんなもの(ソース)に触れて、
いろんな考えを吸収していくしかないですよね。

PHPに限らないことですが、何かをしたい場合、どこまでどういう風にしたいのかを
洗い出して理論的に筋道(仕様)を立てることをオススメします。

仕様が決まったら、どういう処理が必要なのかを日本語で書いてみると
全体像がはっきりすると思います。

で、それを元に出来る範囲で自分でコードを作ってみて、
日本語からコードに直せないような部分を
こういった掲示板で解決するのもひとつの手だと思います。

PHPは比較的分かりやすい言語なので、weekendでもマスターできますよ!
それに、PHPには標準でたくさんの便利な関数が用意されています。
(今回使ったshuffle()関数は、このスクリプトを作るのに調べてたら、
 たまたま見つけて使ったものです。)

がんばってください。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1-1
replyeryumisaiki [2月27日 01:35]

この意見は質問者によって削除されました。

ツリーへ TOPへ

A02-1-1-1-1-2
replyeryumisaiki [2月27日 01:35]

作りなおしていただいたものをやってみたら、モジバケになってしまいましたが、

 // 文字列を変換 
mb_internal_encoding("UTF-8"); 

 としてみましたら、問題なく表示できるようになりました。

 XML自体は utf-8 みたいで、mb_convert_encoding する必要もないようです。


 mb_internal_encoding("UTF-8");  がどういう意味なのか、もうひとつわかりませんが、
 やってみたらできたという感じです。

 非常に楽しくできるようになりました。 やる気も出ました。ありがとうございました。

この意見に回答する

ツリーへ TOPへ

A03 参考になった
answererpascal [2月23日 20:29]

とりあえずランダム版を作ってみました。
原型は残っていると思いますが、変数名を変えたりしてあります。

なお、今回の件とは別件ですが「文字化け」の対処もしてあります。
文字化けの原因は、RSSの文字コード「UTF-8」のまま「Shift_JIS」のページに表示しようとしていたのではないかと思われましたので、「Shift_JIS」に変換するようにしてあります。
http://www.wgpw.jp/index.php」の表示させたい場所でinclude( or require)してください。

  1. <?php
  2. //RSS取得
  3. $content = file_get_contents("http://blog.wgpw.jp/index.rdf");
  4.  
  5. // 正規表現を用いてimgタグを抜き出す
  6. $pattern  = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/';
  7. $pattern2 = '/<title>(.*)<\/title>/'
  8. $pattern3 = '/ <link>(.*)<\/link>/';
  9.  
  10. $res  = preg_match_all($pattern , $content$matches);
  11. $res1 = preg_match_all($pattern2$content$matches1);
  12. $res2 = preg_match_all($pattern3$content$matches2);
  13.  
  14.  
  15. //画像を取得
  16. if($res){
  17.     $imgcount = count($matches[1]);
  18.     $image_list = $matches[1];
  19. }
  20. //タイトルを取得
  21. if($res1){
  22.     $titlecount = count($matches1[1]);
  23.     $title_list = $matches1[1];
  24. }
  25. //URLを取得
  26. if($res2){
  27.     $urlcount = count($matches2[1]);
  28.     $url_list = $matches2[1];
  29. }
  30.  
  31. //画像、URL、タイトルの個数を検証
  32. if(($imgcount + 1) == $urlcount && $urlcount == $titlecount){
  33.     //乱数生成
  34.     mt_srand (make_seed ());
  35.     $rnd1 = mt_rand(1$imgcount);
  36.     //乱数をもう1つ生成(同じ値だったら再取得する)
  37.     do{
  38.         mt_srand(make_seed ());
  39.         $rnd2 = (mt_rand (1$imgcount));
  40.     }while($rnd1 == $rnd2);
  41.  
  42.     //画像、タイトル、URLをランダムに取得
  43.     $image1 = $image_list[$rnd1 - 1];
  44.     $title1 = $title_list[$rnd1];
  45.     $url1   = $url_list[$rnd1];
  46.     $image2 = $image_list[$rnd2 - 1];
  47.     $title2 = $title_list[$rnd2];
  48.     $url2   = $url_list[$rnd2];
  49.  
  50.     //HTML生成
  51.     $html = <<<html
  52. <table align="center" style="border-collapse:collapse;background-color:#fff;border:1px solid #739900;">
  53. <tr>
  54.   <td align="center">
  55.     {$title1}<br>
  56.     <a href="{$url1}" target="_parent"><img src="http://blog.wgpw.jp/images/{$image1}" border="0" alt="{$title1}" widt="185" height="247"></a>
  57.   </td>
  58.   <td align="center">
  59.     {$title2}<br>
  60.     <a href="{$url2}" target="_parent"><img src="http://blog.wgpw.jp/images/{$image2}" border="0" alt="{$title2}" widt="185" height="247"></a>
  61.   </td>
  62. </tr>
  63. </table>
  64.  
  65. html;
  66.  
  67.     //文字コード変換
  68.     $html = mb_convert_encoding($html"SJIS""UTF-8");
  69.     //HTMLタグを表示
  70.     echo $html;
  71. }
  72.  
  73.  
  74. function make_seed() {
  75. //乱数を初期化するためのシード値を生成
  76.     list($usec$sec) = explode(' 'microtime());
  77.     return (float) $sec + ((float) $usec * 100000);
  78. }
  79. ?>

この意見に回答する

ツリーへ TOPへ

A03-1
replyeryumisaiki [2月23日 20:45]

ありがとうございます。
ランダムはフラッシュに読込みのために作ってみたかったので、早速勉強してみます。

で、モジバケの件ですが、このプログラムの中に日本語を使ってしまった場合に(例えば alt="日本語" とか)Shift_JISに コンバートしてしまうと、ソプログラムの中のものがモジバケしてしまったりして、うまく表示できないのです。

 index.php には 他にも php の貼りこみがあり、それもうまくいかない原因のような気がします。

 でも、まだやってないので何ともいえませんが。

 とりあえずはお礼まで。

この意見に回答する

ツリーへ TOPへ

A03-1-1 参考になった
replyerpascal [2月23日 20:56]

.phpファイルの文字コードは何ですか?

http://www.wgpw.jp/」に表示する場合ですが、
もしShift_JISで書かれているのであれば、ファイル内に直接記載した文字を変換する必要はありません。

Shift_JIS以外で書かれているのであれば、Shift_JISに変換する必要があります。

この意見に回答する

ツリーへ TOPへ

A03-1-1-1
replyerpascal [2月23日 21:00] (最終編集:2月23日 21:03)

書いてから気づきましたが、「文字コード」ではなく「エンコーディング」ですね・・・

あぁ、編集も出来るのか・・・

この意見に回答する

ツリーへ TOPへ

A04
answereryumisaiki [2月24日 13:15]

  1. <?php 
  2. // URLの指定 
  3. $rdf_url = "http://blog.wgpw.jp/atom.xml"
  4.   
  5. // 正規表現を指定 
  6. $pattern["img"]   = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/'
  7. $pattern["title"] ='/<title>(.*)<\/title>/';  
  8. $pattern["link"]  ='/<id>(.*)<\/id>/'
  9.   
  10. // RSSを取得 
  11. $content = file_get_contents($rdf_url)
  12.   
  13. // 各リストを読み込み(やることが一緒なので、関数にまとめました) 
  14. $imgs   = my_get_contents($pattern["img"]$content)
  15. $titles = my_get_contents($pattern["title"]$content)
  16. $links  = my_get_contents($pattern["link"]$content)
  17.   
  18. // 何番目のリストを読み込むか 
  19. $num = rand(014);
  20.  
  21. // HTMLの指定 
  22.  
  23. print $titles[$num+1]
  24. print "<br><a target=\"_parent\" href=\"" . $links[$num] . "\">"
  25. print "<img border=\"0\" src=\"http://blog.wgpw.jp/images/" . $imgs[$num]
  26. print "\"alt=\"" . $titles[$num+1] . "\" width=\"185\" height=\"247\"></a>"
  27.   
  28. // rdfからリストにするための関数 
  29. function my_get_contents($pattern$content) { 
  30.     // 変数の初期化 
  31.     $result_array = array()
  32.   
  33.     // 抜き出し 
  34.     preg_match_all($pattern$content$matches)
  35.   
  36.     // マッチしてれば 
  37.     if (count($matches) > 0) { 
  38.         // 内部エンコードを設定 
  39.         foreach($matches[1] as $value) { 
  40.             $result_array[] = $value;
  41.             mb_internal_encoding("UTF-8");
  42.         } 
  43.     } 
  44.     // 配列を返す 
  45.     return $result_array
  46. }  // 関数終わり 
  47. ?>

  いろいろ教えていただきありがとうございました。
なんとか、ロリポップブログを自由に操れる気がしてきました。
ランダムも欲が出てきて、2種類3種類をそれぞれランダム表示できないものかな?
Smarty でデザインが楽にできないものかなとか、次の課題を感じました。

ありがとうございました。
また、アドバイスありましたらよろしくお願いします。

一応ポイントをさしあげたいので締め切ります。

この意見に回答する

ツリーへ TOPへ

A05 満足
answerersignal [2月24日 13:33]

  1. <?php
  2. {
  3.   // これは Shift_JIS だよ @ 文字化け対策
  4.   header( 'Content-type: text/html; charset=Shift_JIS' );
  5.  
  6.   // RSS 取得
  7.   $content = file_get_contents("http://blog.wgpw.jp/index.rdf");
  8.  
  9.   // 要素取得
  10.   $pattern1 = '/<img[\s\t]+src[\s\t]*=[\s\t]*"images\/(moblog_\d+\.jpg)"[^\/>]*?\/?>/';
  11.   $pattern2 = '/<title>(.*)<\/title>/';
  12.   $pattern3 = '/<link>(.*)<\/link>/';
  13.   preg_match_all( $pattern1$content$images );
  14.   preg_match_all( $pattern2$content$titles );
  15.   preg_match_all( $pattern3$content$links );
  16.  
  17.   // 連想配列のほうが使いやすいからデータを再生成
  18.   $rss = array();
  19.   foreach ( $images[1] as $n => $image ) {
  20.     $rss[] = array( 'image' => $image'title' => $titles[1][$n+1]'link' => $links[1][$n+1] );
  21.   }
  22.  
  23.   // 基本的に XML は UTF-8 でも表示は Shift_JIS @ 文字化け対策
  24.   mb_convert_variables( 'SJIS''UTF-8'$rss );
  25.  
  26.  
  27.   // 表示番号
  28.   $id = isset( $_REQUEST['id'] ) ? $_REQUEST['id'] : 0;
  29.  
  30.   // id に random もしくは rand もしくは r が指定されたとき id をランダムに取得
  31.   if ( $id === 'random' || $id === 'rand' || $id === 'r' ) $id = rand( 0count( $rss ) - 1 );
  32.  
  33.   // id は数字だよ
  34.   $id = preg_replace( '/\D/'''mb_convert_kana( $id'n' ) );
  35.   if ( is_numeric( $id ) == false ) $id = 0;
  36.  
  37.  
  38.   // 表示
  39.   print <<<HTML
  40. {$rss[$id]['title']}<br />
  41. <a target="_parent" href="{$rss[$id]['link']}"><img src="http://blog.wgpw.jp/images/{$rss[$id]['image']}" border="0" width="185" height="247" alt="{$rss[$id]['title']}" />
  42.  
  43. HTML;
  44.  
  45. }
  46. ?>

最新の投稿を表示
***.php

3番目の投稿を表示
***.php?id=2

ランダムに表示
***.php?id=r

この意見に回答する

ツリーへ TOPへ

A05-1
replyeryumisaiki [2月24日 17:56]

なぜかエラーが出てしまいます。

 unexpected $end ::::on line 47


 しかし、これを参考にして、ランダムを考え直してみました。 ありがとうございました。

 ポイントつかずすみません。 次回、必ず覚えておきます!!

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)