プログラム+PHP超初心者で只今勉強中です。


こんなのを作ってます。
箇条書きにすると

CSVからマッチさせて

ブラウザで
http://www.hogehoge.com/prog.php/aaa/
と叩くと
http://www.hoge.net/111/xxx/
のデータを表示する
ジャンプするわけではなくhttp://www.hogehoge.com/prog/aaa/
にfile_get_contentsします。

xxx.csvの中身は

20110101,aaa,111
20110102,bbb,222
20110103,ccc,333
になっています。日付の部分は無視して2列目→3列目で出力。

無論、http://www.hogehoge.com/prog/bbb/の場合は
http://www.hoge.net/222/xxx/をfile_get_contentsします。

prog.phpはサーバのルートに置いてあります。

$_SERVER['PATH_INFO']
とやらを使ってaaaの情報を取得するところは出来ましたが、
csv吸い上げ2列目から探し出し、マッチする3列目を表示させることがなかなかできません。

お助けくださいませ。


ちなみに自分で書いたソース(途中)が以下です。

<?php

list(,$a) = explode('/', $_SERVER['PATH_INFO']);

$file=file("xxx.csv");

for($i=0;$file[$i]; $i++){

$data=@explode(",",$file[$i]);

if($data[1]==$a){

$str = file_get_contents('http://www.hoge.net/'.$data[2].'/xxx/');
}else{

}
}

if (
preg_match('!\s*(.*)!s', $str, $title00)){;
}
print $data[2];

?>

回答の条件
  • 1人20回まで
  • 13歳以上
  • 登録:2011/02/23 20:37:47
  • 終了:2011/02/25 08:18:20

ベストアンサー

id:Galapagos No.2

Galapagos回答回数963ベストアンサー獲得回数892011/02/24 14:30:02

ポイント80pt

エラー処理を追加しました。

エラー発生時には、エラーメッセージを表示し、スクリプトを終了するようにしてあります。

<?php
$csvfile = 'xxx.csv'
preg_match("/\/(.*)$/", $_SERVER['PATH_INFO'], $arr); 
$s1 = $arr[1];
$fp = @fopen($csvfile, 'r');
//csvfileの存在可否チェック
if ($fp == FALSE) {
    echo "error: {$csvfile} が見つかりません.";
    exit(1);
}
$s2 = '';
while (! feof($fp)) {
    $arr = fgetcsv ($fp, 1000, ',');
    if ($s1 == $arr[1]) {
        $s2 = $arr[2];
        break;
    }
}
fclose($fp);
//csvのマッチング・チェック
if ($s2 == '') {
    echo "error: {$csvfile}{$s1} にマッチするレコードがありません.";
    exit(1);
}
$url = 'http://www.hoge.net/' . $s2 . '/xxx/';
$str = file_get_contents($url);
?>
id:admn

Galapagos様

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

理解が深まりました。

また何かありましたら、質問しますので

ご教授ください。

2011/02/25 08:16:59

その他の回答(1件)

id:Galapagos No.1

Galapagos回答回数963ベストアンサー獲得回数892011/02/23 22:15:21

ポイント20pt

こんな感じでどうでしょうか。

"xxx.csv" が存在しなかったり、マッチする文字列がなかった場合のエラー処理はしていません。

<?php
preg_match("/\/(.*)$/", $_SERVER['PATH_INFO'], $arr); 
$s1 = $arr[1];
$fp = fopen('xxx.csv', 'r');
$s2 = '';
while (! feof($fp)) {
    $arr = fgetcsv ($fp, 1000, ',');
    if ($s1 == $arr[1]) {
        $s2 = $arr[2];
        break;
    }
}
fclose($fp);
$url = 'http://www.hoge.net/' . $s2 . '/xxx/';
$str = file_get_contents($url);
?>
id:admn

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

ホント嬉しいです!茂木さんの言うところの「アハ」現象です!

fopenを使うんですね。勉強になります。

試しに無い文字列をいれたのですが画面が真っ白になりました。

読み込みも終わっているので、実用的には大丈夫みたいですけれども、

お忙しいとは承知の上ですが、エラー処理の仕方もご教授ください。

よろしくお願い致します。

2011/02/23 23:29:39
id:Galapagos No.2

Galapagos回答回数963ベストアンサー獲得回数892011/02/24 14:30:02ここでベストアンサー

ポイント80pt

エラー処理を追加しました。

エラー発生時には、エラーメッセージを表示し、スクリプトを終了するようにしてあります。

<?php
$csvfile = 'xxx.csv'
preg_match("/\/(.*)$/", $_SERVER['PATH_INFO'], $arr); 
$s1 = $arr[1];
$fp = @fopen($csvfile, 'r');
//csvfileの存在可否チェック
if ($fp == FALSE) {
    echo "error: {$csvfile} が見つかりません.";
    exit(1);
}
$s2 = '';
while (! feof($fp)) {
    $arr = fgetcsv ($fp, 1000, ',');
    if ($s1 == $arr[1]) {
        $s2 = $arr[2];
        break;
    }
}
fclose($fp);
//csvのマッチング・チェック
if ($s2 == '') {
    echo "error: {$csvfile}{$s1} にマッチするレコードがありません.";
    exit(1);
}
$url = 'http://www.hoge.net/' . $s2 . '/xxx/';
$str = file_get_contents($url);
?>
id:admn

Galapagos様

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

理解が深まりました。

また何かありましたら、質問しますので

ご教授ください。

2011/02/25 08:16:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません