ど素人から毛を生やす。<延>

PHP

MySQLをPHPでSELECTしたとき、resource型で保持して使用するときにwhileするのと一度配列にぶち込んでforeachするのとで、どれくらい負荷と速度に差があるのか調べてみた。

Web > PHP 2018年12月7日(最終更新:3日前)

どもです。

つい昨日、こんなことを呟きました。

膨大な行のMySQLをPHPでSELECTしたとき、resource型で保持して使用するときにwhileするのと一度配列にぶち込んでforeachするのとで、どれくらい負荷と速度に差があるのか知りたい。
いや前者の方が良いのはわかるんだけど!可能なら後者でいきたいんだ!

ということで、調べます。
PHPバージョンは5.4.15、Linuxサーバーです。

材料:
1万行×11カラムのテスト用テーブル

結果
1.Max Memory Usage : 5.978 [MB] ... 続きを読む »

FTPS中のファイルを更新日時順で取得したかった話。

Web > PHP 2018年10月31日(最終更新:24日前)

どもです。

FTPS上にアップされたCSVをDBに落とすプログラムを作成していたのですが、このときにファイル名は問わないという縛りがあり、では何を基準に複数ファイルがあったときの処理順を定めるべきか。

普通に考えたらファイルの更新日時かアップロード日時ですな。
ファイル更新日時の昇順といたしましょう。

さて、どうすればそれが適うのか。

ローカルのファイルの日時を取得するなら…

filemtimeですな。

使い方はこちらのサイト様がとてもわかりやすい。

しかし、今回はFTPなので、絶対パスで指定するfilemtimeではない。さて。

ftp_nlistって引数lsコマンド使えるのか→できないな…、何故だ。

ftp_nlistって... 続きを読む »

PHP4サーバーにXML/ParserをインストールしたらFatal errorになった話

Web > PHP 2018年10月5日(最終更新:2月前)

どもです。

PHP4のサーバーでXMLの読み取りを行いたく、【Pear】Package Information: XML_Serializerを導入。

本番サーバーへリリースしたところ、「XML/Parser.phpがねーぞ!」とお断りされたので慌ててサーバーのライブラリを追加導入。したところ、今度は

Fatal error: Undefined class name 'self' in ... ... 続きを読む »

一定文字数、一定バイト数で文字列を分割する的なアレ。

Web > PHP 2018年8月17日(最終更新:27日前)

どもです。
一続きの文字列を、一定の文字数またはバイト数で分割する備忘録。

両方とも$arrayに分割された文字列が入ります。

原理としては、まぁ見りゃわかるやつですが、

[i] = 切取(加工前の[i], 0, $byte);
[i+1] = 切取(加工前の[i], 文字カウント([i]), 文字カウント(加工前の[i]));

mb_substr... 続きを読む »

str_replace()にNULLを突っ込むと…

Web > PHP 2018年6月21日(最終更新:5月前)

どもです。

仕事でちょっとヘマやらかしまして、ちょっと凹んでます。
まぁ失敗談は置いておいて、その過程で見つけてちょっと驚いたstr_replace()の話。

str_replace()にNULLを入れるとどうなるか、です。

なんと、ひとつもエラーにならない。文字列型を返してくれる。

str_replace()を通したNULLは、すべて空の文字列に変換されてしまうようです。

ちなみにPHP4と5で事象確認済み。7の簡易テスト環境が欲しい今日この頃。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・)
... 続きを読む »

wkhtmltopdfで明朝体フォントを指定したら、全く違うフォントで出力された話。

Web > PHP 2018年5月10日(最終更新:7月前)

どもです。

ウェブサイト上でPDFファイルを作成する手段はいくつかありますが、今回は「wkhtmltopdf」について。

こいつが既に導入されているサイトで、新たなPDF生成システムを作ることに。
サンプルが明朝体だったので、いつものノリで明朝のfont-familyを指定

HTML上での正常な反映を確認。さあPDF出力、ポン。

待て待ておい待て待て待て!!!

明朝体どころか、やたらファンシーでポップなフォント(vl-gothic-regular)にされてんじゃねーか!?

サーバーに游明朝が入ってなかったから、にしてはフォント無指定やserifのみのときと異なっているのが妙だ。
ちなみにserifのみのときは、こう。... 続きを読む »

Eclipseで勝手に変数の宣言元に跳ぶのをどうにかしたい。

Web > PHP 2018年3月14日(最終更新:2月前)

どもです。
Eclipseは開発のお供ですが、機能が多すぎるのも玉に瑕です。

この頃気になっていたのが、ソースのコピペをしようとした途端、変数の宣言元に意図せずジャンプしてしまう頻度が高いこと。
戻るのは簡単ですが、間違いなく不便ですし、ストレスが溜まります。

この機能、「宣言を開く」という名称だそうです。
変数の上で[Ctrl]キーを押すと、変数にハイパーリンク的なものがつきます。これをクリックすることで宣言元に移動するのですね。便利な機能です。

しかし[Ctrl]は多用するキーなので、他のショートカットを実行しようとして、誤ってリンクとなった変数をクリックしてしまうことが多い。

ちなみにこの「宣言を開く」。デフォルトで[F3]キーにもショートカットが設定されています

じゃあ[F3]でいいよ!! ... 続きを読む »

htmlspecialcharsを使用するときは「重ねがけ」に要注意

Web > PHP 2017年12月5日(最終更新:1年前)

どもです。

とある一覧を表示するとき、

まぁ内容は何でも良いですが、とにかくtext型の値を全て「htmlspecialchars()」で出力したとします。

このとき、「シューズ&バッグ」というカテゴリがあったとして、
とあるページで表示が「シューズ&バッグ」になってしまうという不具合が報告されました。

つまり、エンティティ化された「&」が、何故かエンティティの状態で表示されていると。

この原因、限りなく簡略化すると、こんなもん。

つまり、1つの文字データに対し、htmlspecialchars()が2重にかかってしまった状態。
こうなってしまうと、

はい。
そりゃ表示が「シューズ&バッグ」になりますな。

何かとhtmlspecialchars()使いたがる方っていますが、それ自体が正しいのはわかりますが、
既存のコードを見て「echoするときはhtmlspecialchars()した方が良いんだ~」みたいな感じになると、ちょっと危険。... 続きを読む »

Utf-8では全角文字が3byteだけど、2byte扱いで切り取りたい。

Web > PHP 2017年9月15日(最終更新:1年前)

どもです。

CSV出力したり、他サイトとデータのやり取りをしたいとき、
Utf-8では全角文字が3byteですが、2byte扱いで切り取りたい場合があります。

そういうときの解決法。

SJISに一度変換してから、SJISとしてmb_strcutを使用するわけです。

でもこれ、いわゆる機種依存文字が来ると死にます。

ちょっと改良。

文字数をカウントするだけなら

で特に問題ないんだけどなー!
変換するのはいろいろ怖いからあんまりやりたくないなー。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (
... 続きを読む »

[php]switch->caseの中で正規表現してみた

Web > PHP 2017年9月13日(最終更新:1年前)

どもです。

例えば様々な項目の中に「url1」から「url5」までがあるとして、
これをswitchで処理したい場合があったとします。

このとき、「urlX」は同じ処理にしたい。
その場合、こういう書き方になると思います。

これ、URLが例えば20まで増えたら?

case20個書くの?? うへぇ。嫌だぁ。

と思ったら、caseには関数や条件式が使えたのか。

ここで注意したいのが、if()だとpreg_match()でいいところが、switchだとpreg_match()===1になる点。

ifの場合、preg_match()でマッチできたときは1≒trueが入って問題ないのですが、
switchの場合はきちんとtrueを返してやらないとダメっぽい。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった
... 続きを読む »