忍者ブログ

カウンター

プロモーション

カレンダー

12 2025/01 02
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


No Image

バージョン違いのPHP はエラーを吐いて邪魔をするw

PHP の調べ物


 まぁタイトル通りなのですがとりあえず昔のバージョン 4 など向けに
書かれているPEAR のライブラリ をバージョン 5.3 で動かそうと思うと非常に困りましたw

 どう困るかっていうと、実行した結果をブラウザで表示している結果の前に、
動いているに関わらずやたらエラー関係の表示がずらずら出るのです!ww

 これはPEAR を使っていても同様みたいで、
Strict Standards: Non-static method 」の後に何か続く物が沢山出たりします。

 私はPEAR の情報も知りたかったので、PEAR_info っていいうPEARで出来たライブラリを
もちろんPEAR を用いてダウンロードしてインストールしましたが、この時点でもう既に
このエラー関係の表示で意味不明に思っていました。

 まぁw 毎度ながら長い前置きはこれぐらいにしておいて、本題です。

結果としては、エラーの出力は段階があって、出力するときにどの程度のエラーまでを
表示して伝えてくるかを選べるのがわかりました。

PHP公式ページ には
関数リファレンス >> PHP の振る舞いの変更 >> エラー処理 >> 定義済み定数
にエラーレベルの詳細が書いて有りますが、そこには、

値:2048 定数:
E_STRICT ( integer )
説明:「コードの相互運用性や互換性を維持するために PHP がコードの変更を提案する。 」
注記:PHP 5 より

とあり、これが引っかかっている様でした。

これを変更してバージョン違いで何か表示されるのを一時的にでも
エラー表示されて邪魔にならない状況にする為に、php.iniディレクティブ のerror_reporting を
変更しておけば表示されなくなるみたいです。

一応ですが私のphp.ini ですが、
[変更前]
error_reporting = E_ALL | E_STRICT
[変更後]
error_reporting = E_ALL

です。
つまり、「 E_STRICT」をカットするとエラーメッセージでの情報は出なくなったのを確認しました。

また、実行中に変更するには、
int error_reporting ([ int $level ] ) を使えば良いみたいなので、
これもメモしておこうかと思います。

後ついでに見つけたエラーメッセージを Web サーバのエラーログ、 TCP ポート、あるいはファイルに送る
bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )
もメモしておきます。


 やっぱり思うのですが、PEAR のライブラリをバージョン4と5に対応した物を
公式側が作ってくれるのが一番良いと思います。

 なんせライブラリなんですからそれを自己流に書き直してしまっては
ライブラリの意味がなくなってしまう部分もあると思うので、
やはり一時しのぎであっても、エラーレベルを変えて対応するのが、
素人や極度にライブラリのバージョン違いで困っていない人には良いのかなと思いました。

参考サイト
PHP5を試してみる - エラーレベル「E_STRICT」

PHP: PEARのHTTP_Request利用時のエラーについて(続き)

PHP5でe_strictエラーを出さずにPEARを使ってみる


追伸で書きました
PHP5.3以降のDeprecated のエラーorz

拍手[0回]

PR

No Image

PEAR インストールはスクリプトも必要

PHP の調べ物

 とある本を買ってPHP を勉強しているのですが、Amazon でのカスタマープレビューを見て
その通りだと思って泣きました;v;

 非常に誤植が多くてしかも、何か抜けていてそのままでは動かなかったり、
本に書いてある事は間違っていても、サンプルでは動く物が入っていたりデタラメな本を
持っていて困っていましたw

 そんな事は前置きですが、その本に載っていない当たり前な事、
「PEAR のインストール にはスクリプト が必要!」
なのですが、このスクリプトはPHP(5.3.0)をインストールしても入ってはいませんでした。

PEAR の公式マニュアル を見ると、go-pear.php というスクリプトが必要で、
http://pear.php.net/go-pear からダウンロードして配置して実行せよ!って書いてあるんですよ。


それだけの事なんですが、pear.bat だけじゃ動かないのですよ!

                                          以上

拍手[0回]


No Image

PHP エディタx入力x内部解釈x出力xブラウザ(文字コード見直し)

PHP の調べ物

 PHPエディタ(php_editor と、php_editor_std) なるものと、Notepad++ EUC-JP 対応版 なるものを、
当初からPHP エディタのターゲット として使おうとしてきた。

 結局なんだか普通にエディタっぽいNotepad++ EUC-JP 対応版 を使ってきたのだが、
PHPエディタ の通常版がプロジェクト単位で使えるのもあり、そのうちこちらにした方が良いかな?
とか思いつつ、通常版は拡張子の関連付けからなんだかややこしく、プロジェクトに参加させないファイルは
開くことが出来ない気配・・・

 なので一度は簡易版みたいなスタンドあローン版があり、こちらはファイルだけを開けるので
学習用には楽だが、なんだか両方使わないといけないっていう気配に陥りそうで、ぶっちゃけややこしい・・・
Windows に拡張子の関連付けを行うと、それぞれかぶらない様に設定されてしまうのがわかったので、
この際通常のプロジェクト単位のバージョンの方に.php なども設定しなおしてみて開いてみると、
「作成するファイル名を指定してください」 と出て、その拡張子に関連付けしたファイル名は表示されるが
そのプロジェクトに参加させてみると、ファイルは中身が「空」の物、つまり新規になってしまう。

 この都合の悪さは痛い^^; 
プロジェクト単位でしか作業をしなくても、ファイル単位で使えない→通常版
プロジェクトで作業出来ないが結構いけるのかな?って思った→スタンドアローン版

で結局前もこのPHPエディタなる物はphp.exe でエラーチェック が出来るとかchmコンパイルされた
PHP マニュアルが見れる(これはエラーの詳細でジャンプできないから便利でない)とかも使えるので
使おうと思って、度々この通常かスタンドアローンか迷い、Notepad++ EUC-JP 対応版 を使ってる
始末なのだった・・・・・

 それで長くなるが今回やっとまた、PHP エディタを使おうと思い、PHP のテストなどでお決まりの
雛形があるので、その雛形を私は雛形.php って名前でつけてるのだが、これをスタンドアローンで
開いて拡張子に驚きました・・・

 その拡張子の問題について述べます。まずはそのファイルの内容です。
--------------------
<html>
<head><title></title></head>
<body>
<?php

?>
</body>
</html>
--------------------
たったこれだけ、これだけがどうもマズイみたいなのです^^;;;

これをメモ帳で開き、名前を付けて保存にすると、文字コード は「ANSI」なのです。
でもこれを、PHPエディタ のスタンドアローン版で開くと、何度 Shift-JIS で保存しても、
再度開くと「UTF-8」なのです^^;

でもなぜか、こっちのコードの例だと、Shift-JIS として認識してくれます^^;
--------------------
<html>
<head><title></title></head>
<body>
<?php
//テスト
?>
</body>
</html>
--------------------
開く時にどっちかわからないなら、Shift-JIS を選ぶかUTF-8 を選ぶか選択する様な設定が無いです><;

このPHPエディタスタンドアローン版(Ver.1.33)は、ぶっちゃけ気が付かないと、初心者は文字コード で
ハマるかもしれません。。。

 後で分かったのですが、これはNotepad++ EUC-JP 対応版 でも同様な状況な様です!!!
 なぜ気が付かなかったのかは、Notepad++ EUC-JP 対応版 の場合は、
複数同時に沢山のファイルが開けて、そのままNotepad++ EUC-JP 対応版 本体を閉じて終了しても、
次開くと、指定したファイル を閉じてない限り、セーブしてもまた開きます。
 つまり、形式変換してセーブして閉じなければ、またShift-JIS から使えて、
設定が残るのです。
 個人的には便利に思えました、しかしこれもShift-JIS 優先とかの設定があればいいですね^^;

 とりあえず、なんだか、色々エディターの問題でつまずいて、
私は、PHP エディターなる物のデフォルトがUTF-8形式であると誤解していて
これがPHP でデフォルトで扱うと便利なのかな? とか思っていましたが、
他のエディタ、Notepad++ EUC-JP 対応版 でも同様なので、これは多分デフォルトではないと
思えました。

 とりあえずは、凄い慣れない疑問でしたが、なんとなく普通は
「日本語が混ざっていないANSI は、UTF-8 であり、日本語が混ざるとANSI であってもそれは、
S-JIS(Shift-JIS)である?!ことを薄々理解しました、多分それであってるのかな???????
 
 また言い換えると、普通にメモ帳では ANSI という取り扱いしかないのに対し、
PHP エディタ や、Notepad++ EUC-JP で自動的にファイルを開いた時に認識する文字コードが違う事も
判り、あぁそういえば、PHP の設定ではAuto とか設定があるから、これがバグの原因になるのも
よく似た事なのか!と実感しましたorz


 今までとりあえずS-JIS(Shift-JIS) を使ってきたのですが、今後の為を考えて色々調べました。
<調べたサイト>
----------------------------------------------------------------------------------

php.iniの文字コードの設定 (設定の組み合わせだけ参考に)

phpiniの文字コードの設定 - [データベース]All About (設定の組み合わせを参考に、他の資料もあるサイト)
PHPの文字化けについて (こうするとこうなると結果だけ書いてある)

PHPの文字化けを本気で解決する - ぎじゅっやさん (PHPに内部エンコードの概念が無いと言っている。内部で処理するときに基本となる文字コードはあるのでは?内部のエンコード指定が固定か固定でないか?を言いたいのかわからないが、ちょっと間違っている気がする。動く組み合わせだけの参考)

XAMPP MySQL (& cakePHP) 文字化け対策: PHPを使ったWebサイト構築 備忘録 (MySQL の設定に関して触れていたので載せてある。メモですがこの例だと「utf8」を選んでいる。)

さぼてん: PHP+MySQL+UTF-8で文字化け対策 (SQLインジェクションに脆弱 とかを参考になりそうだけど、ちょっと私には気が早すぎ。そしてこのサイトの主さんも他のサイトを参考にしている、その説明の説明サイトみたいな感じ。)

文字コードの変換 (PHP で関数の例で文字コードの話、あんまり設定環境や動作環境からの文字化けとは関係無いです^^; 済みません。)

こりゃまたPHP!~PHP概説めにー : こりゃまためんどい文字コード (このサイトも文字コードの細かい詳細は他のサイトへのリンクを基本に話を進めてある。またDBやgoogle やamazon との連携する場合の事も多少書いてある。)

----------------------------------------------------------------------------------


この上記リンクを見て、結局自身のサーバや、レンタルサーバの設定を見てみないと
一番最良の設定が見えてこない事がわかった。

 
そこで、実際に、phpinfo 関数を用いて、自身のPCの設定や、無料HPを調べてみた。

<自分のPCのmbstring.xxx の設定>
Directive Local Value Master Value
mbstring.detect_order SJIS,EUC-JP,JIS,UTF-8,ASCII SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input auto auto
mbstring.http_output SJIS SJIS
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding SJIS SJIS
mbstring.language Japanese Japanese
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value

<とある無料HPのmbstring.xxx の設定>
Directive Local Value Master Value
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) ^(text/|application/xhtml\+xml)
mbstring.internal_encoding no value no value
mbstring.language neutral neutral
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value

ここで、mbstring.http_input がauto となっているのは、
クロスサイトスクリプティング を考えると危険かもって気がついたのは後回しとして^^;;;
とりあえず、サーバによっては設定自体がされていない場合もある事を知った。
そのサーバが設定出来るのかや、固定されているのかによっても扱いが違ったり、
スクリプト内部から初期設定をして使うなどと言う使い方が想像できた。

なので今は、エディタの保存文字コードは特に気にしないで(ちょっと気になる部分はもちろんあるが^^;我慢して)
今後、DBやら、他のサイトの機能を連携させたりする事が出てきた場合に、臨機応変に切り替えるか、
それとも汎用性のある変換ルーチンやクラスライブラリをPHPの関数で作れるのならば、
作れる能力が付いた頃になんとか考えてみようと思いました。

 またちょっと予断ですがDBの文字コードについて、良い例のサイトがあったのでリンクをメモとして残します。
以下リンク。

MySQL - Wikipedia
MySQL5はsjis(Shift JIS)、utf8(UTF-8)、ujis(EUC-JP)など各種文字セットを指定できるとある。

 最後に関係ありませんが、PHP でS-JIS(Shift - JIS) を使い続けるのは文字化けの問題からは
セオリーではないみたいです。PHP ではEUC-JP か、UTF-8 を使うべきだそうです。
データベースと共に用いる場合にはデータベースの文字コードにも考慮しなければいけないので
文字化けを極力防ぐには、PHP やデータベース の内部処理の文字コードに合わせるのが
ブラウザなどを抜いた処理の部分では一番の文字化け対策の様です。

 

 

拍手[0回]


No Image

やっとわかった!PHPのバージョンの謎!(PHP5.3.2とか)

PHP の調べ物

 前回の私のサイトで、PHP のコンパイラのバージョン、つまりVisual C++ のコンパイラの違いで
PHP の本体プログラミングが収められている圧縮ファイルやインストーラーが違うのでは?と思い、
それでも何かApache の.httpd ファイルの設定をいじってみたり、PHP.ini の設定をいじってみたりして、
途方に暮れていました。

 そして、圧縮形式やインストール形式、名前の違うPHP ファイルを手当たり次第解答したり、
そして判ったのです・・・・

 結論:
 PHP は、VC++ のコンパイラのバージョンでWebサーバ環境を分けてしまっている!
(5.3.2のみなのか、以降ずっとなのか不明)

 つまり、IIS を使うならVC9、Apache 使うならVC6 みたいです(前回の私のサイトを見た方が早い)。

 これ正直・・・ コンパイラ の設定とかプリプロセッサをよく知ってるなら、
VC++ の6や9のバージョン違いを把握して、こんな分け方しないで、
Apache 用でVC6 とVC9 でコンパイル 出来るとか、
IIS用でVC6 とVC9 でコンパイルできるとかしないのかな?とか。

 もしくはApahce 用であっても、VC6 コンパイラバージョン、VC9 コンパイラバージョンという分け方、
同様にIIS 用でVC6 コンパイラバージョン、VC9 コンパイラバージョンという分け方をしたら、
こんな変な所でつまずかない気がしたorz

 あと、結果的に現状で、IIS 用のDLL とかApache 用のDLL とかがインストーラーの違い(コンパイラの違い)
によって違うの部分があるならパッケージ内容を何処かに詳細な記載をするべきだと思った。
 また、Thread Safe 版と、Non Thread Safe 版でも使えるWebサーバ とかCGI とか用途が違い
パッケージが違うみたいです。

 Webサーバの選択でIIS かApache とかの環境ごとにダウンロード した方が、
VC バージョン表記で分類するダウンロード の方が、使う側はとても楽なのにと思った。

 コンパイラのバージョン で分けるのは開発している人の都合であっても?使う側の都合じゃないよ?!
そう分けてるって思うのは私だけなのだろうか?

 まぁなんらかの理由で現状続いているやり方なので、そのやり方を理解するしかないが、
少し簡潔なやり方ではないと思えた。

 こんな事を話していても始まらないので終わりにしようと思うorz


 次回は実際にPHP のインストールパッケージ(Windows のzip 版) の
ファイルの比較とファイルの用途の解明をしてみようと思います。

次回に続く

 
追伸:
この記事は古くなっています!
この後の続きを書きました。

追伸:
上記の記事は古くなった!!!

追記の内容は
Apache とPHP のバージョンについて(2014年3月31日)
に書きました。

 

拍手[1回]


No Image

PHP はどうもコンパイラのVer でWebサーバを決めている?!

PHP の調べ物

 なんだかPHP と Apache をインストールしたのだが動かないのが
前回(っていうか今日はブログ一日で何回書いているんだw)なんだが、
まぁとりあえず他人のブログなどを拝見させてもらいながら進めようかなと
Webを冒険してた訳なのですが、やっぱりダウンロードページをもう一度みて
他のバージョンとの違いをもう一度確認してみようかなと思って見て来ました。

 そこで横に書いてある得体も知れない何かを伝えている英語が気になりました・・・・
IIS はVC9?  PHP はVC6? え!? どう言う事なんだ???!!!
英語読めない私でも何かピンとキターーーーー!
つまり、VCコンパイラのバージョンによってApache かIIS のどちらに使うかの
推奨?推薦?バージョンが決まっているって事?!

 とりあえず怪しいので、適当でも良いのでPHP のダウンロードサイト
右にある英文を適当に訳してみた。

Which version do I choose?
(私はどちらのバージョンを選択すればよいか?)

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP
(あなたは、apache.orgからApache 1またはApache2のPHPを使用している場合 PHPのVC6にバージョンを使用する必要があります)

If you are using PHP with IIS you should use the VC9 versions of PHP
(あなたがIIS上でPHPを使用する場合PHPのVC9バージョンを使用してください)

VC6 Versions are compiled with the legacy Visual Studio 6 compiler
(VC6にバージョンは、従来のVisual Studio 6コンパイラでコンパイルされています)

VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability.
(VC9のバージョンは、Visual Studio 2008のコンパイラでコンパイルされ、パフォーマンスと安定性の改善があります。)

The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed
(VC9のバージョンをお持ちならばマイクロソフト2008 C + +のランタイム(x86)またはマイクロソフト2008 C + +のランタイム(x64)をインストールする必要があります)

Do NOT use VC9 version with apache.org binaries
(apache.org バイナリでVC9バージョン を使わないでください)

 っていうかw 今日リアル寒すぎるので^^; また後で編集します・・・・w
後日ですが、翻訳完了しておきましたw

 ※このVCコンパイラ によってPHP のWebサーバ が違うのは、
5.3.2のみなのか、以降ずっとなのか不明でした。


次回のブログに続く


 

 追伸:

上記の記事は古くなった!!!

追記の内容は
Apache とPHP のバージョンについて(2014年3月31日)
に書きました。

拍手[0回]


[PR]