PHP関数他探訪2016

54

Transcript of PHP関数他探訪2016

Page 1: PHP関数他探訪2016
Page 2: PHP関数他探訪2016

2016/05/21株式会社Fusic 平田 哲

PHP関数他探訪2016

Page 3: PHP関数他探訪2016

Fusic Co., Ltd.

自己紹介3

平田 哲(HIRATA, Satoshi)id: debilityFusic Co., Ltd.http://fusic.co.jp/Fukuoka.pmProgram, Server, Network, and “Nomikai”

icon: © mutsuking

Page 4: PHP関数他探訪2016

Fusic Co., Ltd.

三行広告4

Page 5: PHP関数他探訪2016

Fusic Co., Ltd.

三行広告5

エンジニア募集しています。エンジニア募集しています。エンジニア募集しています。

Page 6: PHP関数他探訪2016

Fusic Co., Ltd.

このLTについて6

圧倒的な物量を誇るPHPの関数をたまには見直して、愛でる話です。

Page 7: PHP関数他探訪2016

Fusic Co., Ltd.

重要7

PHP関数他探訪2016

Page 8: PHP関数他探訪2016

Fusic Co., Ltd.

重要8

PHP関数他探訪2016

Page 9: PHP関数他探訪2016

Fusic Co., Ltd.

重要9

関数以外も喋ってよし

Page 10: PHP関数他探訪2016

Fusic Co., Ltd.

このLTについて10

圧倒的な物量を誇るPHPの関数に限らないもろもろをたまには見直して、愛でる話です。

Page 11: PHP関数他探訪2016

Fusic Co., Ltd.

このLTについて11

圧倒的な物量を誇るPHPの関数に限らないもろもろをたまには見直して、愛でる話です。

Page 12: PHP関数他探訪2016

Fusic Co., Ltd.

愛でる12

×

Page 13: PHP関数他探訪2016

Fusic Co., Ltd.

愛でる13

× ○

Page 14: PHP関数他探訪2016

Fusic Co., Ltd.

愛でる14

× ○ ○

Page 15: PHP関数他探訪2016

Fusic Co., Ltd.

本日のお品書き15

前菜関数の話関数群の話関数の仕様の話デフォルト設定の話とある.ini変数の話

Page 16: PHP関数他探訪2016

Fusic Co., Ltd. 16

前菜

Page 17: PHP関数他探訪2016

Fusic Co., Ltd.

前菜17

https://bugs.php.net/bug.php?id=71585

Page 18: PHP関数他探訪2016

Fusic Co., Ltd.

Nortonが誤ってPHPを削除する暴挙18

https://bugs.php.net/bug.php?id=71585

php-win.exe deletedby Norton Security

Page 19: PHP関数他探訪2016

Fusic Co., Ltd.

過去にも19

https://bugs.php.net/bug.php?id=67930

Norton is classifying this release as insecure and is deleted all file dll and exe files.

Page 20: PHP関数他探訪2016

Fusic Co., Ltd. 20

getimagesize

Page 21: PHP関数他探訪2016

Fusic Co., Ltd.

getimagesize21

getimagesize(string $filename)画像の大きさをファイル名から取得する

Page 22: PHP関数他探訪2016

Fusic Co., Ltd.

getimagesize22

getimagesize(string $filename)画像の大きさをファイル名から取得する

list($width, $height, $type, $attr) = getimagesize(“/path/to/image.jpg”);

Page 23: PHP関数他探訪2016

Fusic Co., Ltd.

getimagesizefromstring23

getimagesizefromstring(string $filename)画像の大きさを文字列から取得する(>=PHP5.4)

Page 24: PHP関数他探訪2016

Fusic Co., Ltd.

getimagesizefromstring24

getimagesizefromstring(string $filename)画像の大きさを文字列から取得する(>=PHP5.4)

$image = file_get_contents(“/path/to/image.jpg”);

Page 25: PHP関数他探訪2016

Fusic Co., Ltd.

getimagesizefromstring25

getimagesizefromstring(string $filename)画像の大きさを文字列から取得する(>=PHP5.4)

$image = file_get_contents(“/path/to/image.jpg”);list($width, $height, $type, $attr) =getimagesizefromstring($image);

Page 26: PHP関数他探訪2016

Fusic Co., Ltd.

getimagesizefromstring26

getimagesizefromstring(string $filename)画像の大きさを文字列から取得する(>=PHP5.4)

$image = file_get_contents(“/path/to/image.jpg”);list($width, $height, $type, $attr) =getimagesizefromstring($image);

長。

Page 27: PHP関数他探訪2016

Fusic Co., Ltd. 27

is_xxx

Page 28: PHP関数他探訪2016

Fusic Co., Ltd.

is_xxx28

Page 29: PHP関数他探訪2016

Fusic Co., Ltd.

is_xxx29

is_array - 変数が配列かどうかを検査するis_bool - 変数が boolean であるかを調べるis_callable - 引数が、関数としてコール可能な構造であるかどうか調べるis_double - is_float のエイリアスis_float - 変数の型が float かどうか調べるis_int - 変数が整数型かどうかを検査するis_integer - is_int のエイリアスis_long - is_int のエイリアスis_null - 変数が NULL かどうか調べるis_numeric - 変数が数字または数値形式の文字列であるかを調べるis_object - 変数がオブジェクトかどうかを検査するis_real - is_float のエイリアスis_resource - 変数がリソースかどうかを調べるis_scalar - 変数がスカラかどうかを調べるis_string - 変数の型が文字列かどうかを調べる

Page 30: PHP関数他探訪2016

Fusic Co., Ltd.

is_xxx30

is_array - 変数が配列かどうかを検査するis_bool - 変数が boolean であるかを調べるis_callable - 引数が、関数としてコール可能な構造であるかどうか調べるis_double - is_float のエイリアスis_float - 変数の型が float かどうか調べるis_int - 変数が整数型かどうかを検査するis_integer - is_int のエイリアスis_long - is_int のエイリアスis_null - 変数が NULL かどうか調べるis_numeric - 変数が数字または数値形式の文字列であるかを調べるis_object - 変数がオブジェクトかどうかを検査するis_real - is_float のエイリアスis_resource - 変数がリソースかどうかを調べるis_scalar - 変数がスカラかどうかを調べるis_string - 変数の型が文字列かどうかを調べる 多。

Page 31: PHP関数他探訪2016

Fusic Co., Ltd.

is_xxx31

is_array - 変数が配列かどうかを検査するis_bool - 変数が boolean であるかを調べるis_callable - 引数が、関数としてコール可能な構造であるかどうか調べるis_double - is_float のエイリアスis_float - 変数の型が float かどうか調べるis_int - 変数が整数型かどうかを検査するis_integer - is_int のエイリアスis_long - is_int のエイリアスis_null - 変数が NULL かどうか調べるis_numeric - 変数が数字または数値形式の文字列であるかを調べるis_object - 変数がオブジェクトかどうかを検査するis_real - is_float のエイリアスis_resource - 変数がリソースかどうかを調べるis_scalar - 変数がスカラかどうかを調べるis_string - 変数の型が文字列かどうかを調べる

Page 32: PHP関数他探訪2016

Fusic Co., Ltd.

xxxval32

Page 33: PHP関数他探訪2016

Fusic Co., Ltd.

xxxval33

doubleval - floatval のエイリアスfloatval - 変数の float 値を取得するintval - 変数の整数としての値を取得するstrval - 変数の文字列としての値を取得する

Page 34: PHP関数他探訪2016

Fusic Co., Ltd.

xxxval34

doubleval - floatval のエイリアスfloatval - 変数の float 値を取得するintval - 変数の整数としての値を取得するstrval - 変数の文字列としての値を取得する

boolval - 変数の boolean としての値を取得する※ PHP5.5で追加された関数

Page 35: PHP関数他探訪2016

Fusic Co., Ltd.

boolval35

echo '0: '.(boolval(0) ? 'true' : 'false')."¥n";echo '42: '.(boolval(42) ? 'true' : 'false')."¥n";echo '0.0: '.(boolval(0.0) ? 'true' : 'false')."¥n";echo '4.2: '.(boolval(4.2) ? 'true' : 'false')."¥n";echo '"": '.(boolval("") ? 'true' : 'false')."¥n";echo '"string": '.(boolval("string") ? 'true' : 'false')."¥n";echo '"0": '.(boolval("0") ? 'true' : 'false')."¥n";echo '"1": '.(boolval("1") ? 'true' : 'false')."¥n";echo '[1, 2]: '.(boolval([1, 2]) ? 'true' : 'false')."¥n";echo '[]: '.(boolval([]) ? 'true' : 'false')."¥n";echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."¥n";

Page 36: PHP関数他探訪2016

Fusic Co., Ltd.

boolval36

0: false42: true0.0: false4.2: true"": false"string": true"0": false"1": true[1, 2]: true[]: falsestdClass: true

Page 37: PHP関数他探訪2016

Fusic Co., Ltd.

mt_rand問題37

http://sucrose.hatenablog.com/entry/2016/02/19/235506

「PHP の mt_rand() は一貫して壊れている(consistently broken)らしい」

本来の実装と少しだけ違うメルセンヌツイスタになっている修正のプルリクがmergeされたのちにrevertされる「後方互換性を壊す変更は議論してからmergeすべき」と言う理由

Page 38: PHP関数他探訪2016

Fusic Co., Ltd.

mt_rand問題38

"Sure it's broken, but at least it's consistently broken!“

Page 39: PHP関数他探訪2016

Fusic Co., Ltd.

愛でる(おさらい)39

Page 40: PHP関数他探訪2016

Fusic Co., Ltd.

愛でる(おさらい)40

× ○ ○

Page 41: PHP関数他探訪2016

Fusic Co., Ltd. 41

default_charset

Page 42: PHP関数他探訪2016

Fusic Co., Ltd.

default_charset42

PHP >= 5.6.0 で、デフォルトが “UTF-8” になりました。※ PHP < 5.6.0 でのデフォルトは空でした。

Page 43: PHP関数他探訪2016

Fusic Co., Ltd.

default_charset43

PHP >= 5.6.0 で、デフォルトが “UTF-8” になりました。※ PHP < 5.6.0 でのデフォルトは空でした。

Shift_JISとか、他の文字コードを同居させているような場合に、さっくり文字化けたりします(metaタグで書いていても)。

Page 44: PHP関数他探訪2016

Fusic Co., Ltd.

default_charset44

PHP >= 5.6.0 で、デフォルトが “UTF-8” になりました。※ PHP < 5.6.0 でのデフォルトは空でした。

Shift_JISとか、他の文字コードを同居させているような場合に、さっくり文字化けたりします(metaタグで書いていても)。

Apacheであれば、.htaccessにphp_value default_charset noneとか書いて回避するといいんじゃないでしょうか。

Page 45: PHP関数他探訪2016

Fusic Co., Ltd. 45

gc_maxlifetime

Page 46: PHP関数他探訪2016

Fusic Co., Ltd.

session.gc_maxlifetime46

session.gc_maxlifetimeセッションの保持時間

Page 47: PHP関数他探訪2016

Fusic Co., Ltd.

session.gc_maxlifetime47

session.gc_maxlifetimeセッションの保持時間デフォルトは1440秒 (=24分)

Page 48: PHP関数他探訪2016

Fusic Co., Ltd.

session.gc_maxlifetime48

Q. なぜ24分?

Page 49: PHP関数他探訪2016

Fusic Co., Ltd.

session.gc_maxlifetime49

Q. なぜ24分?A. もともと1440分(=1日)だったのが、単位だけ秒になって数値そのままとの噂

http://stackoverflow.com/questions/14703363/why-is-the-standard-session-lifetime-24-minutes-1440-seconds

Page 50: PHP関数他探訪2016

Fusic Co., Ltd. 50

まとめ

Page 51: PHP関数他探訪2016

Fusic Co., Ltd.

まとめ51

PHPに限った話ではないですが。調べてみると新たな発見があって、役に立ったりしますよ。

Page 52: PHP関数他探訪2016

Fusic Co., Ltd.

まとめ52

PHPに限った話ではないですが。調べてみると新たな発見があって、役に立ったりしますよ。あと、転んでも泣かない。

Page 53: PHP関数他探訪2016

Fusic Co., Ltd.

まとめ53

PHPに限った話ではないですが。調べてみると新たな発見があって、役に立ったりしますよ。あと、転んでも泣かない。愛でましょう。

Page 54: PHP関数他探訪2016

Fusic Co., Ltd.

ご清聴ありがとうございました。