$_SERVER(サーバー変数)

$_SERVERは、ヘッダ情報、パス情報、スクリプトの位置のような情報を提供
定義済み変数の一つ
ウェブサーバーに依存する
連想配列として使用する
関数やメソッドの内部で使用する場合、global $_SERVER;とする必要がない

サンプル

<?php
 echo "&#91;PHP_SELF&#93; : ".$_SERVER&#91;'PHP_SELF'&#93;."<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&#91;&#93; = "10";
$a&#91;&#93; = "25";
$a&#91;&#93; = "8";

print count( $a );
?>

では、ストップ高のサンプルです。条件分岐も入れておきましょう。

<?php
$stophigh&#91;&#93; = "ホーブ";
$stophigh&#91;&#93; = "バリューコマース";
$stophigh&#91;&#93; = "オイシックスドット大地";
$stophigh&#91;&#93; = "大村紙業";
$stophigh&#91;&#93; = "国際チャート";
$stophigh&#91;&#93; = "ジャストプランニング";
$stophigh&#91;&#93; = "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}で売り出します。";
	}
}
?>

analytics api

<?php
function getService()
{
	require_once 'vendor/autoload.php';

	$service_account_email = 'xxx';
	$key_file_location = '/';

  	$client = new Google_Client();
  	$client->setApplicationName("MyAnalyticsApp");
  	$analytics = new Google_Service_Analytics($client);

	$key = file_get_contents($key_file_location);
	$cred = new Google_Auth_AssertionCredentials(
			$service_account_email,
			array(Google_Service_Analytics::ANALYTICS_READONLY),
			$key
		);
	$client->setAssertionCredentials($cred);
	if($client->getAuth()->isAccessTokenExpired()){
		$client->getAuth()->refreshTokenWithAssertion($cred);
	}

	return $analytics;
}

	function getFirstprofileId(&$analytics){
		$accounts = $analytics->management_accounts->listManagementAccounts();

		if(count($accounts->getItems()) > 0){
			$items = $accounts->getItems();
			$firstAccountId = $items[0]->getId();

			$properties = $analytics->management_webproperties
				->listManagementWebproperties($firstAccountId);

			if (count($properties->getItems()) > 0){
				$items = $properties->getItems();
				$firstPropertyId = $items[0]->getId();

				$profiles = $analytics->management_profiles
					->listManagemetProfiles($firstAccountId, $firstPropertyId);

				if(count($profiles->getItems()) > 0){
					$items = $profiles->getItems();

					return $items[0]->getId();
				} else {
					throw new Exception('No views (profiles) found for this user.');
				}
			} else {
				throw new Exception('No properties found for this user.');
			}
		} else {
			throw new Exception('No accounts found for this user.');
		}
	}

	function getResult(&$analytics, $profileId){
		return $analytics->data_ga->get(
			'ga:' . $profileId,
			'7daysAgo',
			'today',
			'ga:sessions');
	}

	function printResults(&$results){
		if (count($results->getRows()) > 0){
			$profileName = $results->getProfileInfo()->getProfileName();

			$rows = $results->getRows();
			$sessions = $rows[0][0];

			print "First view (profile) found: $profileName\n";
			print "Total sessions: $sessions\n";
		} else {
			print "No results found.\n";
		}
	}

	$analytics = getService();
	$profile = getFirstProfileId($analytics);
	$results = getResults($analytics, $profile);
	printResults($results);

?>

$_GET example2

<?php

$totalPage = 100;
if (
	isset($_GET&#91;"page"&#93;) &&
	$_GET&#91;"page"&#93; > 0 &&
	$_GET["page"] <= $totalPage
) {
	$page = (int)$_GET&#91;"page"&#93;;
} else {
	$page = 1;
}

?>
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>サンプル</title>
</head>
<body
	<p>現在 <?php echo $page; ?>ページ目です。

	<p>
		<?php if ($page > 1) : ?>
			<a href="?page=<?php echo ($page - 1); ?>">前ページへ</a>
		<?php endif; ?>
		<?php if ($page < $totalPage) : ?>
			<a href="?page=<?php echo ($page + 1); ?>">次ページへ</a>
		<?php endif; ?>
	</p>
</body>
</html>

$_GET

<html>
	<head>
		<title>銘柄</title>
	</head>
	<body>
		<form action="" method="get">
		<p>コード</p>
		<p><input type="text" name="code"></p>
		<p>銘柄名</p>
		<p><input type="text" name="name"></p>
		<p><input type="submit" value="送信"></p>
		</form>
		</body>
</html>
<?php
echo $_GET&#91;"code"&#93;;
echo "<br>";
echo $_GET["name"];
?>

session_start();

サーバーは、リクエストがあったクライアントに対し、セッションIDを出してクライアント側に保存させる。サーバーはセッションIDとクライアントのやりとりを保存。
次回、クライアントがサーバーに接続した際に、記録を引き継ぐことができる。
クッキーは、クライアント側で情報を保存する。

example
index.php

<html>
	<head>
		<title>空売り機関投資家</title>
	</head>
<body>
機関投資家
<form action="regist.php" method="post">
	<table>
		<tr>
			<td><input type="text" name="investor"></td>
			<td>
				<input type="submit" value="登録">
			</td>
		</tr>
	</table>
</body>
</html>

regist.php

<?php
 session_start();
?>
<html>
	<head>
		<title>登録画面</title>
	</head>
<body>
<?php
 $investor = $_POST&#91;'investor'&#93;;
 $_SESSION&#91;'investor'&#93; = $_POST&#91;'investor'&#93;;
 print("次の機関投資家を登録しました<br>");
 print("機関投資家: $investor<br>");
 ?>

 <a href="regist_check.php">確認</a>
 </body>
 </html>
<?
	session_start();
?>
<html>
	<head>
		<title>登録画面</title>
	</head>
<body>
<?php
	print("登録済み:<br>");
	print($_SESSION['investor']."<br>");
?>
<a href="index.php">追加登録</a>
</body>
</html>