<?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>DOOM! DOOMER!! DOOMEST!? &#187; PHP</title>
	<atom:link href="http://g-taki.com/wordpress/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://g-taki.com/wordpress</link>
	<description>日刊　カリブNow!!</description>
	<lastBuildDate>Wed, 23 May 2012 09:31:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>date.timezoneを設定する</title>
		<link>http://g-taki.com/wordpress/web/5329.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=5329</link>
		<comments>http://g-taki.com/wordpress/web/5329.html#comments</comments>
		<pubDate>Fri, 17 Jun 2011 01:04:28 +0000</pubDate>
		<dc:creator>GT</dc:creator>
				<category><![CDATA[PC]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://g-taki.com/wordpress/?p=5329</guid>
		<description><![CDATA[VMWareを使ったLinuxのテスト環境を作ったのだが、timezoneに関するPHPのWarningがうるさいので、対策メモ。 コマンドラインから、次のように入力すると、 php -r &#8216;phpinfo( &#8230; <a href="http://g-taki.com/wordpress/web/5329.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>VMWareを使ったLinuxのテスト環境を作ったのだが、timezoneに関するPHPのWarningがうるさいので、対策メモ。</p>
<p>コマンドラインから、次のように入力すると、</p>
<blockquote><p>php -r &#8216;phpinfo(); | more&#8217;</p></blockquote>
<p>１ページ目に以下のようなWarningが表示される。</p>
<blockquote><p>PHP Warning:  phpinfo(): It is not safe to rely on the system&#8217;s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected &#8216;Asia/Tokyo&#8217; for &#8216;JST/9.0/no DST&#8217; instead in Command line code on line 1</p></blockquote>
<p>phpをディストリビューションのものを使っていれば出てこないんだろうけど、最新のバージョン&amp; Zend Framework をyum管理で楽したい場合、外部リポジトリを使うことになり、多分同じ問題が出るんだろうな。</p>
<p>date.timezone か、date_default_timezone_set()関数を使って設定する必要がある。とな。</p>
<p>/etc/php.ini の中に、コメントアウトされた date.timezoneがあるので、コメントを解除して、値をセット。</p>
<blockquote><p>date.timezone = Asia/Tokyo</p></blockquote>
<p>Apacheを再起動すればOK</p>
]]></content:encoded>
			<wfw:commentRss>http://g-taki.com/wordpress/web/5329.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>packaging the Zend Framework with Phar</title>
		<link>http://g-taki.com/wordpress/web/3301.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=packaging-the-zend-framework-with-phar</link>
		<comments>http://g-taki.com/wordpress/web/3301.html#comments</comments>
		<pubDate>Tue, 29 Jun 2010 06:54:56 +0000</pubDate>
		<dc:creator>GT</dc:creator>
				<category><![CDATA[PC]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[phar]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://g-taki.com/wordpress/?p=3301</guid>
		<description><![CDATA[eclipseを使ったphpの開発で、library に直接Zend Frameworkのファイル群を置かずに、svn のリポジトリサイズを小さく保つ方法は無いか模索してましたが、phar(PHp ARchive) を利 &#8230; <a href="http://g-taki.com/wordpress/web/3301.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>eclipseを使ったphpの開発で、library に直接Zend Frameworkのファイル群を置かずに、svn のリポジトリサイズを小さく保つ方法は無いか模索してましたが、phar(PHp ARchive) を利用すれば、いけそうな感じです。</p>
<p>Zend Framework の libraryだけでも20MB以上あり、その中には大量のファイルやフォルダがあります。これを pharというひとつのまとまったファイルに固めて、eclipse のexternal library として使おうということです。</p>
<p>どうやらZend 公式の zend framework phar はなさそう。<br />
 そのかわり、<a href="http://blog.calevans.com/2009/07/26/packaging-zend-framework-as-a-phar-revisited/" target="_parent">ここで</a>、phar を作るスクリプト(package.php)が公開されていました。１行目と最終行のタグと、途中の &amp;lt; を &#8220;&lt;&#8221;に置き換える必要がありますが、使い方は簡単。<br />
 あわせて stub.php というファイルを<a href="http://blog.calevans.com/2009/07/19/lessons-in-phar/" target="_parent">ここから</a>取ってきて、上記package.phpと同じ場所においておきます。</p>
<ol>
<li>zend frameworkと適当なところにダウンロードして解凍する。</li>
<li>解凍してできた、 ZendFrameowork-1.10.6フォルダあたりに、pakcage.phpとstub.phpを置く。</li>
<li>/etc/php.ini を編集する。<br />
 phar.readonly = On となっているのをOffにする。</li>
<li>package.phpにオプションを指定して、実行<br />
 <cite>#php package.php -s ./library/Zend -p zf-1.10.6.phar</cite></li>
<li>出来上がったzf-1.10.6.pharをeclipseの external PHARs&#8230;で指定すれば完了。</li>
<li>ZendX も同様にphar化できるようだ。</li>
</ol>
<p>以下のようにすれば、普通にコードとして使えるようなので、サーバ環境でも使えるのかな。<cite>include &#8216;phar://zf.phar&#8217;;</cite></p>
]]></content:encoded>
			<wfw:commentRss>http://g-taki.com/wordpress/web/3301.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>お節介</title>
		<link>http://g-taki.com/wordpress/web/3119.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e3%2581%258a%25e7%25af%2580%25e4%25bb%258b</link>
		<comments>http://g-taki.com/wordpress/web/3119.html#comments</comments>
		<pubDate>Fri, 21 May 2010 06:13:43 +0000</pubDate>
		<dc:creator>GT</dc:creator>
				<category><![CDATA[PC]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://g-taki.com/wordpress/?p=3119</guid>
		<description><![CDATA[最近、symfonyをさわってみてます。 チュートリアルを実際に試しながら動かしてみて、さらに変数名やテーブル構造を変えていじってみて、どうにもうまく動かない箇所があった。symfony というかDoctrineの挙動な &#8230; <a href="http://g-taki.com/wordpress/web/3119.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>最近、<a href="http://www.symfony-project.org/" target="_blank">symfony</a>をさわってみてます。</p>
<p><a href="http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/03" target="_blank">チュートリアル</a>を実際に試しながら動かしてみて、さらに変数名やテーブル構造を変えていじってみて、どうにもうまく動かない箇所があった。symfony というかDoctrineの挙動なのかな。</p>
<p>文章には、以下のように書かれている箇所がある。</p>
<blockquote><p>Doctrine は <code>title</code>、<code>name</code>、<code>subject</code> など説明用のカラム名を推測して、基本的な <code>__toString()</code> メソッドを提供しようとします。何かをカスタマイズしたい場合は、次のように独自の <code>__toString()</code> メソッドを追加する必要があります。</p></blockquote>
<p>「title, name, subject<strong>など</strong>」、<strong>など</strong>？、<strong>など</strong>ってなんだよ！<span id="more-3119"></span></p>
<p>hoge_name というカラム名をどうにも期待通りに扱ってくれなかったが、海外でも似たように悩んだ人がいて、<a href="http://forum.symfony-project.org/index.php/m/99477/#msg_99477" target="_blank">フォーラムに</a>解説を見つけることができた。</p>
<p>&#8220;lib\plugins\sfDoctrinePlugin\lib\record\sfDoctrineRecord.class.php&#8221;<br />
なんて深いパスにあるファイルの中に、それはあった。</p>
<blockquote>
<pre>  /**
   * Returns a string representation of the record.
   *
   * @return string A string representation of the record
   */
  public function __toString()
  {
    $guesses = array('name',
                     'title',
                     'description',
                     'subject',
                     'keywords',
                     'id');</pre>
</blockquote>
<p>ここで、name, title, subjectなどヒットさせたいキーワードを定義してたのね。<br />
そして、こんなのを追記すれば、hogeテーブルのhoge_nameというカラム名もいけるってことだ。</p>
<blockquote><p>$this-&gt;getTable()-&gt;getTableName().&#8217;_name&#8217;</p></blockquote>
<p>各所で__toString()を追加するのが、正しいやり方のようだけど、数が多くてルールがしっかりしているなら、ライブラリにキーワードを追記しちゃうのがいいよなぁ。<br />
でも、バージョンアップしたときや、似た列名が複数登場したときに困るか。<br />
やっぱり各所で定義するのがいいのかな。</p>
]]></content:encoded>
			<wfw:commentRss>http://g-taki.com/wordpress/web/3119.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>正規表現地獄</title>
		<link>http://g-taki.com/wordpress/web/1441.html?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e6%25ad%25a3%25e8%25a6%258f%25e8%25a1%25a8%25e7%258f%25be%25e5%259c%25b0%25e7%258d%2584</link>
		<comments>http://g-taki.com/wordpress/web/1441.html#comments</comments>
		<pubDate>Fri, 13 Mar 2009 16:25:25 +0000</pubDate>
		<dc:creator>GT</dc:creator>
				<category><![CDATA[PC]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[最短一致]]></category>
		<category><![CDATA[正規表現]]></category>

		<guid isPermaLink="false">http://g-taki.com/wordpress/?p=1441</guid>
		<description><![CDATA[SQL文をPHPの正規表現関数を使って書き換える。この正規表現がなかなかうまくかけなくてハマッタ。 元のクエリの対象部分はこんな感じ。 hoge LIKE &#8216;%bar%&#8217; AND fuga LIK &#8230; <a href="http://g-taki.com/wordpress/web/1441.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>SQL文をPHPの正規表現関数を使って書き換える。この正規表現がなかなかうまくかけなくてハマッタ。</p>
<p>元のクエリの対象部分はこんな感じ。</p>
<blockquote><p>hoge LIKE &#8216;%bar%&#8217; AND fuga LIKE &#8216;%www%&#8217;</p></blockquote>
<p>お題は、ANDの前の部分( hoge LIKE &#8216;%bar%&#8217;) を捕まえて、以下のようにしたい。もちろんbar や wwwは不定。</p>
<blockquote><p>(SELECT id FROM xxx WHERE hoge LIKE &#8216;%bar%&#8217;) AND fuga LIKE &#8216;%www%&#8217;</p></blockquote>
<p>そこで、最初書いたパターンがこれ。</p>
<blockquote><p>&#8220;hoge LIKE &#8216;%.*%&#8217;&#8221;</p></blockquote>
<p>確かに最初はうまく動いているかに見えたんだけど、これだと、最初のお題の文章全体がヒットしちゃうのね。つまり、hoge LIKE &#8216;% の % から始まって、 www%&#8217; の %までが 「.*」で表現されていることになる。結局お題の文章全体がヒットしてしまい、期待通りではないことが判明。<span id="more-1441"></span>これを最長一致というのね。ってことは俺がやりたいのは、最短一致だな。mb_ereg_replace を使うと第4引数で s を指定すると最短一致になるらしいが、できれば正規表現で済ませたいので、もう一踏ん張り。</p>
<p>ここでポイントは、&#8217;%bar%&#8217; の最初の % でヒットしたら、次の%が出たらもう区切りの場所が近いということだから、「%以外の0文字以上で、最後に%がある」　って考えればよいとうこと。</p>
<blockquote><p>&#8220;hoge LIKE &#8216;%[^%]*%&#8217;&#8221;</p></blockquote>
<p>これがなかなか思いつかないもので、たっぷり2時間悩んだ。週末で、昨日から寝不足だったけど、気持ちよく週末を迎えるためにはなんとしてもクリアしておきたい箇所だった。</p>
<p>最終的には、以下のような感じでanswer が得られた。</p>
<blockquote><p>$string = &#8221; hoge LIKE &#8216;%bar%&#8217; AND fuga LIKE &#8216;%www%&#8217; &#8220;;<br />
$pattern = &#8220;hoge LIKE &#8216;%[^%]*%&#8217;&#8221;;<br />
$replacement = &#8216;(SELECT id FROM xxx WHERE \\0)&#8217;;<br />
$answer = ereg_replace($pattern, $replacement, $string);</p></blockquote>
<p>今回も大助かりの、<a href="http://ajaxian.com/archives/rejax-ajax-regex-tester" target="_blank">ReJax  Easiest Regular Expression Tester. Ever.</a> このサイトを知らなかったら、あきらめて寝るが、落ち着かない週末になるところだった。</p>
<p>天気は金曜日から雨だけど、なにやらすごく気分がいいぞ？！</p>
<p>一杯ヒッカケテ寝ますかね。</p>
]]></content:encoded>
			<wfw:commentRss>http://g-taki.com/wordpress/web/1441.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

