session_start()の際に発生するエラー ― 2009年04月03日 11時35分59秒
PHP
session_start()の際に下記のような「Cannot send session cache limiter」というエラーが発生する場合がある。
上記のエラーはコーディングに起因しない場合があり、幾つかの発生パターンが存在する。
その内の幾つかに対する対処法を紹介します。
【エラーメッセージ】
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /index.php:1) in /index.php on line 2
【その1】
ファイルの先頭にスペースや改行と言ったゴミが入っているとエラーになります。
session_start()を使用する場合、ファイルの先頭は「」としましょう。
【その2】
サーバ上に配置した PHPファイルの文字エンコードを「UTF-8」にする場合、必ず「BOM(Byte Order Mark)無し」のUTF-8を選択しましょう。
BOM有りを選択した場合、エディタに表示されないヘッダー情報がファイルの先頭に追記されてしまいます。
悲しい事にこのヘッダー情報が【その1】で紹介したのと同じゴミ扱いされてしまいます。
session_start()の際に下記のような「Cannot send session cache limiter」というエラーが発生する場合がある。
上記のエラーはコーディングに起因しない場合があり、幾つかの発生パターンが存在する。
その内の幾つかに対する対処法を紹介します。
【エラーメッセージ】
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /index.php:1) in /index.php on line 2
【その1】
ファイルの先頭にスペースや改行と言ったゴミが入っているとエラーになります。
session_start()を使用する場合、ファイルの先頭は「」としましょう。
【その2】
サーバ上に配置した PHPファイルの文字エンコードを「UTF-8」にする場合、必ず「BOM(Byte Order Mark)無し」のUTF-8を選択しましょう。
BOM有りを選択した場合、エディタに表示されないヘッダー情報がファイルの先頭に追記されてしまいます。
悲しい事にこのヘッダー情報が【その1】で紹介したのと同じゴミ扱いされてしまいます。
warning【LNK4089】 ― 2006年12月26日 11時30分48秒
Visual C++
LINK : warning LNK4089: "SHELL32.dll" へのすべての参照は /OPT:REF によって廃棄されます
この警告は「リンク作業中に参照されていないDDLが見つかったので排除します」という意味なので見て見ぬ振りをしても大丈夫です。
Debugモードでビルドすると出ないので、Releaseモードにすると発生するので気になりますよね。
これはデバッグ時にはコンパイラの最適化設定がOFFになっているのが原因です。
LINK : warning LNK4089: "SHELL32.dll" へのすべての参照は /OPT:REF によって廃棄されます
この警告は「リンク作業中に参照されていないDDLが見つかったので排除します」という意味なので見て見ぬ振りをしても大丈夫です。
Debugモードでビルドすると出ないので、Releaseモードにすると発生するので気になりますよね。
これはデバッグ時にはコンパイラの最適化設定がOFFになっているのが原因です。
error【LNK2001】 ― 2006年12月26日 11時06分10秒
Visual C++
nafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
nafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です
MFCのヘッダーをインクルードしているのにプロジェクトの設定が【MFCを使用しない】になっていると発生します。
VC++のプロジェクトを「Win32 Application」で作成した場合はデフォルトの設定が【MFCを使用しない】になっているので、Win32アプリケーションからMFCを呼び出す場合は注意しましょう.
nafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
nafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です
MFCのヘッダーをインクルードしているのにプロジェクトの設定が【MFCを使用しない】になっていると発生します。
VC++のプロジェクトを「Win32 Application」で作成した場合はデフォルトの設定が【MFCを使用しない】になっているので、Win32アプリケーションからMFCを呼び出す場合は注意しましょう.
分割ウィンドウの作り方 ― 2006年10月26日 16時08分37秒
Visual C++
1.メインフレームのメンバ変数にCSplitterWndのインスタンスを追加する。
2.メインフレームにCFrameWnd::OnCreateClient()のオーバーライドを作成する。
3.ペインに割り当てるビューを定義する。
4.CFrameWnd::OnCreateClient()の中でペインの定義を行う。
CSplitterWnd::Create()またはCSplitterWnd::CreateStatic()
5.ペインにビューを結び付ける。
CSplitterWnd::CreateView()
● CSplitterWnd
ウィンドウを分割する機能を持つクラス。
分割したいウィンドウと結び付けて使用する。
分割された個々のクライアント領域をペインと呼ぶ。
ペインはメインフレームのCFrameWnd::OnCreateClient()内で初期化する。
動的分割ウィンドウの場合はCSplitterWnd::Create()を使用する。
静的分割ウィンドウの場合はCSplitterWnd::CreateStatic()を使用する。
ペインへのビュー割り当てはCSplitterWnd::CreateViewを使用する。
● 動的分割ウィンドウ
分割ウィンドウには初期状態では一つのビューしかない。
分割ボックスをユーザーの操作することで新しいペインが生成される。
● 静的分割ウィンドウ
分割ウィンドウが生成される同時にペインも生成される。
ペインの配置順序や数は固定されている。
● CSplitterWnd::Create( ~ )
動的分割ウィンドウとしてCSplitterWndインスタンスを初期化する。
<戻り値>
● CSplitterWnd::CreateStatic()
静的分割ウィンドウとして CSplitterWnd インスタンスを初期化する。
<戻り値>
● CSplitterWnd::CreateView()
ペインにビューを結び付ける。
<戻り値>
1.メインフレームのメンバ変数にCSplitterWndのインスタンスを追加する。
2.メインフレームにCFrameWnd::OnCreateClient()のオーバーライドを作成する。
3.ペインに割り当てるビューを定義する。
4.CFrameWnd::OnCreateClient()の中でペインの定義を行う。
CSplitterWnd::Create()またはCSplitterWnd::CreateStatic()
5.ペインにビューを結び付ける。
CSplitterWnd::CreateView()
● CSplitterWnd
ウィンドウを分割する機能を持つクラス。
分割したいウィンドウと結び付けて使用する。
分割された個々のクライアント領域をペインと呼ぶ。
ペインはメインフレームのCFrameWnd::OnCreateClient()内で初期化する。
動的分割ウィンドウの場合はCSplitterWnd::Create()を使用する。
静的分割ウィンドウの場合はCSplitterWnd::CreateStatic()を使用する。
ペインへのビュー割り当てはCSplitterWnd::CreateViewを使用する。
● 動的分割ウィンドウ
分割ウィンドウには初期状態では一つのビューしかない。
分割ボックスをユーザーの操作することで新しいペインが生成される。
● 静的分割ウィンドウ
分割ウィンドウが生成される同時にペインも生成される。
ペインの配置順序や数は固定されている。
● CSplitterWnd::Create( ~ )
動的分割ウィンドウとしてCSplitterWndインスタンスを初期化する。
<戻り値>
- 正常終了
- 0 以外
- その他
- 0
- pParentWnd
- 分割するウィンドウ
- nMaxRows
- 分割ウィンドウの最大行数
2 以下にする必要がある。 - nMaxCols
- 分割ウィンドウの最大列数2 以下にする必要がある。
- sizeMin
- ペインが表示されるときの最小値のサイズ
- pContext
- CCreateContext構造体へのポインタ
CFrameWnd::OnCreateClient()の引数pContextを渡せばよい。 - dwStyle
- ウィンドウスタイル
Default = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT - nID
- ウィンドウの子ウィンドウID
他の分割ウィンドウの中で入れ子になっていない場合はAFX_IDW_PANE_FIRST
分割ウィンドウに対して一意であればOK?
● CSplitterWnd::CreateStatic()
静的分割ウィンドウとして CSplitterWnd インスタンスを初期化する。
<戻り値>
- 正常終了
- 0 以外
- その他
- 0
- pParentWnd
- 分割するウィンドウ
- nRows
- 分割ウィンドウの行数
16 以下にする必要がある。 - nMaxCols
- 分割ウィンドウの列数
16 以下にする必要がある。 - dwStyle
- ウィンドウスタイル
Default = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT - nID
- ウィンドウの子ウィンドウID
他の分割ウィンドウの中で入れ子になっていない場合はAFX_IDW_PANE_FIRST
● CSplitterWnd::CreateView()
ペインにビューを結び付ける。
<戻り値>
- 正常終了
- 0 以外
- その他
- 0
- row
- 新しいビューを配置する分割ウィンドウの行番号
一番左が 1で、右に行く毎に +1 - col
- 新しいビューを配置する分割ウィンドウの列番号
一番上が 1で、下に行く毎に +1 - pViewClass
- 新しいビューのCRuntimeClassポインタ
マクロ関数で生成する場合は RUNTIME_CLASS( ビュークラス名 ) - sizeInit
- 新しいビューの初期サイズ
- pContext
- CCreateContext構造体へのポインタ
CFrameWnd::OnCreateClient()の引数pContextを渡せばよい。
最近のコメント