<?php function getPageView() { require_once 'vendor/autolod.php'; $viewId = ''; $client_email = ''; $private_key = file_get_contents(""); $metrics = "ga:pageviews"; $from = '2018-01-30'; $to = '2018-01-31'; $option = [ "dimensions" => 'ga:date', "max-results" => 10000, "sort" => "ga:date", ]; $scope = ["https://www.googleapis.com/auth/analytics.readonly"]; $credentials = new Google_Auth_AssertionCredentials($client_email, $scopes, $private_key); $client = new Google_Client(); $client->setAssertionCredentials($credentials); if ($client->getAuth()->isAccessTokenExpired()){ $client->getAuth()->refreshTokenWithAssertion($credentials); } $_SESSION["service_token"] = $client->getAccessToken(); $analytics = new Google_Service_Analytics($client); $obj = $analytics->data_ga->get( "ga:{$viewId}", $from, $to, $metrics, $option ); echo '<pre>'; var_dump($obj->rows); echo '</pre>'; }
PHP 例外処理
<?php try { throw new Exception('エラーが発生しました'); } catch (Exception $e){ } ?>
tryブロック内で例外が発生した場合、catchブロック内で処理、処理終了後、以降へ進む。
tryブロック内で何も起こらなかった場合、catchブロックは無視され、以降の処理へ進む。
サンプル
<?php class Calc { public static function division($int1, $int2) { try { if ($int2 == 0){ throw new Exception('0で割ろうとしました<br>'); } $answer = $int1 / $int2; echo $answer. "<br>"; echo '割り算が終了しました<br>'; } catch (Exception $e){ echo $e->getMessage(); echo '割り算が異常終了しました'; } } } Calc::division(10, 2); Calc::division(10, 0); ?>
もう少し分かり易くするため、個人の総量規制で考えてみます。
<?php class Vcontrol { public static function calc($salary, $loan) { if($salary > 0){ try { if ($salary * 1/3 < $loan){ throw new Exception('借入総額が年収の1/3を超えています。'); } $available = $salary * 1/3 - $loan; echo '貸付可能額は' .round($available,1). '万円です。<br>'; } catch (Exception $e){ echo $e->getMessage(); echo '総量規制により貸付できかねます。<br>'; } } else { echo '貴殿の年収が足りません。<br>'; } } } Vcontrol::calc(500, 20); Vcontrol::calc(300, 200); Vcontrol::calc(0, 50); ?>
$_SESSION
session_start関数を使って開始し、この下でセッションを保存していくことができる。
サンプル
<?php session_start(); $_SESSION['order']="現物取引:買い注文"; echo $_SESSION['order']; ?>
$_SERVER[”] サーバー変数の種類
$_SERVER[‘PHP_SELF’] :ファイル名
$_SERVER[‘GATEWAY_INTERFACE’] :CGIのバージョン
$_SERVER[‘SERVER_ADDR’] :サーバーのIPアドレス
$_SERVER[‘SERVER_NAME’] :サーバーのホスト名
$_SERVER[‘SERVER_SOFTWARE’] :サーバーの認識文字列
$_SERVER[‘SERVER_PROTOCOL’] :プロトコル名とバージョン
$_SERVER[‘REQUEST_METHOD’] :リクエストのメソッド名
$_SERVER[‘REQUEST_TIME’] :リクエスト開始時のタイムスタンプ
$_SERVER[‘QUERY_STRING’] :検索引数
$_SERVER[‘DOCUMENT_ROOT’] :ドキュメントルートディレクトリ
$_SERVER[‘HTTP_ACCEPT’] :現在のリクエストのAccept
$_SERVER[‘HTTP_ACCEPT_CHARSET’] :現在のリクエストのAccept-Charset
$_SERVER[‘HTTP_ACCEPT_ENCODING’] :現在のリクエストにAcept-Encoding
$_SERVER[‘HTTP_ACCEPT_CONNECTION’] :現在のリクエストにConnection
$_SERVER[‘HTTP_HOST’] :現在のリクエストにHost
$_SERVER[‘HTTP_REFERER’] :ユーザーエージェントが参照していたページ
$_SERVER[‘HTTP_USER_AGENT’] :user agent
$_SERVER[‘HTTPS’] :Httpsプロトコルを通じて実行されている場合、空でない値
$_SERVER[‘REMOTE_ADDR’] :ユーザーのIPアドレス
$_SERVER[‘REMOTE_HOST’] :ユーザーのホスト名
$_SERVER[‘REMOTE_PORT’] :ポート番号
$_SERVER[‘SCRIPT_FILENAME’] :スクリプトの絶対パス
$_SERVER[‘SERVER_ADMIN’] :SERVER_ADMINにセットされている値
$_SERVER[‘SERVER_PORT’] :ポート番号
$_SERVER[‘SERVER_SIGNATURE’] :サーバーのバージョンとホスト名
$_SERVER[‘PATH_TRANSLATED’] :ファイルシステム上のパス
$_SERVER[‘SCRIPT_NAME’] :スクリプトのパス
$_SERVER[‘REQUEST_URI’] :ページアクセスするために指定されたURI
$_SERVER[‘PHP_AUTH_DIGEST’] :クライアントから送られたAuthorization
$_SERVER[‘PHP_AUTH_USER’] :ユーザー名
$_SERVER[‘PHP_AUTH_PW’] :ユーザのパスワード
$_SERVER[‘AUTH_TYPE’] :認証形式
$_SERVER[‘PATH_INFO’] :クライアントが提供するパス名
$_SERVER[‘ORIG_PATH_INFO’] :PATH_INFOの原本
関数やメソッドの内部で使用する場合、global $_SERVER;とする必要がありません。
例
<?php $sector = '銀行'; $name = '8306'; function code(){ global $sector, $name; echo '業種は' .$sector. 'の' .$name. 'です。<br>'."\n"; } code(); ?>
<?php $sector = 'IT'; function code(){ global $sector; echo '業種は' .$sector. 'の' .$_SERVER['HTTP_USER_AGENT']. 'です。<br>'."\n"; } code(); ?>
$_SERVER(サーバー変数)
$_SERVERは、ヘッダ情報、パス情報、スクリプトの位置のような情報を提供
定義済み変数の一つ
ウェブサーバーに依存する
連想配列として使用する
関数やメソッドの内部で使用する場合、global $_SERVER;とする必要がない
サンプル
<?php echo "[PHP_SELF] : ".$_SERVER['PHP_SELF']."<br>\n"; echo "[SERVER_ADDR] : ".$_SERVER['SERVER_ADDR']."<br>\n"; ?>
サンプル2
<pre> <?php var_dump($_SERVER); ?> </pre>
array(23) { ["DOCUMENT_ROOT"]=> string(17) "/home/vagrant/api" ["REMOTE_ADDR"]=> string(12) "192.168.33.1" ["REMOTE_PORT"]=> string(5) "65241" ["SERVER_SOFTWARE"]=> string(29) "PHP 5.6.27 Development Server" ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" ["SERVER_NAME"]=> string(13) "192.168.33.10" ["SERVER_PORT"]=> string(4) "8000" ["REQUEST_URI"]=> string(1) "/" ["REQUEST_METHOD"]=> string(3) "GET" ["SCRIPT_NAME"]=> string(10) "/index.php" ["SCRIPT_FILENAME"]=> string(27) "/home/vagrant/api/index.php" ["PHP_SELF"]=> string(10) "/index.php" ["HTTP_HOST"]=> string(18) "192.168.33.10:8000" ["HTTP_CONNECTION"]=> string(10) "keep-alive" ["HTTP_CACHE_CONTROL"]=> string(9) "max-age=0" ["HTTP_USER_AGENT"]=> string(115) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" ["HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1) "1" ["HTTP_ACCEPT"]=> string(85) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" ["HTTP_ACCEPT_ENCODING"]=> string(13) "gzip, deflate" ["HTTP_ACCEPT_LANGUAGE"]=> string(23) "ja,en-US;q=0.9,en;q=0.8" ["HTTP_COOKIE"]=> string(36) "PHPSESSID=vbhhhjhtvqfjap6mpg0i9rj517" ["REQUEST_TIME_FLOAT"]=> float(1517441772.9701) ["REQUEST_TIME"]=> int(1517441772) }
header関数でリダイレクト処理
header関数は、HTTPヘッダを送信するという機能です。
header関数では、Locationと書いてから、飛び先URLを書きます。
サンプル:
<?php header('Location: http://www.jpx.co.jp/'); exit(); ?>
isset
isset()は引数に指定した変数が定義されているかどうか調べる関数です。
定義されていればTRUE、定義されていなければFALSEを返します。
0や空文字の場合もTRUEを返します。
<?php $var = "変数定義"; if (isset($var)){ print '$varは定義されています。'; } else { print '$varは定義されていません。'; } ?>
サンプル:
逆指値注文が入っているかどうかの確認しています。
<?php $price = "47970"; $name = "任天堂"; $position = "200"; $stoploss="45000"; if(isset($stoploss)){ if($price < $stoploss){ print $name."を".$stoploss."円で逆指値注文を決済しました。"; } else { print $name."を".$stoploss."円に逆指値注文中です。"; } } else { print "只今逆指値注文はありません。"; } ?>
OAuth認証
<?php require_once('./google-api-php-client/src/Google/autoload.php'); session_start(); $client = new Google_Client(); $client->setClientId('クライアントID'); $client->setClientSecret('クライアントシークレット'); $client->setRedirectUri('リダイレクトURI'); if(isset($_GET['code'])){ $client->authenticate($_GET['code']); $_SESSION['token'] = $client->getAccessToken(); header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); exit; } if(isset($_SESSION['token'])){ $client->setAccessToken($_SESSION['token']); } if($client->getAccessToken()){ try { echo "Google Drive Api 連携完了!<br>"; $_SESSION['client'] = $client; } catch (Google_Exception $e){ echo $e->getMessage(); } } else { $client->setScopes(Google_Service_Drive::DRIVE); $authUrl = $client->createAuthUrl(); echo '<a href="'.$authUrl.'">アプリケーションのアクセスを許可してください。</a>'; exit; } ?> <a href="list.php">ファイル一覧</a><br> <a href="imageview.php">画像表示</a><br> <a href="upload.php">アップロード</a>
count
countは配列の要素数を数える。
<?php $a[] = "10"; $a[] = "25"; $a[] = "8"; print count( $a ); ?>
では、ストップ高のサンプルです。条件分岐も入れておきましょう。
<?php $stophigh[] = "ホーブ"; $stophigh[] = "バリューコマース"; $stophigh[] = "オイシックスドット大地"; $stophigh[] = "大村紙業"; $stophigh[] = "国際チャート"; $stophigh[] = "ジャストプランニング"; $stophigh[] = "RSC"; $num = count($stophigh); if($num>0){ print "本日のストップ高は $num 銘柄です。"; } else { print "本日ストップ高はありません。"; } ?>
アロー演算子 ->
アロー演算子(->)はクラスやオブジェクトに関係ある演算子です。
1)クラスの例
class { public $color = "塗装前"; public $speed = 0; function run(){ print "{this->color}の車で、時速{$this->speed}kmで走行しています。" } }
例がわかりにくいので、立会外分売の例で考えてみましょう。
2)クラスの例2
class Offselling { public $price = "終値"; public $discount = 0; function sales(){ print "終値{$this->price}の株を、割引率{$this->discount}で売り出します。" } }
設計図が完成したので、objectを記載します。
<?php $myCar = new Car; $myCar->run(); class Car { public $color = "塗装前"; public $speed = 0; function run(){ print "{$this->color}の車で、時速{$this->speed}kmで走行しています。"; } } ?>
オブジェクトに代入してみます。
<?php $myCar = new Car; $myCar->color = "赤い色"; $myCar->speed = 20; $myCar->run(); class Car { public $color = "塗装前"; public $speed = 0; function run(){ print "{$this->color}の車で、時速{$this->speed}kmで走行しています。"; } } ?>
では、立会外分売3547串カツ田中でやってみましょう。
<?php $kushikatu = new Offselling; $kushikatu->price = "4020"; $kushikatu->discount = 3.01; $kushikatu->sales(); class Offselling { public $price = "終値"; public $discount = 0; function sales(){ print "終値{$this->price}円の株を、割引率{$this->discount}で売り出します。"; } } ?>