get_headersでhttpsにアクセスしたらエラーが出たのでcurlにしたメモ

get_headersでhttpsにアクセスしたらエラーが出たのでcurlにしたメモ

リンク切れチェックのためにget_headersでhttpsのページにアクセスしたら以下のエラーが出たのでその対処方法

PHP Warning:  get_headers(): Failed to enable crypto in ...

とりあえずget_headersをあきらめてhttpsのときはcurlを利用するように変更した。

以下完成形。

$url = 'https://example.com/aaa/bbb';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
if(curl_exec($ch) === false)
{
 echo 'Curl error: ' . curl_error($ch);
}

$info = curl_getinfo($ch);
echo $info['http_code'];
curl_close($ch);     

上記のコードでhttpsの場合のステータスコードが
取得できるようになった。

エラーを取得しておかないとなんでエラーになったか不明なので
以下のところが大事かも。

if(curl_exec($ch) === false)
{
 echo 'Curl error: ' . curl_error($ch);
}

あと、特定のURLにアクセスした際に以下のエラーがでました。

Curl error: Unknown SSL protocol error in connection to ...

これはPHPが自動で設定しているSSLプロトコルでは駄目と
いうことらしいので

curl_setopt($ch, CURLOPT_SSLVERSION, 1);

上記のように「TLSv1」を指定しました。

その他のCURLOPT_SSLVERSIONは以下のページに記載されてます。
curl_setopt
http://php.net/manual/ja/function.curl-setopt.php

Apacheのアクセスログ、エラーログを一般ユーザも閲覧できるようにする

Apacheのアクセスログ、エラーログを一般ユーザも閲覧できるようにする

やり方を忘れたのでメモ。

CentOSの場合デフォルトでは/var/log/httpdディレクトリまでの権限が
以下のようになっているはず。

■/var

drwxr-xr-x 22 root root  4096  3月  9  2012 var

■/var/log

drwxr-xr-x 10 root root  4096 12月  1 00:15 log

■/var/log/httpd

drwx------ 2 root  root     4096 11月 30 09:51 httpd

この状態で一般ユーザでアクセスするとこんな感じ

$ less /var/log/httpd/error_log                                                                                      
/var/log/httpd/error_log: 許可がありません

一般ユーザもログが見えるようにするには
/var/log/httpdに対して実行権限をつける。

# chmod o+x /var/log/httpd

参考サイト
「`/var/log/httpd/access_log’ を 読み込み用でオープンできません: 許可がありません」の対処法
http://dqn.sakusakutto.jp/2011/11/varloghttpdaccess_log.html

Apache2.4でob_flushが動かなかったメモ

新しいCPIの専用サーバにシステムを設置した際にob_flushが
動作しなかったのでそのメモ。

結局、Apache2.4から導入されているmod_deflate というモジュールが原因ということでした。

mod_deflateとは?

クライアントへ送られる前にコンテンツを圧縮するモジュール

mod_deflateが有効になっているとクライアントへ送る前に圧縮するので
ob_flushの都度の出力がまとめられて圧縮されてまとめられてしまっているようです。

とりあえずPHPファイルで圧縮しないようにするhtaccessは以下でいいみたいです。

.htaccessファイル

<Files ~ "\.php">
  SetEnv no-gzip
</Files>

■参考
Apache モジュール mod_deflate
http://httpd.apache.org/docs/current/ja/mod/mod_deflate.html

Apacheのmod_deflateでコンテンツを圧縮してサイトを高速化する方法
http://oxynotes.com/?p=6519

PHPとBootstrap3でプログレスバーの表示

PHPとBootstrap3でプログレスバーの表示メモ。

ちょっと急ぎで作成。。

html側。
jqueryとか使ってます。
■html.phpファイル

<head>
        <meta charset="utf-8" />
        <title>PHP Progress Sample</title>
        <link href="dist/css/bootstrap.css" rel="stylesheet">
</head>
<body>

        <div class="row">
                <div class="col-md-6 col-md-offset-3">
                        <h1>Progress Sample</h1>
                        <h2>ロード中</h2>
                        <div class="progress">
                                <div id="progress_elem" class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">0%</div>
                        </div>
                </div>
        </div>

        <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
        <script type="text/javascript">
                function updateBar(progress) {
                        var status = progress+"%";
                        $("#progress_elem").css({width: status}).text(status);

                }
        </script>
</body>

php側

■index.phpファイル

<?php

// htmlの出力
require('html.php');

echo str_pad(" ",4096)."<br />\n";

ob_end_flush();
ob_start('mb_output_handler');

$count=0;
$max_count = 15;

for($i=0; $i <= $max_count; $i++){
    $nCount = floor($count / $max_count * 100);
    echo '<script type="text/javascript">updateBar("' . $nCount . '")</script>';
    ob_flush();
    flush();

    $count++;
    sleep(1);
}

実際のサンプルはこちら

出力後に最下部にscriptタグを吐き出して無理矢理動かしている感じが
否めない。。

html開く⇒ajaxでバックエンドの処理をコール⇒進捗を定期的にjsが取りに行くっていう実装のほうが良いかも。

う~む。

CentOS6.4にphp5.6.3をyumで入れる。

CentOS6.4にphp5.6.3をyumで入れる。

元々php5.3.3だったのを必要に駆られてphp5.6.3にしてみました。

以下作業メモ。

■まずepelの導入

# rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

※既に入ってたのでOK

■remiを導入

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
http://rpms.famillecollet.com/enterprise/remi-release-6.rpm を取得中
準備中...                ########################################### [100%]
        ファイル /etc/yum.repos.d/remi.repo (パッケージ remi-release-6.5-1.el6.remi.noarch から) は、パッケージ remi-release-6-2.el6.remi.noarch からのファイルと競合しています。

※競合がとか出たので前のものを一回消す

■削除のテスト

# rpm -e --test remi-release-6

■削除実行

# rpm -e remi-release-6

■もう一度入れなおす

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

■phpのバージョン確認

# yum --enablerepo=remi-php56 info php

■先にgd-lastを入れないとエラーが出たので入れる

# yum install gd-last --enablerepo=remi

■全体的にupdate

#  yum --enablerepo=remi-php56 update php*

■phpのバージョン確認

# php -v
Failed loading /usr/lib/php/modules/xdebug.so:  /usr/lib/php/modules/xdebug.so: undefined symbol: zend_unmangle_property_name
PHP 5.6.3 (cli) (built: Nov 16 2014 08:34:59)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies

あれ。xdebugがおかしなことに。

■xdebugがあったので入れてみる

# yum --enablerepo=remi-php56 install php-pecl-xdebug

違うWarning出た。。

# php -v
PHP Warning:  Module 'xdebug' already loaded in Unknown on line 0
PHP 5.6.3 (cli) (built: Nov 16 2014 08:34:59)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.6, Copyright (c) 2002-2014, by Derick Rethans

とりあえず以下のファイルの1行目をコメントアウト。。

# vim /etc/php.d/xdebug.ini

普通になりました。

# php -v
PHP 5.6.3 (cli) (built: Nov 16 2014 08:34:59)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.6, Copyright (c) 2002-2014, by Derick Rethans

■参考
CentOS6にPHP5.6をyumでインストール
http://nob-log.info/2014/08/25/centos6-yum-install-php56/

漏れちゃったらウタマロ石けん。

昨日オムツの後ろ漏れの記事を書きましたが、
寝返りしたりしてどうしても漏れちゃうことはあります。

そんな時我が家では「ウタマロ石けん」で洗ってます。

商品名をよく忘れるのでメモ。

最初はシャツの襟汚れのために家にあったのだけれど
何かのきっかけでウンチ漏れにもいいと聞いてから
愛用しています。ウタマロのサイトにも載ってますね。

ガンコな汚れ辞典

結構有名な石けんみたいでNaverまとめにもなってますね。

話題のウタマロ石鹸がすごい!アメトーークの家事大好き芸人で紹介、泥汚れが落ちると評判

これからもお世話になります。
IMG_4185_2

パンパースでの後ろ漏れ対策

子育ての事もメモって行くことにしました。

とりあえず夜寝ている間にオムツの後ろから漏れる
ことがあるので調査。

それまではガーゼを挟んだり、
嫁さんの化粧水のコットンを挟んでました。

コットンは結構優秀で漏れはしないんだけどもっと
手軽にならないかなと。

パンパースを使ってるのでパンパースのサイトを確認。
すると以下のようなことが書いてあったので引用。

 

[テープ:背中からのモレ]新しいオムツをあてるとき、背中側がしわしわになったままオムツをあててしまうと背中から漏れることがあります。背中側がしわになっていないか十分確認してオムツをあてましょう。
テープをベルトのより中央側に止めると、のびのびストレッチサイドが伸びた状態で背中がフィットします。抱っこの時やおむつ交換で寝かせた時等に軟便が押し出されてしまう場合には、その直前に一時的に背中の隙間にティッシュ等を詰めることも有効です。授乳中にその刺激で排便される事もありますが、その時のモレも起こりにくくなります。

ティッシュもありなんだなという発見がありました。

それと、我が家の実験で挟まなくても背中の部分を1回内側に折り返すだけでも
そこそこ効果があることがわかりました。
IMG_0649_3

ただ結局漏れないからといって泣くまで
放置するとかぶれちゃうので気づいたら
すぐに変えるのが賢明ですね。

そう言う時に限ってオムツ変えるとブリブリしますけどね。

 

 

H26秋期基本情報技術者試験受験記録

6月に娘が産まれて、パパになったのだから記念に何かやろうということで、

今まで受けたことのなかった基本情報に挑戦。

30過ぎてからとか受験するの遅すぎ。

IMG_4495_2

※4ヶ月の娘ちゃん

基本情報とか落ちるわけないという同僚のプレッシャーを受けながら
とりあえず以下2冊を使って勉強しました。

 

後は以下のサイトでひたすら過去問解いてました。

過去問道場

問題は4択とかなのでLPICと比べると答えやすかったです。

結果は午前が9割、午後がギリギリというなんか微妙な形で
合格しました・・・。

午後の過去問とかやってたけど、子育てしながら1問ずつ解いて
いたから当日の時間配分でかなり焦ってました。

午後の対策として1回くらいは本番と同じ時間で
練習しておけばよかったな。。

自分は情報系の大学卒でも無くて社会人になってからプログラマーに
なった人なので基礎知識が無く、いい勉強になりました。
そして結局基本情報の知識だけでは現場には足りないという
ことがよくわかったのでもっと勉強しなくてはと思いましたとさ。

さて次は何をやろうかな。。

IMG_4783
※5ヶ月の娘ちゃん。

【Fuel】Validationクラスのget_messageの前後に任意のタグを設定する

【Fuel】Validationクラスのget_messageの前後に任意のタグを設定する

FuelPHPのValidationクラスでget_messageメソッドでエラーを出力するときに
前後にデフォルトで指定のタグを付加する方法。

といっても\fuel\core\classes\validation\error.phpをのぞいたら
ドキュメントに無い設定項目があったのでそれをconfigに設定するだけ。
※試しているバージョンは1.7.2

■fuel/core/classes/validation/error.php

	/**
	 * Get Message
	 *
	 * Shows the error message which can be taken from loaded language file.
	 *
	 * @param   string  HTML to prefix error message
	 * @param   string  HTML to postfix error message
	 * @param   string  Message to use, or false to try and load it from Lang class
	 * @return  string
	 */
	public function get_message($msg = false, $open = '', $close = '')
	{
		$open   = empty($open)  ? \Config::get('validation.open_single_error', '')  : $open;
		$close  = empty($close) ? \Config::get('validation.close_single_error', '') : $close;

		if ($msg === false and ! ($msg = $this->field->get_error_message($this->rule)))
		{
			if (is_null($msg))
			{
				$msg = $this->field->fieldset()->validation()->get_message($this->rule);
			}
			if ($msg === false)
			{
				$msg = \Lang::get('validation.'.$this->rule) ?: \Lang::get('validation.'.\Arr::get(explode(':', $this->rule), 0));
			}
		}
		if ($msg == false)
		{
			return $open.'Validation rule '.$this->rule.' failed for '.$this->field->label.$close;
		}

		// only parse when there's tags in the message
		return $open.(strpos($msg, ':') === false ? $msg : $this->_replace_tags($msg)).$close;
	}

■fuel/app/config/config.php

・・・
        /**
         * Validation settings
         */
        'validation' => array(
                /**
                 * Wether to fallback to global when a value is not found in the input array.
                 */
                // 'global_input_fallback' => true,
                'open_single_error' => '<div class="error">',
                'close_single_error' => '</div>',
        ),
・・・

これでget_messageのたびにタグを渡さなくて済む。

【MySQL】Error: Cannot load from mysql.proc. The table is probably corrupted

Error: Cannot load from mysql.proc. The table is probably corrupted

MySQL Workbenchで既存のDBからリバースエンジニアリングして、
テーブルの列の型とかを変更してから変更を反映させようとしたら

「Error: Cannot load from mysql.proc. The table is probably corrupted」

というエラーが発生した。

以下のサイトを参考にして対応。

MySQL Workbench cannot load mysql.proc
http://stackoverflow.com/questions/6789373/mysql-workbench-cannot-load-mysql-proc

# mysql_upgrade -u root -p
Enter password: 
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
fuel_auth.admins                                   OK
fuel_auth.migration                                OK
fuel_auth.users                                    OK
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.servers                                      OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Running 'mysql_fix_privilege_tables'...
OK

こんな感じで動いた。

その後Workbenchで再度反映を行ったら無事に反映された。

mysql_upgrade
http://blog.pdns.jp/mysql_upgrade/

ついでに上記のサイトにあるgrantで怒られていたのも直った。

MySQLでDB移行する時はmysql_upgradeを行おう
http://www.seeds-std.co.jp/seedsblog/269.html

rootユーザがおかしいと思ってたけど
バージョンの違いによるカラムの変化の問題だったとは。。