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

プログラム+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];

?>

●質問者: admn
●カテゴリ:ウェブ制作
✍キーワード:333 AAA CCC CSV PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Galapagos
●20ポイント

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

"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);
?>
◎質問者からの返答

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

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

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

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

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

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

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


2 ● Galapagos
●80ポイント ベストアンサー

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

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

<?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);
?>
◎質問者からの返答

Galapagos様

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

理解が深まりました。

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

ご教授ください。

関連質問


●質問をもっと探す●



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