カテゴリー: php

phpのheader()を使った際に、Warning: Cannot modify header information – headers already sent by 〜で出ちゃって困った事。

こんな風に、postにデータが入って無い時は弾こうとしたとき

ローカルでCannot modify header informationになりました。

これはheader()より先に何かが出力されている事が原因のエラーみたいなんだけど、
変数への代入は関係ないみたいだし、謎な改行も空白行無いし、BOMも付いてないしで
改行消してみたり、ファイルの保存方法を見なおしたりでは上記ソースのエラーを消せませんでした。

で、実際にエラーを消せた方法

1)php.iniのoutput_bufferingをonにする。

MAMPのphp.iniは
[text]
/Applications/MAMP/bin/php/php[バージョン]/conf/php.ini[/text]
にあります。

見てみると
output_buffering = Off になっていたので
output_buffering = On に変更しました。

その後、MAMPを再起動して確認するとlocationで指定したページへ飛んでくれました。やった!

2)ob_start();を使う。

output_buffering = Offのままob_start();を挿入してもいけました。やった!

PHP: ob_start – Manual

使い方あってるのかな。


[Coda2]昔adobeが、contribute用の拡張機能として公開していて実はDreamweaverにもインストールする事が出来た機種依存文字変換プラグインに似た変換をするCoda2用プラグイン

Coda2用の機種依存文字ぽいものを変換するプラグイン

ダウンロード▼

機種依存文字変換プラグインダウンロード

どんなもの?

選択したテキスト内の機種依存文字ぽいものを変換します。

昔、adobeがContribute用に公開していた文字パネルという拡張機能の機種依存文字の変換のような変換をします。

文字バネル

実は、上のプラグインはDreamweaverにもインストール出来て、
これがあれば、全角数字や半角の混在や、数字1文字の(株)みたいなのをガンガン織り交ぜた.docを資料として渡されても問題なしでした。

が、いつしか公開は停止されダウンロードページも消滅していました、残念。

インストール方法

次のファイルを解凍して出来たconvert_ng.codaplugin
Library/Application Support/Coda 2/Plug-ins/に入れる

Coda2が起動していたら再起動する

ツールバーのプラグインの中に機種依存文字変換が出てきたらインストール成功かな?
(v2.0.14のutf-8でのみ動作確認済み

使い方

選択範囲内の機種依存文字ぽいものを変換します
1)選択範囲を作って
2)ツールバー>機種依存文字変換(cmd+shift+x

全体を変換する場合は
cmd+acmd+shift+x
でいけるはず。


MAMPでバーチャルホストの設定をして、SSIを有効にする。

自分用メモ
ほとんどXAMPPと同じぽい。

使うアプリ(2個+1)

MAMP / apacheとMySQLにPHPを簡単インストール

MAMP: Mac, Apache, MySQL, PHP

hoster / hostsの設定が楽チンになるアプリ

RedWinder::MacApp::Hoster

エディター / CotEditor使った

CotEditor プロジェクト日本語トップページ – SourceForge.JP

手順(うろ覚えだけど)

1)MAMPの変更

MAMP PROは使わないからアンインストールした
アプリケーション フォルダのMAMP PROの中にあるUninstaller.appで
全部チェックした。

MAMPのポートを:8888から:80に変更した
[image]環境設定 - ポート

2)httpd.confの書き換え

httpd.confをCotEditorで開けるように、cmd+iから変更
[image]httpd.confを開くアプリを変更

httpd.confの場所は
[text]/Applications/MAMP/conf/apache/httpd.conf[/text]

次の行を検索して
[text]#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml[/text]

#(コメントアウト)を削除して .htmlを追加
[text]AddType text/html .shtml .html
AddOutputFilter INCLUDES .shtml .html[/text]

次に、
[text]Options Indexes FollowSymLinks[/text]で検索して

[text]<Directory />
Options Indexes FollowSymLinks
AllowOverride None
</Directory>[/text]
に”ExecCGI Includes”(CGIとSSIの使用を許可)を追加

こんな感じになる。
[text]<Directory />
Options Indexes FollowSymLinks ExecCGI Includes
AllowOverride None
</Directory>[/text]

もいっちょ、バーチャルホストを使うので
[text]Virtual hosts[/text]で検索して
コメントアウトを削除
[text]# Virtual hosts
#Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf[/text]

[text]# Virtual hosts
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf[/text]

3)httpd-vhosts.confの編集

[text]/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf[/text]

winのxamppだとNameVirtualHost *:80がコメントアウトされてたけど
MAMPはされてなかった。

一番下に追加
DocumentRootにフォルダの場所
ServerNameに任意のアドレス
[text]<VirtualHost *:80>
DocumentRoot "/Users/[ユーザー名]/_webroot/example"
ServerName _example.localhost
<Directory "/Users/[ユーザー名]/_webroot/example">
order deny,allow
allow from all
</Directory>
</VirtualHost>[/text]

4)hosterを起動

ホスト名に「_example.localhost
IPに「127.0.0.1」を追加

こんなの追加されたらおk
[text]127.0.0.1 _example.localhost[/text]

以上MAMPを再起動して動作チェック

バーチャルホストを増やす時は
3)と4)をそれぞれ編集。

以上で漏れはないかな?

[追記 / 20120918]
その他参考
MAMPを使ってローカルで複数サイトのバーチャルホストを設定&イントラ環境や仮想環境からもそのサイトを確認する設定方法 | THE HAM MEDIA BLOG
MAMPのPHPでの文字化けを直す | memocarilog


concrete5をxampp環境にインストール

concrete5(コンクリートファイブ)というCMSがあるそうです。
concrete5日本語公式サイト by Usagi Project

何がいいのかイマイチ判らないまま仕事で使う事になったので
とりあえず動作確認用にローカルにインストールしてみようとしたら
Warning: session_start()ってエラーがでて
上手くインストール出来なかったよっていうメモ。

環境

windows7 64bit
xampp1.7.3
concrete5.4.1.1.1 日本語 最新安定板

インストールの準備

以下のリンクを参考にphpMyAdminからconcrete5用の空DBを作成
バーチャルホストも用意しておく
うちは_c.localhostにした。

inputlog – Concrete5をxamppにインストール
インストール準備 :: concrete5日本語公式サイト

インストール

_c.localhostにアクセスすると下のようなエラーが表示されて先に勧めなかった。
[text]Warning: session_start() [function.session-start]: open(\xampp\tmp\sess_jpft2igj399p07rk0ecstj7tn5, O_RDWR) failed: No such file or directory (2) in D:\_webroot\c5\htdocs\concrete\startup\session.php on line 18[/text]
[image]Warning: session_start() [function.session-start]: open

エラーの原因

どうも、php.iniのsession.save_pathがおかしいみたい。

を開いて、1496行目あたりの


こんな感じに修正

xamppのコントロールパネルからapacheを再起動して
_c.localhostにアクセスしてみるとエラーが消えた。

[image]エラーが消えた

変な達成感があるけど、実際まだ始まってすらいない。

MySQLのサーバーアドレスは
デフォルトだとlocalhostで
その下はMySQLにログインする時のidとpass
データベース名はインストールの準備で作ったヤツ


windows7 64bitにxamppを再インストール

mysqlのrootパスワード忘れて再インストールした際のやったことメモ。
なんか足りてない気がする。

ダウンロード

旧バージョン(1.7.2)をインストールしたかったので
こっちから拾ってきた
XAMPP – Browse /XAMPP Windows at SourceForge.net

最新版はこっちにも。apache friends – xampp for windows

インストール

全部デフォルトでポチポチしてって完了。
(※インストール先をc:にすると勝手にxamppフォルダが出来て、c:\xamppにインストールされた。

設定

localhostにアクセスして
左側のメニューの
セキュリティ – セキュリティから

そのような問題をすべて修正するには、単純に次のツールを使ってください。
=> http://localhost/security/xamppsecurity.php <=をクリックしてパスワードを設定。パスワード指定時にチェックをいれとかないとmysqlrootpasswd.txt やxamppdirpasswd.txt が生成されないみたい。[image]セキュリティ

.htaccessをC:\xampp\htdocs か C:\xampp\htdocs\xamppあたりに置くらしいけど

みたいなの。
大文字と小文字に違いはあるのかな?

localhostが開かなくなった、なんか間違ってたんだろうか。

あとSSIとバーチャルホスト(バーチャルドメイン?)の設定した。
xamppでinclude(SSI)を使えるようにする
ルートパスとDreamweaverとバーチャルホスト(バーチャルドメイン?)

httpd-vhosts.conf
19行目あたりの
#NameVirtualHost *:80のコメントアウトを解除して
すぐ下に

を追加した。

(※なぜかlocalhostじゃないやつがlocalhostで開いてしまったので

php.ini

C:\xampp\php\php.ini
を開いて、mbstringで検索

1771行あたりから始まるmbstringの
;mbstring.language = Japanese
みたいなやつの先頭の「;(セミコロン)」を削除した


さくらインターネットのスタンダードプランでphp5.3.3をインストールして使う

使用したSSHクライアント / index – Terminal Emulator Poderosa
(さくらインターネットの公式で例に挙げられていたので使った、秘密鍵というのを何度チャレンジしても作れなくてログインが面倒くさい)

このサイトを参考にしてインストールしました。

さくらのレンタルサーバーで、php5-mysqli をつかえるようにする覚書。(PHP5.3.0をコンパイルして使う) – れいさ屋

上記サイトに書いてある順番そのまんま入力していくだけでphp5.3.3のインストールに成功した(※コンパイル時のコマンドでmysqlに関係するところを省略したけど)。
サイトが移転したようなので、消えないと思うけど念のため記事を一部引用させていただきます。

※php-5.3.0をphp-5.3.3に変更して使った

作業ディレクトリの作成

mkdir tmp
cd tmp

PHPをダウンロード・解凍

wget http://jp.php.net/get/php-5.3.0.tar.gz/from/this/mirror
tar zxvf php-5.3.0.tar.gz

* TABキーによる補完が利用できます

コンパイル

cd php-5.3.0
./configure --prefix=/home/ --with-config-file-path=/home//www/ --enable-force-cgi-redirect --enable-mbstring --enable-mbregex --enable-calendar --enable-pdo --with-pcre-dir=/usr/local --with-openssl=/usr --with-iconv=/usr/local --with-gd --with-zlib=/usr --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-ttf --with-freetype-dir=/usr/local --with-mysql=/usr/local/mysql/5.1 --with-pdo-mysql=/usr/local/mysql/5.1 --with-mysqli=/usr/local/mysql/5.1/bin/mysql_config --enable-soap --with-curl --with-xsl=/usr/local --enable-dom --with-gettext=/usr/local --enable-exif

* の部分は、書き換えてください。
* ミソは、–with-mysqli=/usr/local/mysql/5.1/bin/mysql_config これです。

renice +20 -u
make
make install

使って見るには:

このままでは今回コンパイルしたPHPは、使われることはありません。

ドメインごとに、以下の手順をする必要があります。

・例: www.example.com (/home//www/example.com/)でつかえるようにする場合

mkdir /home//www/example.com/cgi-bin
cp /home//bin/php-cgi /home//www/example.com/cgi-bin/php5.cgi

このようにしてphp-cgiをコピーしたら、~/example.com/ディレクトリ上に、.htaccessを作成します。

内容は、

Action php5-script /cgi-bin/php5.cgi
AddHandler php5-script .php .php5

こんな感じにします。すると、.php拡張子にアクセスを試みた場合、/cgi-bin/php5.cgiでphpコードが実行されるわけです。ちなみに、デフォルトでmysqliは有効になっています。特に設定は弄る必要ないです。
(推奨)php.iniの設定

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
;mbstring.http_output = UTF-8
mbstring.detect_order = auto

date.timezone = Asia/Tokyo

コイツは、.htaccessと同じディレクトリに設置しましょう。
おわりに

* mysqliに限らず、その他組み込まれていないモジュールについても、この方法でつかえるようにすることができます。詳しくは、php公式サイトあたりをご覧ください。

php.iniの設定のdate.timezone = Asia/Tokyo、これ大事ぽかった。

なんでphp5.3.3をインストールしたかったか、事の経緯

iPhoneのユーザー辞書用にファイルを変換するサイト(ココとかこことか)はphpで作ってて、sqliteをいじったり作成したりするのにPDOクラス(php5.1以降で対応)やらSQLite3クラス(php5.3以降で対応)やらを使ってる。

動作テストはローカルのxamppでやってた(phpのバージョンは5.3.1みたい)。
なのでPDOクラスもSQLite3クラスも問題なく使えてた。

だがしかし、残念な事に作成したphpを実際に走らせるこのサーバーのphpは5.2.13(CGI版)だった(さくらインターネットのスタンダードプラン)。
つまり本サーバーではSQLite3クラスが使えない。

そんな最初に気づいておかなきゃいけない大事な事も気にかけずに、よみと単語の.txtを.sqliteに変換して追加したり作成するphpを作ってローカルでテストして問題なさそうだったので、本サーバーにアップしたらあたりまえのように動かない。

せっかく作ったプログラムがこのままだと使えない。
なのでSQLite3クラスを使えるようにする方法を探す。

PECLのSQLite3拡張モジュールを使えば大丈夫?

PECL :: Package :: sqlite3 :: download

さくらインターネットのスタンダードプランのサーバーにPECLをインストールさせるには、どうもautoheaderとautoconfを弄らないと使えないみたいなんだけど、うちの頭が悪すぎた為にうまいこと設定が出来ずインストール出来なかった。

参考 / さくらインターネットにPECLをインストール [dozo dokuwiki.php]

なので、php自体を5.3以上にしてしまえ!と思ったわけです。