2017年4月 3日 (月)

php 5.3 から 7.0 へ (見事に文字化け)

「犬とゆく」で php を使うようになって15年以上経つ。使うといってもプログラムを組んで動くようになったら放置。なので進歩しない。
私は進歩しなくても、php は進歩してゆく。クラスとかオブジェクトは最低限の考えになっているようですが、昔からのコードにはそんなものはありませんcoldsweats01。それでも動いているのでいいのですbleah

先日、サーバーの増強&諸々のバージョンアップがあった。php も 5から7へと。
メンテナンスが終わって「犬とゆく」を表示させてみたら、見事に文字化けsad。焦って、設定で、5.3 に戻す。

色々調べたら、php7 では、文字コードを utf-8 で処理することになっているそうだ。昔、utf-8 で作るのは面倒だったので、日本国内で一般的な、Shift-JIS で作ってきた。
さて、このまま5で続けても数年で使えなくなるだろう。7対応をしたい。たぶん、エンコードを変えるだけで動くのであれば当分延命出来る。

色々と調べた結果、以下の一文を他の出力に先だってしておけばいいことが分かりました。

header("Content-Type:text/html;charset=shift_jis");

分かってしまえば簡単なこと。これだけで現在、7で動いています。
日々触れている人には当たり前のことだと思いますが、年に1~2回しかいじらない人間にはこれだけのことを理解し、対応するのに一日かかってしまいましたweep

 

その後、php7 に関する書籍を購入しようとネット上で探したのですがあまりない。世の中、本当にペーパーレスの時代がくるのかもしれませんね。

 

仕方ないので、ネット上で注意点を探して読んでた。本家のphp.netのドキュメントはこちら

冒頭に書いたようなクラスとかそういうものに関係することがほとんどで、私には関係ないと思っていたら、なんと、ereg系関数がなくなった!
焦って自分のコードを確認したら、何年か前に上手く動かなくなったので、preg_match に書き換えていたのですが、mb_ereg系が残っていました。
これについて調べたら、php7 でも  mb_ereg系は残っていましたhappy01

 

さてさて、あと何年動いてくれるかな。

| | コメント (0)

2015年9月28日 (月)

Shift-JIS の 5C(\)問題 対処法

完全に個人的な備忘録です。

「犬とゆく」のサーバのphpバージョンが変わって、マルチバイト文字関連の仕様が変わったようだ。

今まで、5C(\)問題はなかったと思うのですが、一口コメントに \ が出ることがあるようになった。全て 5C を含む文字なので原因は分かったのですが、対処法がなかなか分からなかった。5Cを取るだけだと意図して入れたものもなくなってしまう。

調べたら、stripslashes という関数を使えばいいらしい。

http://php.net/manual/ja/function.stripslashes.php

 

もう何年もコーディングしていないので、これだけのことに苦労しました (~_~;)

誰か、メンテナンスを手伝ってくれませんか m(_~_)m

| | コメント (0)

2012年4月14日 (土)

mb_eregi

先日、4月11日のこと。
「犬とゆく」にいつも協力してくださっている人から、「一口コメントが変です」とメールが来た。

何もいじってないのに不思議。
次の日、調べてみたら、mb_eregi 関数の仕様が変わったみたい。

詳しいことは分かりませんが、「マッチしたら ・・・」の判定を、

 今までは、 mb_eregi ( ・・・・ ) == 1  としていたのですが、
 これを    mb_eregi ( ・・・・ ) != 0   に変更したら、

今まで通りに動くようになりました。

 

勝手に仕様変えないでangry


<その後(詳しくはコメント欄をみてください)>

すぐにまた不具合発生
!= 0 を ==1 に戻したら、動くようになりました。

何が起こっているか、誰か教えてcrying 


<その後、また書けなくなって ・・・>

どうも mb_eregi は関係ないような気もしますが、今度は、!= 0 にしたことと、意味のない特殊な処理を入れたら、何故か期待通りに動くようになりました。

原因は今のところ不明。
php のバージョン・アップ関係のような気もしますが、実施されたのは、ここ数日ではないので、それも違うかなと。

さっぱり分かりませんweep

| | コメント (3)

2012年3月21日 (水)

PHP 4 → 5

長いこと借りているレンタルサーバーの PHPバージョンが4だった。そして、register_globals が、off  だった。でも、on だと思ってコーディングをしていた。(5 は当然 on。)
4 らしく(?)クラスも極力使わないようにしていた。(Smarty を使ったときだけは仕方なく使った。)

なので、「5になったも問題ない!」と思い込んでいた。
しかし、移行したら、一部の form が動かない。php の ソースを確認してみると、どうも register_globals の関係のようだ。

調べた結果、GET の変数をきちんと取得していないのに、グローバル変数に同じ名前をつけていたので、偶然取得できていたことが判明coldsweats02

 

他にもないことを祈るcatface

| | コメント (0)

2006年9月11日 (月)

Smarty テンプレートの中の定数

テンプレート・ファイルを書いていて、配列を使うことになった。
添え字を define で定義しようとしたら出来ないという。ならば、conf ファイルで定義すれば都合がいい、と思った。これも出来ない。

conf ファイルで    soeji = 0  と定義しておいて、
テンプレートで    {$hairetu[ {#soeji#} ]}   で使えるのかと思っていたがダメでした。

結局、テンプレート・ファイルの中で定数ではなく変数として定義して解決。

{assign var="soeji" value=0}

(意味が違うけど、動くから善し!)

==========================
122 0911 レストラン『シヨン』

テラスのみ。ベーグルセットを食べた。
ま、いいんじゃない、という感じ。
平日はお客さんがとても少なくて
ゆっくり利用できる。景色がグッド。
料金もグッド。
近所にあったら、日常的に利用したい。
Dog Site なるものがあったが、よく分からなかった。

| | コメント (0) | トラックバック (0)

2006年9月10日 (日)

バージョン 4 と 5

以前から Smarty を使ってみようと思っていたが、一人で作業するのには向いていないかな、と戸惑っていた。
実際、使ってみると、クラス定義、php(ロジック)、テンプレート(HTML)、定義ファイル、と最低4つのファイルを書かなければならない。テンプレート、定義ファイルは、書き方も特殊なので億劫に感じてしまう。

でも、使い始めた。
本を買って勉強したら、PHP のバージョンが違う。本は5、借りているサーバーは4。
コーディング的には、あまり変わらないということでやってみた。本の通りにやって躓いたこと二点。

■コンストラクタ と デストラクタ
これは本にも書いてあったので、すぐに気が付いた。

 4
  コンストラクタ ・・・・・・ クラス名と同じ関数名
  デストラクタ  ・・・・・・ な し

 5
  コンストラクタ ・・・・・・ __construct または、クラス名と同じ関数名
  デストラクタ  ・・・・・・ __destruct

■関数・変数のスコープ

 4
  関数や関数内ではない場所で定義した変数は、どこからも見える

 5
  それらにもスコープ指定がある。
  クラスを使用した時に使う。変数というより、クラスのプロパティー。
  それらに以下の宣言が出来る。

  public (デフォルト)
   どこからでも、参照可能
  protected
   同一クラス、または、派生クラスからのみ参照可能
  private
   同一クラス内のメソッドからのみ参照可能

この二点をクリアしたら動くようになりました。
これから Smarty そのものの実地のお勉強となります。年のせいにしたくありませんが、なかなか身につきません。何度も同じコトを調べたり。

以降は、Smarty で躓いたことを(自分が何度も調べないで済むように)、書いてゆくことになると思います。

==========================
121 0910 コパン

有名なパン屋さんらしい。ピザセットを食べる。
生地が薄くてビックリ。チーズや具の味を
邪魔しないし引き立てているくらい。

1,500円で、サラダとスープと飲み物が付く。
どれもいい加減なものはなく、グッド。
水もグッド。

| | コメント (4) | トラックバック (0)

2005年12月 8日 (木)

パラメーター付き自己アドレスの参照

PHP でスクリプトを書いていると、そのスクリプト自身へのリクエストをするために $_SERVER["PHP_SELF"] という変数を使うことは、誰でもご存知だと思う。
しかしこれは、パラメーターなしの裸のスクリプト名になる。

「犬とゆく」のフル画面モードでは、
http://www.inutalk.info/yuku/index/index.php?url=http://www.inutalk.info/yuku/in/_rep/_.htm

と、?以降に(GETで)パラメーターとして URL を入れている。これがないとページが表示できない。
htm ファイルならまだしも、php スクリプトも読み込む仕様になっているので、ここが取得できないと困ってしまう。

このパラメーター付きの自己 URL(?)の取得方法を調べたが、すぐには分からなかったので、備忘録としてここに書いておきます。

このような場合、使うのは、$_SERVER["REQUEST_URI"]
(最後は L ではなく I )

たぶん、また役立つ時がくるだろう。また、他の人のお役に立てれば幸いです。

| | コメント (0) | トラックバック (0)

2005年2月10日 (木)

register_globals

最近の php は、register_globals のデフォルトは「off 」になったと読んだので、それを前提にコーディングしていた。
今日、間借りしているサーバーの設定を確認したら「on 」。あらら・・・セキュリティーの問題は?

セキュリティーの問題は別にして、そういうことならコーディングは至って簡単。しかし、今まで「off 」だと思って書いていたので、これを「on 」用に書き直すのは悔しい。それに、将来サーバーを引っ越すかもしれないし。(こういう時にドメインを取っておくと強い!)

と強がりをいって、自分を虐めている今日この頃(そんな余裕あるのか!)

17 0210  MADO

| | コメント (0) | トラックバック (0)

2005年1月31日 (月)

ちゃんと勉強していないもんで・・・

行き当たりバッタリで、ちょっとしたプログラムを書いています。
PHP という言語はよく出来ていて、そんなやり方でも、キチンと動作するものが出来てしまいます。

調べながら、作業を進めていくうちに「あ、こんなのあったんだ。あんなに悩んだアソコは数行で済むのに、」と思うこともあります。

2004.12.11.の書き込みも、extract 関数の使い方を知らずに、あんなことを書いてしまいました。
言い訳として「各引数を必要に応じて処理する場合は、あの方法になるのかな」と思っています。

オオボケと思ったのは、file_get_contents を知らなかったこと。古典的な、open > read のループ > close をやってしまいました。(今、動いているので直す気、無し。)

そんな私のプログラムも、動くし、コードの見通しもそれなりにいい。 PHP って凄いな、と思っている今日この頃です。
ちなみに、作っているのはコレです(バナーの処理を悩み中)。

| | コメント (0) | トラックバック (0)

2005年1月26日 (水)

PHP

ここのところ「犬とゆく」関係で、PHP のプログラムを書いている。
使えば使うほど「これは簡単!、初心者でも結構なことが出来てしまうのではないか!」と思った。

「この機能をコーディングしたら、1000行くらいかな~、ま、そこまでいかないか、」なんて考えていたものが、作ってみたら 300行くらいだったりもした。HTML をいじくるのには都合がいい。

昨日、mb_ereg_search_init 関連の関数を使ってみて、「やりたいことは、みんな同じなのね」と。マルチバイトに関わらず、文字列関数は、なかなか便利。


はぁ~、もう少し早く気が付いていれば・・・・・・


| | コメント (0) | トラックバック (0)

より以前の記事一覧