参考になったPHPスクリプト
https://gist.github.com/t-kashima/5714358
流れ
unity側でデータをjson形式のテキストを作成して、AES暗号方式で暗号化し、URLエンコードをしてGETで送信。PHP側ではそれを復号化し、改行文字が含まれているとjsonでデコードできないので、rtrim関数で取り除いて置く。json_decode関数で配列に変換する。json_decode関数の第二引数にtrueを指定すると返り値が配列となるのでしておく。
参考になったPHPスクリプト
https://gist.github.com/t-kashima/5714358
流れ
unity側でデータをjson形式のテキストを作成して、AES暗号方式で暗号化し、URLエンコードをしてGETで送信。PHP側ではそれを復号化し、改行文字が含まれているとjsonでデコードできないので、rtrim関数で取り除いて置く。json_decode関数で配列に変換する。json_decode関数の第二引数にtrueを指定すると返り値が配列となるのでしておく。
https://developers.google.com/safe-browsing/lookup_guide
・GoogleアカウントからAPIキーを取得しなければならない
・APIキー、一つにつき一日に10,000リクエストまで出来る
・GETは一つのURLしかリクエスト出来ないが、POSTの場合は一度に500までリクエスト出来る。
・なので実質一日に10,000*500 のURLを解析する事が出来る。
・レスポンスコードが200の場合はURLの中に一つはマルウェアかフィッシングサイトURLが含まれている。204の場合は一つも含まれていないので、BODY部分は何も返されない。その他のエラーコードはGoogle側のシステムエラーかリクエストパラメーターエラー。
<?php class GoogleSafeBrowsing { private $apikey = "";//APIキーを設定 /** * URLをチェックしマルウェアサイトとフィッシングサイトのURLのみを返す。 * @param unknown_type $checkUrls 調べたい複数のURLを配列で渡す。 * @return NULL|multitype: nullの場合は何らかのエラーが発生。配列の中身が空の場合は不正なURLは一つも検出されなかったという事。 */ function checkUrls($checkUrls){ $postField = count($checkUrls) . "\n" . implode("\n", $checkUrls); $url = "https://sb-ssl.google.com/safebrowsing/api/lookup?client=api&apikey=" . $this->apikey . "&appver=1.5.2&pver=3.0"; $ch = curl_init (); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_HEADER, 1);//HEADERも取得する curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//TRUE を設定すると、 curl_exec() の返り値を 文字列で返します。通常はデータを直接出力します。 curl_setopt ($ch,CURLOPT_POST,1);//POSTをするためのフラグを立てる curl_setopt ($ch,CURLOPT_POSTFIELDS,$postField); $data = curl_exec ($ch); $info = curl_getinfo ($ch); curl_close ($ch); $httpCode = $info['http_code'];//HTTPステータスコードを取得 $body = substr ($data, $info["header_size"]);// BODY部分を取得 $results = explode("\n", $body); if($httpCode === 200){ foreach ($checkUrls as $i => $non){ if($results[$i] == "ok"){ unset($checkUrls[$i]); } } }else if($httpCode === 204){ $checkUrls = array(); }else{ return null; } return $checkUrls; } } $GSB = new GoogleSafeBrowsing(); $checkUrls = array("https://bibouroku.viratube.com/"); print_r($GSB->checkUrls($checkUrls)); ?>
生成したオブジェクトは必ず以下のようにして破棄しないとPHPのバージョンによってはメモリリークする。実際開発側とサーバー側のPHPのバージョンの違いでメモリリークした。by http://simplehtmldom.sourceforge.net/manual_faq.htm#memory_leak
$html = file_get_html(...); // do something... $html->clear(); unset($html);
class Test{ public $var; function __construct($var){ $this->var = $var; } } $testsO[] = new Test(1); $testsO[] = new Test(2); $testsO[] = new Test(3); foreach ($testsO as $test){ $test->var = -$test->var; } print_r($testsO); $testsA[] = 1; $testsA[] = 2; $testsA[] = 3; foreach ($testsA as &$test){ $test = -$test; } unset($test); print_r($testsA); 結果は Array ( [0] => Test Object ( [var] => -1 ) [1] => Test Object ( [var] => -2 ) [2] => Test Object ( [var] => -3 ) ) Array ( [0] => -1 [1] => -2 [2] => -3 )
$xml = simplexml_load_string($output); $addr = (String)$xml->ms->addr;
のように明示的にキャストしないと値がおかしい場合がある
http://funnelbit.hatenablog.com/entry/2012/09/03/161431
http://weble.org/2011/09/26/php-mecab
php.iniの編集は以下の2つともする
sudo gedit /etc/php5/cli/php.ini
sudo gedit /etc/php5/apache2/php.ini
http://monolio.com/memo/php/user-agent-page-change/
文字の大きさの切り替え、段落の切り替えなど