php」カテゴリーアーカイブ

Unityからサーバーへデータを送信して保存するには

参考になったPHPスクリプト

https://gist.github.com/t-kashima/5714358

流れ

unity側でデータをjson形式のテキストを作成して、AES暗号方式で暗号化し、URLエンコードをしてGETで送信。PHP側ではそれを復号化し、改行文字が含まれているとjsonでデコードできないので、rtrim関数で取り除いて置く。json_decode関数で配列に変換する。json_decode関数の第二引数にtrueを指定すると返り値が配列となるのでしておく。

Google Safe Browsing APIについて

http://takahitokikuchi.poitan.net/2011/08/19/google-safe-browsing-api%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/

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("http://bibouroku.viratube.com/");
print_r($GSB->checkUrls($checkUrls));
?>

Simple Html Dom Paserのメモリリークについて

生成したオブジェクトは必ず以下のようにして破棄しないとPHPのバージョンによってはメモリリークする。実際開発側とサーバー側のPHPのバージョンの違いでメモリリークした。by http://simplehtmldom.sourceforge.net/manual_faq.htm#memory_leak

$html = file_get_html(...);
// do something...
$html->clear();
unset($html);

PHP、オブジェクトのポインタと配列の参照検証

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
)

Ubuntu上でmecabをphpから操作出来るまで

http://funnelbit.hatenablog.com/entry/2012/09/03/161431

http://weble.org/2011/09/26/php-mecab

http://worktoolsmith.com/2012/03/ubuntu%E3%81%ABmecab%E3%81%AEphp%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0php_mecab%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/

php.iniの編集は以下の2つともする

sudo gedit /etc/php5/cli/php.ini

sudo gedit /etc/php5/apache2/php.ini

http://colo-ri.jp/develop/2011/04/mecab_php_mecab.html