PHP

【PHP】cURL VS fread。

ウェブ上のコンテンツを取得する際、cURLとfreadではどちらが早いのか気になったので調べてみた。

結果はstackoverflowで見つけたのでペタリ。

■fread

$start = microtime(true);
$f = fopen('http://example.com','r');

$response = fread($f, 3);
echo $response;

$response = fread($f, 3);
echo $response;

$response = fread($f, 3);
echo $response;

$response = fread($f, 3);
echo $response;

$response = fread($f, 3);
echo $response;

$stop = round(microtime(true) - $start, 5);
echo "{$stop}s";
exit();

■cURL

$start = microtime(true);
$curl = curl_init('http://example.com');
curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_RANGE, "0-2");
$response = curl_exec($curl);
echo $response;

curl_setopt($curl, CURLOPT_RANGE, "3-5");
$response = curl_exec($curl);
echo $response;

curl_setopt($curl, CURLOPT_RANGE, "6-8");
$response = curl_exec($curl);
echo $response;

curl_setopt($curl, CURLOPT_RANGE, "9-11");
$response = curl_exec($curl);
echo $response;

curl_setopt($curl, CURLOPT_RANGE, "12-14");
$response = curl_exec($curl);
echo $response;

curl_close($curl);

$stop = round(microtime(true) - $start, 5);
echo "{$stop}s";
exit();

■result

・fread
1.1 seconds

・cURL
2.5 seconds

■結論
freadのほうが早い模様。
cakePHPのcoreでもcURLじゃなくてfreadが使われてるし、こちらのほうがパフォーマンスに優れているのかな?

 

【PHP】日本語ドメインをピュニコードに変換する。

file_get_contents()などでページのコンテンツを取得しにいく際、日本語ドメインをそのまま渡すとエラーになってしまうため、ピュニコードに変換してやる必要がある。

調べるとPEARのライブラリを利用することで簡単に実現可能な模様。

下記URLからライブラリをダウンロードして任意の位置に配置した後、「Net/IDNA2.php」をrequireすれば使用可能。

http://pear.php.net/package/Net_IDNA2/download

以下例。

require_once 'Net/IDNA2.php'; 
$punycode = Net_IDNA2::getInstance();

$encode = $punycode->encode('日本語ドメイン.com');
$decode = $punycode->decode('xn--eckwd4c7c5976acvb2w6i.com');

これで暗号化と復号化が可能。

 

【PHP】time()関数とREQUEST_TIMEの速度を比較してみた。

実験コードは下記の通り。

// time()
$start = microtime(true);
for($i = 0; $i <= 100000000; $i++) {
	time();
}
$end = microtime(true);
$r = $end - $start;
var_dump($r);

// $_SERVER['REQUEST_TIME']
$start = microtime(true);
for($i = 0; $i <= 100000000; $i++) {
	$_SERVER['REQUEST_TIME'];
}
$end = microtime(true);
$r = $end - $start;
var_dump($r);

結果は下記の通り。

float(20.367789983749)
float(13.140978097916)

結果:$_SERVER[‘REQUEST_TIME’]を参照するほうが速い。

※けどほぼ気にする必要無いレベル。

 

【PHP】オブジェクト内にプロパティが存在するかチェックする。

めも。

$bool = property_exists($myClass, 'propertyName');

変数の有無がブーリアンで返却される。

 

【PHP】PHP5.6より2G以上のファイルをアップロード可能に。

PHP5.6の公式リリースを見ると下記の記述がある。

・support for large(>2GiB) file uploads

これによりアップロードファイルの上限が2G以上に変更されている。

てか、今まで2G以上のファイルって上げられなかったんだね。

 

【PHP】PHP5.6から定数定義時に計算させることが可能に。

PHP5.5以前は定数やメンバ定数を定義するときに、計算式を記述すると文法エラーで怒られてしまっていたが、
PHP5.6になり「スカラー値や他の定数を用いた演算子による計算」が許可された。

const DAY = 60 * 60 * 24;

const MONTH = DAY >= 31 ? 'ONE' : 'TWO';

といった感じ。

※計算式の内容に意味は無いのであくまでもイメージとして御覧ください。

 

【PHP】PHP5.6での可変長引数の書き方。

PHP5.6にて実装された可変長引数を受け取れる関数の定義方法めも。

下記例。

function hoge(...$args) {
	var_dump($args);
}

hoge('hello', 'world');

↓

array(2) {
  [0]=>
  string(5) "hello"
  [1]=>
  string(5) "world"
}

キーワード「…」に続けて変数を宣言してやることで引数が可変長になり、受け取った引数を配列で返してくれる。

これはかなり便利。

 

【PHP】スクリプトの実行上限時間を設定する。

メモ。

// PHPの実行上限時間を1時間に設定する
set_time_limit(3600);

※ただしphp.iniの「max_execution_time」が定義されている場合はこちらが優先されるので注意されたし。