<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>あり &#187; Excel</title>
	<atom:link href="http://blog.4sure.jp/yokoshima/tag/excel/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.4sure.jp/yokoshima</link>
	<description>日常を語る普通の人のブログ</description>
	<lastBuildDate>Tue, 24 Aug 2010 11:49:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.4sure.jp/yokoshima/tag/excel/feed/" />
		<item>
		<title>XServerでPHP</title>
		<link>http://blog.4sure.jp/yokoshima/2010/01/28/xserver%e3%81%a7php/</link>
		<comments>http://blog.4sure.jp/yokoshima/2010/01/28/xserver%e3%81%a7php/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 17:47:01 +0000</pubDate>
		<dc:creator>yokoshima</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[fputcsv]]></category>
		<category><![CDATA[PHP4]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[XServer]]></category>

		<guid isPermaLink="false">http://blog.4sure.jp/yokoshima/?p=889</guid>
		<description><![CDATA[今まで別サーバで動作していたPHPのプログラムがXServerに持って行ったらなぜか動かなくなった。
最初はmbstring関連の文字コードの問題かなと思い、以下の.htaccessを作成して実行してみたら500エラーが出る。

php_value mbstring.http_input auto 
php_value mbstring.http_output pass

なんかしれないけどXServerでは使えないんだな、とこの時は思ったけど・・・。
.htaccessが使えないと判断したので、コードの先頭に以下のように記載してエラーを出力するようにした。

@ini_set&#40; 'display_errors', 'on' &#41;;

そしたら、どうもfputcsv()関数が実行できていない。というか定義されていないと怒られる。
Call to undefined function: fputcsv() 
fputcsvという関数は比較的新しめの奴だったよな、と思ってマニュアルを見てみると、
fputcsv
(PHP 5 &#62;= 5.1.0)
fputcsv — 行を CSV 形式にフォーマットし、ファイルポインタに書き込む
とあり、5.1以降ならOKとあるのでなぜだろうと思ってハマっていたら、XServerはphp4と5がどちらも使える環境で、
デフォルトが4で動くらしいというメモを見つけた。
エックスサーバーPHP ver.5で若干速くなった？
灯台もと暗し・・・。というかこういう基本的な部分はハマると深いよなぁ。
.htaccessを作成して無事動作を確認できた。

AddHandler x-httpd-php5 .php

ちなみに、前述で.htaccessでInteral Server Errorが出た件も、多分php4であることを意識することが必要なのだと思う。
以下のようにすれば動いた。

&#60;IfModule mod_php4.c&#62;
php_value mbstring.http_input           auto
php_value mbstring.http_output          UTF-8
&#60;/IfModule&#62;

そして、そのfputcsv関数で出力したファイルを見たら、機種依存文字が化けていた。うーーーん。
内部的には文字コードはUTF-8で処理していたのですが、CSVファイルはExcelで見たいとの要望で、ファイル出力部分だけはSJISに変換して出力していました。
なぜなら、ExcelはSJISしか読めないからです。([XL2002] UTF-8 形式のテキスト ファイルが文字化けする)
文字コードは色々な部分で調整が必要なので、面倒だなと思って調べていたら、PHPで文字コードをSJISからUTF8に変換する方法
という記事があって、今まではUTF-8→SJISとやっていたのを以下のように変更してみましたらビンゴ！

mb_convert_encoding&#40;$value, &#34;sjis-win&#34;, &#34;UTF-8&#34;&#41;;

これで無事に機種依存文字もCSVに出力されるようになりました。




]]></description>
			<content:encoded><![CDATA[<p>今まで別サーバで動作していたPHPのプログラムがXServerに持って行ったらなぜか動かなくなった。</p>
<p>最初はmbstring関連の文字コードの問題かなと思い、以下の.htaccessを作成して実行してみたら500エラーが出る。</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">php_value mbstring.http_input auto 
php_value mbstring.http_output pass</pre></div></div>

<p>なんかしれないけどXServerでは使えないんだな、とこの時は思ったけど・・・。</p>
<p>.htaccessが使えないと判断したので、コードの先頭に以下のように記載してエラーを出力するようにした。</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">@</span><span style="color: #990000;">ini_set</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'display_errors'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'on'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>そしたら、どうもfputcsv()関数が実行できていない。というか定義されていないと怒られる。</p>
<blockquote><p>Call to undefined function: fputcsv() </p></blockquote>
<p>fputcsvという関数は比較的新しめの奴だったよな、と思って<a href="http://php.net/manual/ja/function.fputcsv.php">マニュアル</a>を見てみると、</p>
<blockquote><p>fputcsv<br />
(PHP 5 &gt;= 5.1.0)<br />
fputcsv — 行を CSV 形式にフォーマットし、ファイルポインタに書き込む</p></blockquote>
<p>とあり、5.1以降ならOKとあるのでなぜだろうと思ってハマっていたら、XServerはphp4と5がどちらも使える環境で、<br />
デフォルトが4で動くらしいというメモを見つけた。</p>
<p><a href="http://wordpress.matometa.net/archives/20091223012350">エックスサーバーPHP ver.5で若干速くなった？</a></p>
<p>灯台もと暗し・・・。というかこういう基本的な部分はハマると深いよなぁ。<br />
.htaccessを作成して無事動作を確認できた。</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">AddHandler x-httpd-php5 .php</pre></div></div>

<p>ちなみに、前述で.htaccessでInteral Server Errorが出た件も、多分php4であることを意識することが必要なのだと思う。<br />
以下のようにすれば動いた。</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">&lt;IfModule mod_php4.c&gt;
php_value mbstring.http_input           auto
php_value mbstring.http_output          UTF-<span style="">8</span>
&lt;/IfModule&gt;</pre></div></div>

<p>そして、そのfputcsv関数で出力したファイルを見たら、機種依存文字が化けていた。うーーーん。<br />
内部的には文字コードはUTF-8で処理していたのですが、CSVファイルはExcelで見たいとの要望で、ファイル出力部分だけはSJISに変換して出力していました。<br />
なぜなら、ExcelはSJISしか読めないからです。(<a href="http://support.microsoft.com/kb/821863/ja">[XL2002] UTF-8 形式のテキスト ファイルが文字化けする</a>)</p>
<p>文字コードは色々な部分で調整が必要なので、面倒だなと思って調べていたら、<a href="http://hamamuratakuo.blog61.fc2.com/blog-entry-446.html">PHPで文字コードをSJISからUTF8に変換する方法</a><br />
という記事があって、今まではUTF-8→SJISとやっていたのを以下のように変更してみましたらビンゴ！</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">mb_convert_encoding</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;sjis-win&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>これで無事に機種依存文字もCSVに出力されるようになりました。
<p><script type="text/javascript"><!--
google_ad_client = "pub-3467153506120319";
/* 468x60, 作成済み 09/05/08 */
google_ad_slot = "8443402396";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4sure.jp/yokoshima/2010/01/28/xserver%e3%81%a7php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.4sure.jp/yokoshima/2010/01/28/xserver%e3%81%a7php/" />
	</item>
	</channel>
</rss>
