2012年02月10日

[PHP]PHPでGETやPOSTの生パラメータを見たい場合


GET
$_SERVER["QUERY_STRING"] を覗く

POST
file_get_contents("php://input") で得られる文字列
タグ:PHP
posted by 管理者 at 12:27| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする

2012年02月08日

[PHP]header関数で悩んだ

とあるサイト作りでリダイレクト機能実施のために、Locationヘッダをheader関数でもって出したわけですが、うまく動かない。
細かく言うと、開発・試験のDebian(Squeeze)環境では何のことは無く動くのに、実働環境(VPS)のCentOS5.7ではうまく飛んでくれない。

Apacheのエラーログを見ると


Warning: Cannot modify header information - headers already sent by (output started at qwe.php:1) in asd.php on line 24


などと出ている。
今までheader関数は使った記憶は無いけど、何となく程度の知識としては「header()を使う前にボディの方の出力は1byteたりともされていてはいけない」というのは知っていました。なので、このメッセージはそういうことなのだろうと思えるのですが、しかし……

header()使うより前に、わざわざ出力してる箇所は見当たらない。"output started at qwe.php:1"と名指しされているqwe.phpにしても、他所から拾ってきたライブラリで、文字出力する箇所は無い。(デバッグ用のすら無い)

だいたい、そうだとしたら「じゃあ何でDebianでは上手くいってるの?」なわけだし。

それでも、どこか気づいてない所で文字出力してしまっているのかも知れないので、ob_start()も使ってみたけど、しかし状況は改善せず。

で、困ったときのGoogle様で、"headers already sent by"でぐぐってみた。
同じように結構はまった人はいるもので、それらのページによって「意図しない文字(列)出力」が起きる原因も色々知れました。


  • PHP開始部分の<?より前に余分な改行が無いか?
  • PHP部分閉じる?>の後に余分なスペースや改行が無いか?
  • <?に続いてinclude等ある場合、<?とinclude等との間に空行が無いか?
  • PHPソースファイルの文字コードがUTF-8の場合、本来不要なBOMが付いてないか?


これらでも、意図せぬ出力が勝手にされることがあるらしい。

今回の私の場合、他所から貰ってきたライブラリが要らぬBOM付きだったのが原因でした。


vim qwe.php
(以下vi内)
:set nobomb
:x


これであっさり解決。

Debianでは難なくいけたのは、要らぬBOMを気づかぬうちにうまく処理してくれてたのか?


参考:Apacheで「Invalid command '\xef\xbb\xbf'」(UTF-8ファイルからBOMを削除)
タグ:PHP
posted by 管理者 at 11:10| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする

2012年01月28日

[Debian, Eclipse, PDT] Eclipse(Indigo)でPHP Web page実行ができない

開発用PCをWin7 64bitの、メモリも今までよりは多いものに換えたのを機に、今までテスト用サーバは10年くらい前の古PCを使っていたのを、Win7上の仮想マシンにDebian Squeeze 64bit を入れたものに乗り換えようと作業中。

Eclipse(Indigo)を入れ、PDTも入れて、Win上で作成途中だったプロジェクトのソースも(仮想マシン上の)Debian環境に移して、とりあえず簡単な単独動作できるようなページを Run as PHP Web page で走らせてみたら。

Unable to load page
Problem occurred while loading the URL http:/localhost/hoge/fuga/monya.php

URL cannot be shown

と出るばかりで、まともに動作してくれない。
この該当URLを、普通のWebブラウザ(Chrome)で呼び出すと、期待通りのページが表示されるので、ApacheとPHPは問題無い。問題はEclipse + PDT ということになる。
ちゃんとAliasも設定したし、何が悪いやらさっぱり。

「Eclipse PDT」とUnable to load page や Problem occurred while loading the URL やらの文言を合わせてGoogleにかけてみても、捗々しいものは見つからない。
一つ見つかったのは、なにやらWebkitGTKのバグとか何とか言っているようだけど、こっちで利用できるような、これといった解法が見えない。

色々検索したり試行錯誤したりの果てに、駄目元で「linux eclipse pdt "url cannot be shown"」で検索してやっと先人の例を見つけた。

[eclipse pdt] たかが"/"1文字にしてやられた件

生成されるURLにスラッシュが一本足りないだけ…
こんなもん、気づかんわぁーーーい!!!

まさか自動生成がそんな間抜けなことしてると思わない先入観で見てましたから、悩んだこと悩んだこと。
上記ブログの記事一つで助かりました。

というわけで解決策は、

  • 最初にRunするときに出てくる、Launch URL指定用ダイアログに記載されているURLを手で直す(スラッシュを付け足す)
  • Run Configurations のダイアログを出して、一番下のURL欄のURLはちゃんとしてる(スラッシュが足りなくない)のを確認してから、そのダイアログの[Run]ボタンで実行。

のどちらかをすればOK。どちらも一つのファイルについては最初に一回だけすれば、後は(二回目以降は)気にせず普通に実行させられる。
タグ:Eclipse PDT PHP
posted by 管理者 at 21:05| Comment(0) | TrackBack(0) | Eclipse | このブログの読者になる | 更新情報をチェックする

2011年12月26日

JavascriptやCSSにはしっかりキャッシュを効かせたい

動的コンテンツのWebサイトでもJavascriptとかCSSは、そうそう頻繁に内容が変わるわけでなし、そういうのは比較的長時間キャッシュされても良いんじゃないかとか思って、Apacheにどう設定するべ? と、やり方を探してみた。

ファイルの種類毎にキャッシュ有効期間の長短を決められれば良いなという観点で、参考にさせて貰ったのはここ。→ブラウザに画像、CSS、Javascriptなどをキャッシュさせて表示を高速化させる方法

うちにもmod_expiresが入っているのを確認後、参考ページに例示されてる設定内容を殆どそのまま、単に具体的な時間(秒数)を自分の思うまま適当に書換え、httpd.confにペースト、httpdの再起動。別にエラーもウォーニングも出ずにあっさりOK。
posted by 管理者 at 10:55| Comment(0) | TrackBack(0) | サーバ | このブログの読者になる | 更新情報をチェックする

2010年10月17日

Apache, CentOS: pcfg_openfile: unable to check htaccess file

Apacheでバーチャルホストで運営する場合、サイト毎にユーザを作成し、そのユーザのホームディレクトリにサイトの内容(ファイル達)を置くという形態は、そんなに稀有なことではないと思いますが、こうやって作成したサイトを最初に閲覧しようとしたときに、毎度毎度以下のエラーを食らいます。


[crit] [client ???.???.???.???] (13)Permission denied: /home/hoge/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable


久々にこういう作業をしたときには、以前の失敗と解決法を忘れてて、そしてこの不適切なエラーメッセージのおかげも相まって、しばらく悩みます。なにしろ.htaccessなんて置いてなくてもこのメッセージですから「無いファイルのパーミッションとか言われても…」となります。

このエラーの真の原因は、サイト用に新規作成したユーザのホームディレクトリに検索パーミッションが無いということ。
対処は、ファイル検索の許可をしてやること。

エラーが出る状態

drwx------ 4 hoge hoge 4096 10月 17 06:33 hoge←エラーを食らうサイトのディレクトリ
drwx-----x 7 huga huga 4096 10月 17 06:44 huga
drwx-----x 4 hage hage 4096 6月 17 13:47 hage
drwx-----x 4 hare hare 4096 5月 19 18:01 hare


対処

drwx-----x 4 hoge hoge 4096 10月 17 06:33 hoge←'x'のパーミッションを設定してやればOK
drwx-----x 7 huga huga 4096 10月 17 06:44 huga
drwx-----x 4 hage hage 4096 6月 17 13:47 hage
drwx-----x 4 hare hare 4096 5月 19 18:01 hare

posted by 管理者 at 08:25| Comment(0) | TrackBack(0) | サーバ | このブログの読者になる | 更新情報をチェックする

2010年09月04日

Thunderbird 3.1.2 ででもRuler Barアドオンを使い続けたい

メール作成ダイアログで、入力している文面の行の長さを手軽に知るのにRuler Barというアドオンに頼っていたわけですが、サンダーバードがバージョンアップされて3.1.2になるときに「Ruler Barはこのバージョンに追随出来てない」ということで自動的に無効化されました。つまり使えなくなった。

「まあ、ちょっと待ってれば対応されるだろう」と思って待っていたのですが、いつまで経っても使えるようになってくれない。

「他に同種のものは無いかな?」と検索してみたけど、ルーラー出してくれるのはこれ(Ruler Bar)くらいしか見当たらない。

以前、目的は同じような(長すぎる行を書いてしまうことを防ぐ)もので、70桁なら70桁を超える領域の背景色を変えて表示してくれるアドオンが有ったような気がするが、その名前も思い出せない。

というわけで、最新のThunderbird(3.1.2)でRuler Barアドオンを無理やり使ってしまえる方法は無いかと探してみた。

『メーラーソフト「Thunderbird 3.1.2」でアドオン「Ruler Bar」を使えるようにする』
というのがあった。

おかげで「方法はあるんだ」ということは判った。
だけどアドオンのアーカイブファイルを手動でダウンロードして展開して(略
というのは、便利なアドオン機構に慣れた身にはちょっと面倒くさい。

で、駄目元でちょっと違う方法を試してみたら出来た。

Thunderbirdには既にRuler Bar(0.3.2009121601)がインストールされているとして、

  1. Thunderbirdを終了させる
  2. Thunderbirdのprofileフォルダ の下のextensionsフォルダ(…/Profiles/ランダム英数字.default/extensions)を覗くと、rulerbar@piro.sakura.ne.jp というフォルダがあるので、このrulerbarのフォルダを他所に移動させる。
  3. Thunderbirdを起動させて、メインメニュー→ツール→アドオン で出てくるアドオン一覧から、Ruler Bar が消えていることを確認
  4. Thunderbirdを終了させる
  5. さっき移動させたrulerbarのフォルダ内の install.rdf を、適当なテキストエディタ(メモ帳とか)で開く
  6. install.rdf 内の"maxVersion="3.0.*"を"maxVersion="3.1.*"に書換えて保存
  7. rulerbarのフォルダを元の場所に戻す
  8. Thunderbirdを起動させて、アドオン一覧を表示させてRuler Barが有効化された状態で表示されているのを確認
  9. メール作成画面(ダイアログ)を出してみると、ちゃんとルーラが表示されている。Ruler Barの設定をちょっと変えてみたら、その変更も反映されている。


という感じで、私のところではうまくいきました。
環境はWinXP Home。
posted by 管理者 at 09:44| Comment(0) | TrackBack(0) | | このブログの読者になる | 更新情報をチェックする

2010年09月01日

DTIのServersman@VPSの割当てメモリが倍になった。というわけでTomcatに再挑戦

本日DTIより、Serversman@VPSの各プランへの「最大」割当てメモリが倍になったとのアナウンスがあった(最低保証値は以前のまま)。つまり私の場合は、今まで512MBだったから1GBまで使えるようになったはず。
早速SSHつないで、freeで確かめてみるとほんとに増えてる、1GBほど割り当てられてる。

ここで、「せっかくメモリも増えたことだから、以前駄目だったTomcatのインストールにもう一度挑戦してみよう」と再び思い立った。

以前試したときは、Tomcat(6)の起動は出来たのだけど、終了させようとすると

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

というエラーメッセージが出てきて、Tomcatを終了させられないという状態でした。
以前の私は「ふーん、そうかメモリが足りないのかぁ。まあ512MでApacheとMySQL同時に動かしてるとこにTomcatだとこんなものなのかな」と素直に思い、Tomcatも別にその時点で必要というわけでもなかった(出来ればやってみたいという程度)ので、「VPSでJava/JSP」計画は放り出していました。

しかし今、利用できるメモリは(最大で)1GB。これで出来ないはずはない。
で、やってみたのですが、しかし以前と同じ症状。
こりゃ流石におかしい。

というわけで、ちょっと真面目に調べてみました。
結局のところ、エラーメッセージに出ている通りJavaへ利用を許可しているメモリ量が不十分なのが原因。
なので、Javaに対してもうちょっとメモリを割当ててやれば良い。
そのための設定は、$CATALINA_HOME/bin/catalina.sh に書けば良い。(私の場合は、冒頭コメント部分直後に、このための設定の行を追加しました)

(略)
# LOGGING_CONFIG="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
#
# $Id: catalina.sh 885002 2009-11-27 20:51:03Z markt $
# -----------------------------------------------------------------------------

CATALINA_OPTS=" -server -Xms160m -Xmx160m "

# OS specific support. $var _must_ be set to either true or false.
cygwin=false
os400=false
(略)


Tomcatが停止している状態で上のような修正を施し、Tomcatを始動。
次に停止を指令すると、エラーも出さずにすっきり終了。

これで、以後はServlet/JSP遊びも出来そうです。
posted by 管理者 at 21:28| Comment(0) | TrackBack(0) | サーバ | このブログの読者になる | 更新情報をチェックする

2010年07月14日

Linux/Debian/Lenny Eclipse/Helios/PDT リモートデバッグ用設置・設定

試験用Webサーバ(Linux/Debian/Lenny)上のPHPスクリプトを、手元のWindows機上のEclipse/PDTからリモートデバッグしたい。

[1]phpのバージョン確認
phpinfo()で見ると、5.2

[2]ZendDebuggerのサーバ版を入手
http://www.zend.com/en/products/studio/downloadsから"Studio Web Debugger"をダウンロード。(要・無料登録のアカウント)

[3]入手したアーカイブファイルを展開し、以下はREADMEに従う
[3-1]ZendDebugger.soを配置する
アーカイブを展開したら、4_3_x_comp とか 5_2_x_comp とかいう名前のディレクトリあるので、自分とこのPHPのバージョンに合ったもの(うちの場合は5_2_x_comp)の下にあるZendDebugger.so を、とりあえず/usr/share/php に置いてみる。

[3-2]php.iniの書き換え
/etc/php5/apache2/php.ini に3行加える

zend_extension=/usr/share/php/ZendDebugger.so
zend_debugger.allow_hosts=192.168.0.0/24 LAN内からは呼べるとしておく
zend_debugger.expose_remotely=always


[3-3]
アーカイブに同梱されていた"dummy.php"をドキュメントルートにコピー

[3-4]
アパッチをリスタート

サーバ側の作業はこれだけでOK(のはず)。

posted by 管理者 at 13:03| Comment(0) | TrackBack(0) | Eclipse | このブログの読者になる | 更新情報をチェックする