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

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

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

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

cURL

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

PHP

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

Q&A

解決済

3回答

3513閲覧

PHPで、何がアクセスしたのか判断したい

web_yasu

総合スコア16

cron

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

cURL

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

PHP

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

0グッド

0クリップ

投稿2016/07/05 06:32

PHPにて何がアクセスしたのか判断することができるのかどうか質問いたします。

何がというのは、以下の3種類のアクセスをPHPで判断することが可能でしょうか?

  1. ユーザーがブラウザでアクセス
  2. プログラムがfile_get_contents,curlでアクセス
  3. 自分のサーバーのCRONがアクセス

###CRONかCRONでないかは以下のような記述で判断しました。

// CRONのみ判断 $getenv_remote_addr = getenv("REMOTE_ADDR"); $getenv_gethostbyname = gethostbyname(getenv("HTTP_HOST")); if($getenv_remote_addr != ""){ echo "NO CRON"; }elseif($getenv_gethostbyname != ""){ echo "NO CRON"; }else{ echo "CRON"; }

1と2を判断することが可能なのかお教えください。よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

一般にブラウザの判別はユーザーエージェントで行います
ただユーザーエージェントは偽装可能です

基本的には偽装されているかを正確に判定するのは無理ですが
ユーザーの利便性だけ考えるのであれば偽装されたかもしれない
ユーザーエージェントを信用すればいいでしょう

cronからアクセスするのを確認するのは、cronを実行している
ipアドレスがわかっているならそれを検証してください
極端な話cron=1的なパラメータをつけてアクセスさせるなどで切り分けはできます

投稿2016/07/05 06:45

yambejp

総合スコア114812

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

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

web_yasu

2016/07/05 08:03 編集

回答ありがとうございます。偽装されたかもしれないユーザーエージェントを信用することにいたします。
guest

0

1番
HTTP_USER_AGENTでブラウザを判別して判断
2番
プログラム上でなんらかのフラグを投げてそれで判断

ではどうでしょうか?

投稿2016/07/05 06:40

jm1156

総合スコア866

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

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

web_yasu

2016/07/05 07:59

回答ありがとうございます。2番は質問の仕方が悪かったです。すみません。外部のプログラムのつもりでした。1番はHTTP_USER_AGENTで判断することにいたします。
guest

0

外部からのアクセスでは、1と2は判別不可能です。
おおよその判別としては、デフォルトのUAを見ることです。

curlの場合

User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3

wgetの場合

User-Agent: Wget/1.12 (linux-gnu)

内部からのアクセス元を知りたいなら、QUERY_STRINGにアクセス元を示す何かしらを入れておくのはどうでしょうか。

投稿2016/07/05 06:38

編集2016/07/05 06:39
moonphase

総合スコア6621

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

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

web_yasu

2016/07/05 08:03

回答ありがとうございます。User-Agentの理解度を深めておおよその判別を試みてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問