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

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

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

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

解決済

1回答

1326閲覧

cronでphpを実行した際curlのPOST送信先に表示されない。

tsubakin

総合スコア19

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

0クリップ

投稿2018/10/31 04:13

初心者です。
cronでphpを実行しよとしています。
phpの中身はAPIの情報をもらって、それをforeachとif文で
一部の欲しい情報だけ変数に格納して、それをcurl先に表示できるようにしようとしています。

vagrantで行うと変数の中身の表示してくれるのですが。
cronで行うと変数の中身が表示されないので、
アドバイスください。
※test.phpはAPIの情報をもらってきて、jsonデータで連想配列のデータがdataファイルに格納される内容。

php

1#!/usr/bin/php 2<?php 3require "test.php"; 4$dat = array(); 5foreach(glob('data/*.json') as $file){ 6 if(is_file($file)){ 7 $files = file_get_contents($file); 8 $data = mb_convert_encoding($files, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 9 $array = json_decode($data, true); 10 if($array === NULL){ 11 continue; 12 } 13 14 foreach($array as $key =>$value){ //全体のループ 15 foreach($value["データ1"] as $key2 =>$value2){ //データ1の下のループ 16 $count = array(); //配列データリセット 17 $count = array_column($value2["データ2"],'code'); //コードのデータだけを配列で 18 $output = array_count_values($count); //個数をカウント関数で 19 $tim = array(); 20 $tim = array_column($value2["データ2"],'time','code'); //codeをキーにtimeを値に指定した配列 21 22 23    date_fomat($tim[2], 'H:i:s') 24 $date1 = date($tim[1]); 25 $date2 = date($tim[2]); 26 $diff_hour = (strtotime($date2) - strtotime($date1)) / 3600; 27 28 29 30 31 //日付のデータ 32 $day = $value2["データ3"]; 33 $datetime = new DateTime($day); 34 $week = array("日", "月", "火", "水", "木", "金", "土"); 35 $w = (int)$datetime->format('w'); 36 $weekDay = $week[$w]; 37 38 if(!isset($output[1]) || !isset($output[2])){ どちらかのデータがあれば 39 array_push($dat, array( 40 'date' => $value2["データ3"], 41 'division' => $value2[データ4"]['データ5'], 42 'name' => $value2["データ4"]["データ6"] . $value2["データ4"]["データ7"], 43 'comment' => 'コメント' 44 ) 45 ); 46 } if(!isset($output[3]) || !isset($output[4]) ||$output[3] !== $output[4]) { 47 if($weekDay !== ""){ //土曜日以外 48 if($weekDay !== ""){ 49            if($diff_hour >= 6){ 50 array_push($dat, array( 51 'date' => $value2["データ3"], 'division' => $value2["データ4"]['データ5'], 52 'name' => $value2["データ4"]["データ6"] . $value2["データ4"]["データ7"], 53 'comment' => 'コメント2' 54 ) ); 55 } 56 } 57 } 58 } 59       } 60 } 61 } 62 } 63$url = '表示先のURL'; 64$content =''; 65 66 67foreach($dat as $key => $value) { 68 69 $content = $content . $value["データ3"] . $value["データ5"] . $value["データ8"]. '<br>' . $value["データ9] . '<br>'; 70 } 71$message = array( 72 73 "text" => '<h1>【自動アラートテスト】</h1><br>'. $content 74); 75 76// メッセージをjson化します 77$message_json = json_encode($message); 78 79 80 81 82$ch = curl_init(); 83curl_setopt($ch, CURLOPT_URL, $url); 84curl_setopt($ch, CURLOPT_POST, true); 85curl_setopt($ch, CURLOPT_POSTFIELDS, $message_json); 86curl_exec($ch); 87curl_close($ch); 88

crontab -eの設定

MAILTO=メールアドレス SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin CRON_TZ=Asia/Tokyo * * * * * php /home/vagrant/php_lessons/index.php

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

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

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

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

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

takasima20

2018/10/31 05:07

crontab の状況が本当にその通りならば、cron の書き方を調べ直した方がいいです。
tsubakin

2018/10/31 08:47

返事ありがとうございます。cronを調べなおしたほうがいいということは、crontab -eの書き方が違っているということですね。ありがとうございます。
otn

2018/10/31 13:19

cronの書式は間違ってないです。
tsubakin

2018/11/01 07:52

アドバイスありがとうございます。書式は間違ってないということは、crontab内の書き方以外のところがまちがってるということですね。
otn

2018/11/01 11:14

IshibashiTanakaさんの回答の通りです。
tsubakin

2018/11/02 01:48

返事ありがとうございます。IshibashiTanakaさんの通りに行ったらうまくいきました。ありがとうございました
guest

回答1

0

ベストアンサー

多分、Cronで叩いた際に、glob('data/*.json')が取得できてないのでは?
(/home/vagrant/php_lessons/data/example.jsonを参照しているのであれば)

cronをcd /home/vagrant/php_lessons/ && php ./index.phpにしてみるのは如何でしょう?

投稿2018/10/31 09:57

IshibashiTanaka

総合スコア152

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

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

tsubakin

2018/11/02 01:47

回答ありがとうございます。 改めて、教えていただいた通りの内容に変更して 実行してみたらうまくいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問