<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BIG1等を当てたいサラリーマンのブログ &#187; 開発ノート</title>
	<atom:link href="https://big1to.com/category/development-note/feed" rel="self" type="application/rss+xml" />
	<link>https://big1to.com</link>
	<description>BIGレポート + 個人活動 + 日常のあれこれを発信していくブログ</description>
	<lastBuildDate>Sat, 25 Jan 2020 14:01:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>[AWS 環境構築 #02]Webサーバ PHP7 + PostgreSQL + Nginxリバースプロキシ設定</title>
		<link>https://big1to.com/development-note/1851</link>
		<comments>https://big1to.com/development-note/1851#comments</comments>
		<pubDate>Tue, 09 May 2017 23:54:26 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1851</guid>
		<description><![CDATA[AWS 環境構築：もくじ Webサーバ EC2 ＋ Nginx + ドメインを割り当てる(DNS設定) Webサーバ PHP7 + PostgreSQL + Nginxリバースプロキシ設定 PHP7インストールと初期設定...]]></description>
				<content:encoded><![CDATA[<p><img src="http://big1to.com/wp-content/uploads/aws.png" alt="aws" width="600" height="237" class="aligncenter size-full wp-image-1880" /></p>
<h2>AWS 環境構築：もくじ</h2>
<ol>
<li><a href="http://big1to.com/development-note/1848">Webサーバ EC2 ＋ Nginx + ドメインを割り当てる(DNS設定)</a></li>
<li>Webサーバ PHP7 + PostgreSQL + Nginxリバースプロキシ設定</li>
<ul style="list-style-type: disc;">
<li><a href="#1">PHP7インストールと初期設定</a></li>
<li><a href="#2">PostgreSQLインストールと初期設定</a></li>
<li><a href="#3">Nginxリバースプロキシ設定</a></li>
<li><a href="#4">まとめ</a></li>
</ul>
<p><!-- 
<li><a href="http://big1to.com/development-note/1851">Webサーバ PHP7 + PostgreSQL + Nginxリバースプロキシ設定</a></li>

 --><br />
<!-- 

<li><a href="http://big1to.com/development-note/1853" class="broken_link">無料のSSL/TLS証明書 Let's Encrypt導入から自動更新まで</a></li>



<li><a href="http://big1to.com/development-note/1855" class="broken_link">CloudWatchでお手軽！EBSのスナップショット(バックアップ)を自動化する</a></li>



<li><a href="http://big1to.com/development-note/1857" class="broken_link">S3で静的サイト公開は本当に爆安だった</a></li>



<li><a href="http://big1to.com/development-note/">Dropbox導入(CLI)</a></li>


 -->
</ol>
<h2 id="1">PHP7インストールと初期設定</h2>
<p>Amazon Linuxでは、PHP7のインストールも簡単です。<br />
通常、のCentOS6系では、remiリポジトリを追加してインストールするケースが多いと思いますが、amznリポジトリでPHP7はサポートされているので、そのままyumコマンドでインストール出来ます。</p>
<p>ちなみに、CentOSなら以下のコマンドでremiリポジトリを追加します。</p>
<p>CentOS6系</p>
<pre class="term">
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
</pre>
<p>CentOS7系</p>
<pre class="term">
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
</pre>
<h3>インストール</h3>
<pre class="term">
sudo yum install -y php70 php70-cli php70-common php70-devel php70-mbstring php70-pdo php70-gd php70-fpm
</pre>
<p>httpdは依存インストールされたようです。<br />
また、NginxからPHPを実行するには、php-fpmは必須です。</p>
<p>PHP-FPMについては、こちらのページが詳しくまとまっていたので参考になります。<br />
<a href="http://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc" target="_blank">nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する &#8211; Qiita</a></p>
<h3>PHP設定</h3>
<p>php.iniのバックアップと編集</p>
<pre class="term">
sudo cp /etc/php.ini /etc/php.ini.org
sudo vi /etc/php.ini
</pre>
<p>以下の通り設定します。</p>
<pre>
エラーディスプレイ表示(確認のみ)
display_errors = Off

文字コード(確認のみ)
default_charset = "UTF-8"

HTTPヘッダーにPHPバージョンを出力しない
expose_php = Off

タイムゾーン
date.timezone = Asia/Tokyo

mbstring
参考: http://php.net/manual/ja/mbstring.configuration.php
mbstring.language = Japanese
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = none
mbstring.func_overload = 0
</pre>
<h3>PHP-FPM設定</h3>
<p>www.confのバックアップと編集</p>
<pre class="term">
sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.org
sudo vim /etc/php-fpm.d/www.conf
</pre>
<p>以下の通り設定します。</p>
<pre>
;user = apache
user = nginx

;group = apache
group = nginx

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nginx
listen.group = nginx
</pre>
<h2 id="2">PostgreSQLインストールと初期設定</h2>
<h3>インストール</h3>
<p>PostgreSQLもamznリポジトリでは、バージョン8, 9.2, 9.3, 9.4, 9.5と選びたい放題ですね！<br />
今回は、事情があってバージョン9.2インストールしました。</p>
<pre class="term">
sudo yum -y install postgresql92-server postgresql92-contrib postgresql92-devel
</pre>
<p>ちなみに、CentOS環境なら以下のコマンドでyumにリポジトリを追加してインストールが可能です。</p>
<pre class="term">
sudo yum -y localinstall https://download.postgresql.org/pub/repos/yum/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-8.noarch.rpm
</pre>
<h3>PostgreSQL設定</h3>
<p>続いて初期化を行います。</p>
<pre class="term">
sudo service postgresql92 initdb
</pre>
<p>作業ユーザは、postgresを使いますのでパスワードを設定します。</p>
<pre class="term">
sudo passwd postgres
</pre>
<p>初期の状態では、ユーザとパスワードによるコマンド操作ができないようなので、pg_hba.confを編集して設定します。</p>
<pre class="term">
sudo cp /var/lib/pgsql92/data/pg_hba.conf /var/lib/pgsql92/data/pg_hba.conf_org
sudo vi /var/lib/pgsql92/data/pg_hba.conf
</pre>
<pre>
# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     trust
# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 ident
host    all             all             ::1/128                 trust
</pre>
<p>以下が、自動起動の設定と起動、停止コマンドです。</p>
<pre class="term">
sudo chkconfig postgresql92 on
sudo service postgresql92 start
sudo service postgresql92 stop
sudo service postgresql92 restart
</pre>
<p>続いて、DBを作成してコマンドで接続してみます。</p>
<pre class="term">
createdb -E UTF8 -U postgres -W testdb
psql -U postgres -d testdb
</pre>
<p>上手く接続出来ました。<br />
僕は、PostgreSQLは触る機会が少ないのでMySQLと比べると随分と文化が違うとかんじました。</p>
<h2 id="3">Nginxリバースプロキシ設定</h2>
<p>この、Nginxのリバースプロキシ設定は、ほぼ覚書きのためです。<br />
普通は、必要ないと思います。<br />
僕は、開発環境で利用する場合が多いです。<br />
利用シーンは以下の3つです。</p>
<ul>
<li>Apachのバーチャルホストの様に復数のドメインを利用したい場合</li>
<li>Nodeアプリケーションの場合(80番ポートのリクエストを流す為)</li>
<li>何かしらの理由で、IPベースのリバースが必要な場合</li>
</ul>
<p>nginx.confのバックアップと編集</p>
<pre class="term">
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org
sudo vim /etc/nginx/nginx.conf
</pre>
<h3>Apachのバーチャルホストの様に復数のドメインを利用したい場合</h3>
<p>以下は、ポート80番の名前ベースのリクエストをリバースします。<br />
僕は、PHPの利用が多いので、PHPを利用する場合の設定も含めています(下部はPHPの設定)。</p>
<pre>
server {
    listen      80;
    server_name php.dev;

    location / {
        root  /home/vagrant/public/www/php.dev/_src;
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        root          /home/vagrant/public/www/php.dev/_src;
        # fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}
</pre>
<h3>Nodeアプリケーションの場合(80番ポートのリクエストを流す為)</h3>
<pre>
server {
    listen       80;
    server_name node.dev;
    location / {
        proxy_pass http://192.168.xx.xx:3000;
        # root ;
    }
}
</pre>
<h3>何かしらの理由で、IPのリバースが必要な場合</h3>
<pre>
server {
    server_name    55.200.xx.01;
    listen 80;
    location / {
        proxy_pass 55.200.xx.02;
    }
}
</pre>
<h2 id="4">まとめ</h2>
<p>今回のエントリーは、ほぼ覚書きのためになってしまいました。<br />
特にAWSに限ったことではないので別のLinux環境でも参考になると思います。</p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1851/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AWS 環境構築 #01]Webサーバ EC2 ＋ Nginx ＋ ドメイン(DNS設定)</title>
		<link>https://big1to.com/development-note/1848</link>
		<comments>https://big1to.com/development-note/1848#comments</comments>
		<pubDate>Tue, 09 May 2017 23:53:55 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1848</guid>
		<description><![CDATA[AWS 環境構築：もくじ Webサーバ EC2 ＋ Nginx + ドメインを割り当てる(DNS設定) 前置き アカウント作成 Amazon EC2のセットアップ Nginxインストール ドメインを割り当てる(DNS設定...]]></description>
				<content:encoded><![CDATA[<p><img src="http://big1to.com/wp-content/uploads/aws.png" alt="aws" width="600" height="237" class="aligncenter size-full wp-image-1880" /></p>
<h2>AWS 環境構築：もくじ</h2>
<ol>
<li>Webサーバ EC2 ＋ Nginx + ドメインを割り当てる(DNS設定)</li>
<ul style="list-style-type: disc;">
<li><a href="#1">前置き</a></li>
<li><a href="#2">アカウント作成</a></li>
<li><a href="#3">Amazon EC2のセットアップ</a></li>
<li><a href="#4">Nginxインストール</a></li>
<li><a href="#5">ドメインを割り当てる(DNS設定)</a></li>
<li><a href="#6">まとめ</a></li>
</ul>
<p><!-- 
<li><a href="http://big1to.com/development-note/1848">Webサーバ EC2 ＋ Nginx + ドメインを割り当てる(DNS設定)</a></li>

 --></p>
<li><a href="http://big1to.com/development-note/1851">Webサーバ PHP7 + PostgreSQL + Nginxリバースプロキシ設定</a></li>
<p><!-- 

<li><a href="http://big1to.com/development-note/1853" class="broken_link">無料のSSL/TLS証明書 Let's Encrypt導入から自動更新まで</a></li>



<li><a href="http://big1to.com/development-note/1855" class="broken_link">CloudWatchでお手軽！EBSのスナップショット(バックアップ)を自動化する</a></li>



<li><a href="http://big1to.com/development-note/1857" class="broken_link">S3で静的サイト公開は本当に爆安だった</a></li>



<li><a href="http://big1to.com/development-note/">Dropbox導入(CLI)</a></li>


-->
</ol>
<h2 id="1">前置き</h2>
<p>これから、AWSの環境構築について何回かエントリーします。</p>
<p>今回が、第1回目です。業務でもAWSはちょくちょく触る機会が増えてきました。<br />
やったことの覚書きとして記事にしておきます。<br />
また、AWSとしていますが、AWS以外でもLinux環境なら参考になる内容にです。</p>
<p>こちらは開発環境をまとめたエントリーです。Linux環境の参考にはなるので併せて確認してみてください。<br />
http://big1to.com/development-note/378</p>
<h2 id="2">アカウント作成</h2>
<p>先ずは、AWSアカウントの作成からです。</p>
<p>AWSには、12か月間の無料利用枠というのがありますので気軽の試すことが出来ます。<br />
また、AWSは日本語のドキュメントがしっかりしているので助かります！</p>
<p>アカウントは次の手順で簡単に作成出来ます。<br />
<a href="https://aws.amazon.com/jp/register-flow/" target="_blank">AWS アカウント作成の流れとポイント | AWS</a></p>
<h2 id="3">Amazon EC2のセットアップ</h2>
<p>ここも序の口なので詳しい説明は割愛します。検索すると参考になるWebページも多数あります。</p>
<p>以下のドキュメントを参考にセットアップが簡単にできます。<br />
<a href="http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/launching-instance.html" target="_blank">インスタンスの作成 &#8211; Amazon Elastic Compute Cloud</a></p>
<p>無料枠で簡単に利用するには、Amazon Machine Image(AMI)からAmazon Linux AMIを選択して、EC2インスタンスを立ち上げます。</p>
<p>では、実際にEC2を起動し、作成したキーペアを使ってSSHコマンドでログインした状態から、Nginxのインストールと初期設定を行います。<br />
その前に、yumのアップデートは先に行いましょう。</p>
<pre class="term">
sudo yum -y update
</pre>
<h2 id="4">Nginxインストール</h2>
<pre class="term">
sudo yum -y install nginx
sudo service nginx start
</pre>
<p>インストールし起動しました。</p>
<p>EC2の、Public IPにアクセスして、Nginxが起動していることが確認できました。</p>
<p><img src="http://big1to.com/wp-content/uploads/SS-2017-02-04-18.39.04.png" alt="SS 2017-02-04 18.39.04" width="680" height="480" class="aligncenter size-full wp-image-1865" /></p>
<p>自動起動のコマンドも忘れないようにしましょう</p>
<pre class="term">
sudo chkconfig nginx on
</pre>
<p>ちなみにデフォルトのルートディレクトリは、/etc/nginx/nginx.confで確認できます。<br />
nginx.confの編集は次のエントリーで、リバースプロキシの設定などと併せて詳しく記事にします。</p>
<h2 id="5">ドメインを割り当てる(DNS設定)</h2>
<p>続いて、ドメインを割り当てます。</p>
<p>外部のレジストラから取得したドメインで、Public IPにアクセス出来るように設定します。<br />
今回は、Route53は使わずに外部のDNSで設定します。</p>
<p>僕は、Value-Domainでドメインを取得しました。<br />
別のレジストラでも大体の手順は一緒だと思いますので、参考にしながら設定できると思います。</p>
<p>DNSは、Value-DomainのDNSを使います。<br />
Value-Domainで取得したドメインなら無料で利用できます。</p>
<p><img src="http://big1to.com/wp-content/uploads/1-2.png" alt="1-2" width="680" height="480" class="aligncenter size-full wp-image-1866" /></p>
<p>数十分から、数時間で設定が反映されます。</p>
<h2 id="6">まとめ</h2>
<p>以上で、AWSで静的ページを公開することが出来ました。<br />
非常に簡単な作業でWebサイトを公開することが出来たと思います！</p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1848/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[WordPress]メールを受信したらXML-RPCを使ってブログに自動投稿(下書き保存)</title>
		<link>https://big1to.com/development-note/1553</link>
		<comments>https://big1to.com/development-note/1553#comments</comments>
		<pubDate>Tue, 07 Jun 2016 12:47:58 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1553</guid>
		<description><![CDATA[こんにちは。 BIG1等を当てたいサラリーマンです。 外部からメールを受信したら、WordPressを使っている当ブログに記事を下書き保存する仕組みを構築します。 その過程を簡単なサンプルを交えて、エントリーしていきます...]]></description>
				<content:encoded><![CDATA[<p>こんにちは。<br />
BIG1等を当てたいサラリーマンです。</p>
<p><img src="http://big1to.com/wp-content/uploads/wp-logo3.png" alt="wp-logo3" width="640" height="480" class="aligncenter size-full wp-image-165" /></p>
<p>外部からメールを受信したら、WordPressを使っている当ブログに記事を下書き保存する仕組みを構築します。<br />
その過程を簡単なサンプルを交えて、エントリーしていきます。</p>
<h2>概要</h2>
<p>当ブログの、[BIGレポート]第xxx回BIG 購入結果と当選結果のタイトル記事は楽天totoの速報情報を参考にエントリーしています。<br />
この記事ではコメント以外は、決まったフォーマットが有ります。<br />
今は、エクセルで作ったフォーマットに必要情報を投入してHTML化して記事にしています。<br />
以前から、この作業を自動化しようと考えていました。</p>
<p>以下の様なフローを実現したいと思います。</p>
<h2>処理の流れ</h2>
<ul>
<li>メールを受信したらプログラムを実行する</li>
<li>HTMLメールのコンテンツをスクレイピング</li>
<li>Webページからコンテンツを取得</li>
<li>データベースからデータを取得する</li>
<li>アイキャッチ画像を作成する</li>
<li>エントリー用コンテンツを作成する</li>
<li>WordPressに下書きを保存する</li>
</ul>
<h3>メールを受信したらプログラムを実行する</h3>
<p>メールを受信したら、PHPプログラムを自動実行させます。</p>
<p>Postfixでエイリアスを利用して自動実行させます。</p>
<p>こちらは参考になる、以前のエントリーです。<br />
http://big1to.com/development-note/661</p>
<h3>HTMLメールのコンテンツをスクレイピング</h3>
<p>スクレイピングとは、コンテンツなどの塊を解析し必要なデータを抜き出す事です。</p>
<p>先ずは、HTMLメールからコンテツを取得します。<br />
PHPのライブラリで、php-mime-mail-parserを使います。<br />
扱いやすく、可読性もいいのでオススメです。</p>
<p>こちらは参考になる、以前のエントリーです。<br />
http://big1to.com/development-note/756#7</p>
<p>この執筆時の最新バージョンは、Version 2.2.2でimapも必要だったので以下のコマンドでインストールしました。</p>
<pre>
sudo yum --enablerepo=remi --enablerepo=remi-php56 install -y php-imap
</pre>
<p><a href="https://packagist.org/packages/php-mime-mail-parser/php-mime-mail-parser" target="_brank">php-mime-mail-parser/php-mime-mail-parser &#8211; Packagist</a></p>
<p>続いてスクレイピングには、phpQueryライブラリを使います。<br />
jQuery風にDOM操作を行える優れものです。</p>
<p><a href="http://www.buildinsider.net/web/bookphplib100/070" target="_blank">スクレイピング／DOM操作をjQuery風に行う（phpQuery）</a></p>
<h3>Webページからコンテンツを取得</h3>
<p>Webページからのコンテンツを取集には、PHPのfile_get_contents関数を使います。<br />
URLを指定して、Webページを文字列として取得する事ができます。<br />
取得した文字列を解析し情報を集取します。<br />
<a href="http://php.net/manual/ja/function.file-get-contents.php" target="_brank">PHP: file_get_contents &#8211; Manual</a></p>
<h3>データベースからデータを取得する</h3>
<p>データはSQLiteで管理しているので、データベースから取得します。</p>
<p>こちらは参考になる、以前のエントリーです。<br />
http://big1to.com/development-note/754</p>
<h3>アイキャッチ画像を作成する</h3>
<p>画像生成はこちらで詳しくエントリーしました！<br />
http://big1to.com/development-note/1438</p>
<h3>WordPressに下書きを保存する</h3>
<p>WordPressへの投稿には、XML-RPC Libraryを使います。</p>
<p><del datetime="2019-06-30T02:41:32+00:00">ダウンロードして、同一ディレクトリ(任意でも可)に保存します。<br />
The Incutio XML-RPC Library for PHP</del></p>
<p>XML-RPCライブラリの候補としてComposer経由でインストールできる、ZendframeworkのZend\XmlRpc\Clientも試しました。<br />
可読性も良く単体ファイルから読み込めば利用できるお手軽でXML-RPC Libraryを採用しました。</p>
<p>しかし、作成者とカテゴリーはIDしてなので調べる必要があります。<br />
MySQLのusersテーブル、termsテーブルから調べられます。</p>
<p><a href="http://taitan916.info/blog/?p=2288" target="_brank">WordPressを外部サーバから投稿する方法 | 勉強したことのメモ</a><br />
<a href="https://wpdocs.osdn.jp/データベース構造" target="_brank" class="broken_link">データベース構造 &#8211; WordPress Codex 日本語版</a></p>
<h3>まとめ</h3>
<p>実際には、かなり希望通りの実装ができました。<br />
次回は、購入したくじ結果を取得するためにログイン後のページにアクセスできるよに挑戦したいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1553/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PHP]ImageMagickライブラリーで簡単に画像処理！</title>
		<link>https://big1to.com/development-note/1438</link>
		<comments>https://big1to.com/development-note/1438#comments</comments>
		<pubDate>Mon, 21 Mar 2016 13:32:54 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1438</guid>
		<description><![CDATA[こんにちは。 BIG1等を当てたいサラリーマンです。 今回は、ImageMagickライブラリーとImagickモジュールを使っての画像処理エントリーです。 画像にテキストを載せる処理をしたいのでフォントも用意します。 ...]]></description>
				<content:encoded><![CDATA[<p>こんにちは。<br />
BIG1等を当てたいサラリーマンです。</p>
<p>今回は、ImageMagickライブラリーとImagickモジュールを使っての画像処理エントリーです。<br />
画像にテキストを載せる処理をしたいのでフォントも用意します。</p>
<p>また、こちらのエントリーで構築したローカル開発環境を使います。<br />
http://big1to.com/development-note/427#4</p>
<h2>もくじ</h2>
<ul>
<li>パッケージをインストール</li>
<li>フォントをダウンロード</li>
<li>サンプルコード</li>
</ul>
<h2>パッケージをインストール</h2>
<p>必要なパッケージです。</p>
<ul>
<li>php-devel</li>
<li>php-gd</li>
<li>ImageMagick</li>
<li>ImageMagick-devel</li>
<li>imagick</li>
</ul>
<p>さっさっさとインストールします。</p>
<pre>
sudo yum install -y php-devel php-gd
sudo yum install -y ImageMagick ImageMagick-devel
sudo pecl install imagick
</pre>
<p>imagickだけは、PECLからインストールします。<br />
次のように進めます。</p>
<pre class="term">
Please provide the prefix of Imagemagick installation [autodetect] :
</pre>
<p>Enterで進みます。</p>
<pre class="term">
Build process completed successfully
Installing '/usr/include/php/ext/imagick/php_imagick_shared.h'
Installing '/usr/lib64/php/modules/imagick.so'
install ok: channel://pecl.php.net/imagick-3.3.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini
</pre>
<p>これは、php.iniに追加設定が必要とのメッセージです。</p>
<p>php.iniを編集します。</p>
<pre>
sudo vi /etc/php.ini
</pre>
<p>以下を最終行に追記します。</p>
<pre>
[imagick]
extension=imagick.so
</pre>
<p>続いてApachを再起動します。</p>
<pre>
sudo service httpd restart
</pre>
<p>最後に確認コマンドを実行して、GDとimagickが有効になっていればOKです。</p>
<pre>
php -i | grep -Ei '^(gd|imagic|gmagic|imagemagick)' | grep enabled
</pre>
<pre class="term">
GD Support => enabled
imagick module => enabled
</pre>
<p><a href="http://php.net/manual/ja/book.imagick.php" terget="_brank">PHP: ImageMagick &#8211; Manual</a></p>
<h2>フォントをダウンロード</h2>
<p>今回はスタンダードな感じがいいので、フリーの日本語フォントであるIPAexフォント(ゴシック)を使います。</p>
<p><a href="http://ipafont.ipa.go.jp/#jp" target="_brank" class="broken_link">IPAexフォント/IPAフォント | IPAフォントのダウンロードサイトです</a></p>
<h2>サンプルコード</h2>
<p>事前準備としてimagick_sample.phpを新規作成し、ダウンロードしたIPAexフォント(ipaexg.ttf)を同一ディレクトリに格納します。<br />
サンプルの要件は、元画像に対して文字列を上下左右中央にテキストを描画です。</p>
<pre>
&lt;?php
/* 初期化 */
$text = 'こんいちわ！日本語フォント';
$file = 'smp-img.png';
$font = 'ipaexg.ttf';
$color = '#fff';

/* オブジェクトを生成 */
$image = new Imagick($file);
$draw = new ImagickDraw();

/* フォントをセット */
$draw->setFont($font);
$draw->setFillColor($color);
$draw->setFontSize(60);

/* ポジションをセット */
$draw->setTextAlignment(imagick::ALIGN_CENTER);

/* 画像サイズを取得 */
$width = $image->getImageWidth();
$height = $image->getImageHeight();

/* メトリックを取得 */
$metrics = $image->queryFontMetrics($draw, $text);

/* テキストを描画 */
$draw->annotation(($width / 2), ($height / 2) + ($metrics['ascender'] / 2) + ($metrics['descender'] / 2), $text);

/* 画像を生成 */
$image->setImageFormat('png');
$image->drawImage($draw);

/* 画像を保存 */
file_put_contents('draw-img.png', $image);
</pre>
<p><a href="http://php.net/manual/ja/imagickdraw.annotation.php" target="_brank">PHP: ImagickDraw::annotation &#8211; Manual</a></p>
<p>思い通りの画像を生成することが出来ました！</p>
<p><img src="http://big1to.com/wp-content/uploads/draw-img.png" alt="draw-img" width="680" height="512" class="aligncenter size-full wp-image-1442" /></p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1438/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PEAR]Warning: Invalid argument supplied for foreach() WarningとNoticeの嵐にあった時の対処法</title>
		<link>https://big1to.com/development-note/1326</link>
		<comments>https://big1to.com/development-note/1326#comments</comments>
		<pubDate>Mon, 08 Feb 2016 20:39:04 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1326</guid>
		<description><![CDATA[こんにちは。 BIG1等を当てたいサラリーマンです。 先日、PEARコマンドを実行したら以下の様に、WarningとNoticeの嵐に会いました。 pear list Warning: Invalid argument ...]]></description>
				<content:encoded><![CDATA[<p>こんにちは。<br />
BIG1等を当てたいサラリーマンです。 </p>
<p>先日、PEARコマンドを実行したら以下の様に、WarningとNoticeの嵐に会いました。</p>
<p><img src="http://big1to.com/wp-content/uploads/SS-2016-02-09-5.22.12.png" alt="SS 2016-02-09 5.22.12" width="675" height="450" class="aligncenter size-full wp-image-1330" /></p>
<pre class="term">
pear list

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
PHP Notice:  Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: honorsbaseinstall in /usr/share/pear/PEAR/Installer/Role.php on line 180

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145
PHP Notice:  Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: installable in /usr/share/pear/PEAR/Installer/Role.php on line 145

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212
PHP Notice:  Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: phpfile in /usr/share/pear/PEAR/Installer/Role.php on line 212

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49
PHP Notice:  Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Notice: Undefined index: config_vars in /usr/share/pear/PEAR/Installer/Role.php on line 49

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
PHP Warning:  Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259
XML Extension not found
</pre>
<p>対処法としては、phpをアンイストールして入れなおしました！</p>
<p>以前から気になってた、WebTaticリポジトリを導入してphp56w系をインストールしました。</p>
<p>WebTaticリポジトリの導入は別エントリーをどうぞ。</p>
<p>http://big1to.com/development-note/1332</p>
<h2>アンイストール</h2>
<pre>
sudo yum remove -y php*
</pre>
<h2>インストール</h2>
<pre>
sudo yum install php56w php56wpear php56w-cli php56w-common php56w-devel php56w-mbstring  php56w-pdo php56w-mysql
</pre>
<p>インストールはこちらのエントリーも参考になります。<br />
http://big1to.com/development-note/779</p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1326/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PHP]WebTaticリポジトリが素晴らしい！</title>
		<link>https://big1to.com/development-note/1332</link>
		<comments>https://big1to.com/development-note/1332#comments</comments>
		<pubDate>Mon, 08 Feb 2016 20:35:02 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1332</guid>
		<description><![CDATA[こんにちは。 BIG1等を当てたいサラリーマンです。 以前、EPEL + Remiレポジトリーをつかったエントリーを書きました。 http://big1to.com/development-note/779 今回は、もっ...]]></description>
				<content:encoded><![CDATA[<p>こんにちは。<br />
BIG1等を当てたいサラリーマンです。</p>
<p>以前、EPEL + Remiレポジトリーをつかったエントリーを書きました。</p>
<p>http://big1to.com/development-note/779</p>
<p>今回は、もっと簡単に好きなバージョンをインストールできるWebTaticリポジトリを覚書を兼ねて紹介します。</p>
<p>こちらの参考ページを読んでもらえれば語ることはないでしょう。<br />
<a href="http://net-newbie.com/php/install.html" target="_blank" class="broken_link">PHPのインストール</a><br />
<a href="https://webtatic.com" target="_blank">Webtatic.com</a></p>
<p>僕の環境は、CentOS 6.xなので以下のコマンドで導入しました。</p>
<pre>
sudo rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
</pre>
<p><img src="http://big1to.com/wp-content/uploads/SS-2016-02-09-5.31.30.png" alt="SS 2016-02-09 5.31.30" width="675" height="450" class="aligncenter size-full wp-image-1336" /></p>
<p>http://big1to.com/development-note/1326</p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1332/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Google OAuth]Google API Client Library for PHPをローカル開発環境で試す</title>
		<link>https://big1to.com/development-note/1066</link>
		<comments>https://big1to.com/development-note/1066#comments</comments>
		<pubDate>Sun, 18 Oct 2015 05:02:12 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1066</guid>
		<description><![CDATA[こんにちは。 先日こちらのエントリーで紹介した、PHPライブラリ＆サンプル実践活用［厳選100］のサンプルコードでGoogle OAuthを実装しました。 http://big1to.com/development-no...]]></description>
				<content:encoded><![CDATA[<p>こんにちは。</p>
<p>先日こちらのエントリーで紹介した、PHPライブラリ＆サンプル実践活用［厳選100］のサンプルコードでGoogle OAuthを実装しました。</p>
<p>http://big1to.com/development-note/1047</p>
<p>最新の、Google API Client Library for PHPでは少しコードを訂正する必要がありました。<br />
覚書も含めて、手順などを交えてエントリーします。</p>
<p>こちらのエントリーで構築したローカル開発環境に実装します。</p>
<p>http://big1to.com/development-note/510</p>
<h2>もくじ</h2>
<ul>
<li><a href="#1">Google Developer Consoleプロジェクト登録</a></li>
<li><a href="#2">Google APIs Client Libraryダウンロード</a></li>
<li><a href="#3">Google OAuth認証(URLの訂正が必要)</a></li>
<li><a href="#4">まとめ</a></li>
</ul>
<h2 id="1">Google Developer Consoleプロジェクト登録</h2>
<p>GoogleのAPIを利用するプロジェクトを以下のリンクから登録します。<br />
<a href="https://console.developers.google.com" target="_blank">Google Developer Console</a></p>
<p><img src="http://big1to.com/wp-content/uploads/1.png" alt="1" width="680" height="450" class="aligncenter size-full wp-image-1067" /></p>
<p>利用するAPIを有効にします。</p>
<p><img src="http://big1to.com/wp-content/uploads/2.png" alt="2" width="680" height="450" class="aligncenter size-full wp-image-1068" /></p>
<p>認証はOAuth2.0、ウェブアプリケーションを選択します。</p>
<p><img src="http://big1to.com/wp-content/uploads/3.png" alt="3" width="680" height="450" class="aligncenter size-full wp-image-1069" /></p>
<p>リダイレクトURLを設定します。</p>
<p><img src="http://big1to.com/wp-content/uploads/4.png" alt="4" width="680" height="545" class="aligncenter size-full wp-image-1070" /></p>
<p>クライアントID、クライアントシークレットが発行されました。</p>
<p><img src="http://big1to.com/wp-content/uploads/5.png" alt="5" width="680" height="450" class="aligncenter size-full wp-image-1080" /></p>
<h2 id="2">Google APIs Client Libraryダウンロード</h2>
<p>以下のコマンドで、GitHubからダウンロードします。</p>
<pre class="term">
cd /var/www/html/example.com
sudo git clone https://github.com/google/google-api-php-client.git
</pre>
<p>google-api-php-clientが作成されます。</p>
<h2 id="3">Google OAuth認証(URLの訂正が必要)</h2>
<p>準備が出来ましたので、OAuth認証を行います。<br />
example.comにアスセスすると、localhost.index.phpにリダイレクトされます。</p>
<p>ERR_CONNECTION_REFUSED(不明なエラー)が返ってきます。</p>
<p><img src="http://big1to.com/wp-content/uploads/SS-2015-10-10-5.48.47.png" alt="SS 2015-10-10 5.48.47" width="680" height="450" class="aligncenter size-full wp-image-1087" /></p>
<p>画像のようにアドレスバーでURLを修正(localhost → example.com)して再度アクセスします。</p>
<p>こちらのページが参考になりました。<br />
<a href="http://d.hatena.ne.jp/tomute/20120520/1337525803" target="_blank">Google OAuth認証をローカル開発環境でテストした際のメモ &#8211; Tomute’s Notes</a><br />
<img src="http://big1to.com/wp-content/uploads/SS-2015-10-10-5.49.15.png" alt="SS 2015-10-10 5.49.15" width="680" height="450" class="aligncenter size-full wp-image-1089" /></p>
<p>認証ができました。</p>
<p><img src="http://big1to.com/wp-content/uploads/SS-2015-10-10-5.55.03.png" alt="SS 2015-10-10 5.55.03" width="680" height="450" class="aligncenter size-full wp-image-1088" /></p>
<h2 id="4">まとめ</h2>
<p>Google API Client Library for PHPはベータ版ですが、簡単にOAuth認証を実装できました。<br />
URLのリプレイスが、JavaScriptで出来ないか考えてみます。<br />
もし、実現できたらまたエントリーしたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1066/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[参考書]必須だよ！サンプルコードのダウンロード PHPライブラリ＆サンプル実践活用［厳選100］</title>
		<link>https://big1to.com/development-note/1047</link>
		<comments>https://big1to.com/development-note/1047#comments</comments>
		<pubDate>Wed, 07 Oct 2015 20:37:24 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1047</guid>
		<description><![CDATA[こんにちは。 BIG1等を当てたいサラリーマンです。 先日、PHPのボキャブラリーを増やしたいと思い、こちらの参考書を購入しました。 レビューでの評判も良いし、Google OAuthとComposerの実装サンプルが掲...]]></description>
				<content:encoded><![CDATA[<p>こんにちは。<br />
BIG1等を当てたいサラリーマンです。</p>
<p>先日、PHPのボキャブラリーを増やしたいと思い、こちらの参考書を購入しました。</p>
<p><img src="http://big1to.com/wp-content/uploads/R0012761.jpg" alt="R0012761" width="680" height="510" class="aligncenter size-full wp-image-1049" /></p>
<p>レビューでの評判も良いし、Google OAuthとComposerの実装サンプルが掲載されていたので購入を決めました。</p>
<p>さすが、厳選100です。実践的なサンプルから、けっこうニッチなサンプルまで掲載されています。<br />
僕は参考書のサンプルコードを試す場合は、コードをコピペするのではなく手打ちします。<br />
Google OAuthのサンプルを試したところ、うまく動きませんでした。</p>
<p>とりあえずPHPに、PATH_SEPARATORPATH_SEPARATORなんて定数はありません。<br />
PATH_SEPARATORの間違いと思われます。</p>
<p><a href="http://php.net/manual/ja/dir.constants.php" target="_blank">PHP: 定義済み定数 &#8211; Manual</a></p>
<p>この参考書では、サンプルコードの電子データがダウンロードできます。<br />
コードを訂正し動くようにはしたのですが、ダウンロードしたサンプルコードを比べることにしました。</p>
<p>ダウンロード先は本書の、6ページに記載されています。<br />
著者のWINGSプロジェクトホームページの他に、発行所の株式会社技術評論社ホームページでもダウンロードできます。</p>
<p><a href="http://www.wings.msn.to/index.php/-/A-07/978-4-7741-6566-0/" target="_blank">PHPライブラリ＆サンプル実践活用［厳選100］［ダウンロード］ &#8211; WINGS</a></p>
<p><a href="http://gihyo.jp/book/2014/978-4-7741-6566-0/support" target="_blank">サポートページ：PHPライブラリ＆サンプル実践活用［厳選100］</a></p>
<p>ちなみに、正誤表は公開されていませんでした。<br />
僕はまだ、Google OAuthのサンプルしか試していませんがサンプルコードのダウンロードは必須です。<br />
他にも気になるサンプルが沢山ありましたので、いろいろ試してみます。</p>
<p>もし、サンプルコードでハマっている方は試してみてください。</p>
<p><iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?t=hna81-22&#038;o=9&#038;p=8&#038;l=as1&#038;asins=4774165662&#038;ref=qf_sp_asin_til&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1047/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PHP]paizaスキルチェックで標準入力の実行方法</title>
		<link>https://big1to.com/development-note/1035</link>
		<comments>https://big1to.com/development-note/1035#comments</comments>
		<pubDate>Tue, 06 Oct 2015 12:13:35 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=1035</guid>
		<description><![CDATA[こんにちは。 少し転職を考えている今日この頃の、BIG1等を当てたいサラリーマンです。 理由は先日、勤めている会社の社長が所有していた株式を全て売却しました。 100%出資の子会社となりました。そして来月、吸収合併し社員...]]></description>
				<content:encoded><![CDATA[<p><img src="http://big1to.com/wp-content/uploads/paiza.png" alt="paiza" width="680" height="420" class="aligncenter size-full wp-image-1036" /></p>
<p>こんにちは。<br />
少し転職を考えている今日この頃の、BIG1等を当てたいサラリーマンです。</p>
<p>理由は先日、勤めている会社の社長が所有していた株式を全て売却しました。<br />
100%出資の子会社となりました。そして来月、吸収合併し社員は転籍する予定です。</p>
<p>当然ですが社風、就業規則、雇用条件、福利厚生、ロケーションなど担当業務以外は全てが変わります。<br />
これを機に、Webエンジニアにスキルチェンジしようかとも考えています。<br />
この件は、また別の機会に詳しくエントリーしたいと思います。</p>
<p>さて今回はpaizaでスキルチェックのエントリーです。</p>
<p>漠然に自分のスキルってどのレベルって気になるエンジニアの方も多いのではないでしょうか</p>
<p>転職も考えているので、スキルチェックにpaizaを利用してみました。<br />
出題されたプログラミング問題を制限時間内に解き、テストケースによる判定、負荷試験、実行速度、回答までの時間からスコアリングされます。</p>
<h2>paizaとは</h2>
<p>以下、paizaホームページより</p>
<blockquote><p>
paiza（パイザ）は、コードを書いて書類選考なしで面接・カジュアル面談に進める、<br />
全く新しいカタチのコーディング転職サービスです。実務経験がない分野、言語でもコードが書ければ面接可能！<br />
たとえば「 業務経験はないが、趣味で週末にRubyを書いている 」という場合でもチャレンジ可能です。</p>
<p>プログラミングコーディングテストの対応言語は PHP,Java,C,C++,C#,Ruby,Python,Perl,JavaScript<br />
に対応しており、より実務に近いプログラムを書く問題になっています。</p>
<p>自己PRが苦手な方でもコーディングチャレンジで書いたコードをもとに、どういった点を考えながら<br />
そのコードを書いたか面接時に話せば自己PRにもなります。コーディングスキルチェックを受けるだけなら、<br />
匿名で誰にも知られず”こっそり”と実力を測ることができます。
</p></blockquote>
<p><a href="https://paiza.jp/guide/guide" target="_blank">paizaとは？｜IT/Webプログラマー 転職のpaiza [パイザ]</a></p>
<p>僕はこの言語の中で一番得意なPHPを選択しました。<br />
まだ2問しか回答していませんが、なかなか面白いです。</p>
<p>デバッグはブラウザではなく、コマンドから行った方が効率がいいです。<br />
標準入力の簡単な実行方法だけ紹介します。</p>
<p>標準入力とは、キーボードに相当する装置のことです。</p>
<p>Macでも、Windowsでも実行方法は同じです。<br />
事前にPHPのパスを通しておいてください。</p>
<p>ソースはpaizaのサンプルコードを利用しています。<br />
実行ファイル(ファイル名は任意)、samp.phpを以下の内容で作成します。</p>
<pre>
&lt;?php
    $input = trim(fgets(STDIN));
    echo $input;
?&gt;
</pre>
<p>次に、入力データのファイル(ファイル名は任意)、samp.txtを以下の内容で作成します。</p>
<pre>
Hello paiza!
</pre>
<p>Macではターミナル、Windowsではコマンドプロンプトから以下のコマンドを実行します。</p>
<pre class="term">
php samp.php < samp.txt
Hello paiza!
</pre>
<p>以上は1行入力の場合です。<br />
複数の場合のサンプルは、paizaでも公開されているのでチェックしてみてください。</p>
<p>利用される方は、利用規約などをpaizaホームページで確認してください。<br />
このように、出題に対して即興プログラムで回答するのは競技プログラミングとも呼ばれます。<br />
僕は、あまり経験が無かったのですが出題(要件)を素早く理解し、最適なロジックを実装するのは面白いです。<br />
おすすめです！</p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/1035/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[PHP]今や当たり前のComposerをLinuxにインストールしてphp-mime-mail-parserを使う</title>
		<link>https://big1to.com/development-note/756</link>
		<comments>https://big1to.com/development-note/756#comments</comments>
		<pubDate>Wed, 16 Sep 2015 19:28:27 +0000</pubDate>
		<dc:creator><![CDATA[big1to]]></dc:creator>
				<category><![CDATA[開発ノート]]></category>

		<guid isPermaLink="false">http://big1to.com/?p=756</guid>
		<description><![CDATA[こんにちは。 先日、PEAR/Mail_MimeDecodeを使ったメール解析をエントリーしました。 http://big1to.com/development-note/661 今回は、Composerを利用して、メー...]]></description>
				<content:encoded><![CDATA[<p>こんにちは。</p>
<p>先日、PEAR/Mail_MimeDecodeを使ったメール解析をエントリーしました。<br />
http://big1to.com/development-note/661</p>
<p>今回は、Composerを利用して、メール解析にphp-mime-mail-parserを導入しました。<br />
手順と、使用感などを記事にまとめました。</p>
<h2>目次</h2>
<ul>
<li><a href="#1">Composerの導入</a></li>
<li><a href="#2">php-mime-mail-parser追加</a></li>
<li><a href="#3">PECL導入</a></li>
<li><a href="#4">mailparseインストール</a></li>
<li><a href="#5">メール解析</a></li>
<li><a href="#6">参考ページ</a></li>
<li><a href="#7">まとめ</a></li>
</ul>
<h2 id="1">Composerの導入</h2>
<h3>Composerとは</h3>
<p>パッケージ管理ツールです。<br />
プロジェクト単位でパッケージを管理できるのが特徴です。</p>
<h3>インストール</h3>
<p>composer.pharをダウンロードします。</p>
<pre class="term">
cd
curl -sS https://getcomposer.org/installer | php
</pre>
<p>オプション-sは、ダウンロードの進捗とエラーメッセージを表示しない。<br />
-sと-Sを、併用するとエラーメッセージだけは表示する。</p>
<p>プログラムをパスが通ったディレクトリに移動します。</p>
<pre class="term">
sudo -s mv composer.phar /usr/local/bin/
</pre>
<h2 id="2">ライブラリ(php-mime-mail-parser)の追加</h2>
<p>Composerに対応しているライブラリやJSONの記述方法、必要条件などはPackgistで検索して確認できます。</p>
<p><a href="https://packagist.org" target="_blank">Packagist</a></p>
<h3>ライブラリの確認</h3>
<p>php-mime-mail-parserを検索します。<br />
最新バージョンは2.1.2、PHP5.4以上とext-mailparseが必要なようです。</p>
<p><img src="http://big1to.com/wp-content/uploads/SS-2015-09-15-5.12.58.png" alt="SS 2015-09-15 5.12.58" width="675" height="815" class="aligncenter size-full wp-image-880" /></p>
<h3>JSONファイル配置</h3>
<p>example.comの直下に移動します。</p>
<pre class="term">
cd /var/www/html/example.com
</pre>
<p>ファイル名composer.json、以下の内容で作成します。</p>
<pre>
{
    "require": {
        "php-mime-mail-parser/php-mime-mail-parser": "2.1.2"
    }
}
</pre>
<h3>インストール</h3>
<pre class="term">
composer.phar install
</pre>
<p>以上が、基本的なインストールと使い方ですが、php-mime-mail-parserは依存パッケージが必要なようで以下のメッセージが表示されました。</p>
<pre class="term">
  Problem 1
    - Installation request for php-mime-mail-parser/php-mime-mail-parser 2.1.2 -> satisfiable by php-mime-mail-parser/php-mime-mail-parser[2.1.2].
    - php-mime-mail-parser/php-mime-mail-parser 2.1.2 requires ext-mailparse * -> the requested PHP extension mailparse is missing from your system.
</pre>
<p>やはり、ext-mailparseのインストールが必要のようです。<br />
PHPドキュメントによるとMailparseモジュールは、PECLレポジトリで提供されているようです。</p>
<p><a href="http://php.net/manual/ja/intro.mailparse.php" target="_blank" class="broken_link">PHP: 導入 &#8211; Manual</a></p>
<h2 id="3">PECL導入</h2>
<h3>PECLとは</h3>
<p>Wikipediaから抜粋しました。</p>
<blockquote><p>
PECL（ピクル、PHP Extension Community Library）は、PHPで利用できる拡張ライブラリ（パッケージ）を提供しているサービス。</p>
<p>PECLで提供されるライブラリはCで記述されているため、PHPで記述されたPEARのライブラリよりも高速に動作する。PECLにより提供されるライブラリはPHPの拡張モジュールとしてインストールされる。一方で、PEARライブラリはPHPのバージョンアップに伴う再インストールが原則として不要なのに対し、PECL拡張モジュールはPHP内部のAPIに依存する部分があるため、PHPのバージョンアップに伴いAPIが変更された場合は再コンパイルを必要とする。
</p></blockquote>
<p><img src="http://big1to.com/wp-content/uploads/SS-2015-09-15-5.26.42.png" alt="SS 2015-09-15 5.26.42" width="675" height="450" class="aligncenter size-full wp-image-881" /></p>
<p>インストールはPEARから行い、Cのコンパイラも必要とのことです。</p>
<h3>PEARをインストール</h3>
<pre class="term">
<del datetime="2016-03-03T21:09:46+00:00">sudo yum --enablerepo=remi-php56 install -y php-pear</del>
</pre>
<pre class="term">
sudo yum --enablerepo=remi --enablerepo=remi-php56 install -y php-pear
</pre>
<h3>必要なパッケージをインストール</h3>
<pre class="term">
sudo yum -y install httpd-devel
sudo yum -y install gcc gcc-c++
</pre>
<h2 id="4">mailparseインストール</h2>
<pre class="term">
<del datetime="2016-03-03T21:09:46+00:00">sudo yum --enablerepo=remi-php56 install -y php-pecl-mailparse</del>
</pre>
<pre class="term">
sudo yum --enablerepo=remi --enablerepo=remi-php56 install -y php-pecl-mailparse
</pre>
<p>Mailparseがインストール出来たので、再度composer.phar installを実行します。</p>
<pre class="term">
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing php-mime-mail-parser/php-mime-mail-parser (2.1.2)
    Downloading: 100%         

Writing lock file
Generating autoload files
</pre>
<p>インストール出来ました。</p>
<h2 id="5">メール解析</h2>
<h3>ソース(PHPファイル)を配置</h3>
<p>Packagistのphp-mime-mail-parserページで公開されていたソースを少し編集して次のようにしました。</p>
<pre>
&lt;?php
<span class="col-green">//We need to add the library first !</span>
require_once __DIR__.'/vendor/autoload.php';

<span class="col-green">// $path = 'path/to/mail.txt';</span>
$Parser = new PhpMimeMailParser\Parser();
$raw_mail = stream_get_contents(STDIN);
$Parser-&gt;setText($raw_mail);

<span class="col-green">//There are three input methods of the mime mail to be parsed</span>
<span class="col-green">//specify a file path to the mime mail :</span>
<span class="col-green">// $Parser-&gt;setPath($path); </span>

<span class="col-green">// Or specify a php file resource (stream) to the mime mail :</span>
<span class="col-green">// $Parser-&gt;setStream(fopen($path, "r"));</span>

<span class="col-green">// Or specify the raw mime mail text :</span>
<span class="col-green">// $Parser-&gt;setText(file_get_contents($path));</span>

<span class="col-green">// We can get all the necessary data</span>
<span class="col-green">// $to = $Parser-&gt;getHeader('to');</span>
$from = $Parser-&gt;getHeader('from');
$subject = $Parser-&gt;getHeader('subject');

$text = $Parser-&gt;getMessageBody('text');
$html = $Parser-&gt;getMessageBody('html');
$htmlEmbedded = $Parser-&gt;getMessageBody('htmlEmbedded'); //HTML Body included data

<span class="col-green">// and the attachments also</span>
$attach_dir = '/var/www/html/example.com/attachments/';
$Parser-&gt;saveAttachments($attach_dir);

<span class="col-green">// loop the attachments</span>
$attachments = $Parser-&gt;getAttachments();
if (count($attachments) &gt; 0) {
    foreach ($attachments as $attachment) {
        echo 'Filename : '.$attachment-&gt;getFilename().'&lt;br /&gt;'; // logo.jpg
        echo 'Filesize : '.filesize($attach_dir.$attachment-&gt;getFilename()).'&lt;br /&gt;'; // 1000
        echo 'Filetype : '.$attachment-&gt;getContentType().'&lt;br /&gt;'; // image/jpeg
    }
}

<span class="col-green">// Write Text</span>
$log = "From : {$from}\nSubject : {$subject}\nText : {$text}\nHTML : {$html}\nEmbedded : {$htmlEmbedded}\n";
$fp = fopen('/var/www/html/example.com/mailphp.log', 'a');
fwrite($fp, $log);
fclose($fp);
</pre>
<p>解析内容をログファイルに書き出し、添付フィアルをディレクトリに保存します。</p>
<p>ファイル名をexecmail.phpとし、example.comの直下に配置します。<br />
添付ファイルの保存ディレクトリのattachmentsを、同じくexample.comの直下に作成します。</p>
<h3>aliases設定</h3>
<p>こちらのエントリーで設定した、aliasesを使ってexecmail.phpを実行します。<br />
http://big1to.com/development-note/661</p>
<h3>テストメール送信</h3>
<p>次のメールを作成して送信しました。<br />
<img src="http://big1to.com/wp-content/uploads/SS-2015-09-11-5.45.05.png" alt="SS 2015-09-11 5.45.05" width="675" height="450" class="aligncenter size-full wp-image-895" /></p>
<h2 id="6">まとめ</h2>
<p>Composerは簡単に導入できました。<br />
Mail_MimeDecodeとphp-mime-mail-parserを比較すると導入は、Mail_MimeDecodeの方が簡単でした。<br />
しかし、Composerを使ったパッケージ管理の方がプロジェクト毎に使いたいパッケージ(ライブラリ)を追加できるので複数のパッケージを多用する場合は良いと思いました。</p>
<p>メール解析は、Mail_MimeDecodeに比べて、php-mime-mail-parserの方が扱いやすく感じました。<br />
必要な要素の取り出し、添付ファイルの保存、ソースの可読性も良いと思います。</p>
<h2 id="7">参考ページ</h2>
<p><a href="http://codezine.jp/article/detail/7827" target="_blank">Composerを使ってPHPのパッケージを簡単インストール</a></p>
<p><a href="http://k-1-ne-jp.blogspot.jp/2013/01/php.html?m=1" target="_blank" class="broken_link">ケーワン・エンタープライズのエンジニアメモ(｀･ω･´)ゞﾋﾞｼｯ!!: PHP（と拡張ライブラリ）のインストール</a></p>
<p><iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?t=hna81-22&#038;o=9&#038;p=8&#038;l=as1&#038;asins=4774165662&#038;ref=qf_sp_asin_til&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>https://big1to.com/development-note/756/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
