読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

301 VS 302

開発中のサイトで、https://でアクセスされたらhttp://にリダイレクトしたり その逆をやったり、という事案があり、リダイレクトについて諸々調べてたので残しておきます。 HTTPステータスコード リダイレクトをかます時に、HTTPステータスコードを乗っける…

日時を扱ういろいろ PHP版

PHP

PHPでの日時の扱いについてですが、INT型のUnixタイムスタンプを用いるのが基本です。例えば現在の日時を「YYYY-MM-DD hh:mm:ss」という形で求める場合、 $datetime = date("Y-m-d H:i:s", time()) とします。 time()で現在のUnixタイムスタンプを取得し、そ…

マルチバイト文字列関数の罠

ある時、CSVのデータをインポートする処理で不具合が発生。 「2件のデータをまとめてインポートすると1件のみ失敗して、 成功したデータを除いて再度その1件のみをインポートすると成功した」 いやいやそんなアホな。色々調べた結果、この結論に至りました。…

ランダム文字列を生成する関数

以前に同タイトルの記事を書きましたがこちらはPHP版。↓こちらはVBA版。まあこちらも基本ロジックは一緒なんですが…honey8823.hateblo.jp private function makeRandomStr($strlen = 1) { // 使用可能な文字一覧 $randomstr = "abcdefghijklmnopqrstuvwxyz12…

特定の文字以降を別の文字列に置き換える

具体的には、「メールアドレスの@以降を*でマスクする」ロジック。 文字列処理の関数を多数使用できて面白かったのでメモ。 ただ、PHPならもっと簡単なロジックが作れそうな気も…? // 加工前のメールアドレス $mail_address = "hoge@fuga.com"; // 加工後の…

in_array VS array_search 速度検証

タイトル通り。わたしは普段「ある配列にある値があるかどうか」のチェックにin_arrayを用いていますが、 他の人のソースでarray_searchを用いているのを見かけたので 単純に気になって速度検証。 (in_arrayの方が速いんじゃないかなーという予想)検証コー…

正規化した絶対パスを取得する方法

PHP

/hoge/fuga/../piyo/./yomo/ ↓ /hoge/piyo/yomo…といい感じに変換してくれる関数はないものか…と思ったら、ありました。参考:realpath - php http://php.net/manual/ja/function.realpath.php $path = "/hoge/fuga/../piyo/./yomo/"; // 変数$newpathに正規…

特定のデータベースが存在するかどうか確認する

MySQLにて。クエリ一発で確認できます。 SHOW DATABASES LIKE 'DB名' DB名指定しなければ一覧取れます。 SHOW DATABASES さらに、PHPでユーザ入力値の名前のデータベースが存在するかどうか確認したかったんですが、 // クエリ生成 $query = "SHOW DATABASES…

OpenWeatherMapから近い天気予報を取得するロジック

PHP

弊社の社内ポータルサイト的なやつに天気予報を載せてるのですが (いや、そんなもんいらなくね? というツッコミはめんどくさいのでやらない) それが軽くバグってたのでこっそり修正しつつロジックまとめておく。天気予報は外部APIから取得しています。 ht…

カレントディレクトリを一旦変更してから元に戻す

(知らなかったとはいえ)あぶねーことしてたので反省がてら。 もしかしたら初心者レベルかもしれないアレでアレなんですが…サーバに置いてあるファイルを参照するシェルスクリプトをPHPから呼んでいたのですが、 シェルスクリプト内でファイルを相対パス指定…

PHP×mongoDBでいろいろな検証

環境 ・VMWareでCentOS5.8 ・PHP 5.4 ・MongoDB 2.6 countの速度検証 // $collection は new MongoCollection 云々で定義したやつ // $condition は取得条件の配列 // ① $count_a = $collection->count($condition); // ② $count_b = $collection->find($con…

文字列の集合をインデックスごとに分ける方法

「あいす」→あ行 「ほげ」→は行 …のような感じで、頭文字からインデックスの文字を求める方法のことですね。どうすればいいかはまあ分かりますけど、 もっと画期的な方法はないかなーと思いつつググってみたら、こんなQ&Aがありました。 oshiete.goo.ne.jp …

XMLデータを多次元配列にキャストする関数

…というのを作ったのでメモ。 呼び出し元の処理例(場合によってはこのへんから関数に書き起こしても良い) // まずはファイルからテキスト状態で取得 $text_data = file_get_contents(/* XMLファイルのパス */); // ファイルが有効であれば以下処理 if ($te…

【未解決】二次元配列Aを、配列Bに指定された順にソートする方法

// 配列A $hoge = array( array('fuga' => 1), array('fuga' => 2), array('fuga' => 3), ); // 配列B $fuga = array(2,1,3); という2つの配列があるとして、配列A($hoge)を↓のようにソートしたい。 $hoge = array( array('fuga' => 2), array('fuga' => 1),…

指定文字以降を削除する方法と速度検証

「hogehogefugafuga(piyo)」から 「(」以降を削除(=「(」より前を抜き出す)して 「hogehogefugafuga」にしたいというとき。 まあやり方の想像は付くが、自分が思いつくのより良い案もあるかもしれないのでとりあえずググる。参考:【PHP】指定文字列以降…

文字列のパディング

文字列をある桁数にするために、足りない分を任意の文字で埋める方法。 str_pad(値, 文字数, [埋める文字], [左右どちらを埋めるか]) 埋める文字を省略すると半角スペースが使用される。 また、どちらを埋めるかは、 STR_PAD_RIGHT:右側を埋める(=左寄せ…

配列内の空要素を削除する

ある配列から空の要素(0、空文字、空配列…など)を取り除きたい時は array_filter関数に突っ込むだけでOKのようです。便利。ここにゴミ配列があるじゃろ? $hoge = array( 0 => array(), 1 => array("", ""), 2 => array("a", "b"), 3 => "", 4 => "hoge", …

【未解決】ワイルドカードとエスケープ

※この記事では、MySQLのバージョンは5.6です ※以下、「\」となっているのは半角バックスラッシュです。SQLのワイルドカードには「%」と「_」があります。 -- 「hoge」で前方一致検索 SELECT * FROM `table` WHERE `column` LIKE 'hoge%'; -- 任意の1文字+「…

大量のテストデータを作る

WEBアプリ・データベースにデータを作る話。少なくとも自分の場合、テストデータを作るときは大きく分けて下記の3パターンがあります。 ロジックのテスト等の用途で、パターンを網羅したデータを揃える 負荷テスト等の用途で、中身をランダムにしたデータを…

デバッグでよく使うやつ

変数の中身などを表示する echo, print, print_r, var_dump, exit を使い分けますが、大体はvar_dump。 統一しておくとgrepかけやすいので。 var_dump($hoge); exit("--- ここまでOK ---"); 処理時間を計る 計りたい部分の最初と最後に埋め込んで使う。 処理…

日替わりランダム値

「○○ごとに結果が異なるランダム値を出す」メモまとめ。基本的に、「○○ごと」というのを数値化してseed値にすればOK。 // 実行するごとに異なる値(seed初期化) srand(); print(rand(1,10)); // 1日ごとに異なる値(seedに現在の日付を設定) srand(strtoti…

文字列置換

ある文字列を別の文字列に置換したい場合、 str_replace や preg_replace を使用する。とりあえずマニュアルは以下。参考:str_replace - php.net http://php.net/manual/ja/function.str-replace.php 参考:preg_replace - php.net http://php.net/manual/j…

ある複数の単語が文章中に含まれるかどうかを調べる方法

タイトルの通り、ある文章の中に特定の単語(複数)が含まれるかどうかを チェックする機能が欲しくていろいろ調べていました。 掲示板やブログコメントのNGワードチェックのような用途です。軽く調べても、自分でも思いつくような正攻法しか見つからず…参考:…