外部のCSVファイルをPHPで読み込み、出力させたい

このQ&Aのポイント
  • PHPを使用して外部のCSVファイルを読み込み、特定の行からデータを出力する方法を教えてください。
  • 具体的には、1ページ目にCSVの1〜10行目を、2ページ目にCSVの11〜20行目を出力したいです。
  • 既存のコードではうまくいかなかったため、他の方法でも構いません。
回答を見る
  • ベストアンサー

外部のCSVファイルをPHPで読み込み、出力させたい

下記の質問を参考に外部のCSVファイルをPHPで読み込み、出力させるphpを書きました。 http://oshiete1.goo.ne.jp/qa1615206.html data.csvは "データ01" "データ02" "データ03" ・・・ といったように100行書いてあります。 <1ページ目に記述したphp> <?php $fp = fopen("data.csv", "r"); $repeat = 10; $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0] EOD; $count++ ; } fclose ($fp) ?> 2ページ目には11行目からのデータを出力したいと思い、 $data[0]の部分を$data[11]に変えたり、 $repeat = 20; $count = 11;にしたりしたのですが、 両方ともうまくいきませんでした。 2ページ目にcsvの11行目からのデータを出力するにはどうすればいいのでしょうか? 私がしたいことは、1ページ目にcsvの1~10行目を、2ページ目にcsvの11~20行目を出力したいとおもっております。 上記のphp以外の記述でも構いませんので、どなたかお分かりになる方がいらっしゃいましたら是非教えて下さい。 よろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

>> やはり、2ページ目が表示されませんでした。 申し訳有りませんでした。バグが入っていたようです。 動作しない場合を考えて 考え方を説明します。 1.ページに応じて、($page-1)×10 の行を読み捨てる 2.10行表示してループを抜ける それだけです。  現在 当方で実行確認できないので一応、目視によるデバッグしたソースを添付します <?php $page=2; // ページ番号 1から10のいずれかを設定 $fp = fopen("data.csv", "r"); $repeat = 10; $count = 0; while ($data = fgetcsv($fp, 10000)) { if ($count < $repeat*($page-1)){ $count++; // <= これを忘れていたので永久ループでした continue; } if ($count >= $repeat*$page) break; print<<<EOD $data[0] EOD; $count++; } fclose ($fp) ?>

rose_web
質問者

お礼

デバッグしたソースで無事に2ページ目も表示されました! 本当に有り難う御座います。 贅沢とは思うのですが、 csvの行数を読み込んで、次のページが有る場合は(今回の場合は10ページ)、自動で次のページへのリンクを作りたいのですが、 //行数を取得して、最後尾の行番号を取得 //全行数>リピート数×ページ数 なら 次のページへのリンクを作る といった部分を足すにはどのように書けばよろしいでしょうか? サイトで色々検索したのですが、 //行数を取得して、最後尾の行番号を取得 $line_number = sizeof(ここには$fp?) -1; //全行数>リピート数×ページ数 なら 次のページへのリンクを作る if($line_number > $page*$repeat){ print "<a href=\"?=".($page+1)."\">次のページへ</a>\n"; } の組み合わせ方が分からないのでご指導頂けると大変助かります。 よろしくお願い致します。

その他の回答 (2)

  • mpx
  • ベストアンサー率71% (149/209)
回答No.3

>> //行数を取得して、最後尾の行番号を取得 >> //全行数>リピート数×ページ数 なら 次のページへのリンクを作る >> といった部分を足すにはどのように書けばよろしいでしょうか? $line_number = count(file('data.csv'));//行数取得 if($line_number > $page*$repeat){ print "<a href=\"?page=".($page+1)."\">次のページへ</a>\n"; } //受け側phpでは以下のコードで$pageに値を読み込みます if (isset($_GET['page']) && (intval($_GET['page'])>0)){ $page=intval($_GET['page']); } else $page=1;

rose_web
質問者

お礼

ご指導、大変有り難うございました! お陰様で完成致しました! 今までより更新がとても楽になり、大変感謝しております。 これを機にphpをもっと勉強していきたいと思います。 この度は、本当に有り難う御座いました!

  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

できるだけ元のコードを利用して修正すると下記になるかな 先頭の$pageの値を書換えれば所望のページが得られるはずです <?php $page=2 // ページ番号 1から10のいずれかを設定 $fp = fopen("data.csv", "r"); $repeat = 10; $count = 0; while ($data = fgetcsv($fp, 10000)) { if ($count < $repeat*($page-1)) continue; if ($count >= $repeat*$page) break; print <<<EOD $data[0] EOD; $count++ ; } fclose ($fp) ?>

rose_web
質問者

お礼

mpx様 早速のお返事有り難うございます。 お教え頂いたコードを記入させて頂いたのですが、 やはり、2ページ目が表示されませんでした。 お手数をお掛けしますが、ご修正頂けると幸いです。

関連するQ&A

  • PHPでCSVファイルの特定行のみ表示

    PHPでCSVファイルを読み込ませるにあたり、「クエリで指定した特定の1行だけ」を取りだしたいと考えています。 下記だと、1行目からクエリで指定した特定行までの抽出が可能です。 hoge.php?repert=5  → 1から5行目までが表示される。 従い、下記から特定行より上の行を削除すれば、当方が考えている「クエリで指定した特定の1行だけ」を取りだすことになりますが、その方法がわかりません。 ご教示いただきたくお願いいたします。 <?php $repeat = $_GET['repert']; $fp = fopen("file2.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; $count++; } fclose ($fp) ?>

    • ベストアンサー
    • PHP
  • PHPで、CSVファイルを、指定した行数だけ出力するには?

    同じようなトピックは、いくつかありましたが、あと一歩、わからないので質問させてください。 CSVファイルをPHPを使って読み込み、出力させる場合で、 CSVファイル data.csv --------------------------- データ1,説明,詳細 データ2,説明,詳細 データ3,説明,詳細 データ4,説明,詳細 データ5,説明,詳細   … データ100,説明,詳細 --------------------------- 上記のように100行あったとします。 この時、 PHPファイルを、 --------------------------- <?php $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { $num = count ($data); print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; } fclose ($fp) ?> --------------------------- と書くと、100行目まで普通に出力してしまいます。 もし、10行目までを出したい場合は、どう記述すればよいのでしょうか? 上記のPHPソースに少し書き加える形で解決できればと思うのですが・・・ 色々試しましたが、私の力だけでは無理でした。

    • ベストアンサー
    • PHP
  • CSVで指定した行から出力をする方法

    CSVから、30件データを取得するために最下部のようなコードを書きました。 しかし、「次のページ」等でもう30件(つまり31行目から)データを出力させたい場合は、どこをどのように修正すればいいのでしょうか。 $fp = fopen("exmple.csv", "r"); $repeat = 30; $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print($data[0]. $data[1]. $data[2]); $count++; } ご回答お願いします。

    • ベストアンサー
    • PHP
  • PHPでCSVファイルを呼び出す条件の複数指定

    PHPでCSVファイルを呼び出すことを考えています。 下記のようなデータがあり、5000番以上の4銘柄を抽出したいと考えています。 4996 クミアイ化学工業 345 4997 日本農薬 456 4998 フマキラー 1215 4999 セメダイン 456 5002 昭和シェル石油 1025 5007 コスモ石油 2451 5008 東亜石油 1265 5009 富士興産 998 5010 日本精蝋 562 5011 ニチレキ 412 下記のようにしたのですが表示されません。 && ($data3 < $number)を外すと、下から4つ(4996-4999)が表示されます。 (5000番以上という選択ができません) どこが間違っているかご教示戴けますでしょうか? よろしくお願いいたします。 <?php $fp3 = fopen("kabu.csv", "r"); $repeat = 4; //表示する件数 $count = 1; $number = 5000; while (($data3 =fgetcsv($fp3, 10000)) && ($data3 >$number)) { if ($count > $repeat) { break; } print($data3[1]); print($data3[0]); print($data3[2]); $count = $count + 1; } fclose ($fp3) ?>

    • ベストアンサー
    • PHP
  • 【PHP】CSVファイルの特定行を書き出す

    PHPでCSVファイルを読み込み、特定行のみを別のCSVファイルに書き出したいと思います。 作りたいものは、 http://example.com/file.php?repert=5 とすると、「002.csvファイルの5行目のみ」を「003.csv」に書き込むというものです。 下記で作りましたが、 Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\file.php on line 32 になります。 指摘された32行は ?> の行です。 ググると改行コードのトラブルのようでしたのでCR+LF CR LF と試しましたが、改善されません。 どこが不味いかご教示戴けませんでしょうか? 宜しくお願い致します。 <?php $repeat = $_GET['repert']; $inFile = '002.csv'; // 抽出元ファイル $outFile = '003.csv'; // 結果ファイル $inFp = fopen($inFile, 'rb'); $outFp = fopen($outFile, 'w'); while ($data = fgetcsv($fp, 10000)) { if ($count == $repeat) { { $outLineArray = array( 0 => $data[0], 1 => $data[1], 2 => $data[2] ); fputs($outFp, implode(",", $outLineArray) . ""); } } fclose($inFp); fclose($outFp); exit(); ?>

    • 締切済み
    • PHP
  • array をつかってcsv ファイルを作る

    もとになるcsvファイルから、いらない行を削除して新しいcsvファイルを作りたいです。 そこで、このようにしてみました。 $fptemp = fopen('data-temp.csv', "a+"); if (($handle = fopen('data.csv', "r")) !== FALSE) { while (($data= fgetcsv($handle)) !== FALSE) { if(条件){ $list = array($data); fputcsv($fptemp, $list); } } } fclose($handle); fclose($fptemp); ところが、結果の行にはすべてArray とだけ出力されます。 もとの行をそのまま出すにはどうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • csvファイルを配列へ格納しブラウザへ出力

    <?php #CAT csvファイルを開く $fp_c = fopen("test.csv","r"); #domain csvファイルを開く $fp_domain = fopen("test.csv","r"); print "<table border='1'>"; #fgetcsv関数がfalseを返却するまで実行 while($c_data = fgetcsv($fp_c)){ print "<tr>"; #csvファイルの列数だけ実行 for($i=0;$i<count($c_data);$i++){ print "<td>".$c_data[$i]."</td>"; } print "</tr>"; } print "</table>"; var_dump($c_data); fclose($fp); ?> このようなプログラムをつくってcsvファイルの各セルを配列$c_data[$i]へ格納している(つもり) なのですが、var_dump($c_data);を入れると bool(false)と表示されてしまいます。 このプログラムではcsvファイルの中身を表示できても配列に格納されていないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPカウンタのデータファイルのパスについて

    PHPカウンタのデータファイルをひとつ上の階層に置いて3つのページで共有したいのですが、 $fp="fopen("counter.dat"," "r+"); 上記パスを $fp="fopen("../counter.dat"," "r+"); このように記述するとエラーになってしまいます。 やり方が間違ってますでしょうか? 以下ソースです。 <?php $fp="fopen("counter.dat"," "r+"); $count=fgets($fp, 6); $count++; fseek($fp, 0); fputs($fp, $count); fclose($fp); ?><BR> <?php echo sprintf('%05d',$count); ?> 初心者の質問で申し訳ありませんが、 ご回答のほどよろしくお願い致します。

    • ベストアンサー
    • PHP
  • CSVでアップロードしたデータのランダム表示

    はじめまして。 質問させてください。 CSVでアップロードしたデータをランダムで表示させたいのですが、 私自身、PHPの知識がほとんどなく困っています。 CSVで15件程の商品データをアップロードし、その中から5件をhtml上に ランダムに表示したいと考えています。 #CSV hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー hoge.jpg,商品名,価格,評価,レビュー (15件ほど) #PHP <?php $fp = fopen("hoge.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count == 6) break; print <<<EOD <div class="hoge"> <p class="hogehoge"><img src="hoge/$data[0]" /></p> <dl> <dt><a href="hoge.html">商品名:$data[1]</a></dt> <dd>価格:$data[2]</dd> <dd>評価: $data[3]</dd> <dd>レビュー:$data[4]</dd> </dl> </div> EOD; $count++ ; } fclose($fp) ?> と自分なりに試してみたのですが… 15件のうち5件だけを表示することはできたのですが、 それをランダムに表示するにはどこをどうしたらいいのやら… といった状況です。 どうか、お力をお貸しください。

    • ベストアンサー
    • PHP
  • PHPで外部ファイルを読み込むときの行の最後の改行の消し方について

    PHPについての質問です。 初歩的な質問ですがどうかお付き合いいただけたらと思います。 PHPで外部ファイルを読み込む際、csvファイルなどを1行ずつ読み込んだ場合、行の最後の改行まで代入されます。 例えば ////test.php/////////////// <?php $filename = list.csv; $fp = @fopen($filename,"r"); $data = @file($filename); @fclose($fp); ?> //////////////////////////// ////list.csv//////////////// 1,2,3,4,5 6,7,8,9,10 //////////////////////////// とする場合 $data[0]には 1,2,3,4,5 プラス改行のデータ $data[1]には 6,7,8,9,10 プラス改行のデータ が代入されます。 この改行のデータを除くためにはどのようにすればよいですか? 初歩的な質問で申し訳ないのですが、よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう