![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんばんは。お世話になっております。
自分の勉強不足を披露してしまうようでお恥ずかしいのですが、レッツPHPさんの「新着ブロガー」 http://php.s3.to/net/#rss を1件のみの表示とするよう設定し、検索結果として自分のソース内にあるwhileの中に、include("./rss/rssup.php"); と記載しているのですが、検索結果を実行させたとき、レッツPHPさんの「rssup.php」ソース内の、
// 日付ソート関数
function cmp ($a, $b){
$a = (isset($a['items'][0]['pubdate'])) ? strtotime($a['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($a['items'][0]['dc:date'], 0, 19)));
$b = (isset($b['items'][0]['pubdate'])) ? strtotime($b['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($b['items'][0]['dc:date'], 0, 19)));
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}//※※
※印のところでエラーが表示されてしまいます。
先にも申したように、自分の知識のなさを告知するようで大変お恥ずかしいとは思いながらも、調べていても解決する事が出来ず、あえて投函させていただきました。
お忙しい中恐縮ですが、アドバイスなど頂戴出来たら幸いです。
宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
>検索し、検索一覧を表示させる際、DBに登録されたURLを基にrssup.phpによって、そのURLに記載のある最新記事を取得したいと考えての設置でした。
includeをどうするかというより、もともとの新着ブロガーの方のプログラムの変更が必要かと思います。取得もとのURLをDBから取り出すようにはなっていないですし、whileの中で複数回includeというか実行できたとしても、すべて同じ表示がでるだけでで希望の動作にはならないでしょう。
rssup.phpを以下のように変えて
-----------------------------------------------------------------
<?
//require "RSS.php";
//PEAR導入済みの場合↓
require "XML/RSS.php";
// サイト文字コード(SJIS、EUC-JPなど)
$code = "SJIS";
// 日付ソート関数
function cmp ($a, $b) {
$a = (isset($a['items'][0]['pubdate'])) ? strtotime($a['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($a['items'][0]['dc:date'], 0, 19)));
$b = (isset($b['items'][0]['pubdate'])) ? strtotime($b['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($b['items'][0]['dc:date'], 0, 19)));
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
function GetRss($rssurl)
{
// RSS取得・解析
$r =& new XML_RSS($rssurl);
if (PEAR::isError($r)) continue;
$r->parse();
if ($r->getChannelInfo()) $ch[$k] = $r->getChannelInfo();
$ch[$k]['items'] = $r->getItems();
usort($ch, "cmp");
// サイト名
$site_title = htmlspecialchars(mb_convert_encoding($ch[0]['title'], $code, "UTF-8,EUC-JP,SJIS"));
// サイトURL
$site_link = $ch[0]['link'];
// 記事タイトル
$title = mb_convert_encoding(strip_tags($ch[0]['items'][0]['title']), $code, "UTF-8,EUC-JP,SJIS");
// 記事内容
$desc = mb_convert_encoding(strip_tags($ch[0]['items'][0]['description']), $code, "UTF-8,EUC-JP,SJIS");
// 記事URL
$link = htmlspecialchars($ch[0]['items'][0]['link']);
// 記事更新時間(UNIXタイム
$time = (isset($ch[$i]['items'][0]['pubdate'])) ? strtotime($ch[0]['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($ch[$i]['items'][0]['dc:date'], 0, 19)));
// 記事更新日 http://php.net/date
$date = date("Y/m/d", $time);
// 表示
echo <<<B
<a href="{$site_link}" target="_new">{$site_title}</a> / <a href="{$link}" target="_new" title="{$desc}">{$title}</a>({$date})<br>
B;
}
?>
-----------------------------------------------------------------
include("./rss/rssup.php");をwhileの前に入れて、whileの中でincludeしていた部分に、
GetRss($rssurl);
をいれて、$rssurlにDBから取り出した取得元URLを入れてください。
kirin_f様
お忙しい中、早速のお返事をいただき、またソースまでご提示いただき有難う御座います。
ここ2週間ほど、情けないかな、全く進展が見られない状況の中、自分自身にも歯がゆいところでしたが、kirin_f様からご提示いただいたソースにて、描いていた結果を得ることが出来ました!
言葉足らずなご挨拶で恐縮ですが、有難い気持ちで一杯です。本当に有難う御座いました!
No.2
- 回答日時:
経験上、「Cannot redeclare ~」と出るときって、同じ名前の関数が複数あったり、
同じファイルを2度以上includeとかrequireしようとしているときにでるような気がします。
要するに同じ名前の関数名が複数あってはいけないのに、読み込もうとしているから「宣言できない」とでるわけです。
>自分のソース内にあるwhileの中に、include("./rss/rssup.php");
whileでまわる回数分、rssup.phpを読み込もうとしているので、それで同じ関数が複数回読み込まれてエラーが出ているのではないでしょうか。
include("./rss/rssup.php")ではなく、include_once("./rss/rssup.php")とかしてみたらどうですか。
kirin_f様
はじめまして、こんばんは。
皆さま同様、ご親切なアドバイスに感謝いたします。
>include_once("./rss/rssup.php")とかしてみたらどうですか。
私の説明不足でしたが、whileの中に入れるというのも、その都度同じことをさせたいのです。イメージとしては、
検索し、検索一覧を表示させる際、DBに登録されたURLを基にrssup.phpによって、そのURLに記載のある最新記事を取得したいと考えての設置でした。
include_onceで行うと、一番最初の(検索)結果は実行されますが、2行目以降が実行されずに、includeとだけで設置している次第です。
ならばと、直接whileの中に、reeup.phpの内容を記述してみましたが、
Fatal error: Cannot redeclare class xml_rss in
と、なにやら宿命的とかいうエラーが出てしまいます。
お忙しい中恐縮ですが、引き続きアドバイスなど頂けたら幸いです。
No.1
- 回答日時:
エラーが出た場合はエラー文にその原因が表示されます。
普通はそれを読むだけで解決に至ることが多いので英語だからと無視しないでちゃんと読むようにしましょう。
またエラーについて質問するときは必ずエラーの内容を書くようにしましょう。
例えば
Cannot redeclare cmp() (previously declared in~
なら関数の再宣言は出来ませんという意味で同じ名前の関数が宣言されたと言うことです。
whileの中にincludeを書いていると言うことですがそうするとループの回数だけrssup.phpが実行されます。実行だけなら問題ありませんが中に関数の宣言がされているとそれも複数回宣言されることになり上記のエラーが出ます。
ループの中でincludeする場合はinclude_once()を使うようにしましょう。
エラーの内容が違う場合は補足してください。
php504さま
こんにちは。お世話になっております。
早速のご回答をありがとう御座います。エラーの件、以降気をつけます。
Fatal error: Cannot redeclare cmp() (previously declared in
php504様が仰るように、上記が今回のエラーですが、「宣言出来ない」といった意味までは理解していたのですが、質問の題名にあるようにfunctionを調べているうちに、知識不足から何処をどう変更すべき?と分からなくなってしまったのが現状です。
また、当初はinclude_once()で行ったところ、1度目だけ実行(後は実行されずエラーもない)される、といった状況だったため、includeで記述しているところでした。
勉強不足を痛感しておりますが、何をどうすれば良いのか分からずにおります。お忙しい中恐縮ですが、引き続きアドバイスなど頂戴できたら幸いです。宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- 知的財産権 著作権違反 らしき記事が見当たりません!? 1 2022/05/24 01:54
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォントの色を変えるには?
-
PHP8を使うと、大量のWarningが...
-
functionについて
-
PHPのストアドプロシージャ仕様
-
xamppをインストールしましたが
-
xmlの宣言文をPHPで出力するには
-
関数のコールエラー
-
phpのエラー(T_LNUMBER)について
-
phpにてファイルをアップロード。
-
phpからパスワードを入れ、MySQ...
-
クラス
-
ショッピングカートの作成しよ...
-
PHPとMYSQLを使用してサイト作...
-
$_POST["year"]の”が unexpecte...
-
データーをエンコード
-
PHPでユーザ定義関数を再帰的に...
-
PHPで正規表現でマッチした値を...
-
PHPのエラー教えて!parse e...
-
fsockopenの例外について
-
PHPでの投稿フォームで、ファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの色を変えるには?
-
PHP8を使うと、大量のWarningが...
-
トランザクションが原因?DBに...
-
ワードプレスサイト PHP8.0.25...
-
PHPで、エラーがない場合のみ画...
-
「@$変数」の「@の意味は?」
-
パースエラーとは?
-
phpでクラスのメソッドで同名の...
-
phpでget_headers()が使えない?
-
PHPでネットワークドライブのop...
-
PHPでfatal errorが出ても無視...
-
phpでPEAR::DBを使っているので...
-
awsにApacheとPHPを入れて、何...
-
error_reporting(0);にも関わら...
-
正規表現での最後尾のバックス...
-
これは例外処理でしょうか?
-
SELECTの値を保持する
-
PHPにて外部サイト内容が取得不...
-
iframeからのアクセスか、ブラ...
-
PHP mb_send_mail メール送信 5...
おすすめ情報