タグ『 失敗話 』

≒ PHPスクリプト内でのXML宣言

結構ありふれた問題で、PHPスクリプトでHTML描画するときにXML宣言入れるとエラーになるってのがあるけど、原因は簡単で、「<?xml version=”1.0″ encoding=”UTF-8″?>」(あくまで一例)の「<?  ?>」の部分をPHPのショートハンドタグ「<? ~ ?>」と勘違いしてしまうから。
勘違いというより同じものだからしょうがない。規格作った人達のミスだと思う。

で、対処法は

  1. php.iniで「short_open_tag = Off」に設定する。
  2. スクリプト内で、スクリプトを使ってxml宣言を出力する。(例えば「echo ‘<?xml version=”1.0″ encoding=”UTF-8″?>’;」)

の二つ(のうちどちらか)。かんたーん。①は以後PHPスクリプトで「<? ?>」ってタグの書き方が使えなくなる。僕は元々使ってないので問題なし。余談だけど、僕ぐらいの初心者レベルプログラマがあんまり省略ばっかり覚えてもしょうがないと思ってやってる。何より省略してなくても後で見返して自分で書いたものの意味が分からなくなることが多いんだから、省略なんてしてる場合じゃないよね!昨日のDB消去の件もはっきりわかる名前をテーブルにつけてれば避けられたんだよ!俺の馬鹿!
②がお手軽。昔からPHP走らせてる環境で動かす場合、ショートハンド禁止になってない場合多いだろうから。でも何か気持ち悪いのも確か。W3C先生を騙してるような感じ。

この問題は前にちょっとはまって、②の解決法でやってきてたんだけど、今日はまったのはここじゃない。いつも通りecho~でxml宣言してたら

line 2 column 1 – 警告: removing whitespace preceding XML Declaration

ってvalidaterに怒られた。ソース見たら確かに一行空白がある。何をどう動かしても消えない。①の対処法にも変えてみた。駄目。
一通りググってみたら、requireしているものが勝手に改行入れてる場合がある模様。で、あっちやりこっちやりしてたら、関数だけ切り出したファイルが悪さしてた。
ヘッダ部分のあとに関数ファイルをrequireしたら解決。僕は使ったことないけど、smarty使ってると同じ事になるとのこと。今回はヘッダ部分の後に移すことができたけど、そうできない場合もありそうです。ちゃんと覚えとこう、と自分向けのメモ。

さらに余談だけど、職業訓練では「xml宣言は付けなくて大丈夫。付けると誤動作する」って教えてる。良いのかな?
というより、地方都市のweb制作現場なんてこんな感じなんだろうな、と思う。そこに仲間入りしたくて勉強しているわけなんだけれども。

≒ やっちゃった。

やっちゃった記念。

myBBSのテーブル消しちゃった。

最近は試験向けの勉強で手一杯だったんだけど、毎日少しずつ時間を作ってECサイトを作る演習をやってます。
で、動作確認でスクリプトをアップして、使うテーブルを作って、ってやってたら、よく覚えてないテーブルを発見。短い名前で見るからにテスト用に作ったテーブルっぽかったんで消す。
「あれ?myBBSのテーブルってどれだったっけ? ………!」

何か復活の方法なかったっけって教科書見たけど、あるわけ無い。あーあ試験勉強のメモとして使ってたのに、バックアップもしてないから全部消えちゃった。
久しぶりにPCでデータ飛ぶ(つーか消したの自分だけど)怖さを体験したなぁ。学生の時卒論を今は懐かしいPC-DOS機で書いてたとき以来だ。夢で卒論データ飛ぶ夢見たっけ。
今はDROPBOXでデータ保持してたりするから、ホントにデータが消えちゃってどうしようもないってことまず無いんだよね。

データベースというシステムの「信頼できる厳格さ」見たいなものを感じることが出来ました。そんな大層なことか?
試験向けメモを一から作り直しです。勉強になるから良いか。

≒ scriptaculousEffectsSample2

昨日のを直しました。Chromeでも動きます。これです。

Chromeのデベロッパーツールで中を見てみたら、何故かa要素だけはちゃんと挿入されててその中身のimg要素がキレイに入っていない状態。
憶測だけど、ChromeのinnerHTMLメソッドは孫要素は生成しないのかもしれない。調べてもわからなかったです。

で、いつもの泥縄式対策。a要素とその中のimg要素にid付けて、

  1. #img1が無ければ以下の処理開始(だってFireFoxではちゃんとimg要素存在してるんだからね)。
  2. 文字列からimgタグ部分だけを切り出し。
  3. さらにsrc部分を切り出し。
  4. さらにさらに src=” と ” を削る。裸のurl。
  5. 新たにimg要素を作り
  6. 4のurlをsrcプロパティに指定。
  7. できたimg要素を#aTagにappendChildしてできあがり!

奇特な方はソース見てみてください。上の通りコード書いてます。恥ずかしい。

でも出来たからよし。終了。と言いたいのだけど課題も残った(いやもともと課題だらけですけどね)。

受け取ったJSONはオブジェクト。それを文字列として加工してるんだから無理があるのは分かってるんだけど、例えばそのままsubstringメソッドを使うと、Chromeの場合は怒られる。FireFoxには無視されちゃう(処理が止まる)。なので所々「+=””」ってやって文字列にしてる。一度やれば良いと思ったら、何故か勝手に(string?)オブジェクトに戻ってる。うーん我ながらよく分かってないなー。というかここまで書いて、JSONのままオブジェクトとして最後まで扱えばもっとエレガントな感じに出来るのかなと思った。次の課題とさせてください。ほんとに終了!

追伸:
 今日は何故かLANが遅い。CatDogViewer触って見たけどやっぱり先読み必要だなー。とてもLightBoxが機能しているとは言えない状態。
それとtitleとlinkはやっぱり表示が必要だな。法的にはグレー。礼儀的に×。といってもスクエア表示のリンクはLightBoxに使ってるからマウスオーバーで表示ってのは駄目、というかあんまりエレガントでない。例えば吹き出しを出させるとかはかっこわるいよね。
 ボタンでスクエア表示内がtitleとlink表示に変化とかどうだろう。それだとスムーズにリンク先に移行できるしね。
以上。追伸で独り言でした。