//tips
//基本情報理解
MIPSとはプロセッサが1秒間に実行できる命令数を百万の単位で表したもの。
命令ミックスとはコンピュータの処理能力を測るために用いられる命令の組み合わせで、各命令の実行速度に出現頻度をかけたものを加算した結果が平均命令実行時間となる。
1秒間に実行できる命令の数は平均命令実行時間の逆数になる。
GPUでは3Dグラフィックスを描画するために、整数や浮動小数点数の行列演算を、異なる表示オブジェクトに並列に行う。
このときに用いられる計算モデルがSIMDで、同じデータ構造の大量データを並列に計算することが可能。
グリッドコンピューティングとは、コンピュータの処理能力を高めるために、CPU単体の性能を上げたり、マルチCPUの高性能なシステムを構築したりするのではなく、比較的安価なコンピュータを多数接続し、大規模な仮想コンピュータとして利用できるようにしたシステムの構築手法。
ライトスルー方式とは、CPUがキャッシュメモリと主記憶の両方同時にデータの書き込みを行う。
データを読み出す際には、キャッシュメモリにその内容があればキャッシュメモリのみにアクセスを行い、ない場合には主記憶からCPUにデータを転送すると同時にキャッシュメモリの内容を更新する。
ライトバック方式とは、CPUが基本的にキャッシュメモリのみにアクセスを行うもの。キャッシュミスが発生した場合やCPUの非アクセス時などにキャッシュメモリと主記憶との同期を取る。
//shopify/unity
$ch = curl_init();でcURLセッションを初期化した後は、
curl_setopt(…, CURLOPT_URL, $url); では、取得するURLを指定。
curl_setopt(…, CURLOPT_RETURNTRANSFER, true); では、 実行結果を文字列で返す処理。
true でも1でも処理は同じ。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $access_token_url);
通常GETメソッドが自動的に選択されるが、curl_setoptの第二引数で、CURLOPT_POSTをtrueで指定にすると、POSTメソッドが選択できる。
その場合、POSTで送信するデータは、オプションCURLOPT_POSTFIELDSと送信データを指定する必要がある。
curl_setopt($ch, CURLOPT_POST, count($query));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($query));
Trueでも1でもないcountが用いられているのはなぜか調べてみると
The reason you saw count($data) in this field in some places is to (in my assumption) disable POST when the $data is empty dynamically, so it's 0 when it is empty and >=1 otherwise.
POSTが成立するのはデータが0より多く保有している場合なので、>0となるとPOST可能として捉えられるよう。
参考:
https://stackoverflow.com/questions/26680091/does-curlopt-post-need-to-have-the-number-of-postfields-or-just-1-true
ちなみにqueryの中身は下記の内容なので、承認したアクセス者の情報があるかどうかの確認となる。
$query = array(
"client_id" => $api_key, // Your API key
"client_secret" => $shared_secret, // Your app credentials (secret key)
"code" => $params['code'] // Grab the access key from the URL
);
$result = curl_exec($ch);
curl_close($ch);
ここで$access_token_url = "https://" . $params['shop'] . "/admin/oauth/access_token”;に対して、個人情報内容をPOSTすることでshopifyサーバーからリスポンスが返ってくる。
json_decodeによって
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
JSON エンコードされた文字列を受け取り、それを PHP の変数に変換。TRUE の場合、返されるオブジェクトは連想配列形式で返される。false の場合、返されるオブジェクトは object。
$result = json_decode($result, true);
$access_token = $result['access_token'];
echo $access_token;
ここでやっとアクセストークンが入手できることになる。
これでアクセストークンの生み出され方はわかった。
ついでにfunctions.phpの方も内容を確認する。
phpのfunctionは関数で、
function echo_hello(){
echo "Hello World!!<br/>\n";
}
な関数名と処理内容を定義する際に使用される。
なので下記はshopify_callを定義している部分であることがわかる。
function shopify_call($token, $shop, $api_endpoint, $query = array(), $method = 'GET', $request_headers = array()) {
ちなみにこのshopify_callが使われるのはapi_call_write_products.phpとなっている。
このような形、
$products = shopify_call($token, $shop, "/admin/products.json", array(), 'GET’);。
商品一覧にアクセスしている部分か。
PHPのin_array関数は、配列の中に指定した値が存在するかチェックする関数で、第一引数には、検索する値を渡し、第二引数には、検索対象の配列を渡す。
第二引数に渡した配列の中から、第一引数の値が存在するか確認し、検索した結果存在した場合は、boolean型のtrueが返却され、存在しなかった場合は、boolean型のfalseを返す。第三引数はオプションでboolean型のtrueを渡すことで、検索する値の型まで厳密にチェックできるもの。
if (!is_null($query) && in_array($method, array('GET', 'DELETE')))
$url = $url . "?" .http_build_query($query);
http_build_query により、与えられた連想配列 からURL エンコードされたクエリ文字列を生成可能で、配列を%$abなどのurlでよく見かけるような文字の羅列に変換することが可能。
curl_init($url);ではcurlセッション初期化だけでなく、urlも設定している。
CURLOPT_HTTPHEADERでは配列で複数のヘッダー情報を設定することができる。
そもそもWebサーバーからクライアントに向けて送信されるHTTPレスポンスは、3つの要素で構成されており、
ステータスライン:クライアントから受信したHTTPリクエストの処理結果が記載。処理結果を示す3桁のコードはHTTPステータスコード。該当ページなしの404などが有名。
ヘッダライン:HTTPレスポンスの基本的な情報が「ヘッダ種別:値」の形で記載。リダイレクト先のURLのlocationなど。
本文:HTMLのデータや画像データなど、クライアントが要求したデータ。
このヘッダの部分を取り扱うのが、header関数で、これによりリダイレクト処理を実装できる。
HTTPレスポンスには「location」というヘッダがあるので、URLを指定することで、そのページに続けてアクセスするようになる。
例えば、
<?php
header("location: https://www.google.co.jp/");
echo "Hello world";
とし、このphpのページにアクセスするとGoogleのページにリダイレクトされるのでそちらが表示される。
何秒か経った後にリダイレクトさせるようにしたい場合は「refresh」ヘッダを使用し、
header("refresh:5;https://www.google.co.jp/");
とすれば5秒後にリダイレクトする。
CURLOPT_FOLLOWLOCATIONをtrue を設定すると、サーバーが HTTP ヘッダの一部として送ってくる "Location: " ヘッダの内容をたどる。
HTTPステータスコードが300系などで既に移転してしまったサイトなどでリクエストのヘッダにLocationがあればリダイレクトしてたどっていく機能。
CURLOPT_MAXREDIRS HTTP のリダイレクト先を追いかける最大値。CURLOPT_FOLLOWLOCATION とあわせて使用。 リダイレクトループを避けるため、 デフォルト値として 20 が設定されている。
CURLOPT_SSL_VERIFYPEER false を設定すると、cURL はサーバー証明書の検証を行わない。
CURLOPT_SSL_VERIFYHOSTの2 は、SSL ピア証明書の Subject Alternate Name フィールド、 または Common Name フィールドの値が、指定されたホスト名にマッチするかを調べ、 0 は、チェックしないというもの。3は不明。