忍者ブログ

カウンター

プロモーション

カレンダー

02 2025/03 04
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

PHP5.3以降のDeprecated のエラーorz

PHP の調べ物

 なにやらPHP5.3以降でエラーレベルが増えたそうな・・・・

前回はバージョン違いのPHP はエラーを吐いて邪魔をするw というブログを書いた気がw

そのときは
Strict Standards: Non-static method 」の後に何か続く物で、
エラーレベルが問題でphp.ini で、
[変更前]
error_reporting = E_ALL | E_STRICT
[変更後]
error_reporting = E_ALL

です。
つまり、<E_STRICT>をカットするとエラーメッセージでの情報は出なくなったと書きました・・・

しかし!甘かった様です。

元々<E_ALL> は全てのエラーを表示するものを意味していると公式のサイトの定義済み定数 では
書いてあり、それと同時に全てとはありますが、<E_STRICT> とは別と書いてあり、
前回の「Strict Standards」のエラーは
<E_STRICT>(コードの相互運用性や互換性を維持するために PHP がコードの変更を提案する。PHP5より)
が原因のエラーであった為、<E_ALL> と重ならない為にエラーが表示されない状況を
簡単に作ることが出来ました。

しかし、今回のエラーの
Deprecated: Assigning the return value of new by reference is deprecated in」で続くエラー
つまり「Deprecated」のエラーは、PHP5.3 からあるエラーレベル、
<E_DEPRECATED>と<E_USER_DEPRECATED>のどちらかに引っかかる様なのです。

私は英語は出来る人ではありませんがw
とりあえず、「Deprecated: Assigning the return value of new by reference is deprecated in」の中に
return value of new by reference」と言う言葉があり、これはたぶん間違えなく、
公式サイトのマニュアルにあるPHP 5.3.x で推奨されない機能 の
推奨されない機能>> new の返り値を参照で代入すること  <<
まさにコレ!なのだと思います。

 なので結論から入ると、PHP5.3 のエラーレベルによって出てしまう邪魔なエラーは
E_ALL をやめて、ばらばらなエラーを結合して使うしかなさそうです。

また、公式の定義済み定数 を見た方が明確なのですが、バージョンの部分や詳細説明を省いて簡単にして
書いていました。

1     E_ERROR              重大な実行時エラー。
2     E_WARNING            実行時の警告 (致命的なエラーではない)。
4     E_PARSE              コンパイル時のパースエラー。
8     E_NOTICE             実行時の警告。
16    E_CORE_ERROR         PHPの初期始動時点での致命的なエラー。
32    E_CORE_WARNING      (致命的ではない)警告
64    E_COMPILE_ERROR      コンパイル時の致命的なエラー。
128   E_COMPILE_WARNING    コンパイル時の警告(致命的ではない)。
256   E_USER_ERROR         ユーザーによって発行されるエラーメッセージ。
512   E_USER_WARNING       ユーザーによって発行される警告メッセージ。
1024  E_USER_NOTICE        ユーザーによって発行される注意メッセージ。
2048  E_STRICT             コードの相互運用性や互換性を維持するために PHP がコードの変更を提案する。
4096  E_RECOVERABLE_ERROR  キャッチできる致命的なエラー。
8192  E_DEPRECATED         実行時の注意。
16384 E_USER_DEPRECATED    ユーザ定義の警告メッセージ。
30719 E_ALL                サポートされる全てのエラーと警告。

ここからPHP5.3 のエラー以外をE_ALL から出してみるという手を使うなら、
E_STRICT は任意(多分これをしている人には必要ないと思うが)で
追加するかどうか決めれば良いがそれ以外はですね・・・

つまり・・・wwwwwwwwwww

php.ini の設定にですね・・・・・

error_reporting = E_ERROR|E_WARNING|E_PARSE|E_NOTICE|E_CORE_ERROR|E_CORE_WARNING|E_COMPILE_ERROR|
(長いので改行してあります。)
E_COMPILE_WARNING|E_USER_ERROR|E_USER_WARNING|E_USER_NOTICE|E_USER_DEPRECATED
っていう御馬鹿な設定をすれば私好みにきっとなるハズだ!と思っていますw

とりあえずまだやっていませんが、あまりにも眠いのに・・・ 眠いのに・・・ 書いたメモなので
コレぐらいで簡便してやろう!(して下さいw)

まぁこのブログに追伸などがなければ設定がOKだったか飽きたと思って下さいorz

セキュリティーなどの為にバージョンは上げる事をうたい文句としている様な雰囲気が
PHP に見られるが、バージョンによってエラーレベルが増えて、
エラーレベルは結局調べないといけなくなるので、
結局人それぞれ自身が使うライブラリや、自分の書いたプログラムに
合わせて全てオプション設定を書いた方が良いと思いました。

                                                 以上。

追伸


error_reporting = E_ERROR|E_WARNING|E_PARSE|E_NOTICE|E_CORE_ERROR|E_CORE_WARNING|E_COMPILE_ERROR|
(長いので改行してあります。)
E_COMPILE_WARNING|E_USER_ERROR|E_USER_WARNING|E_USER_NOTICE|E_USER_DEPRECATED

PHP5.3 のエラーは出ない様になりましたー!確認済み

それはそうでしょう。PHP5.3 のエラーと<E_STRICT>を取り除いた物なので
うまく行ったのでしょう。

大体PHPのマニュアルがあってもなかなかしない、もしくはしたくない、したくなくなる様な
オプションの量ですよね^^;


 後ですが、このやたら長い書き方以外にも

error_reporting=E_ALL&~(E_NOTICE|E_DEPRECATED)

でE_ALL からPHP5.3 の<E_NOTICE><E_DEPRECATED>を使わないで済むのがわかりました。

 php.ini の設定でも書式が使えるとは思ってませんでした。
良く考えたら「 | 」も書式でした、なんだかまだまだ覚える事はいっぱいありそうです。

                                                   追伸終わり

拍手[8回]

PR

No Image

PEAR のライブラリの移行は?!

PHP の調べ物

 前もPEAR::DB を覚えようとして初めて使った時に悩みました。

 PEAR のサイトを見ると、PEAR::DB は既に古い物となり、
PEAR::MDB2 に移行していました。

 私の持っている本は既に古いPEAR::DBの説明となり、
PEAR のサイトでPackages :: Database で調べるとやはり
PEAR::MDB2 を使う方を進めている気がします。

 今更古いPEAR::DB を覚えるのか・・・ と思って
PEAR::DB を覚えるのがイヤだった為にPEAR::MDB2 を
インストールしてみましたが、やはり構文や作りすら違う様で
とりあえずやはり、PEAR::DB をインストールして
古いであろうそちらを本を見ながら打ち込んで、動作を確認していました。

 今回は同様に似た事なのですが、
PEAR::HTML_QuickForm を覚えたかったのですが、
こちらもPEAR::HTML_QuickForm2 になりつつある状態であり、
PEAR::HTML_QuickForm を使う場合に一緒にインストールしなければならない
PEAR::HTML_Common もPEAR::HTML_Common2 になっている様でした。

 PEAR::HTML_QuickForm2 のマニュアルを調べたのですが、

» End-user documentation が
「No end-user documentation is available for this package.」
となっており、2010/06/17現在はマニュアルすら無いみたいでした。

やはりPEAR::HTML_QuickForm はオンラインマニュアル もオフラインのマニュアル も
ある様なのでこちらから覚えるしかないなと思っていますが、
このPEAR(PHP)の発展途上な部分にあんまり振り回されたくない部分と
優れた物ならば古い物を使わず、新しい物を覚えたいと言う
両方の気持ちと、それらを知った上で自分で自由にForm を扱ってみたいと
切実に思うのでした。

 そんな感じのあんまり技術的に進まない考えだけのメモでした。

拍手[0回]


No Image

MySQL の Warning: mysql: Option '--set-variable' is deprecated. Use --variable-name=value instead.

MySQL の調べ物

 Warning: mysql: Option '--set-variable' is deprecated. Use --variable-name=value instead.
とある時から出る様になった。

 前から思っているのだが、MySQL のコマンドは -- で書いてあったり、- のみだったり、
それが表記の都合なのか、それ自身がコマンドなのかわかりにくい。

 これはもっとMySQL の作りを学習しないといけないのだが、
とりあえず今回出る様になった理由だけは突き止めた。

 MySQL を使ってビープ音がうるさいので、
my.ini の中にある
--------------------------------------
[mysql]

default-character-set=sjis
--------------------------------------
に次の一行を付け足したのだ。

set-variable=no-beep

つまりこうなる。

--------------------------------------
[mysql]

default-character-set=sjis
set-variable=no-beep
--------------------------------------

これをするとWarning が発生してしまう様だ。

英語は得意ではないが、我流にWarning の内容を翻訳すると
Warning: mysql: Option '--set-variable' is deprecated.
警告:MySQL:オプション  '--指定する-変数' を反対する。

Use --variable-name=value instead.
使用する--変数-名前=値の代わりとして

良くわからないが、きっと書き方がコマンドライン上の書き方と
設定ファイル上の書き方があるのだろうか???

 とりあえずビープがならない様にしたその1行を警告しているのが
わかった。

 もしかすると、ビープが鳴らないことが危険なので知らせてくれているのか、
それとも書き方がまずいのかがわからない。

 しかしこの1行を加えると、ビープな鳴らないので構文はあっているし、
しっかりMySQL が解釈して動いている気がする。

 そのうちこのMySQL の--?-? 的な書き方に慣れるのと意味を理解することと、
このWarning の本当の意味と、Warning がビープが鳴らない事に対してならば、
表示されない様に出来るのかどうかも調べるべきだと思えた。

そのうちなんとかしたい。 (メモメモでした。)

PS:書き方が分かった
-----------------------------------------------------------------
[mysql]

default-character-set=utf8
no-beep
-----------------------------------------------------------------


この様に書けばよかったみたいです。
set-variable=は必要なかったみたいです。

default-character-set の値がsjis からutf8 になっているのは
私の環境が変わったからです、特に深い意味はありません。

 

拍手[0回]


No Image

PEAR は大体わかった!やっぱPDOが好みだ!?

PHP の調べ物

 まぁ個人的な頭の中をまとめる為のメモです。

 PHP でデータベースを扱う方法は色々ありますが、
色々調べてみると自分の好みがわかってきた気がします。

①多分私が好きな方法は、ライブラリ などを挟まない、
各データベース固有の低レベルアクセス、つまり高速であり、
セキュリティー対策まで自分でしなければいけないが、
自分が作っている上では見通しの良いもの。

②エラーが出たときにライブラリの内部などを示し、
デバッグが容易に感じられ、しかも高速でPHP 5.3.2 で
標準でついているPDO が好み。

この2種類が好みだと思った、そしてなんだかPEAR は便利な部分が
有るのかもしれないが、PHP の成り立ち方や、公式HPの説明の仕方、
そしてその他の本やWeb上のサイトによる説明の仕方で、表面的に
種類を述べているだけではなくて、困った時の対処の仕方まで説明が
してある物を見つけるまでは、PEAR は触る程度で置こうと思った。


 とりあえずはPDO をセキュリティーの為は汎用性の為に用いると思ったので、
PDO を使う為の設定をメモしておこう。

php.ini で
extension=php_pdo.dll (私の5.3.2 では元々入って無い様です。無くても動きました、理由は不明です。)
extension=php_pdo_mysql.dll
の注釈をなくし有効にするか、または注釈が元々なければ追加する。

( ..)φメモメモ以上

拍手[0回]


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]