• 締切済み

phpプログラムが思うように動作しません

php初心者です。 とある製品のオーダーメイドサイトを作っています。 製品リストのcsvを読み込み、行分だけデータを表示させる様なプログラムを組みたいのですが 繰り返し処理が動作しないのでアドバイスをお願いします。 サーバーはhetemlです。 プログラムとcsvを編集しているOSがmacXなので、 csvの改行コードのせいで繰り返しができてないのかもとも思っています。 ソースは以下の通りです。 <? #csvファイルをオープン $file = fopen("itemlist.csv","r"); while(!feof($file)) { //カウンターを設置、初期化 $cnt=0; #fgetcsv関数がfalseを返却するまで実行 $data = fgetcsv($file);// $itemid = $data[$cnt]; $cnt++; $filename = $data[$cnt]; $cnt++; $itemname = $data[$cnt]; $cnt++; $price = $data[$cnt]; $cnt++; $detail = $data[$cnt]; $cnt++; print $data; print "<li>"; print "<p><img src='../store/item//".$filename."'></p>"; print "<p><input type='radio' class='required' name='".$itemname."' value='".$price."'>".$itemname."</p>"; print "<p><span class='form_price'>".$price."</span>円</p>"; print "</li>"; } fclose($file); ?> csvの中身です。(テキストエディタで編集) 一番右は在庫数です。 itemid01,01.jpg,itemname001,"800,000",説明1,1 itemid02,02.jpg,itemname002,"900,000",説明2,0 itemid03,03.jpg,itemname003,"1,000,000",説明3,10 itemid04,04.jpg,itemname004,"1,200,000",説明4,4

みんなの回答

  • cheese014
  • ベストアンサー率85% (12/14)
回答No.2

> csvの改行コードのせいで繰り返しができてないのかも そう考えたのであれば、まずは改行コードを変更してテストしてみるのが先決ですね。 Macで定番の↓のようなテキストエディタを使えば簡単に変更できます。 http://www.mimikaki.net/ 改行コードすら確認・変更できない環境で開発されているなら、まずは開発環境から見なおした方が良いと思いますよ。 私の環境で試したところ、改行コード LF(\n) と CR+LF(\r\n) では問題なく動作しますが、CR(\r) では1行目しか取れませんでした。 改行コード? ⇒ http://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89 ・fgetcsv() は setlocale() とセットで使うようにします。 ・feof() をループで回すと無限ループの原因になる事があるので、個人的には下記のようなループの書き方を推奨します。 ・list() を使うとコードがスッキリするでしょう。 // エラー表示ON error_reporting(E_ALL|E_STRICT); ini_set('display_errors', 1); var_dump(setlocale(LC_ALL, NULL)); // 変更前のロケール設定 setlocale(LC_ALL, 'ja_JP.UTF-8'); // csvファイルがUTF-8の場合 $fp = fopen('itemlist.csv', 'r'); while (($data = fgetcsv($fp)) !== FALSE) { if (count($data) !== 5) { continue; } list($itemid, $filename, $itemname, $price, $detail) = $data; var_dump($itemid, $filename, $itemname, $price, $detail); } fclose($fp);

参考URL:
https://www.google.co.jp/search?q=fgetcsv+setlocale
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

手許でローカルで実行したら、ちゃんとループされていました。 細かい問題はありますが、ループしない、ということは無いと思われます。 > csvの改行コードのせいで繰り返しができてないのかもとも思っています。 OSXはUNIXベースのOSです。 テキストエディタでも特に設定を変えなければ改行コードはLFです。Linuxと同じです。 この理由はあまり考えられません。

関連するQ&A