mcryptの突然死
Fatal error: Call to undefined function mcrypt_module_open() in /Library/WebServer/Documents/***/***.php on line *
突然、mcryptが動かなくなりました。
いろいろ試してみたものの、結局phpをインストールし直したら元の通り動きました。
参考:
macのphpをアップデート
http://kimikimi714.hatenablog.com/entry/2013/07/06/233518
Macで一番簡単にPHP5.4をインストールする方法
http://www.1x1.jp/blog/2012/05/php_54_for_mac_os_x_as_binary_package.html
$ curl -s http://php-osx.liip.ch/install.sh | bash -s 5.5
$ export PATH=/usr/local/php5/bin:$PATH
YosemiteでのPHP
OS Xを10.0 Yosemiteにアップデートしたら、PHPが動かなくなったので解消方法をちょっとググったら見つかりました。
【Yosemite】Mac OSX 10.10 Yosemite にAMP環境の構築【初心者必見】【続編】 http://qiita.com/keneo/items/7e5851a066e0b276f4a9
ログファイル取得(2)
前回のコードにちょっと手を加えました。
名前が"log_YYYY-MM-DD.csv"の形式の場合のみ正規表現にて受け付けるように変更。
それと、そのファイル名より年月日をYYYYMMDDの形式で抽出し、ファイル名配列のキーとして使用。
<?php // 参考サイト: http://codaholic.org/?p=685 アクセス日 2013/11/01 $dir = './log/'; // ディレクトリ文字列取得 $dh = opendir($dir); // ディレクトリを開く $fnArray = array(); // ファイル名配列初期化 while (($fn = readdir($dh)) !== FALSE){ // ディレクトリからエントリ(ファイル名またはディレクトリ名)が読み込める限り if(!is_dir($dir . $fn) && preg_match('/^log_[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}\.csv/', $fn) === 1){ // 取得した名前がディレクトリでなく、かつ名前が"log_YYYY-MM-DD.csv"の形式の場合 $fnKey = str_replace("-", "", substr($fn, 4, 10)); // ファイル名から年月日を抽出した文字列をキーとする $fnArray[$fnKey] = $fn; // ファイル名配列に追記 } } closedir($dh); // ディレクトリを閉じる arsort($fnArray); // ログは古い順になっているので、これを新しい順に並び替え ?>
logディレクトリにlog_2013-11-02.csv、log_2013-11-03.csv、log_2013-11-04.csvを置いた状態。
できた配列$fnArrayの内容は以下の通りになります。
Array ( [20131104] => log_2013-11-04.csv [20131103] => log_2013-11-03.csv [20131102] => log_2013-11-02.csv )
ログファイル取得
ログファイルは"log_2013_11_01.txt"といった具合に、"log_"で始まる仕様。
とりあえず一覧を取得して配列に入れてみるテスト。
参考サイト: http://codaholic.org/?p=685 アクセス日 2013/11/01
<?php $dir = './log/'; $dh = opendir($dir); $fnArray = array(); while(false !== ($fn = readdir($dh))){ if(!is_dir($dir.$fn) && strpos($fn, "log_") === 0){ array_push($fnArray, $fn); } } closedir($dh); ?>
振り分け
デバイスによって振り分けるための関数。
参考サイトはコード中に。
戻り値: 0 PC、1 携帯、2 スマートフォン、3 タブレット
<?php function sortByDevice($ua) { // 参考: http://www.ore-memo.com/808.html アクセス日: 2013/10/25 // 参考: http://monolio.com/memo/php/user-agent-page-change/ アクセス日: 2013/10/25 $deviceType = 0; // 初期値 if(strpos($ua, "DoCoMo") !== FALSE || strpos($ua, "J-PHONE") !== FALSE || strpos($ua, "Vodafone") !== FALSE || strpos($ua, "SoftBank") !== FALSE || strpos($ua, "UP.Browser") !== FALSE || strpos($ua, "KDDI") !== FALSE || strpos($ua, "WILLCOM") !== FALSE || strpos($ua, "PDXGW") !== FALSE || strpos($ua, "DDIPOCKET") !== FALSE) { $deviceType = 1; // 携帯 } else if (strpos($ua, "Android") !== FALSE) { if (strpos($ua, "Mobile") !== FALSE) { $deviceType = 2; // スマートフォン } else { $deviceType = 3; // タブレット } } else if (strpos($ua, "iPhone") !== FALSE) { $deviceType = 2; } else if (strpos($ua, "iPad") !== FALSE) { $deviceType = 3; } return $deviceType; } ?>
クッキーを使わずにセッションを継続する
とりあえず以下のサイトが参考になりそうなので研究中。
http://www.yc.tcu.ac.jp/~yamada/doc/php/0802.html
とりあえず作ってみた結果:
if (SID !== "") { // セッションID定数が空でない場合=クッキーが無効の場合 print "<input type=\"hidden\" name=\"s\" value=\"" . session_id() ."\">\n"; // セッションIDをhiddenとして埋め込む }
ちなみにファイルの最初でsession_name("s");としてあります。
ローカルでは動くのにサーバーに上げたら動かないと思ったら、サーバーのsession.use_only_cookiesが1になっていました。
iPhone 5で見たらだいぶ縮小されて見えるサイト、次の方法でとりあえず解決。
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" >
参考:iPhone用にサイトの幅と画面の幅を合わせるには
http://iphone.f-tools.net/html5/Width-Smart-Phone.html