ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ホーム > コミュニティ > PC、インターネット > 初心者PHP講座 > トピック一覧 > 激初心者の質問トピ

初心者PHP講座コミュの激初心者の質問トピ

  • mixiチェック
  • このエントリーをはてなブックマークに追加

コミュ内全体

…って、勝手に立てちゃってすみません。

すごく簡単そうだけどワカラナイ!
基本的過ぎて逆に調べるのが大変!!

なんてことありませんか?


というわけで、皆様よろしくお願いいたします。<m(vv)m>

コメント(1000)

がると申します。

To StandAlone(s)さん#960
とりあえず、
>>
$xxx_file_name = "data.csv";

$pull_file_name = "pull.dat";
<<
の二つを、相対ではなくて絶対パスで記述してください。それで直るかと思います。
理由については…カレントディレクトリ周りについて調べると色々とわかる事が有るかと思います。

端的には。例えば、pwdコマンドの出力結果をファイルあたりに書き出してみると、得心がいくかと思いますが如何でしょうか。
がるさん>>

ありがとうございます!!完璧です。

サーバー環境もっと勉強します。

ありがとうございました<(_ _)>
>>964
本気でわからないとどうしようもないんだろうなぁと過去の思い出からちょっと丁寧に。

セレクトボックスからPHPに年と月を渡すのは以下をご参考に。
http://5x2.info/67

あとは1日の曜日と月の日数でも取れればできるかなぁと思います。
それぞれパラメータのDとtです。
http://jp.php.net/manual/ja/function.date.php
カレンダーは、

1、月の最初が月(又は日)曜日以外なら、初日まで空白で表示する
2、週の最後まで表示させる
3、月末まで2を繰り返す
4、月末が週末じゃなかったら、週末まで空白を表示する

という手順でやればよいでしょう。

2で祝日の処理なども入れられます。

1週間は7日ですので、7日ごとに改行の処理を入れてあげれば良いと思いますよ。
がると申します。

To まりあさん#964
ちょいと面白そうなので、Blogに書いてみました。
http://d.hatena.ne.jp/gallu/20090112/p2

プログラムはいずれもそうなのですが。「小さなお仕事」に分解していくと、比較的理解がしやすくなると思います。

参考にでもなれば幸いです。
初めまして。テツと申します。

質問をさせてください。

ページ内のヘッダー(H1やH2)を、そのページのタイトルに反映させる
良い方法は何かありますでしょうか。

言葉で表現するより、画像で見ていただいた方が分かりやすいと思うので、
画像も参照願います。

phpは、Wordpressをほんの少し改造する程度しか分かりません。
自分なりに上記の問題を調べてみましたが、解決できずに困惑しています。

よろしくお願いします!
>970:テツさん

変数を定義して、titleとh1の両方にprintしてはどうですか?
それともh1を読み取ってtitleに入れるということ?
だとしたらget_file_contents()とかでページを読み込んで正規表現で置き換えるとか。
>ginnezさん

お返事ありがとうございます。

>h1を読み取ってtitleに入れるということ
です。

<head>〜</head>部分を別のphpにして他のページと共有させているので、
どのページも同じタイトルになってしまうのを避けるために
<body>内の<h1>をタイトルに反映させたいと考えています。

>get_file_contents()とかでページを読み込んで正規表現で置き換えるとか。

この場合、「get_file_contents()」の「()」内にはどのように書き込めば<h1>のテキストが引用されるのでしょうか?

初心者ですみませんが、よろしくお願いします!
>>972
file_get_contents
http://jp2.php.net/file_get_contents

正規表現
http://www.google.co.jp/search?hl=ja&safe=off&rlz=1G1GGLQ_JAJP297&q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&btnG=%E6%A4%9C%E7%B4%A2&lr=

二つも>>971さんが大ヒントくれてるじゃん
>ラスユキ Ver 1.7αさん、ginnezさん

ありがとうございます。
調べてなんとかできるように頑張ってみます!

またお世話になるかもしれませんが、よろしくお願いします〜
>974:テツさん
><head>〜</head>部分を別のphpにして他のページと共有させているので、
>どのページも同じタイトルになってしまうのを避けるために
><body>内の<h1>をタイトルに反映させたいと考えています。

ならfile_get_contentsも正規表現もいりませんね。
<head>〜</head>をインクルードするより前で変数を定義すればいいだけですね。

「他人のサイトからデータを抽出するのでHTMLは一切いじれない」とかでなければ、意外と答えはカンタンですよ。
>ginnezさん
自分で作ってるサイトなのでいじりたい放題なのですが、
知識がないために苦戦してます(笑

軽い気持ちで<h1>を<title>に反映できるかなぁ〜?って思っていたんですが、
技量が足りてませんでした。

もう少し調べてみます!
絵文字に関して質問させてください。
XML形式のデータに、auの絵文字を含ませたいと考えています。
たびたびすいません…。
どうやら「& # x x x x x ;」を続けて入力し投稿すると、それ以後が消えるようです。
mixiのバグですかね(^^;

以下、続きとなります。

xmlはUTF8なのですが、そこに「& # x x x x x ;」の形式で絵文字を入れようと考えました。
しかし、auの絵文字にUTF-8のコードは無く、しかたなく、XML全体を一端unicodeに変換してから、PEARのUnserializeを使用し、XMLをパースしようとしました。
ですが、取得結果の絵文字が壊れており、正常に表示することが出来ませんでした。
出来ることならば、UTF-8のまま、絵文字を含ませたいと考えているのですが、可能でしょうか。
よろしくお願いします。

ホームページに複数のサイトのRSSを掲載しようとしています。
「rss 複数」等で検索したところ、「MagpieRSS」で可能と言うことが分かり、早速それを利用してみることにしました。

いくつかのサイトをめぐって表示形式を調べていたのですが…

"サイト名1"
・記事名1-3
・記事名1-2
・記事名1-1
"サイト名2"
・記事名2-3
・記事名2-2
・記事名2-1
と言うのが普通(?)のようですね。この方法では正常に表示してくれました。

私としては、
・記事名1-2[サイト名1]
・記事名2-3[サイト名2]
・記事名2-2[サイト名2]
・記事名1-1[サイト名1]
・記事名2-1[サイト名2]
と言う風に、サイトはバラバラで投稿日順で並べたいと思ってます。
て、いろいろ調べてると、下のサイトにたどり着きました。
http://wintryblasts.com/techblog/index.php?itemid=30
複数のサイトを設定し、配列をソート、○個表示と、私がしたい通りなのですが、うまくできません。

参考サイトのコメントにも記入してますが、1記事しか表示してくれません。
($mainrssで設定した最後のURL分。最後の1行を消すと、その上の行の1行しか表示しない)


コメントを残して返答を待ってみたのですが、なにぶん古い記事ですし、返答が来ないかもと思ってこちらでも質問させていただきました。
私が何か間違っているからちゃんと表示しないのでしょうか?(基本コピペなので考えづらいですが…)

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

>うるるんちょ♪ さん。書き込みありがとうございます。

要約すると、「初心者来るんじゃねぇ」って事でしょうか?

コミュニティーは「初心者PHP講座」でトピックは「激初心者の質問トピ」ですが、それでも私レベルの人はここに質問することも許されず、自分で調べないといけなかったでしょうか?

正常に動作しているものを自分なりにカスタマイズするとかならなんとかなるかもしれませんが、動作しないもののどこが悪いかなんてさっぱりわかりません。
("20個まで出力したら"とあるのに1行しか表示しない時点で何かおかしいと感じたのですが…)

もし、この程度の質問がここで許されないようでしたらご指摘ください。
質問を削除します。

よろしければ、この程度の初心者を救済していただけるコミュニティーや各掲示板などがありましたら教えてください。そちらで質問してみます。
私としては、数あるmixiのPHPを扱うコミュニティーの中で「初心者」とあったのでこのコミュニティーを選ばせていただいたのですが、私のような質問は初心者にも届かないレベルなんでしょうね。

また、このレベルの質問をすること自体が悪いのでしたらそちらも指摘お願いします。
がると申します。

To 火音さん#985
学び方を学ぶ。
問い方を学ぶ。
とても大切な事です。

端的に言うと「魚はあげない。魚の釣り方なら教えて上げる」というのが、mixiに限らず、概ねネット社会における回答者の「よくあるスタンス」です。
PHPの初心者云々以前に。学ぶ者教わる側としての質問の仕方、態度言動が「未熟」だと思います。

「とにかくいいから答えだけ教えてよ」とおっしゃるのであれば、有料でどうぞ。
適当に技術者募集をかけて、相応の報酬を払えば。意図に沿う事をやってくれると思いますよ。
>>983

はじめまして。
http://wintryblasts.com/techblog/index.php?itemid=30

上記のサイトからソースをコピペして動作確認しました。
指摘の

// 20個まで出力したら"とあるのに1行しか表・・省略

ですが、問題なく表示されておりました。
ただ、時間取得方法は各RSSサイトで若干改修が必要です。
ソースに31行目に注意書きとしてありました。

//アイテムの日付を拾う、RSSによって変更する必要あり、if文が必要かも

上記のため、取得するRSSのソース解析及びその日時情報の
取得が必要です。

例として、(ベクター)
http://www.vector.co.jp/rss/lib_verup_win.xml
$date = $item["dc"]["date"];
に変更したらベクターの日時情報が取得できます。

どのようにソースを改修したら汎用的な対応できるかは、別途お調べ
ください。

質問云々の指摘に関しては、各個人差があるかと思います。
「私はここまで調べてやりました!」という表現が記載されているので、
私個人的にはいいかと思います。
ただ、何も調査しないで"おしえて〜"というのは、どうかと・・・。

分かっているかもしれませんが、助言してくれる人も、質問に答えてく
れる人も、親切心でやってくれていますので、それ相応にて返答するの
が大切かと思います。
>> 988

補足です。
http://wintryblasts.com/techblog/index.php?itemid=30
上記のサイトですが、各情報を配列として保持していますが、
キーとなる情報がタイムスタンプで持っています。(39行目)

取得するサイト及び同サイトの日時情報が同じである場合、
上書きにて配列に登録されるようになっていますので、
ご注意ください。
修正が必要かと思います。
返答ありがとうございます。

>がる さん
とりあえずいろいろ調べて、自分で何とか出来る範囲まで調べた結果サイトにある通りの動作をしないことについてのアドバイスを求めたのですが、それも「とにかくいいから答えだけ教えてよ」に当てはまるのでしょうか?

「質問に書いたものをだれかタダで作ってよ」であれば、私もがるさんと同じくタダで出来るか!ちゃんと金出してしろよ!!って言うと思います。

>この方法では正常に表示してくれました。
>いろいろ調べてると、下のサイトにたどり着きました。
と、質問にも記入した通り、ど素人の私が出来る範囲の努力をしてみたつもりです。
努力が足りないと言われればそれまでかもしれませんが、このトピっクでそれを言ってしまったら、このトピっクやコミュニティーの意味を否定してしまうような気もしますが…
(今までのすべての質問に対して、「自分で調べろ、いやなら金を出せ」って書き込みしか出来ないような…(^^;)

しかし、私の努力が足りないということですよね。これから何か質問する時には注意します。


>もかもか さん。
初心者に心温まる書き込みありがとうございます。
がるです。

To もかもかさん#987
もかもかさんにとっては「質問は全て質問」なのだろうと思います。
私は、質問には善し悪しもあれば上手い下手もあると考えています(質問力、なんて言葉も最近はありますね)。


To 火音さん#990
んと…気になったのは。うるるんちょ♪さんの書き込みに対する返答に少々違和感を感じたからです。
# 端的にいうと。あの書き込みだけを見ると「答えだけくれ」な人に見えてしまいました。

ただ、その後の、#990を拝見するにとりあえず「頑張る人なのかな?」と感じたので。
とりあえず私が気になる部分を「ソースを1分だけ斜め読みした」程度のレベルでざっくりと。

まず$rssarrayの配列なのですが…ちゃんと20個以上データが入ってるんでしょうか? そこが気になります。
>>
//ここから出力
echo "<table cellspacing=\"0\" cellpadding=\"0\">\n";
<<
の前に、デバッグプリントを入れてみるとよいかもしれません。
そうですねぇ…こんな感じで。
>>
//ここから出力
print '個数は ' . count($rssarray) . "\n";
echo "<table cellspacing=\"0\" cellpadding=\"0\">\n";
<<
或いは
>>
//ここから出力
var_dump($rssarray);
echo "<table cellspacing=\"0\" cellpadding=\"0\">\n";
<<

これで、情報が「20個入っているか」どうかがわかるので。
入っているのに1行しか出ないのであればそれ以降の問題、そも20個入ってなければそれ以前の問題、で、とりあえず切りわけが出来ます。

上述の結果を書いていただければ、また時間を見て返信などできると思います。
…で。こういう事を「やってみたら」って、多分うるるんちょ♪さんはおっしゃってたんじゃないかなぁ、と推測をしてみます。
肩を持つというわけでもないですが。
>ガル さん。
書き込みありがとうございます。


再度、データをコピーして「require_once」部分を自分の環境に合わせただけでアップした所、文字化けした状態ですが、20件表示しました。
しかし、以下のような状態です。


デフォルトの
'http://www.pheedo.jp/f/JapaneseTechCrunch' => 'TechCrunch Japanese',
'http://rss.rssad.jp/rss/itmatmarkit/news/rss.xml' => '@IT NewsInsight'
の場合、TechCrunchJapaneseの20件しか表示しない。
'http://www.pheedo.jp/f/JapaneseTechCrunch' => 'TechCrunch Japanese',
を削除し、
'http://rss.rssad.jp/rss/itmatmarkit/news/rss.xml' => '@IT NewsInsight'
のみにした場合、6件のみ表示。
で、よく見ると、@IT NewsInsightは古い記事しか無いため20件に入らないことが判明。
if($count == 30)
に変更すると、上にTechCrunchの20件が表示、下に@ITの6件のみ表示。
これは、単に日付順だから…で落ち着いてくれるといいのですが…

次に、ご指摘のVectorをチェック
$mainrss = array ('http://www.vector.co.jp/rss/lib_verup_win.xml' => 'vector');
に変更。
そうすると、1件しか表示しなくなりました。(多分私はここで詰まっていたのだと)

さらに日付の取得方法(?)を変更
$mainrss = array ('http://www.vector.co.jp/rss/lib_verup_win.xml' => 'vector');
//アイテムの日付を拾う、RSSによって変更する必要あり、if文が必要かも
//$date = $item[pubdate];
$date = $item["dc"]["date"];

としてみましたが変化なし…(1件表示)

$date = $item[dc][date];
や、
$date = $item['dc']['date'];
にしても変化なし。(1件表示)

よく見ると、日付が1970年1月1日になってます。
正常にデータを取得できてないって事ですよね?
どこかミスったんでしょうか…

余談ですが、日付の取得方法について教えてください。
Vectorの場合、「$item["dc"]["date"];」と言われたので、Vectorのページのソースを確認したところ、日付のところに「<dc:date>2009-03-03T19:00:00+09:00</dc:date>」等の記入がありましたが、これを取得しているということですよね?

それを踏まえて、
$date = $item["dc:date"];
にしてみたところ、日付は変化したのですが、やはり1件表示。
しかも、日付と記事がずれているような気がしますが…

表示
2009年03月04日 (水)vector メモり帳(インストーラ版) 1.0.2
Vecorサイト
2009年3月3日、19:00:00 メモり帳(インストーラ版) 1.0.2

すみません、ここで手ずまりです。
何か確認すべき点があれば指摘をお願いします。
>がる さん。
返答ありがとうございます。


>>
//ここから出力
print '個数は ' . count($rssarray) . "\n";
echo "<table cellspacing=\"0\" cellpadding=\"0\">\n";
<<

これについては私もやってみました。
krsort($rssarray);
の段階で、1つしか格納されてないなら1個しか表示しないんじゃないかと思いまして。その結果は想像通り「1」が返ってきました。

さらに、"ガル"さんご指摘の"日付の取得"についてやったところ、取得しようとしているRSSの日付格納方法が違うから1つしか表示しないんだということも何となくわかったのですが、それからの対処方法が全くわからず手図まりです。


ちなみに、
//アイテムの日付を拾う、RSSによって変更する必要あり、if文が必要かも
の部分ですが、

if($item["dc:date"]){
$date = $item["dc:date"];
}
if($item[pubdate]){
$date = $item[pubdate];
}
〜〜
こんな感じでいいんでしょうか?

がるです。

相変わらずざくっと見てますが。
とりあえず、RSSからデータをパースする部分(んと…パースってのは「文字列を切ったはったして配列んなかにぶち込む処理」だと思ってください。微妙に間違いですが(苦笑))に問題がありそうな。

>>
foreach ($rss->items as $item ) {
<<
の直下に
var_dump($item);
とかいれて、vectorの時の「配列の状態」をまず確認するのが早そうに思われますがどうでしょう?

なんか、単純にDateが取れてないような気がします…
>>火音さん

http://magpierss.sourceforge.net/
MagpieRSSのバージョン0.72ですよね?

http://www.vector.co.jp/rss/lib_verup_win.xml
$date = $item["dc:date"];
にしても情報取得できませんでした。
$itemの配列をdumpしたところ、[dc:date]で
データを持っていませんでした。

$item に保持されているデータは、
print_r($item);
で確認可能です。

>if($item["dc:date"]){
>$date = $item["dc:date"];
>}
>if($item[pubdate]){
>$date = $item[pubdate];
>}

ほしいですね。
簡単にしたい場合は↓
if (){
} else if ()
} else {
}
でしょうか。
ただ、これには問題点があり、$item[pubdate]と
$item["dc:date"]にデータが入っている可能性が
ありますので、サイト別に条件処理をする必要が
あります。
>がる さん。返答ありがとうございます。

まずは、先に…
1件しか表示しなかったVevtorを基準に今は作業してます。

$mainrss = array (
'http://pheedo.vector.co.jp/f/vector_softnews' => 'vector'
);
//アイテムの日付を拾う、RSSによって変更する必要あり、if文が必要かも
//$date = $item[pubdate];
$date = $item['dc:date'];


>>
foreach ($rss->items as $item ) {
<<
の直下に
var_dump($item);

そのままやってみると、文字化けしたものが大量に表示されました。
ただ、文中にURLがいくつもあり、多分に複数のデータを取得できているのでは?と思えます。

素人考えで、文字化けしてるんなら直しちゃえばいいじゃないかって事で、
foreach ($rss->items as $item ) {
$item = mb_convert_encoding($item, "SJIS", "auto");
var_dump($item);
こんなことやってみましたが…(無意味ですか?ww)
string(5) "Array"
が16個連続で並んでました。(16件のデータを読み込んでる?)

とりあえずはデータが来ているということでしょうか?
>ガル さん。返答ありがとうございます。

>MagpieRSSのバージョン0.72ですよね?
だと思います。3日前くらいにダウンロードしましたし、記入されているサイトからダウンロードしたと思います。
余談ですが、
rss_cache.inc Version: 0.51
rss_parse.inc version 0.7a
rss_utils.inc Version: 0.51
ってなってますけど、問題はないですよね?

>$item に保持されているデータは、
>print_r($item);
>で確認可能です。

こちらは、がる さんご指摘の「var_dump($item); 」と同じ効果でしょうか?
同じ場所で入れ替えたところ、同じように文字化けしてました。
ただ、ちょっと違うのは、

foreach ($rss->items as $item ) {
$item = mb_convert_encoding($item, "SJIS", "auto");
print_r($item);

とすると、
Array
が16個連続で並んでました。


>>if文に関して
サイトごとに分ける必要が…との事ですが、うろ覚えなので変な発言になると思いますが、ちょっと良いでしょうか?


MagpieRSSを探している時だと思うのですが、他の方が作ったphpでRSSをいくつか取得して○番目は自分のブログだから特別な表示をするっていうものがありました。

---------
rss"なにかここにあったような…" "URL(だったはず)"
rss"なにかここにあったような…" "URL(だったはず)"
rss"なにかここにあったような…" "URL(だったはず)"

$"自分のサイト" =3;
---------
と言うような処理。
これをどうにかすれば、

if("○番目と○番目と○番目"){
"この取得方法"
}elsif("○番目と○番目と"){
"この取得方法"
}
なんてことが出来ないでしょうか?

あ、私自身こんなこと出来ないので、スルーでOKです。

ログインすると、残り972件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

初心者PHP講座 更新情報

初心者PHP講座のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング