<?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>技術的なメモ書き &#187; php</title>
	<atom:link href="https://blog.sog-office.jp/?cat=6&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://blog.sog-office.jp</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Sun, 21 Mar 2021 08:49:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>ポートフォワード（sshトンネル）でphpからMYSQLに接続したい。</title>
		<link>https://blog.sog-office.jp/?p=107</link>
		<comments>https://blog.sog-office.jp/?p=107#comments</comments>
		<pubDate>Thu, 15 Oct 2015 13:04:59 +0000</pubDate>
		<dc:creator><![CDATA[中の人]]></dc:creator>
				<category><![CDATA[database]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blog.sog-office.jp/?p=107</guid>
		<description><![CDATA[ポートフォワードについてお勉強したのでメモ書きです。 &#160; 上記画像のような構成で、ローカルの開発環境 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>ポートフォワードについてお勉強したのでメモ書きです。</p>
<p>&nbsp;</p>
<ul>
<li>上記画像のような構成で、ローカルの開発環境から、稼働環境のdb（MYSQL）に接続したい。</li>
<li>dbはインターネットに公開されていない。</li>
</ul>
<p>というような条件だったので、リモートのwebサーバ経由のポートフォワードで接続しました。</p>
<p>&nbsp;</p>
<h3>無理だった例</h3>
<p>できればアプリケーションレベルで解決したかったので、php内で試行錯誤してみた。</p>
<pre class="">$ssh_connection = ssh2_connect($ssh_host, $ssh_port);
ssh2_auth_password( $ssh_connection, $ssh_user, $ssh_pass);
$tunnel = ssh2_tunnel($ssh_connection, $db_host, 3306);
$connection = mysql_connect($tunnel, $username, $password);
</pre>
<p>トンネルの確立まではできたけど、無理でした。</p>
<p>mysql_connect()はトンネルを受け付けないらしい。</p>
<p>また</p>
<pre class="">$host = "ssh2.tunnel://user:pass@xx.xx.xx.1:22/xx.xx.xx.2:3306";
$connection = mysql_connect($host, $username, $password);</pre>
<p>このようにssh2ラッパーを使う方法もダメでした。</p>
<p>&nbsp;</p>
<p>mysqliはトンネルをサポートしているらしいが</p>
<pre class="">$connection = new mysqli("{$db_host}:3306", $username, $password, $database, $tunnel);
</pre>
<p>今回のアプリケーションは古いコードで、dbとの接続にmysql_connect()を使用しており、この方法は使えない。</p>
<p>同様に、pdoもつかえない。</p>
<p>というわけで、アプリケーションレベルでの対応を諦める。</p>
<p>&nbsp;</p>
<h3>解決</h3>
<p>sshコマンドをバックグラウンドで走らせておくことで解決させました。</p>
<pre class="">ssh -f -g -N -C -L {ローカルポート}:{リモートdbホスト}:3306 {sshユーザ}@{リモートsshホスト} -p 22</pre>
<ul>
<li>-g  他のマシンからも 利用する</li>
<li>-f このポートフォワーディングをバックグラウンドで実行する。</li>
<li>-N SSHトンネリングのみに使用する。</li>
<li>-C データを圧縮して送る。</li>
<li>-L ポートフォワードを利用する。</li>
</ul>
<p>{ローカルポート} はローカルで空いてるポートだったらなんでもOK。</p>
<p>今回のサーバ構成例だとこんな感じ。</p>
<pre class="">ssh -f -g -N -C -L 13306:xx.xx.xx.2:3306 user@xx.xx.xx.1 -p 22</pre>
<p>これでローカルに対して接続したら、トンネルくぐって接続してくれます。</p>
<pre class="">$connection = mysql_connect("127.0.0.1:13306", $db_username, $db_password);</pre>
<p>もちろんPDOだろうがなんだろうが、接続できます。</p>
<p>&nbsp;</p>
<p>ちなみに、phpのexec()で、sshコマンドを打ってみたが、なんかうまくいかなかった。</p>
<p>まぁ作業前にコマンド一本打つか、/etc/rc.d/rc.localにコマンド書いとくかすればいいかな。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>参考にさせてもらったサイトはこちら</p>
<p><a href="http://www.tamurasouko.com/?p=1092" target="_blank">http://www.tamurasouko.com/?p=1092</a></p>
<p><a href="https://www.kmc.gr.jp/advent-calendar/ssh/2013/12/09/tunnel2.html" target="_blank">https://www.kmc.gr.jp/advent-calendar/ssh/2013/12/09/tunnel2.html</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sog-office.jp/?feed=rss2&#038;p=107</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPフレームワーク Curry で、テンプレートをレンダリングして変数で受け取りたい</title>
		<link>https://blog.sog-office.jp/?p=68</link>
		<comments>https://blog.sog-office.jp/?p=68#comments</comments>
		<pubDate>Sun, 05 Jul 2015 16:03:04 +0000</pubDate>
		<dc:creator><![CDATA[中の人]]></dc:creator>
				<category><![CDATA[Curry]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.sog-office.jp/?p=68</guid>
		<description><![CDATA[お手軽なフレームワークを求めて Curry というPHPフレームワークを見つけたので使ってみた。 配布元：ht [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>お手軽なフレームワークを求めて Curry というPHPフレームワークを見つけたので使ってみた。</p>
<p><a href="http://www.curryfw.net" target="_blank"><em>配布元：http://www.curryfw.net</em></a></p>
<p>&nbsp;</p>
<p>そんで、ちょっとしたサイトを構築してみたんだけど、</p>
<p>テンプレートをレンダリングして変数で受け取りたいのに、マニュアルにその記述がない。</p>
<p>&nbsp;</p>
<p>zendだったら</p><pre class="crayon-plain-tag">$string = $this-&gt;render("action");</pre><p>こんなかんじの処理ね。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>viewクラス追っかけてって、なんとかしてみたのでメモっとく。</p>
<p>&nbsp;</p>
<p></p><pre class="crayon-plain-tag">$view = $this-&gt;view;
$view-&gt;enableLayout(false);
$view-&gt;setTemplate("template2");
$result = $view-&gt;getRendered();
$view-&gt;enableLayout(true);
$view-&gt;setTemplate($this-&gt;request-&gt;getAction());</pre><p></p>
<p>と、こんな感じ。</p>
<p>&nbsp;</p>
<p>2行目：レイアウトを無効化<br />
レイアウト不要なレンダリングの場合はfalseにします。</p>
<p>3行目：テンプレート名（アクション名）をセット<br />
zendの様にrenderメソッドの引数として渡せないため、このメソッドを利用します。</p>
<p>4行目：レンダリング結果取得<br />
ちなみに render() というメソッドもありますが、これを使うとブラウザに出力が掛かってしまうので使いません。</p>
<p>5,6行目：変更した2,3行目の設定を元に戻します。</p>
<p>&nbsp;</p>
<p>以上です。</p>
<p>公式にはリファレンスにはrender()メソッドしか載ってないんで、</p>
<p>getRendered() メソッドを使うのがポイントです。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>シチュエーションとしては、メールの送信の本文を作ったりするのに使ってます。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sog-office.jp/?feed=rss2&#038;p=68</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
