Posted by hattara on 2009 年 3 月 26 日 – 10:07 PM
Filed under php
Tagged as php
phpで
“Cannot use a scalar value as an array”
が表示されて処理ができなかったときのお話です。
グーグル先生に質問をしてみたところ、
配列を初期化している部分に問題があるのがわかりました。
たとえば、
// 初期化
$test['abc'] = ”;
// 配列に値を入れる
$test['abc']['aaa'] = aaaa;
こんなことしたときにエラーになりました。
要するに、$test['abc']はスカラー変数なのに、$test['abc']['aaa']のように
配列に値をいれようとしてるよ!
という警告のようです。
ということで、初期化している部分をコメントアウトして対処しました。
多分初歩的な内容なんだろうな。。
Posted by hattara on 2009 年 3 月 9 日 – 9:06 PM
.htaccessでmod_rewriteを使って転送してるつもりが、
404エラーになってしまう。
Apacheのエラーログ(error_log)では、「File does not exist:」が
でてる状態なわけです。
こんな現象とちょっと戯れたので、メモしとく。
.htaccessの内容は以下。
## リライトエンジンを有効に。
RewriteEngine On
## リライトの対象パスを指定
RewriteBase /
## リライトルールを宣言(条件・アクセス先)
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
まあ、これで普通はmod_rewriteによって、該当領域にきたアクセスで
RewriteRuleで指定されている画像など以外のものは、
すべてindex.phpにアクセスされるようになるはずなんですね。
ここで大きな落とし穴がありました。
.htaccessの書き方が問題なくても、
そもそも.htaccessを有効にしてない場合があるわけです。
Apacheのhttpd.confに「AllowOverride」って項目があるわけです。
これが「None」とかになってると、.htaccessが利用できないです。
これは、サーバ管理者にお願いする形になっちゃうんでしょうけど、
修正するしかないですね。
ZendFrameworkのおすすめ書籍
Posted by hattara on 2009 年 1 月 15 日 – 1:43 PM
Filed under perl, php, python, シェルスクリプト
Tagged as プログラミング, 危険
ウェブの世界を徘徊してたら、見かけました。
海外の有名な人たちが、危険なプログラミング25を発表したようですね。
ぱっと見だと、
・入力された値のVaidation
・出力するもののエンコードとエスケープ処理
・SQLインジェクション
・クロスサイトスクリプティング
・OSコマンド系のインジェクション
:
なんてあたりのが25項目書いてるみたいっすね。
ちょっと時間ができたら、見返してみようとおもってます。
もし、お時間がある方はみといたら、どうでしょう。(英語です)
http://www.sans.org/top25errors/?utm_source=web&utm_medium=text-ad&utm_content=Announcement_Bar_20090111&utm_campaign=Top25&ref=37029#s4
Posted by hattara on 2008 年 12 月 3 日 – 6:47 PM
Filed under MySQL, php
Tagged as MySQL, php
PhpでMysql(innodb)を利用している場合に、
すごくはずかしい失態をおかしたので、
繰り返さないように、恥を公開しておこう。
autoCommit(false);
としてたわけですよ。
で、id を auto_increment するようなテーブルが複数あり、
それらを、insertとかしてたわけですよ。
でも、なぜかDBが更新されないわけですよ。
mysql_insert_id();
の関数を利用して直前のSQLのauto_incrementのIDを引っ張るわけですが、
これが、ちゃんとに取得できるわけですよ。
id が 100とかなってても、100のIDのレコードがテーブルに存在しないわけです。
もう全然わからないと思っていたところ、
commit()
部分を気持ちよく、綺麗さっぱりコメントアウトしてたわけです。
そりゃー 動くわけないですがな。
中途半端にまともなIDなんて返してくれちゃうから、
余計あせっちまいましたよ。
と、いったところで、自分のinnodbの扱いの認識不足と、
注意力不足が招いた結果ですけどね。。
Posted by hattara on 2008 年 10 月 23 日 – 9:23 PM
Hello Worldみたいな単純な表示すらでなかったら、ショックをうけますね。
ということで、ZendFrameworkで以下のエラーがでたので、
一応コメントを残しておく。
エラーは、Apacheのerror_logに出力されてました。
標準出力的には、まっ白い画面でした。
PHP Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in /usr/share/pear/Zend/Controller/Dispatcher/Standard.php:249\nStack trace:\n#0 /usr/share/pear/Zend/Controller/Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))\n#1 /public_htmlまでのPATH/index.php(14): Zend_Controller_Front->dispatch()\n#2 {main}\n thrown in /usr/share/pear/Zend/Controller/Dispatcher/Standard.php on line 249
【原因】
該当のControllerに対応したViewが存在しない場合などに表示されるようです。
他にも要因はあるんだろうけど、今回はこれでした。
/(APP用フォルダ)/controllers/IndexController.php (indexActionだったら)
が利用されている場合には、以下のViewを呼びにいくわけです。
/(APP用フォルダ)/views/scripts/index/index.phtml
要するに、
/(APP用フォルダ)/views/scripts までは固定で
index が Controllerの名前と紐づき、
index.phtml がActionの名前と紐づくわけですね。
まあ、僕のは、scriptsフォルダがなかったわけですが・・・・
初歩の初歩。 間違いとしては、下の下ですね。
※自動でレンダリング?しないようにしている場合には、大丈夫だと思う。
ZendFrameworkのおすすめ書籍
Posted by hattara on 2008 年 10 月 22 日 – 8:36 PM
もともとSmartyは使ってたんですが、
Zend Frameworkも勉強を始めました。
ということで、面倒なくインストールする方法を書いておきます。
やっぱりphpまわりは、pearでインストールできると楽ですよね。
ということで、SmartyとZend Frameworkのpearでの設置方法です。
## Smarty
pear list
pear list-channels
pear channel-discover pearified.com
pear install pearified/Smarty
pear list-channels
pear list
## Zend Framework
pear list-channels
pear channel-discover zend.googlecode.com/svn
pear install zend/zend
pear list-channels
ただ、これをやっても、pear list で一覧に出てきません。。
どうしたらいいんでしょうね。。
この辺は、また何かわかったら、追記することにします。
ZendFrameworkのおすすめ書籍
Posted by hattara on 2008 年 10 月 14 日 – 8:48 PM
モジュール版ではなく、CGI版のPhpを使う場合、
(レンタルサーバを利用中でCGI版になってる場合)には、
特に何も設定をしなかった場合には、
phpの環境変数(php.iniで設定されてるもの)を変更できない。
モジュール版の場合には、.htaccessに「php_value」を書いてみたり
phpのソース(たとえばtest.phpみたいな)ものの中で「ini_set」をして
設定を上書きすることができる(1部の設定を除く)わけですが、
CGI版ではできないようですね。
phpinfoでみても「local」の部分が書き変わってないので、
効いてないってことですね。
実際に試してみましたが、できませんでした。
これを回避する一般的な方法としては、suPHPを利用する形っぽいですね。
詳細は以下のサイトにのってるようですぜ。
FlatEight.com >> FreeBSD/suPHP
Posted by hattara on 2008 年 10 月 9 日 – 9:23 PM
Filed under Apache, Cent, Linux, php, python, Trac
Tagged as Apache2, Cent4, php, python, Trac, エラーメッセージ
Cent4(CentOS4)系でTrac(Python&Sqlite)を使う場合に、
PHP5を利用していると、(pdo_sqlite)がconflict?するようで、
TracかPhpかどちらかしか動作しなくなる。
具体的には、yum版のApache2とかだと、
/etc/httpd/conf.d/php.conf とかで以下の記述がある場合、
Tracが動かなくなる。
LoadModule php5_module modules/libphp5.so
具体的には、ブラウザ上では、500エラーになり、
エラーログでは、以下のような出力がたくさんでる。
PythonHandler trac.web.modpython_frontend: DatabaseError: unsupported file format
で、上記のLoadModuleをコメントアウトすると、Phpは動かなくなるが、
Tracは動くようになる。
ということで、PhpでSqliteを使う予定がなければ、
以下のようにpdo_sqlite.iniを適当な名前にリネームしてあげればよし。
mv -i /etc/php.d/pdo_sqlite.ini /etc/php.d/pdo_sqlite.ini_org
その後、Apacheの再起動をお忘れなく。
yum版(rpm)のApacheの場合には、
/usr/sbin/apachectl restart
とかでいいですね。
で、以下のサイトを参考にさせてもらいました。
Ryuzee.com >> CentOS4でPHP4から5にするとTracが動かなくなる
Posted by hattara on 2008 年 10 月 8 日 – 8:35 PM
Filed under perl, php, シェルスクリプト
Tagged as 真偽値
ちょっと以前から困惑しているのが、
スクリプト実行後の「返り値」といいますか「ステータスコード」といいますか
「戻り値」といいますか、、 「真偽値」といえばいいですかね。
これが、言語によって違うわけですよ。
単純に脳みその中でおかしなことになります。
今まで自分がやってきたものでいえば、以下の3つしかないわけですけど、
3つでも脳みそがおかしくなります。
シェルスクリプト : 0:真 1:偽
perlスクリプト : 0:偽 1:真
phpスクリプト : 0:偽 1:真
となっているわけですよ。
まあ、シェルスクリプトだけ違うと思えばいいのですが、
シェルとかコマンドライン操作を多くしていた為に、
ちょくちょく間違えます。 こまりものですね。
全部揃えてくれたらいいのに・・・
pythonとかrubyとかはどうなってるんだろ。
気が向いたら調べて追記しようと思う。
Posted by hattara on 2008 年 9 月 17 日 – 7:40 PM
Filed under php
Tagged as
前々からregister_globalsはoffにすべきというのは
知っていたのですが、プログラマーになって
具体的にというか本気で困ることに気がついた。
そもそもregister_globalsがonだと、何ができるのかというと、
http://a.com/?mode=bbb
にアクセスした場合、簡単に書くと、
if ( $_GET["mode"] == “bbb” ){
echo “test”;
}
みたいな感じでGETの値を使う訳ですが、
register_globalsがonだと
if ( $mode == “bbb” ){
echo “test”;
}
でも同じように通ってしまうわけですね。
$_GETとか$_POSTのような特殊変数じゃなくても
値が入ってしまうわけです。
これってミスの元になるし、脆弱性にもなりえますね。
自分の意思で変更できる環境なら、やっぱり変更するべしですね。
## でも、事前検証は確実・十分に!