<?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>SHOWJIN*BLOG</title>
	<atom:link href="http://showzine.info/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://showzine.info/blog</link>
	<description>PHPとかLinuxとかMySQLとかの勉強メモ</description>
	<lastBuildDate>Wed, 28 Jul 2010 10:10:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/feed" />
		<item>
		<title>さくらのスタンダードプランにMODxをインストールする</title>
		<link>http://showzine.info/blog/modx/page/%e3%81%95%e3%81%8f%e3%82%89%e3%81%ae%e3%82%b9%e3%82%bf%e3%83%b3%e3%83%80%e3%83%bc%e3%83%89%e3%83%97%e3%83%a9%e3%83%b3%e3%81%abmodx%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/ </link>
		<comments>http://showzine.info/blog/modx/page/%e3%81%95%e3%81%8f%e3%82%89%e3%81%ae%e3%82%b9%e3%82%bf%e3%83%b3%e3%83%80%e3%83%bc%e3%83%89%e3%83%97%e3%83%a9%e3%83%b3%e3%81%abmodx%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/ #comments</comments>
		<pubDate>Sun, 20 Jun 2010 06:38:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MODx]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[setting]]></category>
		<category><![CDATA[さくら]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2866</guid>
		<description><![CDATA[さくらインターネットのスタンダードプランに、GPL2ライセンスのCMS「MODx」をインストールしてみる。

MODxをダウンロード
http://modxcms-jp.com/news/178.htmlからmodx-1.0.4J.zipをローカルにダウンロードして、ダウンロードしたzipデータをダブルクリックして展開。
インストールに必要なデータをアップロードする
展開して出来たフォルダ内の以下のフォルダ、ファイル群をMODxをインストールしたいサーバ領域にアップロード。

assets(フォルダ)
ht.access(ファイル)
index-ajax.php(ファイル)
index.php(ファイル)
install(フォルダ)
manager(フォルダ)
sample-robots.txt(ファイル)

インストール開始
アップロードしたWeb領域（ドメイン名/_modx/）にブラウザでアクセスすると以下の画面が表示される。「はい」をクリックしてインストール開始。

新規にインストールするので、デフォルトのまま「新規インストール」をチェックした状態でインストールを進める。

データベースの設定をする
データベースの設定をする。データベースホスト名にはさくらでいう「データベースサーバ」部分を入力し、データベース接続ログイン名は「データベースユーザ名」部分を入力。データベース接続パスワードには「データベース接続パスワード」を入力。

ここをクリックして接続テストを行ってください。というリンクテキストをクリックすると、実際にデータベース側とコンタクトがとれるかどうかを確認することができる。問題がない場合は緑色の文字で「接続できます」と表示される。

でも、このままだと「データベース名」部分がデフォルト値の「modx」のままで、これだと実際にさくらで既に作成済みのデータベース情報と異なるので、この部分（データベース名）を実際のデータベース名に変更する。
Tableプリフィクスの設定により、既存のテーブルと衝突することなく、MODx用のデータベーステーブルを用意することができる。
ここをクリックして、データベースのテストを行ってください。というリンクテキストをクリックして、確認をすることができる。やってみると
&#8230; データベースとのマッチング: 問題があります &#8211; データベース側の照合順序のデフォルト値が「ujis_japanese_ci」になっています。phpMyAdminが利用できる場合は、該当データベースの「操作」タブで照合順序のデフォルト値を変更してください。
となったので、さくらのサーバコントロールパネルからphpmyadminにアクセスして該当するデータベース（スタンダードプランではデータベースはひとつだけ利用可能）を選択した上で「操作」タブから「照合順序」を「utf8_general_ci」に変更する。（セレクトメニューからutf8_general_ciを選んで「実行する」をクリック）
これで
&#8230; データベースとのマッチング: 問題ありません
となったので、インストールを続ける。
管理アカウントの初期設定をする
管理画面で使用する言語のところでEUC-JPを選択すると文字化けするものがあるということが書かれているので、デフォルトのままJapanese-utf8でインストールを続ける。

インストールオプションの選択
デフォルトで各項目（サンプルサイト以外すべて）すべてにチェックが入った状態で「インストール」を実行。
インストール前の確認
オールグリーンで問題なし状態を確認し、一番下のGPL2ライセンスに同意（チェックボックスをチェック状態にする）すると「インストール」ボタンが出現するので、これをクリック。
インストール完了
「インストールは無事に成功しました。」というメッセージを確認して「インストール終了」ボタンをクリック。
これでインストールは終了。
インストール直後の画面（MODxをインストールしたディレクトリ/modx/）にブラウザでアクセスすると、こんな感じ。

]]></description>
			<content:encoded><![CDATA[<p>さくらインターネットのスタンダードプランに、GPL2ライセンスのCMS「MODx」をインストールしてみる。<br />
<span id="more-2866"></span></p>
<h2>MODxをダウンロード</h2>
<p><a href="http://modxcms-jp.com/news/178.html">http://modxcms-jp.com/news/178.html</a>からmodx-1.0.4J.zipをローカルにダウンロードして、ダウンロードしたzipデータをダブルクリックして展開。</p>
<h2>インストールに必要なデータをアップロードする</h2>
<p>展開して出来たフォルダ内の以下のフォルダ、ファイル群をMODxをインストールしたいサーバ領域にアップロード。</p>
<ul>
<li>assets(フォルダ)</li>
<li>ht.access(ファイル)</li>
<li>index-ajax.php(ファイル)</li>
<li>index.php(ファイル)</li>
<li>install(フォルダ)</li>
<li>manager(フォルダ)</li>
<li>sample-robots.txt(ファイル)</li>
</ul>
<h2>インストール開始</h2>
<p>アップロードしたWeb領域（ドメイン名/_modx/）にブラウザでアクセスすると以下の画面が表示される。「はい」をクリックしてインストール開始。</p>
<p><a href="http://www.flickr.com/photos/showjin/4716617840/" title="_1277013795967 by showjin, on Flickr"><img src="http://farm5.static.flickr.com/4026/4716617840_f6eedba51d.jpg" width="500" height="279" alt="_1277013795967" /></a></p>
<p>新規にインストールするので、デフォルトのまま「新規インストール」をチェックした状態でインストールを進める。</p>
<p><a href="http://www.flickr.com/photos/showjin/4716617920/" title="MODx » インストール_1277013827258 by showjin, on Flickr"><img src="http://farm5.static.flickr.com/4060/4716617920_1372c4e60e.jpg" width="500" height="466" alt="MODx » インストール_1277013827258" /></a></p>
<h2>データベースの設定をする</h2>
<p>データベースの設定をする。データベースホスト名にはさくらでいう「データベースサーバ」部分を入力し、データベース接続ログイン名は「データベースユーザ名」部分を入力。データベース接続パスワードには「データベース接続パスワード」を入力。</p>
<p><a href="http://www.flickr.com/photos/showjin/4716617974/" title="MODx » インストール_1277013866642 by showjin, on Flickr"><img src="http://farm5.static.flickr.com/4063/4716617974_994283a360.jpg" width="491" height="483" alt="MODx » インストール_1277013866642" /></a></p>
<p>ここをクリックして接続テストを行ってください。というリンクテキストをクリックすると、実際にデータベース側とコンタクトがとれるかどうかを確認することができる。問題がない場合は緑色の文字で「接続できます」と表示される。</p>
<p><a href="http://www.flickr.com/photos/showjin/4716618026/" title="MODx » インストール_1277013945019 by showjin, on Flickr"><img src="http://farm5.static.flickr.com/4052/4716618026_d1d062264f.jpg" width="446" height="214" alt="MODx » インストール_1277013945019" /></a></p>
<p>でも、このままだと「データベース名」部分がデフォルト値の「modx」のままで、これだと実際にさくらで既に作成済みのデータベース情報と異なるので、この部分（データベース名）を実際のデータベース名に変更する。</p>
<p>Tableプリフィクスの設定により、既存のテーブルと衝突することなく、MODx用のデータベーステーブルを用意することができる。</p>
<p>ここをクリックして、データベースのテストを行ってください。というリンクテキストをクリックして、確認をすることができる。やってみると</p>
<blockquote><p>&#8230; データベースとのマッチング: 問題があります &#8211; データベース側の照合順序のデフォルト値が「ujis_japanese_ci」になっています。phpMyAdminが利用できる場合は、該当データベースの「操作」タブで照合順序のデフォルト値を変更してください。</p></blockquote>
<p>となったので、さくらのサーバコントロールパネルからphpmyadminにアクセスして該当するデータベース（スタンダードプランではデータベースはひとつだけ利用可能）を選択した上で「操作」タブから「照合順序」を「utf8_general_ci」に変更する。（セレクトメニューからutf8_general_ciを選んで「実行する」をクリック）</p>
<p>これで</p>
<blockquote><p>&#8230; データベースとのマッチング: 問題ありません</p></blockquote>
<p>となったので、インストールを続ける。</p>
<h2>管理アカウントの初期設定をする</h2>
<p>管理画面で使用する言語のところでEUC-JPを選択すると文字化けするものがあるということが書かれているので、デフォルトのままJapanese-utf8でインストールを続ける。</p>
<p><a href="http://www.flickr.com/photos/showjin/4716618082/" title="MODx » インストール_1277014921708 by showjin, on Flickr"><img src="http://farm5.static.flickr.com/4035/4716618082_f7f57f297e.jpg" width="500" height="333" alt="MODx » インストール_1277014921708" /></a></p>
<h2>インストールオプションの選択</h2>
<p>デフォルトで各項目（サンプルサイト以外すべて）すべてにチェックが入った状態で「インストール」を実行。</p>
<h2>インストール前の確認</h2>
<p>オールグリーンで問題なし状態を確認し、一番下のGPL2ライセンスに同意（チェックボックスをチェック状態にする）すると「インストール」ボタンが出現するので、これをクリック。</p>
<h2>インストール完了</h2>
<p>「インストールは無事に成功しました。」というメッセージを確認して「インストール終了」ボタンをクリック。</p>
<p>これでインストールは終了。</p>
<p>インストール直後の画面（MODxをインストールしたディレクトリ/modx/）にブラウザでアクセスすると、こんな感じ。</p>
<p><a href="http://www.flickr.com/photos/showjin/4715974459/" title="MODx CMS Install Success | My MODx Site_1277015503578 by showjin, on Flickr"><img src="http://farm5.static.flickr.com/4023/4715974459_da03529298.jpg" width="500" height="165" alt="MODx CMS Install Success | My MODx Site_1277015503578" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/modx/page/%e3%81%95%e3%81%8f%e3%82%89%e3%81%ae%e3%82%b9%e3%82%bf%e3%83%b3%e3%83%80%e3%83%bc%e3%83%89%e3%83%97%e3%83%a9%e3%83%b3%e3%81%abmodx%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/modx/page/%e3%81%95%e3%81%8f%e3%82%89%e3%81%ae%e3%82%b9%e3%82%bf%e3%83%b3%e3%83%80%e3%83%bc%e3%83%89%e3%83%97%e3%83%a9%e3%83%b3%e3%81%abmodx%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/ " />
	</item>
		<item>
		<title>サブドメインを切った際にやること</title>
		<link>http://showzine.info/blog/seo/page/%e3%82%b5%e3%83%96%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e3%82%92%e5%88%87%e3%81%a3%e3%81%9f%e9%9a%9b%e3%81%ab%e3%82%84%e3%82%8b%e3%81%93%e3%81%a8/ </link>
		<comments>http://showzine.info/blog/seo/page/%e3%82%b5%e3%83%96%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e3%82%92%e5%88%87%e3%81%a3%e3%81%9f%e9%9a%9b%e3%81%ab%e3%82%84%e3%82%8b%e3%81%93%e3%81%a8/ #comments</comments>
		<pubDate>Sun, 13 Jun 2010 01:26:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[レンタルサーバ]]></category>
		<category><![CDATA[さくら]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2864</guid>
		<description><![CDATA[さくらでサブドメインを切った際にやるべきこと。整理しておかないと抜けがあったり混乱するので、まとめておくことにした。（サブドメインだけでなく、同一のホスティングサービス内でマルチドメインなんか使うときも同様）

.htaccessでRedirect（リダイレクト）
showzine.info/days/というディレクトリを作成し、このディレクトリにshowzine.infoのサブドメインdaysを割り当てる。
この段階ではサブドメインでのURLとルートドメインからディレクトリへのパスの二つのURLで同一のページにアクセスできてしまう。

http://days.showzine.info/
http://showzine.info/days/

これはコンテンツがカニバる（共食い）ことになり、SEOの観点からいってよろしくない。異なるURLで内容が同じということが。
なので、正規のURL（この場合はサブドメイン）でのみアクセス可能なように.htaccessでリダイレクト処理をする。借りているレンタルサーバのWebルート/showzine/days/へリダイレクト処理をするので、内容は以下のようになる。
/www/showzine/.htaccess
[shell]
Redirect /days/ &#8220;http://days.showzine.info/&#8221;
[/shell]
wwwのありなしを301リダイレクトで統一
このままだとwwwのありもなしも、どちらでもアクセスできてしまい、これまたSEOの観点からはよろしくないらしいので、これもどちらかに統一する。今回はwwwなしで。
自分が利用しているさくらインターネットでは「マルチドメインとして使用する」がデフォルトの設定で推奨となっている。（wwwあり、なし、どちらも使えるということ）この設定のまま、以下の記述を/.htaccessに記述する。（パーミッションは644で）
/www/.htaccess
[shell]
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www¥.days¥.showzine¥.info
RewriteRule (.*) http://days.showzine.info/$1 [R=301,L]
[/shell]
リダイレクト処理が効かない場合はさくらのサーバコントロールパネル「運用に便利なツール > ファイルマネージャー」から.htaccessを編集してみる。phpなどのプログラムファイルは文字コードEUC-JPだけど.htaccessはJISらしいということが、ここで分かった。
wwwありで統一したい場合は
[shell]
RewriteEngine on
RewriteCond %{HTTP_HOST} ^days\.showzine\.info
RewriteRule (.*) http://www.days.showzine.info/$1 [R=301,L]
[/shell]
robots.txtでクローラのアクセス制限
つづいて、これもコンテンツがカニバるのを防ぐためにrobots.txtを配置する。
前述の処理で

http://days.showzine.info/sample.html
http://showzine.info/days/sample.html

このふたつは同じものだけれども、正規のURLである後者でのみブラウザからアクセスできるようになった。
しかし、クローラに対してはアクセスを全て許可（これがデフォルト）しているので、このままだとどちらも同じ内容なのに別ページ（URLが異なるので）としてインデックスされてしまい、コンテンツの共食いが起きてしまう。（らしい）
このままだと、これまたSEOの観点からよろしくないので、クローラに対しても正規のURLでのみアクセスを許可し、インデックスしてもらうようにクローラに対してのアクセス制御をrotobs.txtで実行する。
robots.txtはサイトのルート（最上位）に置くこと。レンタルサーバで複数ディレクトリを用意し、個別にドメインを割り当てている場合でも、その最上位のWebルートディレクトリ（/）に置くこと。そして、アクセス制限をするディレクトリの指定はWebルート（/www/）からとなる。
自分の場合、レンタルサーバのWebルートには別のドメイン（例えばhogehoge.com）が割り当てられていて、その中にshowzine/やshowzine/days/がある（マルチドメインやサブドメイン割り当て）ので、hogehoge.com/showzine/やhogehoge.com/showzine/days/というURLでアクセス（インデックス）されないように、hogehoge.comから辿った場合のshowzineディレクトリ（内包するディレクトリ含む）にアクセス制限をするため、記述は以下のようになる。
/www/robots.txt
[shell]
User-agent: *
Disallow: /showzine/
Allow: /
[/shell]
これでクローラに対しても
http://days.showzine.info/sample.htmlへのアクセスだけが許可され、http://showzine.info/days/sample.htmlへのアクセスはブロックされるようになった。
ちなみに、robots.txtはあくまでもクローラのアクセスを制限したい場合にのみ設置する必要があり、そうでない場合は設置する必要はない。詳しくはGoogleの解説記事「robots.txt ファイルを使用してページをブロックまたは削除する」を参照のこと。

> robots.txt ファイルが必要となるのは、
> サイトに検索エンジンのインデックスに登録したくないコンテンツが
> 含まれる場合のみです。サイトのすべてのコンテンツを検索エンジンの
> インデックスに登録したい場合は、
> 空であっても robots.txt ファイルは必要ありません。

]]></description>
			<content:encoded><![CDATA[<p>さくらでサブドメインを切った際にやるべきこと。整理しておかないと抜けがあったり混乱するので、まとめておくことにした。（サブドメインだけでなく、同一のホスティングサービス内でマルチドメインなんか使うときも同様）<br />
<span id="more-2864"></span></p>
<h2>.htaccessでRedirect（リダイレクト）</h2>
<p>showzine.info/days/というディレクトリを作成し、このディレクトリにshowzine.infoのサブドメインdaysを割り当てる。</p>
<p>この段階ではサブドメインでのURLとルートドメインからディレクトリへのパスの二つのURLで同一のページにアクセスできてしまう。</p>
<ul>
<li>http://days.showzine.info/</li>
<li>http://showzine.info/days/</li>
</ul>
<p>これはコンテンツがカニバる（共食い）ことになり、SEOの観点からいってよろしくない。異なるURLで内容が同じということが。</p>
<p>なので、正規のURL（この場合はサブドメイン）でのみアクセス可能なように.htaccessでリダイレクト処理をする。借りているレンタルサーバのWebルート/showzine/days/へリダイレクト処理をするので、内容は以下のようになる。</p>
<p>/www/showzine/.htaccess<br />
[shell]<br />
Redirect /days/ &#8220;http://days.showzine.info/&#8221;<br />
[/shell]</p>
<h2>wwwのありなしを301リダイレクトで統一</h2>
<p>このままだとwwwのありもなしも、どちらでもアクセスできてしまい、これまたSEOの観点からはよろしくないらしいので、これもどちらかに統一する。今回はwwwなしで。</p>
<p>自分が利用しているさくらインターネットでは「マルチドメインとして使用する」がデフォルトの設定で推奨となっている。（wwwあり、なし、どちらも使えるということ）この設定のまま、以下の記述を/.htaccessに記述する。（パーミッションは644で）</p>
<p>/www/.htaccess<br />
[shell]<br />
RewriteEngine on<br />
RewriteCond %{HTTP_HOST} ^www¥.days¥.showzine¥.info<br />
RewriteRule (.*) http://days.showzine.info/$1 [R=301,L]<br />
[/shell]</p>
<p>リダイレクト処理が効かない場合はさくらのサーバコントロールパネル「運用に便利なツール > ファイルマネージャー」から.htaccessを編集してみる。phpなどのプログラムファイルは文字コードEUC-JPだけど.htaccessはJISらしいということが、ここで分かった。</p>
<p>wwwありで統一したい場合は</p>
<p>[shell]<br />
RewriteEngine on<br />
RewriteCond %{HTTP_HOST} ^days\.showzine\.info<br />
RewriteRule (.*) http://www.days.showzine.info/$1 [R=301,L]<br />
[/shell]</p>
<h2>robots.txtでクローラのアクセス制限</h2>
<p>つづいて、これもコンテンツがカニバるのを防ぐためにrobots.txtを配置する。</p>
<p>前述の処理で</p>
<ul>
<li>http://days.showzine.info/sample.html</li>
<li>http://showzine.info/days/sample.html</li>
</ul>
<p>このふたつは同じものだけれども、正規のURLである後者でのみブラウザからアクセスできるようになった。</p>
<p>しかし、クローラに対してはアクセスを全て許可（これがデフォルト）しているので、このままだとどちらも同じ内容なのに別ページ（URLが異なるので）としてインデックスされてしまい、コンテンツの共食いが起きてしまう。（らしい）</p>
<p>このままだと、これまたSEOの観点からよろしくないので、クローラに対しても正規のURLでのみアクセスを許可し、インデックスしてもらうようにクローラに対してのアクセス制御をrotobs.txtで実行する。</p>
<p>robots.txtはサイトのルート（最上位）に置くこと。レンタルサーバで複数ディレクトリを用意し、個別にドメインを割り当てている場合でも、その最上位のWebルートディレクトリ（/）に置くこと。そして、アクセス制限をするディレクトリの指定はWebルート（/www/）からとなる。</p>
<p>自分の場合、レンタルサーバのWebルートには別のドメイン（例えばhogehoge.com）が割り当てられていて、その中にshowzine/やshowzine/days/がある（マルチドメインやサブドメイン割り当て）ので、hogehoge.com/showzine/やhogehoge.com/showzine/days/というURLでアクセス（インデックス）されないように、hogehoge.comから辿った場合のshowzineディレクトリ（内包するディレクトリ含む）にアクセス制限をするため、記述は以下のようになる。</p>
<p>/www/robots.txt<br />
[shell]<br />
User-agent: *<br />
Disallow: /showzine/<br />
Allow: /<br />
[/shell]</p>
<p>これでクローラに対しても</p>
<p>http://days.showzine.info/sample.htmlへのアクセスだけが許可され、http://showzine.info/days/sample.htmlへのアクセスはブロックされるようになった。</p>
<p>ちなみに、robots.txtはあくまでもクローラのアクセスを制限したい場合にのみ設置する必要があり、そうでない場合は設置する必要はない。詳しくはGoogleの解説記事「<a href="http://www.google.com/support/webmasters/bin/answer.py?hl=ja&#038;answer=156449">robots.txt ファイルを使用してページをブロックまたは削除する</a>」を参照のこと。</p>
<blockquote><p>
> robots.txt ファイルが必要となるのは、<br />
> サイトに検索エンジンのインデックスに登録したくないコンテンツが<br />
> 含まれる場合のみです。サイトのすべてのコンテンツを検索エンジンの<br />
> インデックスに登録したい場合は、<br />
> 空であっても robots.txt ファイルは必要ありません。
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/seo/page/%e3%82%b5%e3%83%96%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e3%82%92%e5%88%87%e3%81%a3%e3%81%9f%e9%9a%9b%e3%81%ab%e3%82%84%e3%82%8b%e3%81%93%e3%81%a8/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/seo/page/%e3%82%b5%e3%83%96%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e3%82%92%e5%88%87%e3%81%a3%e3%81%9f%e9%9a%9b%e3%81%ab%e3%82%84%e3%82%8b%e3%81%93%e3%81%a8/ " />
	</item>
		<item>
		<title>CSVファイルのデータを表示する</title>
		<link>http://showzine.info/blog/php/page/csv%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b/ </link>
		<comments>http://showzine.info/blog/php/page/csv%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b/ #comments</comments>
		<pubDate>Sun, 13 Jun 2010 01:25:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[csv]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2862</guid>
		<description><![CDATA[前にやったやつ（それはもっと色々組み合わさって入り組んでいた）の復習で、それをひとつひとつ単純なものに分けてあらためてまとめておこうと思ったら、その単純なやつがいきなり出来なくて数十分苦労したので、そのへんも含めてあらためてメモしておくことにした。

やりたいことはホントに単純にCSVデータの内容をphpのループ処理を使って表示すること。ひとつひとつのレコードを改行で区切り、各レコードにおける各要素をカンマで区切って。CSVデータの内容は以下のとおり。
test.csv
[shell]
かいきいわい,ka,快気祝い,病気の全快を祝うこと。
がいろじゅ,ka,街路樹,道路に沿って植え連ねた樹木。
あいことば,a,合い言葉,味方同士であらかじめ決めてある合図の言葉。
[/shell]
ちょろっと検索するとfgetcsv()関数を使ったやり方が一般的らしくてけっこう出てくるんだけど（実際にそれが一般的なのかは知らない）要素にマルチバイト文字（日本語）が入っていると、これが出力されない（空白）ことが判明。ダブルクォートでそのマルチバイト文字列だけ囲めば大丈夫なことが分かったけど、これは実際の運用においては実用的ではない。（と、オレは思う）
fputcsv()関数というのもあって、これは必要に応じて文字列をダブルクォートで囲ってくれたりして、なかなか便利そうではあるのだけれども、これも文字コードの指定ができないとか、欠点があるらしい。
なので、fopen()関数でCSVデータを開いてとか、最後にfclose()関数で閉じてとか、そういうのを一切しないで、CSVデータ（test.csv）を定数として定義した上で配列としてその内容を格納、それをfor文やforeach文で出力するだけにしてみた。これならマルチバイト文字だけダブルクォートで囲む必要もないので。
まずfor文を使った場合。
[php]
]]></description>
			<content:encoded><![CDATA[<p>前にやったやつ（それはもっと色々組み合わさって入り組んでいた）の復習で、それをひとつひとつ単純なものに分けてあらためてまとめておこうと思ったら、その単純なやつがいきなり出来なくて数十分苦労したので、そのへんも含めてあらためてメモしておくことにした。<br />
<span id="more-2862"></span><br />
やりたいことはホントに単純にCSVデータの内容をphpのループ処理を使って表示すること。ひとつひとつのレコードを改行で区切り、各レコードにおける各要素をカンマで区切って。CSVデータの内容は以下のとおり。</p>
<p>test.csv<br />
[shell]<br />
かいきいわい,ka,快気祝い,病気の全快を祝うこと。<br />
がいろじゅ,ka,街路樹,道路に沿って植え連ねた樹木。<br />
あいことば,a,合い言葉,味方同士であらかじめ決めてある合図の言葉。<br />
[/shell]</p>
<p>ちょろっと検索するとfgetcsv()関数を使ったやり方が一般的らしくてけっこう出てくるんだけど（実際にそれが一般的なのかは知らない）要素にマルチバイト文字（日本語）が入っていると、これが出力されない（空白）ことが判明。ダブルクォートでそのマルチバイト文字列だけ囲めば大丈夫なことが分かったけど、これは実際の運用においては実用的ではない。（と、オレは思う）</p>
<p>fputcsv()関数というのもあって、これは必要に応じて文字列をダブルクォートで囲ってくれたりして、なかなか便利そうではあるのだけれども、これも文字コードの指定ができないとか、欠点があるらしい。</p>
<p>なので、fopen()関数でCSVデータを開いてとか、最後にfclose()関数で閉じてとか、そういうのを一切しないで、CSVデータ（test.csv）を定数として定義した上で配列としてその内容を格納、それをfor文やforeach文で出力するだけにしてみた。これならマルチバイト文字だけダブルクォートで囲む必要もないので。</p>
<p>まずfor文を使った場合。</p>
<p>[php]<br />
<?php<br />
// 用意したCSVデータを定数csvdataとして定義<br />
define(csvdata, "test.csv");</p>
<p>// csvdataの内容をfile()関数を使って配列として$dataに格納<br />
$data = file(csvdata);</p>
<p>for($i = 0; $i < count($data); $i++){<br />
    echo $data[$i]."<br />&#8220;;<br />
}<br />
[/php]</p>
<p>つづいてforeach文を使った場合。</p>
<p>[php]<br />
<?php<br />
// 用意したCSVデータを定数csvdataとして定義<br />
define(csvdata, "test.csv");</p>
<p>// csvdataの内容をfile()関数を使って配列として$dataに格納<br />
$data = file(csvdata);</p>
<p>// foreachで配列$dataの各要素をループ処理して出力<br />
foreach($data as $value){<br />
    echo $value."<br />&#8220;;<br />
}<br />
[/php]</p>
<p>どちらも出力結果は同じ。でも、若干foreach文のほうがシンプルでスッキリしているし、なんかfor文よりも処理速度も速いらしいので（といってもこのサンプルレベルでは関係ないだろうけど）使えるときはこっちのforeach文を積極的に使うことにした。</p>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/php/page/csv%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/php/page/csv%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b/ " />
	</item>
		<item>
		<title>PHPでCSVデータを出力してみる</title>
		<link>http://showzine.info/blog/php/page/php%e3%81%a7csv%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%87%ba%e5%8a%9b%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/ </link>
		<comments>http://showzine.info/blog/php/page/php%e3%81%a7csv%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%87%ba%e5%8a%9b%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/ #comments</comments>
		<pubDate>Sun, 13 Jun 2010 01:23:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[csv]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2860</guid>
		<description><![CDATA[チュートリアルの感覚で以下の記事で紹介されている内容を、初めて見る関数の機能とかも調べながら実際にやってみた。（うまくいかなかったりして自分で書き換えている部分もある）
PHPでCSVデータ出力


配列の形で用意したデータをCSV形式にして保存する
配列の形で用意したデータをCSV形式にしてダウンロード

まず最初の「CSV形式にして保存する」やつからやってみる。
作業の流れと内容。

データを保存するためのCSVファイル（test.csv）を空で用意しておく
CSVデータを作成する
CSVファイルを追記モードで開く
CSVファイルをロック
CSVファイルを初期化して中身を空にする（既存の内容に追記していく場合は不要）
作成したCSVデータをCSVファイルに書き込む
CSVファイルを閉じる

データを保存するためのCSVファイル（test.csv）を用意したら、CSVデータを作成したり、その内容をCSVファイルに書き込んだりするphpスクリプトを作成する。（csvtest.php）
csvtest.php
[php]
]]></description>
			<content:encoded><![CDATA[<p>チュートリアルの感覚で以下の記事で紹介されている内容を、初めて見る関数の機能とかも調べながら実際にやってみた。（うまくいかなかったりして自分で書き換えている部分もある）<br />
<a href="http://blog.promob.jp/fri/2010/02/phpcsv.html">PHPでCSVデータ出力</a><br />
<span id="more-2860"></span></p>
<ul>
<li>配列の形で用意したデータをCSV形式にして保存する</li>
<li>配列の形で用意したデータをCSV形式にしてダウンロード</li>
</ul>
<p>まず最初の「CSV形式にして保存する」やつからやってみる。</p>
<p>作業の流れと内容。</p>
<ul>
<li>データを保存するためのCSVファイル（test.csv）を空で用意しておく</li>
<li>CSVデータを作成する</li>
<li>CSVファイルを追記モードで開く</li>
<li>CSVファイルをロック</li>
<li>CSVファイルを初期化して中身を空にする（既存の内容に追記していく場合は不要）</li>
<li>作成したCSVデータをCSVファイルに書き込む</li>
<li>CSVファイルを閉じる</li>
</ul>
<p>データを保存するためのCSVファイル（test.csv）を用意したら、CSVデータを作成したり、その内容をCSVファイルに書き込んだりするphpスクリプトを作成する。（csvtest.php）</p>
<p>csvtest.php<br />
[php]<br />
<?php<br />
// CSVファイル名の設定<br />
$csvdata = "test.csv";</p>
<p>// CSVデータの初期化<br />
$csv = ""; </p>
<p>// CSVデータの内容<br />
// 配列$dataにデータを格納していく<br />
$data[0] = array("月曜日", "Monday");<br />
$data[1] = array("火曜日", "Tuesday");<br />
$data[2] = array("水曜日", "Wednesday");<br />
$data[3] = array("木曜日", "Thursday");<br />
$data[4] = array("金曜日", "Friday");<br />
$data[5] = array("土曜日", "Saturday");<br />
$data[6] = array("日曜日", "Sunday");</p>
<p>// CSVデータの作成<br />
// 配列$dataのkey[$key]と内容[$value]を取得してforeach文でループ処理<br />
foreach($data as $key => $value){</p>
<p>    $csv .= $key . &#8220;,&#8221;; // CSVデータにkey名と区切り文字カンマを追加<br />
    $csv .= $value[0] . &#8220;,&#8221;; // CSVデータに配列$dataの要素[0]（曜日の日本語）と区切り文字カンマを追加<br />
    $csv .= $value[1] . &#8220;\n&#8221;; // CSVデータに配列$dataの要素[1]（曜日の英語）を追加（末尾なので改行も一緒に追加）</p>
<p>}</p>
<p>// CSVファイルを追記モードで開く<br />
$fp = fopen($csvdata, &#8216;ab&#8217;);</p>
<p>// CSVファイルを排他ロックする<br />
flock($fp, LOCK_EX);</p>
<p>// CSVファイルの中身を空にする<br />
// 既存の内容に追記していく場合は不要<br />
ftruncate($fp, 0); </p>
<p>// CSVデータ$csvの内容をファイルに書き込む<br />
fwrite($fp, $csv);</p>
<p>// CSVファイルを閉じる<br />
fclose($fp);</p>
<p>// 完了メッセージを出力する<br />
echo(&#8220;CSVデータの書き込みに成功しました！&#8221;);<br />
[/php]</p>
<p>ブラウザでこのphpスクリプトファイルにアクセス。</p>
<p>CSVデータがCSVファイルに無事に書き込まれるとブラウザに「CSVデータの書き込みに成功しました！」と表示される。test.csvを開いてみれば、実際にデータが書き込まれていることを確認することが出来る。</p>
<p>test.csvのパーミッションが適切に設定されていないとPermission deniedでデータをファイルに書き込めない。この場合はパーミッションの設定を書き込み可能に設定すること。</p>
<p>この例では、作成したCSVデータをサーバ上でCSVファイルに保存した。</p>
<p>つぎは、サーバ上に保存ではなく、このCSVデータの内容をそのままCSVファイルとしてローカルにダウンロードする場合のスクリプト。</p>
<p>csvtest2.php<br />
[php]<br />
<?php<br />
// CSVファイル名の設定<br />
$csvdata = "test.csv";</p>
<p>// CSVデータの初期化<br />
$csv = "";</p>
<p>// CSVファイルに書き出すCSVデータの内容<br />
// 配列$dataにデータを格納していく<br />
$data[0] = array("月曜日", "Monday");<br />
$data[1] = array("火曜日", "Tuesday");<br />
$data[2] = array("水曜日", "Wednesday");<br />
$data[3] = array("木曜日", "Thursday");<br />
$data[4] = array("金曜日", "Friday");<br />
$data[5] = array("土曜日", "Saturday");<br />
$data[6] = array("日曜日", "Sunday");</p>
<p>// CSVデータの作成<br />
// 配列$dataのkey[$key]と内容[$value]を取得してforeach文でループ処理<br />
foreach($data as $key => $value){</p>
<p>    $csv .= $key . &#8220;,&#8221;; // CSVデータにkey名と区切り文字カンマを追加<br />
    $csv .= $value[0] . &#8220;,&#8221;; // CSVデータに配列$dataの要素[0]（曜日の日本語）と区切り文字カンマを追加<br />
    $csv .= $value[1] . &#8220;\n&#8221;; // CSVデータに配列$dataの要素[1]（曜日の英語）を追加（末尾なので改行も一緒に追加）</p>
<p>}</p>
<p>// MIMEタイプを設定する<br />
header(&#8220;Content-Type: application/octet-stream&#8221;);</p>
<p>// ダウンロードする際にファイル名を表示する<br />
header(&#8220;Content-Disposition: attachment; filename=$csvdata&#8221;);</p>
<p>// CSVデータを出力する<br />
echo($csv);<br />
[/php]</p>
<p>ブラウザでこのcsvtest2.phpにアクセスしてみるとtest.csvを保存するかどうするかの確認ウィンドウが表示されるので、ここで「ファイルを保存」を実行。ローカルに保存されたこのファイルの内容を確認してみる。</p>
<p><a href="http://www.flickr.com/photos/showjin/4585320831/" title="ピクチャ 6 by showjin, on Flickr"><img src="http://farm5.static.flickr.com/4037/4585320831_e9d700a23b_o.png" width="523" height="277" alt="ピクチャ 6" /></a></p>
<p>自宅のOSX環境にはMicrosoftのExelは入っていないので、Googleドキュメントでスプレッドシートとして読み込んで、その内容を確認してみる。</p>
<p><a href="http://www.flickr.com/photos/showjin/4585949246/" title="ピクチャ 7 by showjin, on Flickr"><img src="http://farm4.static.flickr.com/3324/4585949246_a809801fe3_o.png" width="435" height="322" alt="ピクチャ 7" /></a></p>
<p>CSVデータとして内容を無事に確認できた。</p>
<p><a href="http://blog.promob.jp/fri/">Tech[Friday]</a>さん、参考にさせてもらいました。<br />
ありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/php/page/php%e3%81%a7csv%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%87%ba%e5%8a%9b%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/php/page/php%e3%81%a7csv%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%87%ba%e5%8a%9b%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/ " />
	</item>
		<item>
		<title>拡張子htmlでphpを実行する</title>
		<link>http://showzine.info/blog/php/page/%e6%8b%a1%e5%bc%b5%e5%ad%90html%e3%81%a7php%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%99%e3%82%8b/ </link>
		<comments>http://showzine.info/blog/php/page/%e6%8b%a1%e5%bc%b5%e5%ad%90html%e3%81%a7php%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%99%e3%82%8b/ #comments</comments>
		<pubDate>Sun, 13 Jun 2010 01:23:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[.htaccess]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2858</guid>
		<description><![CDATA[phpが拡張子htmlでも動かせるなんてこと自体知らなかったので
一応メモしておく。
適用したいディレクトリに以下の記述をした.htaccessを置くだけ。
これでsample.html内にとか記述しても
ちゃんと「hello」が出力される。（phpが動くようになる）

[shell]
AddHandler application/x-httpd-php .php .html
[/shell]
環境によっては次の記述でないとダメな場合も。
（違いとか、詳しくはよく分からない）
[shell]
AddType application/x-httpd-php .php .html
[/shell]
自分が最近メインでグイグイと使っているさくらインターネットでは
上記のように簡単には出来ないらしく、ちょいと工夫が必要らしい。
まだ試してないけど、解説している記事があったのでこれもいちおう残しておく。
さくらサーバーで.htmlをphpとして動かす
今回なんでこんなことを調べる必要があったかというと、近々着手する中規模のサイトのリニューアルにからんで、phpは使いたいけど拡張子はhtmlのまま変えたくないというのがあったから。新規サイトならともかく、リニューアルなので、これまでのバックリンクやインデックス状況を失うわけにはいかない。（検索エンジンにしてみれば、拡張子が異なれば、もうそれは別ページとなってしまう）
そのへんについては以下の記事が詳しかったので、これも参考にさせてもらいました。
.htaccess で、拡張子.htmlのままPHPを実行する方法
]]></description>
			<content:encoded><![CDATA[<p>phpが拡張子htmlでも動かせるなんてこと自体知らなかったので<br />
一応メモしておく。</p>
<p>適用したいディレクトリに以下の記述をした.htaccessを置くだけ。<br />
これでsample.html内に<?php echo "hello"?>とか記述しても<br />
ちゃんと「hello」が出力される。（phpが動くようになる）<br />
<span id="more-2858"></span><br />
[shell]<br />
AddHandler application/x-httpd-php .php .html<br />
[/shell]</p>
<p>環境によっては次の記述でないとダメな場合も。<br />
（違いとか、詳しくはよく分からない）</p>
<p>[shell]<br />
AddType application/x-httpd-php .php .html<br />
[/shell]</p>
<p>自分が最近メインでグイグイと使っているさくらインターネットでは<br />
上記のように簡単には出来ないらしく、ちょいと工夫が必要らしい。</p>
<p>まだ試してないけど、解説している記事があったのでこれもいちおう残しておく。<br />
<a href="http://www.seo-maniax.com/high-rank/sakura-php.php">さくらサーバーで.htmlをphpとして動かす</a></p>
<p>今回なんでこんなことを調べる必要があったかというと、近々着手する中規模のサイトのリニューアルにからんで、phpは使いたいけど拡張子はhtmlのまま変えたくないというのがあったから。新規サイトならともかく、リニューアルなので、これまでのバックリンクやインデックス状況を失うわけにはいかない。（検索エンジンにしてみれば、拡張子が異なれば、もうそれは別ページとなってしまう）</p>
<p>そのへんについては以下の記事が詳しかったので、これも参考にさせてもらいました。<br />
<a href="http://www.suzukikenichi.com/blog/how-to-run-php-in-html-by-htaccess/">.htaccess で、拡張子.htmlのままPHPを実行する方法</a></p>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/php/page/%e6%8b%a1%e5%bc%b5%e5%ad%90html%e3%81%a7php%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%99%e3%82%8b/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/php/page/%e6%8b%a1%e5%bc%b5%e5%ad%90html%e3%81%a7php%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%99%e3%82%8b/ " />
	</item>
		<item>
		<title>.htaccessで特定のディレクトリに対してリダイレクト処理をする</title>
		<link>http://showzine.info/blog/seo/page/htaccess%e3%81%a7%e7%89%b9%e5%ae%9a%e3%81%ae%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ab%e5%af%be%e3%81%97%e3%81%a6%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e5%87%a6/ </link>
		<comments>http://showzine.info/blog/seo/page/htaccess%e3%81%a7%e7%89%b9%e5%ae%9a%e3%81%ae%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ab%e5%af%be%e3%81%97%e3%81%a6%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e5%87%a6/ #comments</comments>
		<pubDate>Sat, 12 Jun 2010 12:49:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[レンタルサーバ]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[リダイレクト]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2856</guid>
		<description><![CDATA[たとえば、Webルート/hogehoge/というディレクトリを作成し、このhogehoge/にアクセスしてきた場合、別のURLに遷移させたいような場合。
hogehoge/にサブドメインを付与し、ルートドメインからのディレクトリパスではなく、サブドメインでのURLでのみアクセスさせたいような場合なんかも。

http://hogehoge.sample.com/
http://sample.com/hogehoge/

↑前者でのみアクセスさせたいのでhogehoge/にリダイレクト処理を施す。

Webルートから見た場合のhogehoge/に対してリダイレクト処理をしたいので、/www/.htaccessに以下のように記述する。
/www/.htaccess
[shell]
Redirect /hogehoge/ &#8220;http://hogehoge.sample.com/&#8221;
[/shell]
]]></description>
			<content:encoded><![CDATA[<p>たとえば、Webルート/hogehoge/というディレクトリを作成し、このhogehoge/にアクセスしてきた場合、別のURLに遷移させたいような場合。</p>
<p>hogehoge/にサブドメインを付与し、ルートドメインからのディレクトリパスではなく、サブドメインでのURLでのみアクセスさせたいような場合なんかも。</p>
<ul>
<li>http://hogehoge.sample.com/</li>
<li>http://sample.com/hogehoge/</li>
</ul>
<p>↑前者でのみアクセスさせたいのでhogehoge/にリダイレクト処理を施す。<br />
<span id="more-2856"></span><br />
Webルートから見た場合のhogehoge/に対してリダイレクト処理をしたいので、/www/.htaccessに以下のように記述する。</p>
<p>/www/.htaccess<br />
[shell]<br />
Redirect /hogehoge/ &#8220;http://hogehoge.sample.com/&#8221;<br />
[/shell]</p>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/seo/page/htaccess%e3%81%a7%e7%89%b9%e5%ae%9a%e3%81%ae%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ab%e5%af%be%e3%81%97%e3%81%a6%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e5%87%a6/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/seo/page/htaccess%e3%81%a7%e7%89%b9%e5%ae%9a%e3%81%ae%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ab%e5%af%be%e3%81%97%e3%81%a6%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e5%87%a6/ " />
	</item>
		<item>
		<title>wwwのありなしを301リダイレクトで統一</title>
		<link>http://showzine.info/blog/seo/page/www%e3%81%ae%e3%81%82%e3%82%8a%e3%81%aa%e3%81%97%e3%82%92301%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e3%81%a7%e7%b5%b1%e4%b8%80/ </link>
		<comments>http://showzine.info/blog/seo/page/www%e3%81%ae%e3%81%82%e3%82%8a%e3%81%aa%e3%81%97%e3%82%92301%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e3%81%a7%e7%b5%b1%e4%b8%80/ #comments</comments>
		<pubDate>Sat, 12 Jun 2010 12:47:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[レンタルサーバ]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[さくら]]></category>
		<category><![CDATA[リダイレクト]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2854</guid>
		<description><![CDATA[wwwのありなしは統一しておくことがSEOの観点から好ましい。でないと、異なるURLなのに同じコンテンツということで、コンテンツが共食いを起こしてしまうから。（らしい）
たとえば

http://www.days.showzine.info
http://days.showzine.info

このURLを例として、wwwのありなしを統一してみる。今回はwwwなしで。

さくらインターネットでは「マルチドメインとして使用する」がデフォルトの設定で推奨となっている。（wwwあり、なし、どちらも使えるということ）この設定のまま、以下の記述を/.htaccessに記述する。（パーミッションは644で）
/www/.htaccess
[shell]
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www¥.days¥.showzine¥.info
RewriteRule (.*) http://days.showzine.info/$1 [R=301,L]
[/shell]
リダイレクト処理が効かない場合はさくらのサーバコントロールパネル「運用に便利なツール > ファイルマネージャー」から.htaccessを編集してみる。phpなどのプログラムファイルは文字コードEUC-JPだけど.htaccessはJISだということが、ここで分かった。
wwwありで統一したい場合は
[shell]
RewriteEngine on
RewriteCond %{HTTP_HOST} ^days¥.showzine¥.info
RewriteRule (.*) http://www.days.showzine.info/$1 [R=301,L]
[/shell]
]]></description>
			<content:encoded><![CDATA[<p>wwwのありなしは統一しておくことがSEOの観点から好ましい。でないと、異なるURLなのに同じコンテンツということで、コンテンツが共食いを起こしてしまうから。（らしい）</p>
<p>たとえば</p>
<ul>
<li>http://www.days.showzine.info</li>
<li>http://days.showzine.info</li>
</ul>
<p>このURLを例として、wwwのありなしを統一してみる。今回はwwwなしで。<br />
<span id="more-2854"></span><br />
さくらインターネットでは「マルチドメインとして使用する」がデフォルトの設定で推奨となっている。（wwwあり、なし、どちらも使えるということ）この設定のまま、以下の記述を/.htaccessに記述する。（パーミッションは644で）</p>
<p>/www/.htaccess<br />
[shell]<br />
RewriteEngine on<br />
RewriteCond %{HTTP_HOST} ^www¥.days¥.showzine¥.info<br />
RewriteRule (.*) http://days.showzine.info/$1 [R=301,L]<br />
[/shell]</p>
<p>リダイレクト処理が効かない場合はさくらのサーバコントロールパネル「運用に便利なツール > ファイルマネージャー」から.htaccessを編集してみる。phpなどのプログラムファイルは文字コードEUC-JPだけど.htaccessはJISだということが、ここで分かった。</p>
<p>wwwありで統一したい場合は</p>
<p>[shell]<br />
RewriteEngine on<br />
RewriteCond %{HTTP_HOST} ^days¥.showzine¥.info<br />
RewriteRule (.*) http://www.days.showzine.info/$1 [R=301,L]<br />
[/shell]</p>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/seo/page/www%e3%81%ae%e3%81%82%e3%82%8a%e3%81%aa%e3%81%97%e3%82%92301%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e3%81%a7%e7%b5%b1%e4%b8%80/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/seo/page/www%e3%81%ae%e3%81%82%e3%82%8a%e3%81%aa%e3%81%97%e3%82%92301%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e3%81%a7%e7%b5%b1%e4%b8%80/ " />
	</item>
		<item>
		<title>robots.txtでクローラのアクセスを制限する</title>
		<link>http://showzine.info/blog/seo/page/robots-txt%e3%81%a7%e3%82%af%e3%83%ad%e3%83%bc%e3%83%a9%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%82%92%e5%88%b6%e9%99%90%e3%81%99%e3%82%8b/ </link>
		<comments>http://showzine.info/blog/seo/page/robots-txt%e3%81%a7%e3%82%af%e3%83%ad%e3%83%bc%e3%83%a9%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%82%92%e5%88%b6%e9%99%90%e3%81%99%e3%82%8b/ #comments</comments>
		<pubDate>Sat, 12 Jun 2010 12:46:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[robots.txt]]></category>
		<category><![CDATA[クローラ]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2852</guid>
		<description><![CDATA[ディレクトリごとにサブドメインを割り当てたりすると、WebルートからのディレクトリパスのURLとサブドメインでのURLの二つのURLで同一のページが存在してしまい、SEOの観点からするとよくない。らしい。（コンテンツが共食いを起こすということらしい）
なので、こういう場合はrobots.txtでクローラのアクセスを制限して対処する。ただし、この設定はどんなクローラに対しても必ず有効ということではないらしい。（言うことをきかないクローラも存在するということ）

例として、showzine.info/days/というディレクトリにサブドメイン「days.showzine.info」を割り当てる。これによって以下の二つのURLで現状はアクセスが可能。

http://days.showzine.info/sample.html
http://showzine.info/days/sample.html

これを正規のURL（サブドメインのURLである前者）でのみ、クローラがアクセスできるようにrobots.txtを使って設定する。
robots.txtはサイトのルート（最上位）に置くこと。レンタルサーバで複数ディレクトリを用意し、個別にドメインを割り当てている場合でも、その最上位のWebルートディレクトリ（/）に置くこと。そして、アクセス制限をするディレクトリの指定はWebルート（/www/）からとなる。
自分の場合、レンタルサーバのWebルートには別のドメイン（例えばhogehoge.com）が割り当てられていて、その中にshowzine/やshowzine/days/がある（マルチドメインやサブドメイン割り当て）ので、hogehoge.com/showzine/やhogehoge.com/showzine/days/というURLでアクセス（インデックス）されないように、hogehoge.comから辿った場合のshowzineディレクトリ（内包するディレクトリ含む）にアクセス制限をするため、記述は以下のようになる。
/www/robots.txt
[shell]
User-agent: *
Disallow: /showzine/
Allow: /
[/shell]
これでクローラに対して
http://days.showzine.info/sample.htmlへのアクセスだけが許可され、http://showzine.info/days/sample.htmlへのアクセスはブロックされるようになった。
ちなみに、robots.txtはあくまでもクローラのアクセスを制限したい場合にのみ設置する必要があり、そうでない場合は設置する必要はない。詳しくはGoogleの解説記事を参照のこと。

robots.txt ファイルが必要となるのは、
サイトに検索エンジンのインデックスに登録したくないコンテンツが
含まれる場合のみです。サイトのすべてのコンテンツを検索エンジンの
インデックスに登録したい場合は、
空であってもrobots.txtファイルは必要ありません。

]]></description>
			<content:encoded><![CDATA[<p>ディレクトリごとにサブドメインを割り当てたりすると、WebルートからのディレクトリパスのURLとサブドメインでのURLの二つのURLで同一のページが存在してしまい、SEOの観点からするとよくない。らしい。（コンテンツが共食いを起こすということらしい）</p>
<p>なので、こういう場合はrobots.txtでクローラのアクセスを制限して対処する。ただし、この設定はどんなクローラに対しても必ず有効ということではないらしい。（言うことをきかないクローラも存在するということ）<br />
<span id="more-2852"></span><br />
例として、showzine.info/days/というディレクトリにサブドメイン「days.showzine.info」を割り当てる。これによって以下の二つのURLで現状はアクセスが可能。</p>
<ul>
<li>http://days.showzine.info/sample.html</li>
<li>http://showzine.info/days/sample.html</li>
</ul>
<p>これを正規のURL（サブドメインのURLである前者）でのみ、クローラがアクセスできるようにrobots.txtを使って設定する。</p>
<p>robots.txtはサイトのルート（最上位）に置くこと。レンタルサーバで複数ディレクトリを用意し、個別にドメインを割り当てている場合でも、その最上位のWebルートディレクトリ（/）に置くこと。そして、アクセス制限をするディレクトリの指定はWebルート（/www/）からとなる。</p>
<p>自分の場合、レンタルサーバのWebルートには別のドメイン（例えばhogehoge.com）が割り当てられていて、その中にshowzine/やshowzine/days/がある（マルチドメインやサブドメイン割り当て）ので、hogehoge.com/showzine/やhogehoge.com/showzine/days/というURLでアクセス（インデックス）されないように、hogehoge.comから辿った場合のshowzineディレクトリ（内包するディレクトリ含む）にアクセス制限をするため、記述は以下のようになる。</p>
<p>/www/robots.txt<br />
[shell]<br />
User-agent: *<br />
Disallow: /showzine/<br />
Allow: /<br />
[/shell]</p>
<p>これでクローラに対して</p>
<p>http://days.showzine.info/sample.htmlへのアクセスだけが許可され、http://showzine.info/days/sample.htmlへのアクセスはブロックされるようになった。</p>
<p>ちなみに、robots.txtはあくまでもクローラのアクセスを制限したい場合にのみ設置する必要があり、そうでない場合は設置する必要はない。詳しくは<a href="http://www.google.com/support/webmasters/bin/answer.py?hl=ja&#038;answer=156449">Googleの解説記事</a>を参照のこと。</p>
<blockquote><p>
robots.txt ファイルが必要となるのは、<br />
サイトに検索エンジンのインデックスに登録したくないコンテンツが<br />
含まれる場合のみです。サイトのすべてのコンテンツを検索エンジンの<br />
インデックスに登録したい場合は、<br />
空であってもrobots.txtファイルは必要ありません。
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/seo/page/robots-txt%e3%81%a7%e3%82%af%e3%83%ad%e3%83%bc%e3%83%a9%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%82%92%e5%88%b6%e9%99%90%e3%81%99%e3%82%8b/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/seo/page/robots-txt%e3%81%a7%e3%82%af%e3%83%ad%e3%83%bc%e3%83%a9%e3%81%ae%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%82%92%e5%88%b6%e9%99%90%e3%81%99%e3%82%8b/ " />
	</item>
		<item>
		<title>さくらでベーシック認証を利用する</title>
		<link>http://showzine.info/blog/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/page/%e3%81%95%e3%81%8f%e3%82%89%e3%81%a7%e3%83%99%e3%83%bc%e3%82%b7%e3%83%83%e3%82%af%e8%aa%8d%e8%a8%bc%e3%82%92%e5%88%a9%e7%94%a8%e3%81%99%e3%82%8b/ </link>
		<comments>http://showzine.info/blog/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/page/%e3%81%95%e3%81%8f%e3%82%89%e3%81%a7%e3%83%99%e3%83%bc%e3%82%b7%e3%83%83%e3%82%af%e8%aa%8d%e8%a8%bc%e3%82%92%e5%88%a9%e7%94%a8%e3%81%99%e3%82%8b/ #comments</comments>
		<pubDate>Tue, 08 Jun 2010 12:32:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[レンタルサーバ]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[.htpasswd]]></category>
		<category><![CDATA[さくら]]></category>
		<category><![CDATA[ベーシック認証]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2848</guid>
		<description><![CDATA[別にさくらでなくてもいいんだけど、実際にやったのがさくらなので。んで、たまにしかやらなくてすぐ忘れるので、一応メモ。とくに.htpasswdファイルのパス指定をルートからフルパスで、というのをよく忘れるので注意。

例として、さくらで「example」というユーザ名で、www/hoge/admin/ディレクトリにベーシック認証をかける。
必要なものは.htaccessと.htpasswdの2ファイル。このふたつを/home/example/www/hoge/admin/ディレクトリに置く。パーミッションはどちらも644。
.htaccess（パーミッションは644）
[shell]
AuthUserFile /home/example/www/hoge/admin/.htpasswd
AuthType Basic
AuthName &#8220;Secret Area&#8221;
Require valid-user

    deny from all

[/shell]
AuthUserFileはパスワードファイル（.htpasswd）の指定。
サーバのルートディレクトリから「フルパス」で指定しないといけない。
さくらインターネットなら/home/ユーザ名/www/ベーシック認証をかけるディレクトリ名/.htpasswdとなる。
.htpasswd（パーミッションは644）
[shell]
UserName1:PassWord1
UserName2:PassWord2
[/shell]
ユーザ名とパスワードはコロンで繋げる。複数ユーザを登録する場合は改行で記述していく。
パスワードは暗号化したほうがいいので.htaccessファイルを簡単に生成してくれるサービス「.htaccess Editor」を利用する。
「ベーシック認証」のところでユーザ名とパスワードを入力。「.htpasswdを作成」をクリックすると、ユーザ名と暗号化されたパスワードをコロンで繋いだ文字列が出力されるので、これを.htpasswdファイルにペースト。
これで自分で入力したユーザ名とパスワードによるベーシック認証が有効になる。
]]></description>
			<content:encoded><![CDATA[<p>別にさくらでなくてもいいんだけど、実際にやったのがさくらなので。んで、たまにしかやらなくてすぐ忘れるので、一応メモ。とくに.htpasswdファイルのパス指定をルートからフルパスで、というのをよく忘れるので注意。<br />
<span id="more-2848"></span><br />
例として、さくらで「example」というユーザ名で、www/hoge/admin/ディレクトリにベーシック認証をかける。</p>
<p>必要なものは.htaccessと.htpasswdの2ファイル。このふたつを/home/example/www/hoge/admin/ディレクトリに置く。パーミッションはどちらも644。</p>
<p><strong>.htaccess（パーミッションは644）</strong><br />
[shell]<br />
AuthUserFile /home/example/www/hoge/admin/.htpasswd<br />
AuthType Basic<br />
AuthName &#8220;Secret Area&#8221;<br />
Require valid-user</p>
<p><Files ~ "^.(htpasswd|htaccess)$"><br />
    deny from all<br />
</Files><br />
[/shell]</p>
<p>AuthUserFileはパスワードファイル（.htpasswd）の指定。<br />
サーバのルートディレクトリから「フルパス」で指定しないといけない。<br />
さくらインターネットなら/home/ユーザ名/www/ベーシック認証をかけるディレクトリ名/.htpasswdとなる。</p>
<p><strong>.htpasswd（パーミッションは644）</strong><br />
[shell]<br />
UserName1:PassWord1<br />
UserName2:PassWord2<br />
[/shell]</p>
<p>ユーザ名とパスワードはコロンで繋げる。複数ユーザを登録する場合は改行で記述していく。</p>
<p>パスワードは暗号化したほうがいいので.htaccessファイルを簡単に生成してくれるサービス「<a href="http://www.htaccesseditor.com/">.htaccess Editor</a>」を利用する。</p>
<p>「ベーシック認証」のところでユーザ名とパスワードを入力。「.htpasswdを作成」をクリックすると、ユーザ名と暗号化されたパスワードをコロンで繋いだ文字列が出力されるので、これを.htpasswdファイルにペースト。</p>
<p>これで自分で入力したユーザ名とパスワードによるベーシック認証が有効になる。</p>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/page/%e3%81%95%e3%81%8f%e3%82%89%e3%81%a7%e3%83%99%e3%83%bc%e3%82%b7%e3%83%83%e3%82%af%e8%aa%8d%e8%a8%bc%e3%82%92%e5%88%a9%e7%94%a8%e3%81%99%e3%82%8b/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/page/%e3%81%95%e3%81%8f%e3%82%89%e3%81%a7%e3%83%99%e3%83%bc%e3%82%b7%e3%83%83%e3%82%af%e8%aa%8d%e8%a8%bc%e3%82%92%e5%88%a9%e7%94%a8%e3%81%99%e3%82%8b/ " />
	</item>
		<item>
		<title>さくらインターネットで初めてcgiを動かす</title>
		<link>http://showzine.info/blog/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/page/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%a7%e5%88%9d%e3%82%81%e3%81%a6cgi%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99/ </link>
		<comments>http://showzine.info/blog/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/page/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%a7%e5%88%9d%e3%82%81%e3%81%a6cgi%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99/ #comments</comments>
		<pubDate>Tue, 08 Jun 2010 12:30:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CGI]]></category>
		<category><![CDATA[レンタルサーバ]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[setting]]></category>
		<category><![CDATA[さくら]]></category>

		<guid isPermaLink="false">http://showzine.info/blog/?p=2846</guid>
		<description><![CDATA[一時間くらいハマったので一応メモっておく。

perlのパス
#!/usr/bin/perl
ディレクトリおよびファイルのパーミッション
705もしくは755
（これはphpとかも同じ）
ファイルの拡張子はcgi
sample.cgi
改行コードはLF
（ローカルからFTP等でアップロードする場合はASCIIモードで）
ファイルの文字エンコーディングはEUC-JP
（さくらのサーバの設定なのでこれもcgiとかに限らず）
以上に注意してサンプルを作成し、ブラウザでアクセスしてみた。
cgi/sample.cgi
[perl]
#!/usr/bin/perl
print &#8220;Hello&#8221;;
[/perl]
エラーになる。

500 Internal Server Error

エラーっつってもこれだけじゃ何が悪いのかわからん。
こんなに短いただのprint文で文法を間違えているとも思えないけど一応「perl -c ファイル名.cgi」をシェル上で実行してsyntaxの確認。
[shell]
%perl -c sample.cgi
sample.cgi syntax OK
[/shell]
問題なさそう。
そもそも何がいけないのか、その原因が知りたいので、Apacheのエラーログを見られないかどうか調べる。
直接ログファイルにはアクセスできないけど、さくらでは管理画面でエラーログの内容を見ることができるらしいことを知る。管理画面の左カラムにある「アプリケーションの設定」から「アクセスログの設定」を選び、遷移先ページのメインカラム真ん中へんにある「エラーログの表示」から「エラーログ」というリンク文字列をクリック。ここでエラーログの内容を知ることができる。（「最新の情報に更新」をクリックして、都度エラーログを確認できる）
エラーの内容は

Premature end of script headers:

だった。
これは何か特定の問題を示すエラーではないらしいんだけど、なんかしらの問題でちゃんと結果が出力されないときに出るものらしい。らしいがつづくけど。
とにかくエラーの内容が分かったので「Premature end of script headers:」で検索。
Premature end of script headersの解決法-超簡易版
この記事をひとつずつ確認し、終わりのほうにあった
[perl]
print &#8220;Content-type:text/html\n\n&#8221;
[/perl]
で解決。（お世話になりました。ありがとうございました。）
よくわかんないんだけど「Content-type: text/html」のあとに改行がふたつ（\n\n）あると解決できることがわかった。
以上を踏まえて以下のようにしたら、とりあえずエラーは出なくなり、Helloの文字列も表示されるようになった。
[perl]
#!/usr/bin/perl
print &#8220;Content-type:text/html\n\n&#8221;;
print &#8220;Hello&#8221;;
[/perl]
これだけだとあまりにも簡単すぎて不安なので、最近買った参考書にあったサンプルスクリプトを試してみる。
[perl]
#!/usr/bin/perl
print &#8220;Content-type:text/html\n\n&#8221;;
@words = (&#8216;こんにちは&#8217;, &#8216;ハロー&#8217;, &#8216;ニイハオ&#8217;);
srand(time&#124;$$);
$word = $words[rand(@words)];
print ]]></description>
			<content:encoded><![CDATA[<p>一時間くらいハマったので一応メモっておく。<br />
<span id="more-2846"></span><br />
perlのパス<br />
#!/usr/bin/perl</p>
<p>ディレクトリおよびファイルのパーミッション<br />
705もしくは755<br />
（これはphpとかも同じ）</p>
<p>ファイルの拡張子はcgi<br />
sample.cgi</p>
<p>改行コードはLF<br />
（ローカルからFTP等でアップロードする場合はASCIIモードで）</p>
<p>ファイルの文字エンコーディングはEUC-JP<br />
（さくらのサーバの設定なのでこれもcgiとかに限らず）</p>
<p>以上に注意してサンプルを作成し、ブラウザでアクセスしてみた。</p>
<p>cgi/sample.cgi<br />
[perl]<br />
#!/usr/bin/perl</p>
<p>print &#8220;Hello&#8221;;</p>
<p>[/perl]</p>
<p>エラーになる。</p>
<blockquote><p>
500 Internal Server Error
</p></blockquote>
<p>エラーっつってもこれだけじゃ何が悪いのかわからん。</p>
<p>こんなに短いただのprint文で文法を間違えているとも思えないけど一応「perl -c ファイル名.cgi」をシェル上で実行してsyntaxの確認。</p>
<p>[shell]<br />
%perl -c sample.cgi<br />
sample.cgi syntax OK<br />
[/shell]</p>
<p>問題なさそう。</p>
<p>そもそも何がいけないのか、その原因が知りたいので、Apacheのエラーログを見られないかどうか調べる。</p>
<p>直接ログファイルにはアクセスできないけど、さくらでは管理画面でエラーログの内容を見ることができるらしいことを知る。管理画面の左カラムにある「アプリケーションの設定」から「アクセスログの設定」を選び、遷移先ページのメインカラム真ん中へんにある「エラーログの表示」から「エラーログ」というリンク文字列をクリック。ここでエラーログの内容を知ることができる。（「最新の情報に更新」をクリックして、都度エラーログを確認できる）</p>
<p>エラーの内容は</p>
<blockquote><p>
Premature end of script headers:
</p></blockquote>
<p>だった。</p>
<p>これは何か特定の問題を示すエラーではないらしいんだけど、なんかしらの問題でちゃんと結果が出力されないときに出るものらしい。らしいがつづくけど。</p>
<p>とにかくエラーの内容が分かったので「Premature end of script headers:」で検索。</p>
<p><a href="http://sagittarius.dip.jp/toshi/premature.php">Premature end of script headersの解決法-超簡易版</a></p>
<p>この記事をひとつずつ確認し、終わりのほうにあった</p>
<p>[perl]<br />
print &#8220;Content-type:text/html\n\n&#8221;<br />
[/perl]</p>
<p>で解決。（お世話になりました。ありがとうございました。）</p>
<p>よくわかんないんだけど「Content-type: text/html」のあとに改行がふたつ（\n\n）あると解決できることがわかった。</p>
<p>以上を踏まえて以下のようにしたら、とりあえずエラーは出なくなり、Helloの文字列も表示されるようになった。</p>
<p>[perl]<br />
#!/usr/bin/perl</p>
<p>print &#8220;Content-type:text/html\n\n&#8221;;<br />
print &#8220;Hello&#8221;;<br />
[/perl]</p>
<p>これだけだとあまりにも簡単すぎて不安なので、最近買った参考書にあったサンプルスクリプトを試してみる。</p>
<p>[perl]<br />
#!/usr/bin/perl</p>
<p>print &#8220;Content-type:text/html\n\n&#8221;;</p>
<p>@words = (&#8216;こんにちは&#8217;, &#8216;ハロー&#8217;, &#8216;ニイハオ&#8217;);<br />
srand(time|$$);<br />
$word = $words[rand(@words)];</p>
<p>print <<"EOL";<br />
<html><br />
<head></head><br />
<body><br />
ようこそ<br />
$word<br />
</body><br />
</html><br />
EOL<br />
[/perl]</p>
<p>大丈夫だった。</p>
<p>ちなみに、Content-typeの指定がなくて、ただ改行を冒頭で出力しているだけだと、エラーにはならないけどhtmlソースがそのまんま表示される。当然のことながら。</p>
<p>このサンプルでいうと、たとえば次のようにして「Content-type: text/html」部分をヒアドキュメントの中で出力してもいいみたい。（でも、Content-type: text/htmlの下に一行ブランクの行がないとだめだった。ブランクがないとこれはこれでまたエラーになる。やっぱり「改行がふたつ」必要なんだろうか、、よくわからんけど）</p>
<p>[perl]<br />
!/usr/bin/perl</p>
<p>@words = (&#8216;こんにちは&#8217;, &#8216;ハロー&#8217;, &#8216;ニイハオ&#8217;);<br />
srand(time|$$);<br />
$word = $words[rand(@words)];</p>
<p>print <<"EOL";<br />
Content-type: text/html</p>
<p><html><br />
<head></head><br />
<body><br />
ようこそ<br />
$word<br />
</body><br />
</html><br />
EOL<br />
[/perl]</p>
<p>とりあえずこれで実行環境は用意できたので、明日からその参考書をグイグイやってperl、cgiに触れてみることにする。仮想マシンにインストールしてあるUbuntuでやろうかとも思ってたんだけど、ここで使えるようにセットアップするのは、それはそれでまた色々準備が必要のようなので、今回は見送り。</p>
]]></content:encoded>
			<wfw:commentRss>http://showzine.info/blog/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/page/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%a7%e5%88%9d%e3%82%81%e3%81%a6cgi%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99/ /feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://showzine.info/blog/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/page/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%a7%e5%88%9d%e3%82%81%e3%81%a6cgi%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99/ " />
	</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.781 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-03 23:28:03 -->
