質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

1852閲覧

PHPでCSVを生成させたい

yuki_90453

総合スコア326

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/01/03 02:55

編集2017/01/03 09:09

いつもお世話になっております。

###実現したいこと
phpでAPIからデータを抽出しCSVを生成させたいと考えております。

###対象のプログラム

php

1<?php 2$request_options = array( 3 'http' => array( 4 'method' => 'GET', 5 'header'=> "Authorization: Bearer *****\r\n" 6 ) 7 ); 8 9$context = stream_context_create($request_options); 10 11// 出力バッファを有効にする 12ob_start(); 13 14// 文字列、配列の出力 15echo "id,title,description,link,condition,price,brand,mpn,google product category,image link,age group,gender,availability,color,product type\n"; 16 17/* 掲載したい商品数÷50の値 */ 18for($j=0; $j<= 0.1; $j++){ 19 20$url = 'https://api.shop-pro.jp/v1/products.json?display_state=0&limit=50&offset='.($j*50); 21 22$response_body = file_get_contents($url, false, $context); 23$response_json = json_decode($response_body, true); 24 25var_dump($response_body[1]); 26var_dump($response_json); 27 28echo count($response_json['products']); 29 30// 連想配列に当たる 31for($i=0; $i<count($response_json['products']); $i++) { 32 if($response_json['products'][$i]['stocks']>="1"){ 33 echo $response_json['products'][$i]['id'].","; 34 echo $response_json['products'][$i]['name'].","; 35 echo $response_json['products'][$i]['simple_expl'].","; 36 echo "http://lingerie-shop.pink/?pid=".$response_json['products'][$i]['id'].","; 37 echo "new,"; 38 echo floor($response_json['products'][$i]['sales_price']*1.08).","; 39 echo "Pink test,"; 40 echo $response_json['products'][$i]['model_number'].","; 41 echo ","; 42 echo $response_json['products'][$i]['image_url'].","; 43 echo "adult,"; 44 echo "female,"; 45 echo "in stock,"; 46 echo ","; 47 if(strpos($response_json['products'][$i]['name'],"カテゴリ1")!== FALSE) 48 echo "カテゴリ1"; 49 elseif(strpos($response_json['products'][$i]['name'],"カテゴリ2")!== FALSE) 50 echo "カテゴリ2"; 51 elseif(strpos($response_json['products'][$i]['name'],"カテゴリ3")!== FALSE) 52 echo "カテゴリ4"; 53 else 54 echo"[その他]"; 55 echo "\n"; 56 } 57} 58 59} 60 61$output = ob_get_contents(); 62ob_end_clean(); 63 $fp = fopen('feed.csv', 'w'); 64 fwrite($fp, $output); 65 fclose($fp); 66

###発生している問題・エラーメッセージ
csvが生成されません。また事前にcsvを用意し上書きされるような形も試したのですが上書きされませんでした。
権限の問題かと思い管理者権限で実行したのですが、結果は変りませんでした。
エラーログも出ず何が原因かわかりません。
確認の為、プログラムの一部を変えて実行するとエラーログは表示されました。

何が原因でcsvが生成されないのでしょうか?

###環境
CentOS 6.8 64bit
php 5.6.29
Apache 2.2.15

###追記
このプログラムをroot権限で実行しているのですが、そこに問題があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

エラーログも出ず何が原因かわかりません。

エラーを表示する設定で動かしていないからですね。

php

1<?php 2// この二行をファイルの先頭に記述し、エラーを表示する 3ini_set('display_errors', 1); 4error_reporting(E_ALL);

投稿2017/01/03 07:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki_90453

2017/01/03 08:42

お世話にになります。 エラーログはシンタックスエラーの際は、表示されておりましたので表示設定自体は問題ないかと思います。 ご指摘頂いた通り、エラーログを表示するソースを記述した上で再度実行しましたが、エラーにはなっておらずエラーログも表示されませんでした。
guest

0

PHPで意図通りの処理が行われない場合、Kosuke_Shibuya さんの指摘通り、エラーを出力するようにし、まずコードそのものに問題がないか確認します。
次に、論理的に問題がないか、各処理が意図通りの処理をしているか追います。
こちらは、IDE等のデバッグ機能を使用したりvar_dump等で変数を追いかけたり、出力を見たりします。

その為、プログラムを構築する時、できるだけ最小となるように単位を決め、各処理を追いやすいように実装します。方法としては関数やクラスでの処理です。

実際の業務では、この最小単位で想定された処理が行われているか、テストを実施し、それらを結合させて処理の正確性を担保します。

質問内容がCSVデータが出来ないのか、CSVファイルが出来ないのか分かりませんが、機能ごとに分け、切り分けしてみてはいかがでしょうか?

そうすると、各スクリプトが何を行っているのか理解できるようになると思います。

投稿2017/01/03 09:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

転記ミスでなかったら、このへんとか

for($j=0; $j<= 0.1; $j++){

投稿2017/01/03 07:57

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki_90453

2017/01/03 08:46

プログラム自体はエラーなく実行されているみたいなんですが、肝心のCSVが排出されません。 phpの設定か、サーバーの設定に問題があるのではないかと思います。 しかし、どの辺りに問題があるか、さっぱりわかりません。
guest

0

自己解決

出力先が相対パスを利用していましたが、絶対パスにするとうまく行きました。

投稿2017/01/03 09:25

yuki_90453

総合スコア326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/03 09:32

ってことは今までも意図していない場所にに出力されてますね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問